Простоватый эмулятор, немножко даже недоделанный я бы сказал.
Главная его проблема была - неправильный инкремент/декремент при адресации с регистром.
Для регистров R6 и R7 (SP и PC) при использовании инкремента/декремента значение регистра всегда меняется не на 1, а на 2, поскольку они хранят адрес, а он всегда четный.
В эмуляторе особенность учли для R7, а про R6 забыли. В итоге происходит ситуация: запускаем эмулятор, просто пытаемся выполнить команду ASCI (с аргументом конечно),
процессор попадается на команду с инкрементом, увеличивает R6 не на 2, а на 1, получается нечетный адрес, возникает прерывание 4 (TRAP_BUS_ERROR)
и процессор встает колом, плюнув в консоль "Caught bus error trap within itself. CPU HALTED.".
Еще были не сделаны некоторые неиспользуемые прошивкой инструкции, а также инструкции режима HALT.
Адресацию починил (спасибо чату Сергея Фролова, сам я в архитектуре PDP-11 весьма темный), реализовал недостающие инструкции (не уверен, что верно, но хотя бы есть основа).
Ну и понеслось.
Вышло вот такое. "Морда" из эмулятора Петра. Панель полностью своя. Вместо кук данные хранятся в "локальном хранилище".
Есть быстрая замена RAM (с сохранением на компьютер) и ROM, создание новой RAM с нужным размером.
Показ количества свободной памяти для программ (поскольку местный индикатор выше 9999 показать нормально не может, а памяти можно до 32кб напихать).
Пауза/рестарт, включение/выключение. Сделал раскладку, чтобы обычной компьютерной клавиатурой охватывать все клавиши микрокомпьютера.
Самое интересное - "адекватный" турбо режим (см. после картинки), такого, похоже, нет даже у Петра. Кальк можно включить в турбо не только кнопкой на панели (или поменять режим на горячую), но и по старинке, зажать плюсик и включить. Панель показывает и режим (турбо/нормал) и наличие включенного делителя частоты в 8 раз.
Screenshot Насчет турбо у эмулятора Петра есть неприятная проблема. Если "разогнать" аппарат (даже на примерную скорость реального турбо), подкрутив в конфиге скорость, то и надписи выводятся очень быстро, и ввод "дребезжит" (за одно нажатие клавиши она может раз 6 продублироваться на экране). Вот только на реальном МК85 (а их у меня два) такого не наблюдается.
Дело в том, что как уже обсуждали здесь касаемо работы турбо, режимы турбо/нормал рулятся через 3 бит в регистре конфигурации, который меняет режим работы 4 последних выводов параллельного порта, которые подключены к тактирующей части. Вот только так выходит, что в эмуляторе Петра (я может конечно и плохо искал) этот бит не учитывается, а при турбо режиме он крайне важен.
Если устройство включается в турбо (прошивка ставит бит), то процессор в турбо режиме не находится все время. При столь "тонких" операциях, как вывод текста на экран и опрос клавиш, прошивка не только включает делитель частоты, но и убирает турбо-бит, тем самым временно отключая турбо. У Петра по сути включается только делитель, но замедления в 8 раз явно недостаточно, если стоит частота турбо, поэтому подпрограммы работают быстрее чем нужно, что нарушает их нормальное поведение. У меня сделано раздельное изменение скорости для нормала и турбо, поэтому, в сущности, можно сильно увеличить турбо, вычисления будут идти быстрее, а дребезга клавиш и слишком быстрого вывода текста не будет, подпрограммы все равно на нормал-частоте выполняются.
Бонусом к эмулятору 85го, в короткие сроки код был переадаптирован для... эмулятора 87го ("морда опять с эмулятора Петра, автор Дмитрий Штатнов).
Устройства родственные, аппаратных различий не так много. Убрал с панели некоторые не нужные 87му функции, добавил кнопки-шорткаты для вызова сброса и секретных функций.
Еще, к крайней упоротости, написал близкий к оригиналу (насколько пока хватило возможности "пощупать" этот оригинал через чужие руки) симулятор встроенного часового модуля "Электроника 51".
По умолчанию устанавливается текущее время, но есть кнопочки, можно переключать режимы отображения, менять дату/время, сбрасывать.
Screenshot Справки и дебаггера у них пока еще нет, просто резервированные кнопки, делать буду позже.
Поиграться с безобразием можно на
http://mk.bs0dd.net, либо по кратким ссылкам
http://bs0dd.net/js85 и
http://bs0dd.net/js87Исходники - на гитхабе:
https://github.com/Bs0Dd/JS85EMU и
https://github.com/Bs0Dd/JS87EMUP.S.: у 87го шизанутая записная книжка, прям очень. Если бы не инструкция, фиг бы понял, как с ней работать.