Будущее, как мы тут многие (хотя и не все) считаем, должно принять во внимание троичную логику.
![:wink:](./images/smilies/icon_wink.gif)
Поэтому небольшой проект 4-тритного компьютера, основанного на троичной логике, я и решил представить
именно здесь, поскольку основные схемотехнические решения позаимствованы мной из моего же собственного
проекта 4-bit Processor.
Для воплощения третьего неопределённого состояния логики я решил использовать тот факт, что наложение
логической единицы на логический ноль Proteus воспринимает как логический конфликт, но амплитуду
в точке логического конфликта трактует как среднее состояние между логическим нулём и логической
единицей, что, собственно и соответствует состоянию "неопределено", "неизвестно" троичной логики. С точки зрения "математики" библиотек *.dll Proteus-a это состояние ничуть не хуже и не лучше всех
остальных состояний, которые Proteus способен учесть, анализируя логические схемы:
![Image](http://sgu-wap.narod.ru/Ternary/Tri_DSIM_State.gif)
Единственное, что несколько омрачает эту идею, схемотехника устройства при использовании состояния
логического конфликта в качестве логического "неопределено" или "неизвестно" должна быть в значительной
мере корректной, чтобы избегать реальных логических конфликтов, которые будут теперь трактоваться
как конкретный логический уровень.
Итак, я решил делать процессор 4-тритным, поскольку схемотехника 4-разрядного процессора была мной хорошо проработана,
а во-вторых, это позволяет более или менее корректно сравнить 4-битный
процессор с его 4-тритным эквивалентом.
И вот что у меня на этой стезе получилось:
![Image](http://sgu-wap.narod.ru/Ternary/TernCPU_2019_.gif)
Поскольку двоичная логика является подмножеством троичной логики, но элементы троичной логики обходятся
в данный момент весьма дорого, я решил, что троичные логические элементы должны быть лишь там где это
сугубо необходимо, чтобы проект осуществлял троичные операции.
В этой связи управление в значительной мере выполнено на двоичной логике, ПЗУ микрокоманд - двоичное,
ОЗУ и системное ПЗУ - двоичные. Троичные значения сохраняются и извлекаются в формате BCT.
Адрес декодируется через дешифратор 3 - в - 2.
Программный счётчик РС 8-тритный, что даёт нам 6561 независиый адрес для хранения троичных кодов.
В двоичном 4-битном компьютере РС был 12-разрядный, что давало всего 4096 ячеек памяти.
Троичность позволила зело упростить схемотехнику узла без потери количественной характеристики.
Карта памяти и программная модель 4-тритного компьютера с 8-тритной шиной адреса выглядят следующим
образом:
![Image](http://sgu-wap.narod.ru/Ternary/Tri_MemoryMap3.gif)
Регистр А - аккумулятор.
Регистр В - обычно второй аргумент, но и temp-регистр для многих операций.
Регистр F - флаги, троичных флагов два: C - carry (перенос) S - sign (знак).
Два троичных флага сохраняются как 6 двоичных, при этом появляется Z и NZ... etc.
4-разрядная шина данных в троичном процессоре позволяет передать 81 независимый код.
АЛУ при работе со знаковыми аргументами работает в диапазоне -40 ... 0 ... +40.
Возможна 81 оригинальная команда данного процессора.
С командами я поступил в этот раз несколько иначе: я добавлял их понемногу в набор и пробовал
программировать. Если выразительных средств не хватало, добавлял еще команд.
В итоге на данный момент минимальный набор команд следующий:
Я в этом наборе программировал довольно успешно, и без особых неудобств.
Бросается в глаза, что опять в наборе нет CALL и RET - это сделано сейчас специально.
![8)](./images/smilies/icon_cool.gif)
Аппаратные средства заложены на CALL, RET и INT (а он с ними связан).
Но уж больно мне захотелось попробовать одну древнюю идею Сеймура Крея. В системе команд
его компьютера не было CALL и RET, но было указание, что если они вам очень нужны -
реализуйте их программно!
![:wink:](./images/smilies/icon_wink.gif)
![:o](./images/smilies/icon_eek.gif)
Я пока не выкладываю никаких библиотек и проектов, поскольку версия проекта - Alfa, а альфа-
тестирование обычно проводится силами штатных разработчиков. ©
Так что в заключение - видео, как всё это реально работает:
Я уже посмотрел это видео с разных компьютеров и отметил, что Ютуб зачастую снижает качество
картинки, что для схемотехники весьма неприятно. Оригинальный материал можно взять здесь.
Я не накладывал на изображение музыки, чтобы не нарушать ничьих авторских прав...
Но сейчас посмотрел в папку, откуда я выкладываю картинки:
C:\Tri_CPU_SyScmd1.gif
C:\Tri_CPU_SyScmd2.gif
C:\Tri_CPU_SyScmd3.gif
C:\Tri_MemoryMap3.gif
C:\Triplo_Max_-_Shadow
![:roll:](./images/smilies/icon_rolleyes.gif)
Вот Tri_plo_Max_-_Shadow - вполне можно послушать фоном для этого ролика...
![:D](./images/smilies/icon_biggrin.gif)