Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22826 Location: Silicon Valley
|
Не надо прогонять через АЛУ чтобы сделать инкремент! Это сильно проще, однако необходимости в автоинкременте/декременте нету, пока у нас не будет косвенной адресации, а её пока таки НЕ будет...
|
20 Nov 2017 17:44 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Стека тоже не будет ?
|
20 Nov 2017 18:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22826 Location: Silicon Valley
|
Будет интерфейс расширения (надо продумать каждый контакт), по которому будут втыкаться платы расширения EX - если кому очень хочется стек, может разработать плату стека
|
20 Nov 2017 19:41 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Из этого , как ни печально , следует , что и подпрограмм тоже не будет ( пока ? )
|
20 Nov 2017 20:22 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22826 Location: Silicon Valley
|
Если сделать PC доступным программно (через регистр), то можно один уровень вложенности подпрограмм организовать - с запоминанием адреса возврата в регистре и копировании его в PC при возврате из подпрограммы...
|
20 Nov 2017 20:27 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Да, так возможно. Ну а сам PC будет автоинкрементироваться или как* ?
( Оно конечно изобретать велосипеды иногда таки нужно, но несмотря на коробку с тремя передачами заместо двух, кое-какие решения таки лучше не изобретать, а применить готовые. Например архитектурные решения PDP и VAX )
*_Можно ес.с.но и PC <- ADI( PC , {длина_текущей_команды} ) в микропрограмме ( уже говорил вроде .. )
|
20 Nov 2017 20:37 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22826 Location: Silicon Valley
|
Ну дык программный СЧЁТЧИК ведь И команды у нас все одной длины - ровно 5 тритов...
|
20 Nov 2017 20:50 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Кстати, "придумал" как делать до 10 уровней вложенности подпрограмм без стека в памяти . ( помните, стек в памяти появился не у всех и не сразу, у изделий фирмы "штеуд" например - в 8080 , а в 8008 были 8 штук 14-и-битных PC , которые и составляли "стек" ) Если назначать программным счётчиком PC по очереди регистры, адресуясь к PC косвенно по содержимому R12 например, то получится эдакий "эрзац-стек" . Но тогда их уже не получится использовать под данные, а все данные только в памяти, а адресовать память по R13 . А Вы говорите, что косвенная адресация не нужна. Она аппаратно экономичнее автоинкрементов регистров и др. сложностей. Ну это - пока .. ,надеюсь. Ну то есть надо предусмотреть в будущем расширение erweiterte ( operationscodes ) для более длинных команд. ( в терминологии фирмы "штеуд" это esc )
|
20 Nov 2017 21:11 |
|
|
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
Так, про адресацию памяти команд:
а) программный счётчик будет шестиразрядным б) аргументы джампов будут трёхразрядными, недостающие три разряда будут взяты из R13.
|
21 Nov 2017 10:51 |
|
|
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
А вот это я пока ещё не решил...
|
21 Nov 2017 11:52 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я, кстати, в преддверье нашего троичного проекта поковырялся с этим самым Nibbler-ом. Он интересен тем, что безо всякой аппаратной поддержки в нём используется чисто "программный стек". Вот его я и хотел "пощупать вживую". Немножко громоздкое решение - но работает! Так что на подпрограммы можем рассчитывать.
_________________ iLavr
|
21 Nov 2017 12:19 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22826 Location: Silicon Valley
|
| | | | Shaos wrote: идея - иметь полноценный трёх-адресный АЛУ (когда оба аргумента и конечный результат могут быть любым из 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-R2 дискасс P.P.S. Хотя это уже может быть TRIADOR-4... | | | | |
Ну что - дискасс или как? С другой стороны иметь по 4 регистра настройки на каждую EX команду было бы жирновато, однако кто нас обязывает втыкать в EX расширения ВСЕ настраиваемые опкоды - могут быть и ненастраиваемые (правда при этом программист должен знать чего у него собственно в EX воткнуто в виде плат расширения) P.S. флаг carry/borrow наверное можно оставить невидимым флагом, но тогда придётся завести отдельные скипы для его обработки (как минимум skip_if_carry и skip_if_borrow)
|
23 Nov 2017 19:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22826 Location: Silicon Valley
|
Ещё идея - 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=R1oR2OPN - 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. Ещё ведь и сдвиги надо добавлять...
|
23 Nov 2017 21:58 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я, честно говоря, без картинки или блок-схемы, или хотя бы программной модели чисто на словах - в упор не понимаю где эти регистры, как связаны с оборудованием... P.S. Если провести параллель с любимым нашим i8080, то вот эта картинка понятнее многих страниц слов:Нарисовали бы что ли хоть раз, что за регистры у нас и как они со всем соотносятся?
_________________ iLavr
|
24 Nov 2017 04:35 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22826 Location: Silicon Valley
|
Да, надо нарисовать для понятности
|
24 Nov 2017 13:18 |
|
|