Троичный компьютер ТРИНИТИ-2004

Уравновешенная троичная система счисления - форум переехал с http://ternary.info

Moderator: haqreu

User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Реализация полноценного стека возвратов выглядит немного тяжеловатой. Предположим, что мы имеем стек возвратов глубиной 9 адресов (27 триад). Причем указатель стека двигается от xxx xxx PPP вверх (меняется только D0). Пусть указателем стека будет DPp. Тогда первоначальная установка стека будет выглядеть так (7 триад):

Code: Select all

LDN #ZPZ
SAF ; set DPp
LDP StackAddress ; xxx xxx NNN (trick NNN-1=PPP)
Вызов подпрограммы по произвольному адресу (47 триад):

Code: Select all

LDN #ZZZ
SAF ; set DPz
LDP ReturnAddress ; any address

LDN #ZPZ
SAF ; set DPp
LAD0
ADN -1
SAD0
LDN #ZZZ
SAF ; set DPz
LAD0
SADp

LDN #ZPZ
SAF ; set DPp
LAD0
ADN -1
SAD0
LDN #ZZZ
SAF ; set DPz
LAD1
SADp

LDN #ZPZ
SAF ; set DPp
LAD0
ADN -1
SAD0
LDN #ZZZ
SAF ; set DPz
LAD2
SADp

JMP SubprogramAddress

ReturnAddress:
Возврат из подпрограммы по адресу из стека (40 триад):

Code: Select all

SubprogramAddress:

LDN #ZZZ
SAF ; set DPz
LADp
SAD2
LDN #ZPZ
SAF ; set DPp
LAD0
ADN 1
SAD0

LDN #ZZZ
SAF ; set DPz
LADp
SAD1
LDN #ZPZ
SAF ; set DPp
LAD0
ADN 1
SAD0

LDN #ZZZ
SAF ; set DPz
LADp
SAD0
LDN #ZPZ
SAF ; set DPp
LAD0
ADN 1
SAD0

LDN #ZZZ
SAF ; set DPz
LPD ; load P from D

Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Проект "Троичный компьютер Trinity"

Post by Shaos »

Shaos wrote:Предлагается создать простейший троичный компьютер, состоящий из комбинированных аналогово-цифровых модулей с троичным интерфейсом. Для начала реализовать 3 трехтритных регистра и обкатать на них основные троичные алгоритмы. Имя "Trinity" как мне кажется может привлечь интерес к проекту со стороны матрицофилов после опубликования материалов по нему в интернете. Жду откликов :)
За компанию можно еще сделать компьютер с изменяемой архитектурой под названием "Morpheus" ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Проект "Троичный компьютер Trinity"

Post by Mac Buster »

Shaos wrote:За компанию можно еще сделать компьютер с изменяемой архитектурой под названием "Morpheus" ;)
Интересное предложение! Вот бы еще сделать периферийное устройство Neo со спецификацией Spoon II... :)
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Проект "Троичный компьютер Trinity"

Post by Shaos »

Mac Buster wrote:
Shaos wrote:За компанию можно еще сделать компьютер с изменяемой архитектурой под названием "Morpheus" ;)
Интересное предложение! Вот бы еще сделать периферийное устройство Neo со спецификацией Spoon II... :)
А словом "Neo" можно обозвать операционную систему, которая будет работать на обоих компьютерах :roll:

NEO System = Not Exactly Operating System :lol:
Last edited by Shaos on 05 Feb 2006 00:10, edited 2 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Предложение по представлению букв в "Тринити":

Code: Select all

--- - N O P - раскладки:
NNN - @ a A - раскладка N во всех шрифтах означает перевод строки
NNO - ! b B - ? в доп.шрифте
NNP - " c C - | в доп.шрифте
NON - ' d D - ` в доп.шрифте
NOO - ( e E - < в доп.шрифте
NOP - ) f F - > в доп.шрифте
NPN - = g G - # в доп.шрифте
NPO - , h H - ; в доп.шрифте
NPP - . i I - : в доп.шрифте
ONN - * j J - % в доп.шрифте
ONO - / k K - \ в доп.шрифте
ONP - + l L - ^ в доп.шрифте
OON - - m M - ~ в доп.шрифте
OOO - 0 n N - [ в доп.шрифте
OOP - 1 o O - ] в доп.шрифте
OPN - 2 p P - { в доп.шрифте
OPO - 3 q Q - } в доп.шрифте
OPP - 4 r R - $ в доп.шрифте
PNN - 5 s S - & в доп.шрифте
PNO - 6 t T - @ в доп.шрифте
PNP - 7 u U
PON - 8 v V
POO - 9 w W
POP - @ x X - символ в раскладке N означает переключение шрифта
PPN - @ y Y - символ в раскладке N означает дополнительную команду
PPO - @ z Z - символ в раскладке N означает терминальный символ
PPP - везде используется чтобы сменить раскладку в большую сторону
Русский шрифт и другие символы можно держать в дополнительном шрифте, переключаемом по команде POP
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Post by Ronin »

Shaos>Память линейная, ширина адреса 9 тритов. В железяке предлагается использовать только 8...

Непонял а нафига ? и потом если уж начали экономить, по этому 9му триту (в троичной схемотехнике) и разбились бы на порты/ПЗУ/ОЗУ ! Преобразование адресов из троичной в двоичную систему можно сделать на паре 27с512: 8трит-> 16бит-> 2x27512-> 13бит. 3-тритная ШД превратится в 6-битную. и плюс три сигнала - выбор ОЗУ, ПЗУ, портов.

насчет произвольных потритовых операций - Брусенцов в Сетуне реализовал только [ADD-SUB-NEG], [shift универсальный какой-то там] и [потритное умножение] утверждая что этого достаточно для реализации любой троичной логической функции. Я думаю что это так и есть, потому что в алгебре по основанию N (mod N) определяются также всего три операции - сумма, произведение, инверсия (shift - для продвижения по разрядам). хотя универсальные унарные/бинарные операции решают эти проблемы радикально ;) т.е. достаточно OPA, OPB, shift.

Еще предлагаю ввести макросы в ПЗУ - MAC #, и там в ПЗУ расположить таблицу адресов (по три триады адреса на каждый макрос) на основные макросы (ну скажем CALL, RET, PUSH/POP и тд) - получим 27 макрокоманд (в т.ч. и пользовательских если вынести часть ссылок в ОЗУ (прямо Сетунь-70 :)) Процессор встретив такую команду, берет соттв-ю тройку триад и загружает ее в PC.
И я думаю что стек нужен - его реализация не слишком сложнее тех же указателей на данные, а пользы куча ;). нужны CALL/RET и ветвление (с вовратом, как сетунь-70).
Итого нужно 4 кода для новых команд.
JMP не нужен. LAN можно сделать так - OPA #OOO: ADN N. не вижу практической пользы от команды SPD (чтение программного счетчика) - в статической программе все адреса известны на этапе ассемблирования.
Предлагаю - сделать на месте SPD (например) - префикс для страницы двухтриадных команд, и в ту страницу отправить JMP, SLA, SRA, LAN(или ADD?) а на их место поставить CALL ###, RET, BRS ###1 ###2 ###3, MAC #. указатель стека реализовать скажем на DPp.

ps// буквой Z предлагаю все же обозначать Z-состояние в железяках, а для нуля использовать O. для програминга некритично, а вот для железяк неудобно однако :)
pps// можно еще подумать о 4-тритной ШД и 8-тритной ША - тем самым расширив количество КОПов команд, только 4 и 8 числа непатроитичные ;) так что затея эта маловероятная.
ppps// а где же культовая команда DI:HALT :) шучу.
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Post by Ronin »

да и PUSH/POP тоже надо если стек и две страницы команд будут.
User avatar
Ronin
Maniac
Posts: 304
Joined: 29 Mar 2005 06:06
Location: Krasnodar

Post by Ronin »

я вот обчитавшись Брусенцова и питая слабость к идеологии Форта (в частности к форт-процессору 1865вм1, был такой) ;) все думаю, а не замутить ли стековую архитектуру. а интересность последовательных вычислений (см. серия ЭВМ "Мир" в виртуальном музее) пробуждает еще одну бредовую идею - машину с 1-тритной шиной данных и переменной длиной операндов (скажем до 729 трит, с нашими скоростями больше пока не нужно) - прикольная фишка, естественный счет "больших чисел" достающийся нахаляву от упрощения в последовательную архитектуру. Если быть до конца последовательным ;) можно и адресные вычисления (вместе с 1-тритной адресной шиной) делать последовательными, т.е. вычислив (последовательно) новый адрес, загружать его прямо сразу в регистр адреса самого ОЗУ (на той стороне адресной шины) и не хранить внутри процессора, инкремент адреса производить импульсами. Хотя непонятно насколько большой это даст выигрыш в экономии аппаратуры, может это и не нужно вовсе (опять же, если ША всего 3-6 трит, смысла нет, а вот если нормальная на 18-21 трит - уже вопрос, причем дополнительные триты ША получаются почти нахаляву, хоть 81 тритом кодируй адрес ;) ). Конечно, такая архитектура слишком бредовая и еще более медленная ;))))) Так что начинать я думаю надо все же с 3-тритной ШД и 9-тритной ША.
User avatar
cr0acker
God
Posts: 1078
Joined: 03 Feb 2003 13:53

Post by cr0acker »

Ronin wrote:я вот обчитавшись Брусенцова и питая слабость к идеологии Форта (в частности к форт-процессору 1865вм1, был такой) ;) все думаю, а не замутить ли стековую архитектуру. а интересность последовательных вычислений (см. серия ЭВМ "Мир" в виртуальном музее) пробуждает еще одну бредовую идею - машину с 1-тритной шиной данных и переменной длиной операндов (скажем до 729 трит, с нашими скоростями больше пока не нужно) - прикольная фишка, естественный счет "больших чисел" достающийся нахаляву от упрощения в последовательную архитектуру. Если быть до конца последовательным ;) можно и адресные вычисления (вместе с 1-тритной адресной шиной) делать последовательными, т.е. вычислив (последовательно) новый адрес, загружать его прямо сразу в регистр адреса самого ОЗУ (на той стороне адресной шины) и не хранить внутри процессора, инкремент адреса производить импульсами. Хотя непонятно насколько большой это даст выигрыш в экономии аппаратуры, может это и не нужно вовсе (опять же, если ША всего 3-6 трит, смысла нет, а вот если нормальная на 18-21 трит - уже вопрос, причем дополнительные триты ША получаются почти нахаляву, хоть 81 тритом кодируй адрес ;) ). Конечно, такая архитектура слишком бредовая и еще более медленная ;))))) Так что начинать я думаю надо все же с 3-тритной ШД и 9-тритной ША.
А чё даёшь стекову троичный форт ЭВМ ТРИНИТИ-5000К
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Предложение по представлению букв в "Тринити"
Троичные буквы с расширением для русского языка:

Code: Select all

    | - N - | - O - | шрифты (шрифт P зарезервирован под будущее - там будет псевдографика)
    | N O P | N O P | раскладки
------------------------------------------------------------------------------------------------
NNN |   a A |   б Б | символ в раскладке N во всех шрифтах означает перевод строки
NNO | ! b B | ? в В |
NNP | " c C | | г Г |
NON | ' d D | ` д Д |
NOO | ( e E | < ж Ж |
NOP | ) f F | > з З |
NPN | = g G | # и И |
NPO | , h H | ; й Й |
NPP | . i I | : к К |
ONN | * j J | % л Л |
ONO | / k K | \ м М |
ONP | + l L | ^ н Н |
OON | - m M | ~ п П |
OOO | 0 n N | [ т Т |
OOP | 1 o O | ] у У |
OPN | 2 p P | { ф Ф |
OPO | 3 q Q | } ц Ц |
OPP | 4 r R | $ ч Ч |
PNN | 5 s S | & ш Ш |
PNO | 6 t T | @ щ Щ |
PNP | 7 u U | _ ъ Ъ |
PON | 8 v V | ё ы Ы |
POO | 9 w W | Ё ь Ь |
POP |   x X |   э Э | символ в раскладке N во всех шрифтах означает переключение шрифта в большую сторону
PPN |   y Y |   ю Ю | символ в раскладке N во всех шрифтах означает пробел
PPO |   z Z |   я Я | символ в раскладке N во всех шрифтах означает терминальный символ
PPP | во всех шрифтах и всех раскладках используется чтобы сменить раскладку в большую сторону (с сохранением шрифта)
Русские буквы Aa, Ее, Оо, Рр, Сс, Хх предпологается отображать латинскими буквами ввиду аналогичности написания.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Троичный компьютер ТРИНИТИ-2004

Post by Shaos »

Пытаемся добавить псевдографику и греческий алфавит:

Для псевдографики надо заюзать порядка 47 символов (см. альтернативная кодировка доса)

Для греческого алфавита нужно:

Image

Итого 29 символов - вместе с полной псевдографикой не влазит - урезаем псевдографику (убираем рамки, добавляем 2x2 псевдографические символы) и добавляем ещё кириллических символов и немного математических:

Image

И напоминаю, что русские буквы Aa, Ее, Оо, Рр, Сс, Хх заменяются на их латинские похожие по написанию символы.

Code: Select all

Пример использования - сконвертируем строку "Aвтобус".
По умолчанию установлены фонт N и раскладка N:

 0) PPP - переключаем раскладку в O
 1) PPP - переключаем раскладку в P
 2) NNN - сивмол 'A' (фонт N, раскладка P)
 3) PPP - переключаем раскладку в N
 4) POP - переключаем фонт в O
 5) PPP - переключаем раскладку в O
 6) NNO - символ 'в' (фонт O, раскладка O)
 7) OOO - символ 'т' (фонт O, раскладка O)
 8) PPP - переключаем раскладку в P
 9) PPP - переключаем раскладку в N
10) POP - переключаем фонт в O
11) POP - переключаем фонт в N
12) PPP - переключаем раскладку в O
13) OOP - символ 'o' (фонт N, раскладка O)
14) PPP - переключаем раскладку в P
15) PPP - переключаем раскладку в N
16) POP - переключаем фонт в O
17) PPP - переключаем раскладку в O
18) NNN - символ 'б' (фонт O, раскладка O)
19) OOP - символ 'у' (фонт O, раскладка O)
20) PPP - переключаем раскладку в P
21) PPP - переключаем раскладку в N
22) POP - переключаем фонт в P
23) POP - переключаем фонт в N
24) PPP - переключаем раскладку в O
25) NNP - символ 'c' (фонт N, раскладка O)
26) PPP - переключаем раскладку в P
27) PPP - переключаем раскладку в N
28) PPO - терминальный символ (конец строки)

т.е. 7-буквенное слово преобразовалось в 29 триад 

P.S. С английскими словами всё должно быть лучше, т.к. там не надо щёлкать фонтами...
P.S. Мысли по поддержке других европейских языков отпала после внимательного просмотра вот этой странички в википедии:

http://en.wikipedia.org/wiki/Alphabets_derived_from_the_Latin
Last edited by Shaos on 20 Sep 2012 19:13, edited 3 times in total.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Есть мысль убрать четыре символа Image, добавленные ради поддержки Македонского алфавита, и заменить их другими четырмя символами Image, чтобы обеспечить поддержку финского алфавита. В финском есть ещё буква Image, пришедшая из шведского и используемая только лишь для написания шведских имён (в финском даже нет строчного написания этой буквы) - она вроде как не требуется для того чтобы писать по фински.
Last edited by Shaos on 20 Sep 2012 19:38, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Image
Представленная система кодирования символов предназначена для трёх-тритного троичного компьютера. Один символ представляется тремя тритами, которые могут кодировать только 27 разнообразных комбинаций и поэтому нам нужны специальные коды, которые могли бы менять наборы отображаемых символов. Введём 3 шрифта, каждый из которых имеет 3 раскладки - всего 3^5=243 возможных символа. Первый шрифт покрывает латинские буквы, цифры и некоторые стандартные символы из ASCII. Второй шрифт - русские буквы (за исключением тех, которые похожи по написанию на латинские) и остальные стандартные символы из ASCII. Третий шрифт - псевдографика 2х2 пиксела на знакоместо, греческие буквы (за исключением тех, которые похожи по написанию на латинские и русские), дополнительные символы для поддержки некоторых европейских языков (украинский, белорусский, сербский, русинский, болгарский и финский), а также некоторые математические символы. Также имеются несколько специальных символов: SL - switch layout (переключение раскладки) доступен во всех шрифтах и раскладках, SF - switch font (переключение шрифта) доступен в раскладке N всех шрифтов, NL - new line (новая строка) доступен в раскладке N всех шрифтов, TC - terminal character (терминальный символ) доступен в раскладке N всех шрифтов, а также пробел, который также доступен в раскладке N всех шрифтов. По умолчанию устанавливается шрифт N и раскладка N. Перевод строки сбрасывает текущий шрифт (и раскладку) в N. Переключение шрифта сдвигает текущий шрифт вперёд на 1 (N->O->P->N и т.д.), оставляя текущую раскладку в N. Переключение раскладки сдвигает текущую раскладку вперёд на 1 (N->O->P->N и т.д.), сохраняя текущий шрифт. Терминальный символ используется как метка конца текста в памяти трёх-тритного троичного компьютера.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

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

Image

Одна ячейка памяти состоит из 3 тритов и соответственно сможет отображаться тремя светодиодами (слева-направо - старший трит, средний трит, младший трит). Предположим на экран будут отображаться ячейки памяти с адресами от ONN NNN NNN (-3280) до ONN NNN PPP (-3254) - всего 27 ячеек.

На этот же экран в режиме отладки можно отображать содержимое всех непосредственно доступных и скрытых регистров:
-4 N: triad from memory addressed by DPn;
-3 O: triad from memory addressed by DPo;
-2 P: triad from memory addressed by DPp;
-1 F: flag register;
0 A: accumulator register;
+1 B: auxiliary register;
+2 L: lower triad of current DP register;
+3 M: middle triad of current DP register;
+4 H: higher triad of current DP register.

Register PC (program counter) is not available directly.

Code: Select all

 N: P0hP0mP0l Nh Nm Nl   .  .  . // первые 3 трита - младшая триада PC
 O: P1hP1mP1l Oh Om Ol   .  .  . // первые 3 трита - средння триада PC
 P: P2hP2mP2l Ph Pm Pl   .  .  . // первые 3 трита - старшая триада PC
 F:  .  x  x  AS-DP-BC   y  y  . // трит DPF управляет зажиганием x/y
 A:  .  x  .  Ah Am Al   .  y  .
 B:  .  x  .  Bh Bm Bl   .  y  .
DP: LnhLnmLnl LohLomLol LphLpmLpl
DP: MnhMnmMnl MohMomMol MphMpmMpl
DP: HnhHnmHnl HohHomHol HphHpmHpl 
x - зажигается если DPF=N (выбран регистр DPn)
y - зажигается если DPF=P (выбран регистр DPp)
в случае DPF=O не горят ни x, ни y

P.S. Хотя вывод PC и A можно сделать на отдельную линейку светодиодов предназначенных только для отображения значения этих регистров...
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Пожалуй дисплей 9x9 надо сделать опциональным дополнением, втыкаемым в троичную шину расширения (о ней позже), основным же методом вывода информации надо сделать линейку светодиодов, отображающую содержимое теневого регистра PC (9 светодиодов), одну триаду данных (3 светодиода) и также содержимое регистра A - всего 15 штук. Под светодиодами можно расположить троичные переключатели - 9 для задания адреса, 3 для задания вводмых данных и 3 переключателя управления:

1) переключатель управляющий вводом-выводом:
P (верхнее положение) - по установленному адресу записывается установленная триада, которая также отображается на светодиодах триады данных;
O (среднее положение) - установленный адрес и установленная триада игнорируются (т.е. переключатели адреса и данных в этом режиме можно переключать), а на светодиодах триады данных отображается содержимое ячейки с адресом PC;
N (нижнее положение) - установленная триада игнорируется, а на светодиодах триады данных отображается содержимое ячейки по установленному адресу;

2) переключатель выбирающий подпрограммы работы:
P (верхнее положение) - прервать работу основной программы и запустить подпрограмму по установленному адресу;
O (среднее положение) - не препятствовать работе основной программы или ранее запущенной подпрограммы;
N (нижнее положение) - прервать работу основной программы и запустить дополнительную подпрограмму, что является расширением на будущее;

3) переключатель управляющий пошаговой отладкой:
P (верхнее положение) - осуществить один шаг вперед;
O (среднее положение) - режим паузы;
N (нижнее положение) - обычный прогон программы.