Написaл Эмулятор (поддерживает Автозапуск).
Данная HTML5-версия эмулятора дизайном выполнена в стиле Windows'95.
Кнопка «RUN» запускает цикл эмуляции до инструкции останова «HALT».
Кнопка «STEP» предназначена для пошаговой отладки программного кода.
На странице в режиме отладки отображается контекст процессора со всеми регистрами, дизассемблер, листинг ассемблера и дамп памяти.
В пошаговом режиме дамп памяти и текст ассемблера проматываются на активный участок.
При навигации кареткой по листингу на соответствующий адрес переключается дизассемблер и дамп памяти.
Внизу отображается графический дисплей из двух слоёв.
Верхний слой - монохромная графика 128×128, которая строится непосредственно программным способом.
Нижний слой - произвольное цветное изображение импровизированных ЖК-сегментов, представляющих собой готовые спрайты, которые неподвижны и программа может их только включать и выключать. В качестве демонстрационного ЖК-экрана была выбрана сцена из карманной игры Автослалом.
Карта Портов Устройств Ввода-Вывода
Данная система своим концептуальным дизайном планировалась максимально открытой.
Как писалось выше с самого начала, система команд кодируется сквозным образом, где две тетрады байта команды представляют собой аббревиатуру команды.
Таким образом, никакой особой карты УВВ не разрабатывалось, так как в качестве портовых служат регистры D₀…₉, где D₉ служит селектором микросхемы УВВ, а через D₀…₈ осуществляется уже непосредственный доступ к микросхеме УВВ:
Код:
╔════╤════════╤════════════════════════════════════════════════════════════════╗
║ D9 │ ИМС │ Описание доступа к ресурсам микросхемы через РОН процессора ║
╠════╪════════╪════════════════════════════════════════════════════════════════╣
║0x53│ i8253 │ D0/D1/D2 - Каналы Счётчиков 0/1/2 ║
║ │К580ВИ53│ D3 - Регистр Статуса Таймера ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x55│ i8255 │ D0/D1/D2 - Порты A/B/C ППА ║
║ │К580ВИ55│ D3 - Регистр Статуса ППА ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x57│ i8257 │ D0/D2/D4/D6 - Каналы 0/1/2/3: ПДП Адрес ║
║ │ │ D1/D3/D5/D7 - Каналы 0/1/2/3: ПДП Счёт ║
║ │К580ВТ57│ D8 - Регистр Статуса ПДП ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x75│ i8275 │ D0 - Регистр Данных ║
║ │К580ВГ75│ D1 - Регистр Статуса ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x79│ i8279 │ D0 - Регистр Данных ║
║ │К580ВВ79│ D1 - Регистр Статуса ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x93│ FD1793 │ D0 - Регистр Команд / Регистр Статуса ║
║ │ │ D1 - Регистр Дорожки ║
║ │ │ D2 - Регистр Сектора ║
║ │1818ВГ93│ D3 - Регистр Данных ║
╚════╧════════╧════════════════════════════════════════════════════════════════╝
Как видите, для работы с ИМС i8257/К580ВТ57 достаточно в D₉ поместить номенклатурный индекс целевой ИМС BCD-кодом, а затем через регистры D₀…₈ уже программировать режим её работы.
Демонстрационный Код
На данный момент имеется начальная реализация эмуляции ИМС i8279/К580ВВ79 для считывания кода клавиши из соответствующего текстового поля.
Для управления пикселями монохромного слоя служит виртуальное LCD-УВВ с кодом 0xCD в D₉, где в D₈ записывается целевая X:Y позиция знакоместа на экране, а D₀…₇ имитируют ч/б матричный принтер и управляют пикселями в вертикальной компоновке байтов на экране.
Для управления спрайтовыми ЖК-сегментами служит виртуальное цветное УВВ с кодом 0xCB в D₉, где через D₀…₇ маскируются целые спрайты на самом экране и воспроизводится сцена игры «АвтоСлалом» в слегка зашумленном виде, так как имеется вариант имитации ЖК-экрана с помощью отображения кадра непосредственно из ПЗУ, куда прошивается сцена и отображается на бытовой ТВ.
(Не всякое изображение подходит, так как был разработан специальный редактор для ручного индексирования всех элементов сцены в отдельный спрайт ЖК-сегмента, из-за чего на итоговом экране можно заметить артефакты небрежной работы мышкой.)
ТВ-имитатор сегментного ЖК
Можно взять любую графическую систему отображения (хоть от ZX-Spectrum) и пропустить все пиксели из ПЗУ через такой каскад:
Скрытый текст

[свернуть]
Но это - другая история разработки…
Но на странице эмуляции рендер работает по принципу со схемы и можно изучить алгоритм упаковки изображения.
Итог
Таким образом, удалось более-менее разобраться с проблемой трансляции кода и его исполнения.
А благодаря браузерному исполнению эмулятора можно ознакомиться с представляемой здесь архитектурой на любом интерактивном устройстве.