nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 08:03



Reply to topic  [ 59 posts ]  Go to page Previous  1, 2, 3, 4
Троичный компьютер ТРИНИТИ-2004 
Author Message
Doomed

Joined: 10 Mar 2012 16:21
Posts: 598
Location: РФ
Reply with quote
Shaos wrote:

Шрифты это конечно хорошо, но это для далёкого будущего, а пока надо подумать о том, что можно сделать прямо сейчас - например простейший дисплей для троичного компьютера можно построить из 81 красно-зелёного светодиода - что есть 9 рядов по 9 светодиодов в каждом:...

Насчёт шрифтов есть простейшая идея - использовать UTF , а оставшиеся комбинации с отрицательными значениями тритов назначить для представления других типов данных, в первую очередь специфичных для троичных систем. Первый (старший) трит будет указывать :
если 0 , то следующие 8 трит при их положительном значении кодируют без изменений первый байт UTF , при их отрицательных значениях кодируют другие типы данных,
если -1 , то следующие триты содержат код команды или ещё что-нибудь системное или значения нечёткой логики,
ну а если +1 , то следующие триты кодируют числовые данные, причём второй и третий триты ещё не кодирует, а указывают на тип числа и его длину.

Вопрос к "топикстартеру":
Я так понимаю, что по разрядности регистров и АЛУ "Тринити_2004" классифицируется среди троичных компьютеров и процессоров явно как одно-триббловый ( == три трита == 1/3 девятитритового трайта),
а вот по архитектуре как его классифицировать ?
(дело в том, что в названиях разных архитектур вроде принстон, гарвард, фон-нейман и т.п. я не очень разбираюсь.)


09 Nov 2012 15:10
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
и всё-таки "однотриадный" :)

а по архитектуре оно скорее фон-нейман, т.к. данные и код сидят в одной памяти...

_________________
:dj: https://mastodon.social/@Shaos


09 Nov 2012 21:39
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
petrenko wrote:
а вот по архитектуре как его классифицировать ?
(дело в том, что в названиях разных архитектур вроде принстон, гарвард, фон-нейман и т.п. я не очень разбираюсь.)

На всякий случай - имей в виду: принстон и фон-нейман - это одно и тоже по большому счету... :wink:
Поскольку машина фон-Неймана была создана в Принстонском институте.
Действительно – машина с объединенной памятью программ и данных.

А вот Гарвардская архитектура была разработана Говардом Айхеном в Гарвардском университете.
Отличие гарвардской архитектуры состоит в том, что память программ и память данных разделены.

Мне кажется, и запоминать и разбираться - особого простора и выбора нет... :lol:

_________________
iLavr


10 Nov 2012 07:29
Profile
Doomed

Joined: 10 Mar 2012 16:21
Posts: 598
Location: РФ
Reply with quote
Post 
Спасибо, постараюсь больше не перепутать.
То есть 8051 например - это "гарвард", а 8086 - "принстон" == "фон-нейман". А ещё какие то архитектуры кроме этих бывают ?


10 Nov 2012 10:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
petrenko wrote:
А ещё какие то архитектуры кроме этих бывают ?

Эти две архитектуры - по сути, как два крайних полюса.

Ещё бывают смешанные и модифицированные...
К примеру, есть процессоры «с модифицированной гарвардской архитектурой»
или SHARC (Super Harvard ARChitecture).

_________________
iLavr


10 Nov 2012 10:36
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Начал задумываться над будущим "3niti alpha". Расширение системы команд может быть обеспечено засчёт реализации подпрограмм (как например переход на подпрограмму с сохранением адреса возврата в стеке, возврат из подпрограммы с забиранием адреса из стека, арифметика над длинными словами и т.д.), расположенных в адресной области ниже нуля. При этом в будущем можно реализовать эти подпрограммы в железе (при условии что адреса этих подпрограмм будут застандартизированы). Тогда же возникает вопрос в ускорении обработки четырёх-триадных команд (таких как LDI, JMP и OPB). Разумным решением при этом может быть 4-триадная (12-тритная) шина данных. Но так как у нас есть не только четырёх-триадные команды, но также двух-триадные и одно-триадные, то понятно, что команды не будут выровнены на границу 4-триадного слова - значит нам нужен контроллер памяти, который мог бы выдавать 4 триады с любым сдвигом по памяти, при этом адрес обращения будет соответствовать первой триаде (адреса всё также будут адресовать отдельные триады, а не 4-триадные слова). Кроме того можно сделать так, что ALU будет выполнять в параллель до 4 независящих друг от друга 1-тритных операций.

Примерное видение будущего 3niti: "3niti beta" будет иметь 6-тритовый процессор (c 12 или 18 тритовой адресацией), а "3niti gamma" уже 12-тритовый (с 18 или 24 тритовой адресацией). Напомню, что 12 тритов адресуют 531К, 18 тритов - 387M, 24 трита - 282G.


Либо оставить 3niti трёхтритной, добавляя в бету и гамму доп-фичи, например:

3niti beta может иметь спец-железо, которое переход в память с отрицательными адресами интерпретирует как вызов подпрограммы, при этом оно САМО записывает c нулевой ячейки переход на адрес возврата (в 4 ячейки OOOOOOOOO, OOOOOOOOP, OOOOOOOPN, OOOOOOOPO) т.е. по окончании подпрограммы оно просто должно сделать JMP OOO OOO OOO и оно вернётся туда, откуда подпрограмма была вызвана (по идее даже стек можно сделать на несколько адресов - по нулевому адресу всегда будет выглядывать верх стека возвратов).

3niti gamma может иметь 4-триадную (12-тритовую) шину данных, чтобы забирать длинные команды за одно обращение к памяти (как я описал летом 2010 года в цитируемом блоке чуть выше), тогда выровненные программы могут сильно ускорить своё выполнение! Либо память всё также будет иметь 3-тритную шину данных, но обращение в неё будут происходить через кеш (скажем на 27 ячеек по размеру параграфа), который будет иметь 4 копии, смещённых друг от друга на одну ячейку - тогда из такого кеша можно получить ЛЮБЫЕ 4 триады, идущие подряд, за ОДНО обращение...

_________________
:dj: https://mastodon.social/@Shaos


19 Sep 2015 21:14
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
3niti beta - с другой стороны по адресу OOO OOO OOO всегда будет начало программы, тогда логичнее возврат сделать в 4 триадах, идущих непосредственно перед:
Code:
OOOOOOONN: OPO ; JMP - возврат из подпрограммы через переход на подставляемый адрес
OOOOOOONO: xxx ; сюда подставляется старшая триада адреса из стека возвратов
OOOOOOONP: xxx ; сюда подставляется средняя триада адреса из стека возвратов
OOOOOOOON: xxx ; сюда подставляется младшая триада адреса из стека возвратов
OOOOOOOOO: zzz ; начало программы пользователя

Либо при первом старте по нулевому адресу будет таки какой-то переход, подменяемый затем стеком возвратов? Какая команда выглядит лучше в качестве RET? OPO OOO OOO ONN или OPO OOO OOO OOO?

_________________
:dj: https://mastodon.social/@Shaos


19 Sep 2015 21:46
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
А может таки лучше JMP NNN NNN NNN использовать в качестве RET? ;)

_________________
:dj: https://mastodon.social/@Shaos


04 Oct 2015 12:08
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
А не переименовать ли мне SPCD (Save PC to DP) в SPD и LPCD (Load PC from DP) в LPD, чтобы все мнемоники были трёхбуквенными?

P.S. Хотя не - пусть остаётся как есть...

_________________
:dj: https://mastodon.social/@Shaos


07 Oct 2015 14:44
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
А может таки лучше JMP NNN NNN NNN использовать в качестве RET? ;)
Можно сделать расширение системы команд до 3niti beta следующим образом:
JMP NNN xxx xxx - RET (средняя и младшая триады адреса игнорируются);
JMP NNO xxx xxx ... JMP NPP xxx xxx - зарезервировано на будущее (ещё 8 инструкций);
JMP ONN NNN NNN ... JMP OOO OOO OON - будет означать CALL по инвертированному адресу (т.е. CALL OPP PPP PPP ... CALL OOO OOO OOP) с сохранением адреса возврата на стеке.
А начиная с адреса OOO OOO OOO будет идти обычная память программ и данных (причём данные могут и в отрицательную область памяти уходить, будучи доступны через указатель DP - в отрицательной области например может располагаться видеопамять и порты ввода-вывода).

Я думаю всё это можно реализовать без особых проблем в виде расширенной микроархитектуры 3niti

P.S. Наряду с RET (JMP NNN) подобным образом можно реализовать другие псевдо-инструкции например вызов подпрограммы по троичному указателю CALL [DP] (JMP NNO), сохранение на стеке (и чтение со стека) 9-тритовых значений FAB и DP (текущий DPx выбранный через бит DPF) и какую-нибудь продвинутую математику (например умножение триад) или произвольные пользовательские микропрограммы типа:
JMP NNN = RET
JMP NNO = CALL_DP
JMP NNP = POP_DP
JMP NON = PUSH_DP
JMP NOO = POP_FAB
JMP NOP = PUSH_FAB
JMP NPN = SSPD (сохранить указатель стека в текущий DP)
JMP NPO = LSPD (загрузить указатель стека из текущего DP)
JMP NPP = INCDEC_DP (инкрементировать/декрементировать текущий DP в зависимости от значения флага BCF)
К сожалению места под пользовательские микропрограммы уже не остаётся (или сделать такой микропрограммой INCDEC_DP?)

P.P.S. Стек может начинаться с адреса скажем OOO OON PPP и идти в меньшие адреса на какую-то не очень большую глубину (в этом случае появится возможность обращаться к нему программно, как к памяти данных), а оставшиеся 12 ячеек между стеком и нулевым адресом могут быть портами ввода-вывода - как троичными, так и двоичными (например для реализации интерфейса LPT, клавиатуры, внешнего накопителя на последовательной EEPROM и джойстика).

P.P.P.S. Или сделать возможным иметь стек в произвольном месте ОЗУ как в старом добром 8080? Тогда нужна ещё команда копирования из DP в SP - поправил список расширенных команды выше чтобы было SSPD и LSPD (по аналогии с SPCD и LPCD)

_________________
:dj: https://mastodon.social/@Shaos


03 Apr 2023 19:26
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
В первый гибридный прототип 3niti beta hybrid можно поставить обычное двоичное ОЗУ 32K из которого непосредственным способом (как описано тут) можно получить 4374 триады в адресах:
OPx xxx xxx
OOx xxx xxx
и в свободном диапазоне, как ранее и предполагалось, будет находиться видеопамять:
ONx xxx xxx

При старте управление может передаваться на загрузчик, расположенный в маленьком двоичном ПЗУ 2К, которое будет доступно как 486 триад в адресах PPP Oxx xxx и PPP Pxx xxx (конец адресного пространства). Этот загрузчик может загружать пользовательскую программу из последовательного EEPROM (или с компьютера через COM-порт), записывая её начиная с адреса OOO OOO OOO и затем передавая на неё управление. Надо прикинуть насколько тяжёлой будет подпрограмма вычитки из EEPROM - может быть вообще придётся 8К ПЗУ ставить (1458 триад).

_________________
:dj: https://mastodon.social/@Shaos


06 Apr 2023 22:38
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Стек может начинаться с адреса скажем...

Для простоты можно сделать и вовсе без стека. Сеймур Крей этим не гнушался, и идея вполне здравая!
http://www.nedopc.org/forum/viewtopic.php?f=71&t=19356#p157290

В микропроцессорах RCA - обсуждались на форуме - тоже никакого стека нет, но ничего - по сей день работают! :roll:

_________________
iLavr


07 Apr 2023 07:54
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ну если ты внимательный читатель, то наверное заметил, что в оригинальной системе команд 3niti alpha как раз стека и небыло :no:

И пару страниц этого топика в самом начале я потратил на то, чтобы показать как можно "на коленке" описать сохранение адреса возврата программно - самый простой способ это сохранять один адрес в регистре DP, а вот если надо много уровней сохранения делать сохраняя адреса в памяти, то тут начинаются боль и слёзы - поэтому в 3niti beta я и решил попробовать ввести стек явно, чтобы не мучиться...

_________________
:dj: https://mastodon.social/@Shaos


07 Apr 2023 22:18
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Я, как внимательный читатель, читаю не только с начала, но и до конца... :lol:
В конце, я вижу, что пошли мучения "об стек". Поэтому я и намекаю, по
собственному опыту
, что можно этих мучений вполне избежать! :roll:
Ну и привожу в подтверждение больших авторитетов, нежели я сам. :wink:

_________________
iLavr


08 Apr 2023 03:47
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 59 posts ]  Go to page Previous  1, 2, 3, 4

Who is online

Users browsing this forum: No registered users and 14 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.