|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22583 Location: Silicon Valley
|
| | | | petrenko wrote: Я вот, обчитавшись тем об 4-битных процессорах, понял, что может хватить совсем небольшого количества команд. Но (!) команды должны тогда быть масштабирумы, то есть после к.оп. идёт обрабатываемая структура данных переменного типа и длины - примерно так : [код операции] {количество операндов} {тип операндов}&{длина операндов} {d1} {d2} ..
Для операций а.л.у. тогда вообще достаточно одного к.оп. , а какое действие над данными будет производить а.л.у. - определяет тип данных - то есть если это {"слагаемые"} ,то будет ADD , если {"множимые"} ,то ,соответственно, MUL и т.д. В мнемониках это может выглядеть примерно так :
ALU 3 long_integer_add @reg("ZITA") @reg("EPSILON") @reg("DELTA") ;будет складывать три длинных целых операнда, адреса которых лежат в регистрах "зита" , "эпсилон" и "дельта" ALU 2 short_integer_mul reg("ALPHA") reg("BETA") ;будет перемножать два коротких целых операнда, которые сами лежат в регистрах "альфа" и "бета" | | | | |
ну по идее так у всех процов и есть, только конкретные совокупности командных битов принято называть опкодами возвращаясь к архитектуре Tryte-I - имеет ли смысл иметь непосредственный доступ к регистрам SP и PC либо достаточно наличия команды записи и чтения их в какую-то регистровую пару (например YZ)?
|
24 Sep 2015 08:15 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Вообще то только PC сложновато "уравнять в правах" со всеми РегистрамиОбщегоНазначения - он даже в DEC-рвских архитектурах особнячком. А SP можно назначить любой РОН - ибо команды PUSH POP суть просто MOV | ST/LD | c пред/пост-ин/де-крементом регистра, например вот так назначаем указателем стека R14 : MOV R2 --> @(-(R14) ) ; может иметь синоним PUSH R2 MOV @( (R14)+) --> R2 ; может иметь синоним POP R2 ( При этом мы можем запросто сделать несколько стеков - возможно нам захочется иметь ну например пультовой , системный и стек для языка форт .. ) Только когда они именно в совокупности , то это жёстко и немасштабируемо, что не есть хорошо. Кстати, для единообразия и удобства подправил CASE - не разрядность проверяемого, а количество вариантов указал - то есть не CASE 3 ... ,а CASE 27 - так проще - можно диапазон вариантов брать 4 .. 27 ,а Устройство Управления будет сразу "знать" на сколько продвинуть конвейер команд при несовпадении ни с одним из условий ..
|
24 Sep 2015 15:23 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22583 Location: Silicon Valley
|
@(-(R14)) выглядит пугающе...
P.S. Короче будем пушать и попать парами - AB,CD,...,YZ (13 пушей и 13 попов). Последняя пара YZ (точнее её содержимое) будет адресом, по которому будет читаться-писаться виртуальный регистр @ (по аналогии с регистром M в 8080, который ссылался на байт памяти с адресом HL). Регистры SP и PC будут спрятаны. Регистр PC можно будет записать из YZ командой PCYZ (по аналогии c PCHL в 8080). Регистр SP можно будет записать из YZ командой SPYZ (по аналогии c SPHL в 8080).
P.P.S. В первом посте можно посмотреть что предлагается вместо PCYZ и SPYZ, также предложен путь добавления ещё одного способа косвенного обращения - не только через пару YZ, но и через пару AB
|
24 Sep 2015 16:48 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22583 Location: Silicon Valley
|
В частной переписке petrenko подсказал интересную идею - можно явно разделить команды и данные (скажем буквы/цифры) - например команды могут быть всегда отрицательными трайтами (и нулевая команда будет NOP), а в случае положительного трайта мы интерпретируем его как символ ASCII-кода (больше 0, но меньше 256) либо как какой-то высокоуровневый код (>=256 - тэг бейсика?). Например, если исполняющее устройство встречает положительный трайт, то оно его добавляет в некий строковый буфер и идёт дальше, пока не встретит отрицательный трайт, который либо сбросит буфер, либо что-то с ним сделает. Таким образом можно из кода вводить числа (на подобие старых советских калькуляторов) либо делать передачу управления по именам, а не по адресам (типа шитый код аля-форт) - понятно, что будет чуть дольше, но зато какое удобство программирования!
|
25 Sep 2015 13:13 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
*_ASCII это американский, а тут троичный, так что надо бы по хорошему именовать хоша б TSCII и ограничить 243 .. Например : 0⨹ 1⨹ 2⨹ 3⨹ 4⨹ 5⨹ 6⨹ 7⨹ 8⨹ 9⨹ αsystem&ternary+ βsystem&ternary+ γsystem&ternary+ δsystem&ternary+ ε ζ .... η θ ι κ λ μ ν ξ ὂ π ρ
σ τ ύ φ χ .... ψ ω " # $ % & ` ( ) * + , - . / .... 010 110 210 310 410 510
610 710 810 910 : ; < = > ? ... @ a b c d e f g h i j k l m n o .... p
q r s t u v w x y z [ \ ] ^ _ .... ! a вот тут уже надо подумать что дальше ( есть одна мысля, чуток позже оформлю ) .. **_А это - да - всё же >255 для совместимости и упрощения переноса п.о. . Но подумать на досуге чем полезным потом заполнить зарезервированный диапазон 243..255 . Возможно разместить отрицательную часть системных цифр ( ? ) : ▽① ▽② ▽③ ▽④ ▽⑤ ▽⑥ ▽⑦ ▽⑧ ▽⑨ ▽αsystem&ternary- ▽βsystem&ternary- ▽γsystem&ternary- ▽δsystem&ternary- ***_Если фрагменты поддержки ФОРТ-а и ЛИСП-а реализуете в микропрограммах - наоборот будет быстрее (и удобнее ) . И необязательно отдельные буферы - можно один конвейер( это как бы хитрый сдвиговый регистр, самотегируемый ) логически "видеть" как два ..
|
26 Sep 2015 06:18 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Понаблюдав недавно за "мастер-классом" работы некоторых сурьёзных гуру на микро-ваксе, подумал, что "непосредственный доступ к регистрам SP и PC " наверное таки нужен, но токмо в режимах О. (п ерационной)С. (истемы) и пульта. Копиравать , кстати, в некие YZ необязательно, можно просто менть местами типа : ex SP1<->IX , ex SP2<->IY ( А если регистры все равноправные, то собственно и с IY можно делать "пугающие"( ) операции типа MOV @((IY)++)-->PC ( синоним RET ,где в качестве SP выступает IY ) )
|
30 Oct 2018 10:12 |
|
|
Paguo-86PK
Maniac
Joined: 12 Apr 2011 20:43 Posts: 267 Location: Tashkent
|
A можно оставить мнение? Так как сама идея - оригинальна, трансформировать i8080 из двоичного в троичный со всей системой команд - заплатка на заплатке не получится ли? Если транслятор ещё не готов и код придётся бить вручную, можно пойти по более приветливо-гуманитарному пути и связать мнемонику операций непосредственно с кодом… Так как вместо «-1»/«0»/«+1» условились использовать «N»/«O»/«P», то код операций автоматически будет складываться в $. Тем самым, операции «nop» логично было бы и выделить код «NOP». Тогда как операции «pop» логично соответственно дать код «POP». Пример программы:
Last edited by Paguo-86PK on 14 Nov 2018 06:01, edited 1 time in total.
|
13 Nov 2018 17:24 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22583 Location: Silicon Valley
|
8080 тяжеловат будет
|
13 Nov 2018 17:48 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Да, тяжеловат, пожалуй. Многовато регистров , да и команд можно поменьше, ну не то, чтоб прямо risc , но поменьше . Кстати, "зайлогизмы"( прикольное словообразование) не все одинаково безполезны. Полагаю идея малоразряядного а.л.у. , которое обрабатывает данные в несколько микроциклов - очень даже полезная. Например : одно-триббловое а.л.у.( 3 трита ) обрабатывает некий регистр B ,у которого длина 9 трит и результат кладёт в память по адресу из регистра IY ,у которого длина 27 трит c пост-инкрементогом ентого IY ... В мнемониках можно написать как то навроде : M( @(IY)+ ) <- SUB(A,B) Главное перимущество подхода в том, что не разширяя систему команд излишне и не утяжеляя аппаратную часть можно будет обрабатывать в едином стиле данные разных типов с контролем типов и защит и разной длины ( кратной 3 тритам ) Аппатарно реализуется вполне экономно : в предпоследнем регистре конвейера команд часть триггеров, в которые попадает поле из к.оп. , указывающее длины операндов, переписываются в вычитающий счётчик микроциклов.
|
14 Nov 2018 03:02 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Подумал над обоими вариантами конвейера - совместного и раздельного. Прихожу к выводу, что ... ... лучше всего совместно-раздельный. Это примерно так : первые две "ступеньки" конвейера совместные, то, что в них попадает подвергается первичной проверке по типу. Далее разветвление - в команды / в "некий строковый буфер" . Команды поэтапно дешифруются по полям и при этом ещё и продвигаются ( то есть каждая следующая "ступенька" у к.к. шире предыдущей, потому как разные узлы надо настраивать в разные микроциклы - например ключи-коммутаторы, выбирающие что подать на алу, сначала, а например коммутаторы, выбирающие куда положить результат - уже после отработки алу .. и т.п. ) То, что попадает в "некий строковый буфер" подвергается ещё проверке на длину и тип и может быть или обработано алу или обработано дешифратором( если это кодовое"как-бы-слово" ) или в нужный микроцикл скопировано в индексный регистр( если это "пойнтер" ). Как то так ..
|
14 Nov 2018 03:29 |
|
|
Paguo-86PK
Maniac
Joined: 12 Apr 2011 20:43 Posts: 267 Location: Tashkent
|
A если указатели с отрицательным значением сделать стек-подобными? То есть, если «ST = -100», то при «[ST]» предоставляет доступ к памяти с автоматическим инкрементом/декрементом при чтении/записи не потому, что имя указателя «ST», а лишь из-за значения меньше нуля. Для адресного пространства троичного компьютера усечение адресации в половину не так страшно, как для двоичного… Тем самым, вектор «[+100]» и «[-100]» адресуют одну ячейку памяти, но «МИНУС» указывает на магазинный тип доступа…
|
14 Nov 2018 12:10 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Простите, коллега "Пагуо-86пк" но Вы когда-нибудь минимизировали какие-нибудь "железные" схемы ? Я ,знаете Ли, могу понять тягу некоторых художников к огромным картинам с неверотным количеством мелких деталей. Но не во всех сферах деятельности есть такие роскошные возможности. И Вы не пробовали ( хотя бы ознакомительно ) посмотреть на архитектуры других машин ? Складывается ,извините, впечатление, что кроме i8080 Вы о других разве что слыхали случайно, что таковые тоже где то там сущетвуют. Взгляните на досуге на команды "DEC"-овских машин. В той же школьной "БК-0010Ш" как раз такая система команд. ( хотя лично мне больше нравится система VAX ,в том числе и из-за неудобства восмеричной записи PDP/LSI ) Там есть обращения к памяти по адресу, берущемуся из регистра с пред-/пост- инкрементом/декрементом регистра. Что позволяет кроме системного стека ( указателем оного работает R6 ) программировать ещё до 5 пользовательских стеков. То есть совершенно незачем городить городулю - таковую было бы "прикольно" соорудить например, прикошачив доп.внешние регистры к тому же i8080 для организации пользовательских стеков в любом колиестве ( у 8080 есть только один стек через SP ) В заново проектируемых это как то .. 2 : "AlexanderZh" : Поправьте пожалуйста "очепатку" - наименьшее отрицательное чило в математике не существует , а в машинах определяется доступной разрядностью опперандов.
Last edited by petrenko on 14 Nov 2018 14:12, edited 1 time in total.
|
14 Nov 2018 13:56 |
|
|
petrenko
Doomed
Joined: 10 Mar 2012 16:21 Posts: 598 Location: РФ
|
Соглашусь с Вашим мнением. Тем паче, что таковым флагом может " подрабатывать по совместительству на пол-ставки" один из триггеров в ковейере команд. ( именно так и обстоит дело в PDP/LSI и VAX ,а уж будет ли сей флаг двоичным/троичным/четверичным, да хоть пятеричным - непринципиально , прото обзовём сей кусочек "железячки" соотв. "двиггер"/"триггер"/"четвериггер"/"пятериггер" ... <-щютка_юмора , {к.с.=="лопата"} )
|
14 Nov 2018 14:06 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22583 Location: Silicon Valley
|
| | | | Shaos wrote: В частной переписке petrenko подсказал интересную идею - можно явно разделить команды и данные (скажем буквы/цифры) - например команды могут быть всегда отрицательными трайтами (и нулевая команда будет NOP), а в случае положительного трайта мы интерпретируем его как символ ASCII-кода (больше 0, но меньше 256) либо как какой-то высокоуровневый код (>=256 - тэг бейсика?). Например, если исполняющее устройство встречает положительный трайт, то оно его добавляет в некий строковый буфер и идёт дальше, пока не встретит отрицательный трайт, который либо сбросит буфер, либо что-то с ним сделает. Таким образом можно из кода вводить числа (на подобие старых советских калькуляторов) либо делать передачу управления по именам, а не по адресам (типа шитый код аля-форт) - понятно, что будет чуть дольше, но зато какое удобство программирования! | | | | |
По прошествии почти пяти лет поменял таки систему команд для поддержки такого варианта (см. первое сообщение этого топика) - т.е. мы будем как в калькуляторах писать символы друг за другом и они при этом будут выводиться на экран (если флаг вывода N), будут читаться подпрограммой прямо из кода (если флаг вывода O - при этом все ASCII инструкции будут просто пропускаться) или будут передаваться в сеть (если флаг вывода P) - причём я планирую задействовать практически все символы управления ASCII (с кодами до 31), а таблица букв будет расширена до кода 283 POPPPP... P.S. Кстати с октября 2015 у меня есть домен http://tryte.one
|
24 May 2020 20:26 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22583 Location: Silicon Valley
|
Примеры кода - вывод текста на экран: или даже просто вот так: Передача строки в подпрограмму: Передача строки получателю с индексом 1: По флагам пока 3 штуки набралось: trit 0 - flagC (флаг заёма-переноса, который в 3niti alpha назывался BCF); trit 1 - flagS (флаг знака результата, который в 3niti alpha назывался RSF); trit 2 - flagT (флаг режима вывода текста - см.выше); и ещё осталось место для 3 флагов...
|
24 May 2020 21:51 |
|
|
Who is online |
Users browsing this forum: No registered users and 45 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
|
|