Давайте думать над железкой (TRIADOR)
Moderator: haqreu
-
- Admin
- Posts: 23990
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Давайте думать над железкой (TRIADOR)
Не надо прогонять через АЛУ чтобы сделать инкремент! Это сильно проще, однако необходимости в автоинкременте/декременте нету, пока у нас не будет косвенной адресации, а её пока таки НЕ будет...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Doomed
- Posts: 598
- Joined: 10 Mar 2012 16:21
- Location: РФ
Re: Давайте думать над железкой (TRIADOR)
Стека тоже не будет ? 

-
- Admin
- Posts: 23990
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Давайте думать над железкой (TRIADOR)
Будет интерфейс расширения (надо продумать каждый контакт), по которому будут втыкаться платы расширения EX - если кому очень хочется стек, может разработать плату стека 

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Doomed
- Posts: 598
- Joined: 10 Mar 2012 16:21
- Location: РФ
Re: Давайте думать над железкой (TRIADOR)
Из этого , как ни печально , следует , что и подпрограмм тоже не будет ( пока ? )
-
- Admin
- Posts: 23990
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Давайте думать над железкой (TRIADOR)
Если сделать PC доступным программно (через регистр), то можно один уровень вложенности подпрограмм организовать - с запоминанием адреса возврата в регистре и копировании его в PC при возврате из подпрограммы...petrenko wrote:Из этого , как ни печально , следует , что и подпрограмм тоже не будет ( пока ? )
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Doomed
- Posts: 598
- Joined: 10 Mar 2012 16:21
- Location: РФ
Re: Давайте думать над железкой (TRIADOR)
Да, так возможно.
Ну а сам PC будет автоинкрементироваться или как* ?
( Оно конечно изобретать велосипеды иногда таки нужно, но несмотря на коробку с тремя передачами заместо двух, кое-какие решения таки лучше не изобретать, а применить готовые. Например архитектурные решения PDP и VAX )
*_Можно ес.с.но и PC <- ADI( PC , {длина_текущей_команды} ) в микропрограмме ( уже говорил вроде .. )
Ну а сам PC будет автоинкрементироваться или как* ?
( Оно конечно изобретать велосипеды иногда таки нужно, но несмотря на коробку с тремя передачами заместо двух, кое-какие решения таки лучше не изобретать, а применить готовые. Например архитектурные решения PDP и VAX )
*_Можно ес.с.но и PC <- ADI( PC , {длина_текущей_команды} ) в микропрограмме ( уже говорил вроде .. )
-
- Admin
- Posts: 23990
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Давайте думать над железкой (TRIADOR)
Ну дык программный СЧЁТЧИК ведь 
И команды у нас все одной длины - ровно 5 тритов...

И команды у нас все одной длины - ровно 5 тритов...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Doomed
- Posts: 598
- Joined: 10 Mar 2012 16:21
- Location: РФ
Re: Давайте думать над железкой (TRIADOR)
Кстати, "придумал" как делать до 10 уровней вложенности подпрограмм без стека в памяти .
( помните, стек в памяти появился не у всех и не сразу, у изделий фирмы "штеуд" например - в 8080 , а в 8008 были 8 штук 14-и-битных PC , которые и составляли "стек" )
Если назначать программным счётчиком PC по очереди регистры, адресуясь к PC косвенно по содержимому R12 например, то получится эдакий "эрзац-стек" .
Но тогда их уже не получится использовать под данные, а все данные только в памяти, а адресовать память по R13 .
А Вы говорите, что косвенная адресация не нужна. Она аппаратно экономичнее автоинкрементов регистров и др. сложностей.
Ну то есть надо предусмотреть в будущем расширение
erweiterte ( operationscodes )
для более длинных команд.
( в терминологии фирмы "штеуд" это esc )
( помните, стек в памяти появился не у всех и не сразу, у изделий фирмы "штеуд" например - в 8080 , а в 8008 были 8 штук 14-и-битных PC , которые и составляли "стек" )
Если назначать программным счётчиком PC по очереди регистры, адресуясь к PC косвенно по содержимому R12 например, то получится эдакий "эрзац-стек" .
Но тогда их уже не получится использовать под данные, а все данные только в памяти, а адресовать память по R13 .
А Вы говорите, что косвенная адресация не нужна. Она аппаратно экономичнее автоинкрементов регистров и др. сложностей.
Ну это - пока .. ,надеюсь.Shaos wrote:.. И команды у нас все одной длины - ровно 5 тритов ...
Ну то есть надо предусмотреть в будущем расширение
erweiterte ( operationscodes )
для более длинных команд.
( в терминологии фирмы "штеуд" это esc )
-
- Maniac
- Posts: 318
- Joined: 10 Mar 2017 05:30
Re: Давайте думать над железкой (TRIADOR)
Так, про адресацию памяти команд:
а) программный счётчик будет шестиразрядным
б) аргументы джампов будут трёхразрядными, недостающие три разряда будут взяты из R13.
а) программный счётчик будет шестиразрядным
б) аргументы джампов будут трёхразрядными, недостающие три разряда будут взяты из R13.
-
- Maniac
- Posts: 318
- Joined: 10 Mar 2017 05:30
Re: Давайте думать над железкой (TRIADOR)
А вот это я пока ещё не решил...
-
- Supreme God
- Posts: 16676
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Давайте думать над железкой (TRIADOR)
Я, кстати, в преддверье нашего троичного проекта поковырялся с этим самым Nibbler-ом.Shaos wrote:Если сделать PC доступным программно (через регистр), то можно один уровень вложенности подпрограмм организовать - с запоминанием адреса возврата в регистре и копировании его в PC при возврате из подпрограммы...
Он интересен тем, что безо всякой аппаратной поддержки в нём используется чисто
"программный стек". Вот его я и хотел "пощупать вживую".
Немножко громоздкое решение - но работает!

Так что на подпрограммы можем рассчитывать.
iLavr
-
- Admin
- Posts: 23990
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Давайте думать над железкой
Ну что - дискасс или как?Shaos wrote:Shaos wrote:только один флаг по ходу нужен - carry/borrowhaqreu wrote:Думаю, что кроме carry и sign флагов не будет. Когда их устанавливать - это хороший вопрос. Смысла этого делать при копировании, например, не вижу. При всех арифметических операциях - да. А вот надо ли ставить при, например, потритовой инструкции OPA?
потритовые инструкции наверное вообще не должны трогать флаги
тогда OP NOP будет выполняться как NOP
P.S. а не затолкать ли carry/borrow флаг скажем в R4?
тогда при сложении R1 и R2 результат кладётся в R3, а переполнение - в R4идея - иметь полноценный трёх-адресный АЛУ (когда оба аргумента и конечный результат могут быть любым из 13 регистров), а EX команда будет ПРОГРАММИРУЕМОЙ, т.е. в начале программы мы указываем для каждого из 27 вариантов (или стольки вариантов, сколько планируем задействовать в программе) чего он собственно будет делать, например путём заюзывания инструкции кодирования (скажем уберём OPB в АЛУ и задействуем освободившийся опкод NP (-2) как инструкцию программирования PR, т.е. PR -1 будет означать запрограммировать расширенную инструкцию EX -1 и т.д., а аргументы программирования будут браться из регистров:
R1 - первый адрес (1й аргумент)
R2 - второй адрес (2й аргумент)
R3 - третий адрес (результат)
R4 - код выполняемой фунции (из АЛУ либо скипы)
каждый "адрес" задаётся 3 тритами, a у нас 13 регистров и например если аргумент отрицательный, то имеется ввиду то, что регистр берётся с инверсией (чтобы можно было реализовать вычитание скажем), а если 0, то берётся 0:после этого куска кода любой вызов EX -1 будет выполняться как R1=R1-R2Code: Select all
R1 1 ; 1st argument is R1 R2 -2 ; 2nd argument is inverted R2 R3 1 ; result is R1 R4 -12 ; for example let's pretend this is ADC with carry/borrow PR -1 ; programming of EX -1
дискасс
P.P.S. Хотя это уже может быть TRIADOR-4...

С другой стороны иметь по 4 регистра настройки на каждую EX команду было бы жирновато, однако кто нас обязывает втыкать в EX расширения ВСЕ настраиваемые опкоды - могут быть и ненастраиваемые (правда при этом программист должен знать чего у него собственно в EX воткнуто в виде плат расширения)
P.S. флаг carry/borrow наверное можно оставить невидимым флагом, но тогда придётся завести отдельные скипы для его обработки (как минимум skip_if_carry и skip_if_borrow)
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23990
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Давайте думать над железкой (TRIADOR)
Ещё идея - OPB таки убрать в EX, но на её место поставить SKIP-ы:
Вроде схемотехника вышеизложенного не должна быть сильно сложной и позволит сразу же задействовать условное ветвление например для циклов (decrement R1, skip if zero, jump)
Суть в том, что следующая инструкция подменяется на NOP (OOOOO) если условие выполняется
P.S. Это также означает, что EX будет чисто ALU (OPB и ADD)
P.P.S. Командой программирования EX можно сделать саму команду EX, у которой EX 0 будет означать переключиться из режима программирования в режим работы
P.P.P.S. В таком случае коды функций для программирования EX могут быть следующими (для начала):
ONN - ADD with carry/borrow = -1
ONO - ADD with carry/borrow = 0
ONP - ADD with carry/borrow = +1
OON - ADD with actual carry/borrow stored before
OOO - ADV (R1 plus value R2 copy to R3)
OOP - OPB (R1,R2,R3) R1=R1oR2
OPN - OPB (R1,R2,R3) R2=R1oR2
OPO - OPB (R1,R2,R3) R3=R1oR2
OPP - OPB (R1,R2,R3) R4=R1oR2
(получается для начала можно обойтись только 2 тритами для задания функции EX, а то и вообще одним - см. жирное выделение)
P.P.P.P.S. Ещё ведь и сдвиги надо добавлять...
Code: Select all
NPNNN - skip_if_not_negative_r4
NPNNO - skip_if_not_zero_r4
NPNNP - skip_if_not_positive_r4
NPNON - skip_if_not_negative_r3
NPNOO - skip_if_not_zero_r3
NPNOP - skip_if_not_positive_r3
NPNPN - skip_if_not_negative_r2
NPNPO - skip_if_not_zero_r2
NPNPP - skip_if_not_positive_r2
NPONN - skip_if_not_negative_r1
NPONO - skip_if_not_zero_r1
NPONP - skip_if_not_positive_r1
NPOON - skip_if_borrow
NPOOO - skip_if_no_overflow
NPOOP - skip_if_carry
NPOPN - skip_if_negative_r1
NPOPO - skip_if_zero_r1
NPOPP - skip_if_positive_r1
NPPNN - skip_if_negative_r2
NPPNO - skip_if_zero_r2
NPPNP - skip_if_positive_r2
NPPON - skip_if_negative_r3
NPPOO - skip_if_zero_r3
NPPOP - skip_if_positive_r3
NPPPN - skip_if_negative_r4
NPPPO - skip_if_zero_r4
NPPPP - skip_if_positive_r4
Суть в том, что следующая инструкция подменяется на NOP (OOOOO) если условие выполняется
P.S. Это также означает, что EX будет чисто ALU (OPB и ADD)
P.P.S. Командой программирования EX можно сделать саму команду EX, у которой EX 0 будет означать переключиться из режима программирования в режим работы
P.P.P.S. В таком случае коды функций для программирования EX могут быть следующими (для начала):
ONN - ADD with carry/borrow = -1
ONO - ADD with carry/borrow = 0
ONP - ADD with carry/borrow = +1
OON - ADD with actual carry/borrow stored before
OOO - ADV (R1 plus value R2 copy to R3)
OOP - OPB (R1,R2,R3) R1=R1oR2
OPN - OPB (R1,R2,R3) R2=R1oR2
OPO - OPB (R1,R2,R3) R3=R1oR2
OPP - OPB (R1,R2,R3) R4=R1oR2
(получается для начала можно обойтись только 2 тритами для задания функции EX, а то и вообще одним - см. жирное выделение)
P.P.P.P.S. Ещё ведь и сдвиги надо добавлять...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16676
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Давайте думать над железкой
Я, честно говоря, без картинки или блок-схемы, или хотя бы программной модели чисто на словах - в упор не понимаюShaos wrote:Ну что - дискасс или как?Shaos wrote:...
дискасс
P.P.S. Хотя это уже может быть TRIADOR-4...
где эти регистры, как связаны с оборудованием...

P.S. Если провести параллель с любимым нашим i8080, то вот эта картинка понятнее многих страниц слов: Нарисовали бы что ли хоть раз, что за регистры у нас и как они со всем соотносятся?
You do not have the required permissions to view the files attached to this post.
iLavr
-
- Admin
- Posts: 23990
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Давайте думать над железкой (TRIADOR)
Да, надо нарисовать для понятности
Я тут за главного - если что шлите мыло на me собака shaos точка net