Based on: https://github.com/konst-st/BK8266/tree/BK0011M, который базируется на основе эмулятора для ESP8266 https://github.com/konst-st/BK8266
Эмулятор БК-0010(-01)/БК-0011М на Raspberry Pi Pico (RP2040) / Raspberry Pi Pico 2 (RP2350)


Данные исходники тестировались на Murmulator devboard 1.x/2.0 с VGA и HDMI выходом и на Olimex PICO-PC.
Схема простейшего мурмулятора доступна тут: https://github.com/AlexEkb4ever/MURMULATOR_classical_scheme

[S]VGA monitor с поддержкой режима 1024х768 60Гц или HDMI с 800х600 60Гц
Для VGA вывод осуществляется с удвоением точек 512x2->1024 и с утроением линий 256x3->768 в Ч.Б режиме и
с учетверением точек 256x4->1024 и с утроением линий 256x3->768 в цветном.
Для HDMI - используются поля для масштабирования, т.е. изображение меньше, чем размер экрана.
Из-за несовпадения пропорций пикселей HDMI и БК, рекомендуется включит монитор в режим 16:9,
так картинка выглядит естественней. VGA такой проблемы не имеет, и рекомендуется использовать режим монитора 4:3.
На Raspberry Pi Pico (RP2040) HDMI работает нестабильно.
На Raspberry Pi Pico 2 (RP2350) HDMI можно включить и в режиме 1024х768, но требуется разгон до 512 МГц, и поддержка монитором нестандартных режимов. HDMI режим 800х600 работает стабильно на всех известных мне мониторах.
Эмулятор цельнотянутый с https://github.com/konst-st/BK8266/tree/BK0011M.
Кое чего подсмотрено из эмулятора Юрия Калмыкова http://gid.pdp-11.ru
Эмулятор процессора работает в режиме К1801ВМ1 (без "Г"), эмулируется 3 Мгц для БК0010 и 4 МГц для БК0011М.
Эмулятор использует только ОЗУ RP2040/2350 (из которых 128 кБ выделено под ОЗУ БК0011М), внешние микросхемы PSRAM не требуются.
ПЗУ БК 0010 монитор / БК 0011М БОС, Бейсик и фокал содержится во флэш (используется встроеннное кэширование пики).
Поддерживается эмулятор звукового сопроцессора AY-3-8910 в варианте БК TurboSound на одном чипе (моно).
Поддерживается "железный" TurboSound на двух AY-3-8910 (или совместимых). Один используется в натимвном виде, а второй - как ковокс и бипер. Схема включения типа Murmulator Ultimate или TurboFrank (https://github.com/rh1tech/frank/blob/master/hardware/turbofrank/DOCS/1_03/turbofrank.pdf)
Эмулятор Covox гибридный - основная часть (моно) на старндартном регистре параллельного порта с loopback. Также реализован стерео вариант на наборе регистров от AZБК, но без ПДП.
Пока не реализовано:
- Прерывание по вектору 14 после выполнения каждой команды при установленном в PSW бите T (трассировка).
- PS/2 или USB клавиатура с автоматической перекодировкой русских букв и спец.символов
- Dendy, Wii или USB джойстик.
- Назначение клавиш клавиатуры для эмуляции двух джойстиков.
- Звук от пищалки и моно-Covox на порту 177714 выводится в виде 12-ти битного ШИМ.
- Таймер БК-0010 (регистры 177706, 177710, 177712).
- Прерывание (0100) от таймера БК-0011М (50 Гц).
- Эмулятор контроллера накопителей на гибких магнитных дисках (КНГМД) на 4 диска (физически - img/bkd-файлы на SD card)
Соответствие клавишам БК-0011М:
- любой Alt - АР2
- любой Shift - Нижний регистр
- любой Ctrl - СУ
- Caps Lock - Переключение ЗАГЛ / СТР
- левый Win - РУС*
- правый Win - ЛАТ
- Pause - СТОП
- F1 - ПОВТ
- F2 - КТ
- F3 - =|=>|
- F4 - |<==
- F5 - |==>
- F6 - ИНД СУ
- F7 - БЛОК РЕД
- F8 - ШАГ
- F9 - СБР
- Page Up / Page Down - ВС
- * - Если установлен флаг конфигурации is_swap_wins_enabled (по умолчанию), то левый и правый Win взаимозаменяемые и переключают язык циклически. Если нет, работает старая схема - левый - РУС, правый - ЛАТ.
Клавиши эмуляции джойстика по-умолчанию:
- A - разряд 0 параллельного порта (регистр 0177714) - аналог DPAD_A
- Q - разряд 1 порта - DPAD_B
- S - разряд 2 порта - DPAD_SELECT
- D - разряд 3 порта - DPAD_START
- P - разряд 4 порта - DPAD_UP
- ; - разряд 5 порта - DPAD_DOWN
- L - разряд 6 порта - DPAD_LEFT
- , - разряд 7 порта - DPAD_RIGHT
- W - разряд 8 порта - DPAD_A (второго джойстика)
- Z - разряд 9 порта - DPAD_B
- X - разряд 10 порта - DPAD_SELECT
- O - разряд 11 порта - DPAD_START
- K - разряд 12 порта - DPAD_UP
- . - разряд 13 порта - DPAD_DOWN
- E - разряд 14 порта - DPAD_LEFT
- I - разряд 15 порта - DPAD_RIGHT
Биты денди-джойстика №1 (или эмуояции):
- DPAD_A - Кнопка А (разряд 0 порта)
- DPAD_B - Кнопка В (разряд 1 порта)
- SELECT - Кнопка Select (разряд 2 порта)
- START - Кнопка START (разряд 3 порта)
- DPAD_UP - Вверх (разряд 4 порта)
- DPAD_DOWN - Вниз (разряд 5 порта)
- DPAD_LEFT - Влево (разряд 6 порта)
- DPAD_RIGHT - Вправо (разряд 7 порта)
Биты эмуояции джойстика №2:
- DPAD_A - Кнопка А (разряд 8 порта)
- DPAD_B - Кнопка В (разряд 9 порта)
- SELECT - Кнопка Select (разряд 10 порта)
- START - Кнопка START (разряд 11 порта)
- DPAD_UP - Вверх (разряд 12 порта)
- DPAD_DOWN - Вниз (разряд 13 порта)
- DPAD_LEFT - Влево (разряд 14 порта)
- DPAD_RIGHT - Вправо (разряд 15 порта)
Клавиши эмулятора:
- Ctrl + Alt + Del - Reset ВМ1 CPU, RAM cleanup, set default pages, deafult speed, init system registers
- Shift + Ctrl + Alt + Del - Reset ВМ1 CPU, 32K RAM cleanup, init system registers (неполная инициализация при перезагрузке - пропускает инициализацию страниц памяти, части регистов, и заменяет адрес загрузки с 140000 на 100000 (для БК-0011М))
- Print Screen - Reset RP2040/RP2350 CPU
- Home - выход в файловый менеджер эмулятора
- F10 - Циклическое переключение палитры для подбора удобной для игры (если это поленился сделать разработчик оной)
- Alt + F10 - Установить нулевую палитру (нативную палитру БК-0010[-01])
- Ctrl + F10 - Установить 15-ую палитру (нативную палитру БК-0011М)
- F11 - Снижение яркости (сочности) цветов
- F12 - Быстрое переключение между чёрно-белым режимом на 512 точек в строке в цветной на 256 точек и обратно
- Ctrl + F1..F8 - быстрое сохранение снепшота (в файл BK\SNAP[1..8].BKE)
- Alt + F1..F8 - быстрое восстановление из снепшота
- Ctrl + F11 замедление эмуляции*
- Ctrl + F12 ускорение эмуляции.
- Scroll Lock - включить режим Turbo
- * скорость эмуляции по умолчанию примерно соответствует частоте процессора в 3 МГц для БК0010[-01] и 4 МГц для БК0011М
- Ctrl + "+" - увеличить громкость
- Ctrl + "-" - уменьшить громкость
- Ctrl + Alt + "+" - увеличить громкость обратной шипелки (при загрузке с магнитофона)
- Ctrl + Alt + "-" - уменьшить громкость обратной шипелки (при загрузке с магнитофона)
- Ctrl + Tab + "+" - увеличить собственную частоту микроконтроллера RP2040
- Ctrl + Tab + "-" - уменьшить собственную частоту микроконтроллера RP2040
- Ctrl + Tab + "A" - AY-3-8910 вкл / выкл
- Ctrl + Tab + "C" - Covox вкл / выкл
- Ctrl + Tab + Backspace - перемонтировать fdd0.img и fdd1.img, поменяв их местами
- Num Lock - вкллючение эмуляции джойстика (is_kbd_joystick)
Клавиши менеджера:
- Up / PageUp - Вверх
- Down / PageDown - Вниз
- Enter - запустить BIN файл, зайти в папку или смонтировать IMG/BKD файл, и выйти из манагера с ресетом (если не выбрано "BK-0010 + КНГМД 16k", то автоматически выбирается "BK-0011М + КНГМД", для режима "BK-0010 + КНГМД 16k" работает клавиатурный скрипт, который автоматическик набирает "S160000 Enter" для запуска КНГМД), запуск BKE-снэпшотов.
- Ctrl + Enter - просмотр содержимого images формата МКДОС.
- F1 - Краткая справка
- F2 - Настроить текущую конфигурацию и сохранить её в файл BK\bk.conf (если при выходе нажать Enter)
- F3 - Быстрый выбор БК0010 + КНГМД 16К
- F4 - Быстрый выбор БК0011М + КНГМД
- F5 - Копировать файл / папку
- F6 - Переместить файл / папку
- F7 - Создать папку
- F8 - Удалить файл / папку
- F10 - Выход из менеджера
- F11 - Меню переключения режима эмуляции: БК-0010-01 (Вильнюс Бейсик 86), БК-0011М (Бейсик Экситон) + КНГМД, БК-0011М + МСТД, БК-0010 + КНГМД А10, БК-0010 Фокал (с глюками)
- F12 - Предустановить режим цвета эмулятора
- Ctrl + F2 - Сохранить состояние БК в файл BK\SNAP2.BKE
- Alt + F2 - Восстановить состояние БК из файла BK\SNAP2.BKE и выйти в режим эмуляции
- Ctrl + F10 - Выход в Мурмулятор ОС 2.0
Конфигурационный файл (BK\bk.conf):
- mode: - значения от 0 до 4 - режимы страта:
- 0 - БК-0010 + КНГМД А16
- 1 - БК-0010 + Фокал
- 2 - БК-0010-01 + Вильнюс Бейсик 86
- 3 - БК-0011М + Бейсик Экситон + КНГМД
- 4 - БК-0011М + МСТД
- is_covox_on: - 0/1
- is_AY_on: - 0/1
- color_mode: - 0/1
- snd_volume: - -16..5
- graphics_pallette_idx: - 0..15
- is_swap_wins_enabled: 0/1 (по умолчанию: 1, т.е. левый и правый Win взаимозаменяемые и переключают язык циклически).
- is_dendy_joystick: - 0/1 включает поддержку Dendy/Wii-джойстиков (если is_dendy_joystick включен, то covox-loppback (не сам covox) выключается, т.к. они конфликтуют (используют один порт))
- is_kbd_joystick: 0/1 (если is_kbd_joystick включен, то covox-loppback выключается) с дендиджоем несовместимо, если включен денди, то он перебивает эмуляцию
- manager_pallette_idx: 0 - тёмная схема файлового менеджера, 1 - цветная схема
- is_128_48: 0/1 - только для VGA - включает режим мелких букв в файловом менеджере
- dvi_mode: - только для HDMI: 0 - 720x576 50 Гц (270 MHz), 1 - 800х600 60 Гц (400 MHz), 2 - 1024х768 60 Гц (512 МГц!)
- is_8x8: 0/1 - использовать мелкий шрифт (вместо 8х16)
Управление эмулятором с помощью Dendy (или Wii)-джойстика (первого):
- START + SELECT - выход в режим менеджера
- UP / DOWN - навигация по файловой панели
- LEFT / RIGHT - смена панели (смена значения в меню конфигурации)
- START - аналог Enter
- A - аналог ОК в менюшках
- B - в менюшках аналог Esc
- SELECT + A - вход в конфиг
- SELECT + B - выход в эмуляцию
- START + A - выход в Murmulator OS 2.0
- START + B - Reset
Полезные ссылки: