Давайте думать над железкой (TRIADOR)

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

Moderator: haqreu

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

Re: Давайте думать над железкой

Post by Shaos »

так к чему в результате пришли в ходе обсуждений?

т.к. в данном случае простота превыше всего, то тройной джамп ненужен - нужен скип по тому или иному условию

флагов всё таки наверное должно быть как минимум 2 - знак и переполнение/заём

команд пропусков тогда получается 6:
  • skip_if_negative
  • skip_if_zero
  • skip_if_positive
  • skip_if_borrow
  • skip_if_no_carry_borrow
  • skip_if_carry
дискасс?

P.S. напомню, что "расширение на будущее" EX (NN) имеет возможность поддержать 27 разных команд:
NN (-4) - расширение на будущее (сложение/вычитание с переносом/заёмом, пропуск следующей команды в зависимости от флага знака и флага переноса и т.д.)
и шесть из них я озвучил выше...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой

Post by Shaos »

AlexanderZh wrote:
Shaos wrote:команд пропусков тогда получается 6
А не проще ограничится 2-мя? По 1-й на каждое условие.
Если флаг -1 - не пропускаем, если 0 - пропускаем 1 инструкцию, если +1 - пропускаем 2 инструкции. По памяти более затратно, но не будет ли существенной экономии в самом процессоре?
пропускать 2 инструкции бессмысленно, ну и потом это уже не взвешенный троичный код получается :)

P.S. хотя, может и есть смысл - надо подумать
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

AlexanderZh wrote:
AlexanderZh wrote:пропускать 2 инструкции бессмысленно
Ну почему? Или делать 6 команд по условию, или всего 2 по состоянию флага...
ну когда у нас 27 пустых команд, то занять 6 не выглядит такой уж глобальной растратой ;)
надо прикинуть по количеству мультиплексоров - нужно расчехлять мой DDT :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

А теперь немножко триадоровского кода :mrgreen:

Длинный JMP:

Code: Select all

 R1 -3 ; load -3 to R1
 RR -13 ; copy R1 to R13
 JP 10 ; jump to page -3 with offset 10
Получается, что пропуск одной команды применим только к локальному джампу:

Code: Select all

 EX skip_if_zero
 JP local
 ...
В случае реализации "двойного скипа" оно всегда будет 3-строчным

Code: Select all

 EX double_skip_on_sign
 JP no ; -1 = no skip
 JP zero ; 0 = skip 1
 ; +1 = skip 2
no:
 .......
zero:
P.S. двойной скип выглядит изящнее, если делать так как я выше написал - no skip это -1, one skip это 0 и two skip это +1 - в таком случае можно делать "тройной джамп" и скажем не только по флагам, но и по регистрам (в таком случае нам не нужен будет отдельный флаг sign!):

Code: Select all

EX double_skip_on_R1
JP negative
JP zero
JP positive
также для реализации скипа нужна будет команда NOP, на которую будет подменяться вычитанная операция в случае скипов - для этой цели можно заюзать EX -13 (NNNNN)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

AlexanderZh wrote:
Shaos wrote:ну и потом это уже не взвешенный троичный код получается
Возникает ощущение, что этот "взвешенный" нужно использовать в арифметике и в командах перехода, а вот при обращении к памяти...
При обращении к памяти его реально лучше использовать начиная с -1..-1..-1 и трактовать это как 000 памяти,
иначе получается очень неудобный счетчик РС. Я уже этот момент проверил.

Суть в том, что желательно, чтобы изменение всех тритов по срезу давало переход в старший трит.
Тогда и троичная дешифрация ЗУ упрощается.
iLavr
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой

Post by Shaos »

Lavr wrote:Но тем не менее, объединить C и Z в один троичный флаг вполне можно.
да по ходу флаг знака ненужен вовсе - если тройной переход сделать по регистру :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой

Post by Shaos »

haqreu wrote:Звучит разумно. А что происходит при переполнении счётчика? Остаёмся в том же сегменте, или берём из r13?
зависит от реализации - если программный счётчик во всю ширь (6 тритов), то идём в следуюший сегмент, а если только 3 трита, то перекручиваемся в начало того же сегмента
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой

Post by Shaos »

haqreu wrote:Думаю, что кроме carry и sign флагов не будет. Когда их устанавливать - это хороший вопрос. Смысла этого делать при копировании, например, не вижу. При всех арифметических операциях - да. А вот надо ли ставить при, например, потритовой инструкции OPA?
только один флаг по ходу нужен - carry/borrow
потритовые инструкции наверное вообще не должны трогать флаги
тогда OP NOP будет выполняться как NOP :)
P.S. а не затолкать ли carry/borrow флаг скажем в R4?
тогда при сложении R1 и R2 результат кладётся в R3, а переполнение - в R4 :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

В триадоре умножения не будет :)

Убирание флага знака и замена флага переноса-заёма на регистр R4 всё сильно упрощает

Например сдвиги можно делать циклически через R1-R4 и не заморачиваться :)

В тоже самое время R4 можно продолжать использовать по его прямому назначению

С другой стороны придётся заводить две операции сложения - с учётом R4 и без учёта R4, т.к. чистить R4 перед каждым сложением без переноса будет мучительно.

Ну и отдельную команду вычитания надобно предусмотреть - на железном уровне это будет не сильно тяжко - просто лишнее условное инвертирование добавить по второму аргументу сумматора...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

Shaos wrote:надо решить какие скипы нужны - одиночные или двойные :)
Мне думается надо сделать вот как: все скипы по условию и одиночные. Так проще.
JMP - один, дальний, безусловный - его обходят условные скипы.
А вот троичное ветвление по 3-м состояниям флага надо сделать как одну операцию BRUNCH.
BRUNCH [ADDR1], [ADDR2] (в третьем случае - продолжение).
iLavr
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

двойной скип лучше тройного джампа тем, что туда можно что-то отличное от JP засунуть и заиметь хитрую логику :roll:

и потом длинный джамп это 3 команды - это уже тройной скип получается :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

Shaos wrote:двойной скип лучше тройного джампа
Тройной бранч - все классики "троизма" хотели - это "симметричные весы".
Будет политически неграмотно не сделать его, аппаратно он несложный.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

Мы путаемся в терминологии... :mrgreen:
iLavr
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Lavr wrote:
Shaos wrote:двойной скип лучше тройного джампа
Тройной бранч - все классики "троизма" хотели - это "симметричные весы".
Будет политически неграмотно не сделать его, аппаратно он несложный.
в 3niti alpha он был не сложный - т.к. скакал по 3 регистрам, а тут ты предлагаешь аргументы сувать следом за инструкцией - причём 2 штуки
а это усложняет аппаратную реализацию т.к. у нас аргумент идёт в самом коде операции (либо не идёт вовсе, тогда операция дробится на кучу мелких как для EX)
поэтому скип по -1/0/+1 выглядит проще т.к. аргументов нет, а есть пропускаемые (или не пропускаемые) инструкции, которые для имитиации твоих "симметричных весов" могут быть джампами
P.S. с другой стороны никто не мешает сделать тройной JMP по R1,R2,R3 управляя направлением джампа знаком R4 :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Итого имеем на посмотреть (если учитывать только опкоды без аргументов, которых у нас нету и быть не может):
1) короткий скип по выполнению (или невыполнению) условия знак регистра (как минимум R1 и R4) равен (или не равен) -1,0,+1
2) длинный скип через 3 инструкции по выполнению (или невыполнению) условия знак регистра (как минимум R1 и R4) равен (или не равен) -1,0,+1
3) двойной скип по знаку регистра (как минимум R1 и R4): -1 не скип, 0 один скип, +1 два скипа
4) условный джамп на адреса R1,R2,R3 в зависимости от знака в регистре R4 (который у нас может быть задействован в качестве знака переноса/заёма для операций сложения/вычитания/сдвига)
Я тут за главного - если что шлите мыло на me собака shaos точка net