4-trit Processor
Moderator: haqreu
4-trit Processor
В заглавии этого форума есть следующие слова: (прошлое, настоящее, будущее)...
Будущее, как мы тут многие (хотя и не все) считаем, должно принять во внимание троичную логику.
Поэтому небольшой проект 4-тритного компьютера, основанного на троичной логике, я и решил представить
именно здесь, поскольку основные схемотехнические решения позаимствованы мной из моего же собственного
проекта 4-bit Processor.
Для воплощения третьего неопределённого состояния логики я решил использовать тот факт, что наложение
логической единицы на логический ноль Proteus воспринимает как логический конфликт, но амплитуду
в точке логического конфликта трактует как среднее состояние между логическим нулём и логической
единицей, что, собственно и соответствует состоянию "неопределено", "неизвестно" троичной логики. С точки зрения "математики" библиотек *.dll Proteus-a это состояние ничуть не хуже и не лучше всех
остальных состояний, которые Proteus способен учесть, анализируя логические схемы:
Единственное, что несколько омрачает эту идею, схемотехника устройства при использовании состояния
логического конфликта в качестве логического "неопределено" или "неизвестно" должна быть в значительной
мере корректной, чтобы избегать реальных логических конфликтов, которые будут теперь трактоваться
как конкретный логический уровень.
Итак, я решил делать процессор 4-тритным, поскольку схемотехника 4-разрядного процессора была мной хорошо проработана,
а во-вторых, это позволяет более или менее корректно сравнить 4-битный
процессор с его 4-тритным эквивалентом.
И вот что у меня на этой стезе получилось:
Поскольку двоичная логика является подмножеством троичной логики, но элементы троичной логики обходятся
в данный момент весьма дорого, я решил, что троичные логические элементы должны быть лишь там где это
сугубо необходимо, чтобы проект осуществлял троичные операции.
В этой связи управление в значительной мере выполнено на двоичной логике, ПЗУ микрокоманд - двоичное,
ОЗУ и системное ПЗУ - двоичные. Троичные значения сохраняются и извлекаются в формате BCT.
Адрес декодируется через дешифратор 3 - в - 2.
Программный счётчик РС 8-тритный, что даёт нам 6561 независиый адрес для хранения троичных кодов.
В двоичном 4-битном компьютере РС был 12-разрядный, что давало всего 4096 ячеек памяти.
Троичность позволила зело упростить схемотехнику узла без потери количественной характеристики.
Карта памяти и программная модель 4-тритного компьютера с 8-тритной шиной адреса выглядят следующим
образом:
Регистр А - аккумулятор.
Регистр В - обычно второй аргумент, но и temp-регистр для многих операций.
Регистр F - флаги, троичных флагов два: C - carry (перенос) S - sign (знак).
Два троичных флага сохраняются как 6 двоичных, при этом появляется Z и NZ... etc.
4-разрядная шина данных в троичном процессоре позволяет передать 81 независимый код.
АЛУ при работе со знаковыми аргументами работает в диапазоне -40 ... 0 ... +40.
Возможна 81 оригинальная команда данного процессора.
С командами я поступил в этот раз несколько иначе: я добавлял их понемногу в набор и пробовал
программировать. Если выразительных средств не хватало, добавлял еще команд.
В итоге на данный момент минимальный набор команд следующий:
Я в этом наборе программировал довольно успешно, и без особых неудобств.
Бросается в глаза, что опять в наборе нет CALL и RET - это сделано сейчас специально.
Аппаратные средства заложены на CALL, RET и INT (а он с ними связан).
Но уж больно мне захотелось попробовать одну древнюю идею Сеймура Крея. В системе команд
его компьютера не было CALL и RET, но было указание, что если они вам очень нужны -
реализуйте их программно! Я попробовал - и получилось!
Я пока не выкладываю никаких библиотек и проектов, поскольку версия проекта - Alfa, а альфа-
тестирование обычно проводится силами штатных разработчиков. ©
Так что в заключение - видео, как всё это реально работает:
Я уже посмотрел это видео с разных компьютеров и отметил, что Ютуб зачастую снижает качество
картинки, что для схемотехники весьма неприятно. Оригинальный материал можно взять здесь.
Я не накладывал на изображение музыки, чтобы не нарушать ничьих авторских прав...
Но сейчас посмотрел в папку, откуда я выкладываю картинки:
C:\Tri_CPU_SyScmd1.gif
C:\Tri_CPU_SyScmd2.gif
C:\Tri_CPU_SyScmd3.gif
C:\Tri_MemoryMap3.gif
C:\Triplo_Max_-_Shadow
Вот Tri_plo_Max_-_Shadow - вполне можно послушать фоном для этого ролика...
Будущее, как мы тут многие (хотя и не все) считаем, должно принять во внимание троичную логику.
Поэтому небольшой проект 4-тритного компьютера, основанного на троичной логике, я и решил представить
именно здесь, поскольку основные схемотехнические решения позаимствованы мной из моего же собственного
проекта 4-bit Processor.
Для воплощения третьего неопределённого состояния логики я решил использовать тот факт, что наложение
логической единицы на логический ноль Proteus воспринимает как логический конфликт, но амплитуду
в точке логического конфликта трактует как среднее состояние между логическим нулём и логической
единицей, что, собственно и соответствует состоянию "неопределено", "неизвестно" троичной логики. С точки зрения "математики" библиотек *.dll Proteus-a это состояние ничуть не хуже и не лучше всех
остальных состояний, которые Proteus способен учесть, анализируя логические схемы:
Единственное, что несколько омрачает эту идею, схемотехника устройства при использовании состояния
логического конфликта в качестве логического "неопределено" или "неизвестно" должна быть в значительной
мере корректной, чтобы избегать реальных логических конфликтов, которые будут теперь трактоваться
как конкретный логический уровень.
Итак, я решил делать процессор 4-тритным, поскольку схемотехника 4-разрядного процессора была мной хорошо проработана,
а во-вторых, это позволяет более или менее корректно сравнить 4-битный
процессор с его 4-тритным эквивалентом.
И вот что у меня на этой стезе получилось:
Поскольку двоичная логика является подмножеством троичной логики, но элементы троичной логики обходятся
в данный момент весьма дорого, я решил, что троичные логические элементы должны быть лишь там где это
сугубо необходимо, чтобы проект осуществлял троичные операции.
В этой связи управление в значительной мере выполнено на двоичной логике, ПЗУ микрокоманд - двоичное,
ОЗУ и системное ПЗУ - двоичные. Троичные значения сохраняются и извлекаются в формате BCT.
Адрес декодируется через дешифратор 3 - в - 2.
Программный счётчик РС 8-тритный, что даёт нам 6561 независиый адрес для хранения троичных кодов.
В двоичном 4-битном компьютере РС был 12-разрядный, что давало всего 4096 ячеек памяти.
Троичность позволила зело упростить схемотехнику узла без потери количественной характеристики.
Карта памяти и программная модель 4-тритного компьютера с 8-тритной шиной адреса выглядят следующим
образом:
Регистр А - аккумулятор.
Регистр В - обычно второй аргумент, но и temp-регистр для многих операций.
Регистр F - флаги, троичных флагов два: C - carry (перенос) S - sign (знак).
Два троичных флага сохраняются как 6 двоичных, при этом появляется Z и NZ... etc.
4-разрядная шина данных в троичном процессоре позволяет передать 81 независимый код.
АЛУ при работе со знаковыми аргументами работает в диапазоне -40 ... 0 ... +40.
Возможна 81 оригинальная команда данного процессора.
С командами я поступил в этот раз несколько иначе: я добавлял их понемногу в набор и пробовал
программировать. Если выразительных средств не хватало, добавлял еще команд.
В итоге на данный момент минимальный набор команд следующий:
Я в этом наборе программировал довольно успешно, и без особых неудобств.
Бросается в глаза, что опять в наборе нет CALL и RET - это сделано сейчас специально.
Аппаратные средства заложены на CALL, RET и INT (а он с ними связан).
Но уж больно мне захотелось попробовать одну древнюю идею Сеймура Крея. В системе команд
его компьютера не было CALL и RET, но было указание, что если они вам очень нужны -
реализуйте их программно! Я попробовал - и получилось!
Я пока не выкладываю никаких библиотек и проектов, поскольку версия проекта - Alfa, а альфа-
тестирование обычно проводится силами штатных разработчиков. ©
Так что в заключение - видео, как всё это реально работает:
Я уже посмотрел это видео с разных компьютеров и отметил, что Ютуб зачастую снижает качество
картинки, что для схемотехники весьма неприятно. Оригинальный материал можно взять здесь.
Я не накладывал на изображение музыки, чтобы не нарушать ничьих авторских прав...
Но сейчас посмотрел в папку, откуда я выкладываю картинки:
C:\Tri_CPU_SyScmd1.gif
C:\Tri_CPU_SyScmd2.gif
C:\Tri_CPU_SyScmd3.gif
C:\Tri_MemoryMap3.gif
C:\Triplo_Max_-_Shadow
Вот Tri_plo_Max_-_Shadow - вполне можно послушать фоном для этого ролика...
iLavr
Re: 4-trit Processor
Проект разрабатывался в Proteus 6.7 Pro под Windows 98, dll-библиотеки элементов троичной логики
были скомпилированы Microsoft Visual C++ 5.0 под Windows 98.
Проект тестировался в Proteus 7.7 Pro под Windows 7 и в Proteus 8.5 под Windows 10, (за него -
огромное спасибо коллеге PVV !).
Захват видео сделан как раз в Proteus 8.5 под Windows 10, поскольку там более мощный компьютер.
Модель троичного процессора выполняет демонстрационную программу вывода на дисплей LCD Nokia 3310
четырёх демонстрационных изображений и опроса четырёх кнопок, согласно нажатию которых и выводится
соответствующее изображение: Скриншоты дисплеев отличаются, поскольку Proteus 8.5 не поддерживает почему-то старую модель LCD-дисплея
Nokia 3310, но у него есть в наборе 3 модели этого дисплея, менее красочные, но зато и без фоновой надписи
Demo Version...
Заполнение экрана кодом и вывод шахматной клетки я не стал захватывать на видео как менее информативные
изображения, лишь увеличивающие размер видео-файла.
Демонстрационная программа была написана в кодах, и в бинарник собиралась вручную через WinHEX.
В коде нет массивов картинок, они формировались отдельной программой и просто вставлялись по месту
через WinHEX методом "копи-паст".
Ну и поскольку процесс этот зело утомительный и пригоден лишь для ситуации, когда срочно требуется
увидеть, как всё же ЭТО работает, я решил, что для продолжения разработки мне совершенно необходим
соответствующий компилятор с языка ассемблера.
Хороший исходник у меня был заготовлен для 4-bit Processor-a.
Ассемблер для модели троичного процессора я собираюсь реализовать на его основе с учетом следующих
соглашений:
были скомпилированы Microsoft Visual C++ 5.0 под Windows 98.
Проект тестировался в Proteus 7.7 Pro под Windows 7 и в Proteus 8.5 под Windows 10, (за него -
огромное спасибо коллеге PVV !).
Захват видео сделан как раз в Proteus 8.5 под Windows 10, поскольку там более мощный компьютер.
Модель троичного процессора выполняет демонстрационную программу вывода на дисплей LCD Nokia 3310
четырёх демонстрационных изображений и опроса четырёх кнопок, согласно нажатию которых и выводится
соответствующее изображение: Скриншоты дисплеев отличаются, поскольку Proteus 8.5 не поддерживает почему-то старую модель LCD-дисплея
Nokia 3310, но у него есть в наборе 3 модели этого дисплея, менее красочные, но зато и без фоновой надписи
Demo Version...
Заполнение экрана кодом и вывод шахматной клетки я не стал захватывать на видео как менее информативные
изображения, лишь увеличивающие размер видео-файла.
Демонстрационная программа была написана в кодах, и в бинарник собиралась вручную через WinHEX.
В коде нет массивов картинок, они формировались отдельной программой и просто вставлялись по месту
через WinHEX методом "копи-паст".
Ну и поскольку процесс этот зело утомительный и пригоден лишь для ситуации, когда срочно требуется
увидеть, как всё же ЭТО работает, я решил, что для продолжения разработки мне совершенно необходим
соответствующий компилятор с языка ассемблера.
Хороший исходник у меня был заготовлен для 4-bit Processor-a.
Ассемблер для модели троичного процессора я собираюсь реализовать на его основе с учетом следующих
соглашений:
iLavr
Re: 4-trit Processor
И, собственно, сам компилятор троичного ассемблера я уже с недельку как написал... И вроде как даже он работает верно. Основой тест у меня для такого случая - компиляторLavr wrote:...я решил, что для продолжения разработки мне совершенно необходим
соответствующий компилятор с языка ассемблера.
должен совершенно идентично собрать бинарник, который ранее был написан вручную в кодах.
Все мои бинарники этот компилятор троичного ассемблера собирает верно, поскольку проверяю
я идентичность утилитой FC (File Compare) в бинарном режиме.
Естественно, по пути я всякие "вкусности" ассемблера тестировал, работает всё вроде правильно,
хотя, безусловно, в связке с троичным компьютером это всё надо потестировать, погонять...
Ну и, естественно, ассемблеру нужны новые и подробные русскоязычные хелпы, ибо и я сам на
троичном ассемблере программист сугубо начинающий...
Вот сотворением подробных русскоязычных хелпов я сейчас и занят, да и на работе дел полно...
iLavr
Re: 4-trit Processor
хм, а этого я как-то не заметил
случайно наткнулся на видео на ютюбе и пришёл по ссылке сюда
https://youtu.be/AtCoefGf9uc
раз уж это про троичность, то переношу в Ternary (оставив линк в 4-BIT)
случайно наткнулся на видео на ютюбе и пришёл по ссылке сюда
https://youtu.be/AtCoefGf9uc
раз уж это про троичность, то переношу в Ternary (оставив линк в 4-BIT)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: 4-trit Processor
Очень приятно... Что у себя на форуме ты "этого как-то не заметил"...Shaos wrote:хм, а этого я как-то не заметил
случайно наткнулся на видео на ютюбе и пришёл по ссылке сюда
iLavr
Re: 4-trit Processor
неисповедимы пути вселенского хаоса
Я тут за главного - если что шлите мыло на me собака shaos точка net
Re: 4-trit Processor
Что-то на сотворение хелпов у меня эрекции по сей день ну никак не наблюдается...Lavr wrote:И, собственно, сам компилятор троичного ассемблера я уже с недельку как написал...
...
Ну и, естественно, ассемблеру нужны новые и подробные русскоязычные хелпы, ибо и я сам на
троичном ассемблере программист сугубо начинающий...
Вот сотворением подробных русскоязычных хелпов я сейчас и занят, да и на работе дел полно...
Хотя, собственно, всё описание системы команд и соглашений ассемблера здесь выше изложено.
Ничего, свыше изложенного, я вряд ли смогу добавить, просто очень муторно и нетворчески
ковыряться опять с компилятором хелп-файлов.
Поэтому я решил, что надо хотя бы сам компилятор ассемблера выложить, иначе может так
случиться, что в результате неожиданных проблем с HDD я вдруг его и сам потеряю...
P.S. Это я надумал на основе исходников TernAssm написать компилятор GIG_Assm, но вспомнил
вдруг, что я сам TernAssm сюда не выкладывал из-за хэлпов...
iLavr
4-trit Processor & Tower of Hanoi
Троичный компьютер решает головоломку Ханойская башня.
сохраняя в памяти удачные варианты. Решение находит за 20 ходов.
По тёплому старту реализует ранее найденный алгоритм,
и решает головоломку за 16 ходов.
Подсчет ходов ведётся в девятеричной системе.
P.S. У кого проблемы с качеством видео при просмотре на www.youtube.com,
оригинал видео можно скачать здесь.
По холодному старту предлагает перемещения произвольным образом,сохраняя в памяти удачные варианты. Решение находит за 20 ходов.
По тёплому старту реализует ранее найденный алгоритм,
и решает головоломку за 16 ходов.
Подсчет ходов ведётся в девятеричной системе.
P.S. У кого проблемы с качеством видео при просмотре на www.youtube.com,
оригинал видео можно скачать здесь.
iLavr
Re: 4-trit Processor
"позволяет более или менее корректно сравнить 4-битный процессор с его 4-тритным эквивалентом"
- ну и ?
- ну и ?
Re: 4-trit Processor
Ну и всяк жаждущий "более или менее корректно сравнить 4-битный процессор с его 4-тритным эквивалентом"ra3qdp wrote:- ну и ?
вполне может это самостоятельно сделать, поскольку материалы выложены по ним обоим на одном этом форуме.
Там в самом начале топика приведена прямая ссылка на 4-битный процессор рядом с цитируемой выше фразой:
viewtopic.php?f=92&t=9573&start=240#p120687
iLavr
Re: 4-trit Processor
интересны выводы автора.
Re: 4-trit Processor
Вывод текстовых сообщений на графический LCD "NOKIA-3310" занимает довольно-таки
приличный объём в сравнительно небольшой памяти троичного компьютера с 8-тритной
шиной адреса.
Поэтому я решил попробовать для текстовых сообщений использовать алфавитно-цифровой
LCD типа LM016L, благо это не требовало дополнительных аппаратных средств, а
сам LCD допускает общение по 4-битной шине, что для 4-тритного процессора весьма удобно.
В интерфейсе SPI_I/O, разработанном для передачи данных LCD "NOKIA-3310" необходимый
4-тритный регистр уже был, и был не задействован один вывод, который я планировал
использовать для генерации звука, но решил использовать для формирования строба EN для
управления LCD LM016L.
И алфавитно-цифровой LCD типа LM016L весьма удачно вписался в проект!
приличный объём в сравнительно небольшой памяти троичного компьютера с 8-тритной
шиной адреса.
Поэтому я решил попробовать для текстовых сообщений использовать алфавитно-цифровой
LCD типа LM016L, благо это не требовало дополнительных аппаратных средств, а
сам LCD допускает общение по 4-битной шине, что для 4-тритного процессора весьма удобно.
В интерфейсе SPI_I/O, разработанном для передачи данных LCD "NOKIA-3310" необходимый
4-тритный регистр уже был, и был не задействован один вывод, который я планировал
использовать для генерации звука, но решил использовать для формирования строба EN для
управления LCD LM016L.
И алфавитно-цифровой LCD типа LM016L весьма удачно вписался в проект!
iLavr
Re: 4-trit Processor
В общем-то думаю я, что неплохо бы написать для 4-тритного процессора программу типа Monitor.Lavr wrote:Поэтому я решил попробовать для текстовых сообщений использовать алфавитно-цифровой
LCD типа LM016L, благо это не требовало дополнительных аппаратных средств, а
сам LCD допускает общение по 4-битной шине, что для 4-тритного процессора весьма удобно.
И как я не прикидывал, даже двустрочный LCD типа LM016L для этого весьма неудобен...
Поэтому я решил попробовать внедрить в схему подходящий UART, и начал было с i8251,
поскольку по началу эта модель неплохо выглядела в связке с 8-битным процессором. На скриншоте выводятся строки с ограничителем (типа ASCII-Z).
Но позже выяснилось, что при вводе у i8251 UART имеют место глюки модели, причем
даже в схеме с 8-битным процессором.
В связке с троичным процессором отмеченные глюки также имели место.
Поэтому я решил заменить i8251 UART на 6850 ACIA.
Его модель на проверку работала более устойчиво и с 8-битным процессором. На этом скриншоте схема выводит текст, скопированный из текстового редактора, и вставленный
в окно виртуального терминала. Это, собственно, и есть "тест на безглючность".
Схема на 6850 ACIA отрабатывает copy-paste безошибочно, а схема с i8251 UART начинает
двоить и пропускать символы при прочих равных условиях.
Ниже приведена схема интерфейса 4-тритной шины к 8-битной.
Троичный процессор работает с последовательным интерфейсом сугубо двоичными кодами {-1,+1},
что позволяет избежать дешифрации, и использовать в схеме интерфейса сугубо двоичные микросхемы.
iLavr
Re: 4-trit Processor
Пока писал программу HANOI и обслуживание последовательных интерфейсов,Lavr wrote:Я пока не выкладываю никаких библиотек и проектов, поскольку версия проекта - Alfa,
а альфа-тестирование обычно проводится силами штатных разработчиков. ©
выявил одну ошибку микрокода процессора: И одна ошибка программы-компилятора троичного ассемблера была обнаружена. В принципе неплохо, я ожидал больше глюков...
iLavr