Based on: https://github.com/konst-st/BK8266/tree/BK0011M, который базируется на основе эмулятора для ESP8266 https://github.com/konst-st/BK8266
Эмулятор БК-0010(-01)/БК-0011М на Raspberry Pi Pico [2] (RP2040/RP2350)
Данные исходники тестировались только с ZX Murmulator devboard с VGA выходом.
Схема простейшего мурмулятора доступна тут: https://github.com/AlexEkb4ever/MURMULATOR_classical_scheme
[S]VGA monitor с поддержкой режима 1024*768 60Гц
Вывод осуществляется с удвоением точек 512x2->1024 и с утроением линий 256x3->768 в Ч.Б режиме и
с учетверением точек 256x4->1024 и с утроением линий 256x3->768 в цветном.
Эмулятор цельнотянутый с https://github.com/konst-st/BK8266/tree/BK0011M.
Кое чего подсмотрено из эмулятора Юрия Калмыкова http://gid.pdp-11.ru
Эмулятор процессора работает в режиме К1801ВМ1 (без "Г")
Эмулятор пока использует только ОЗУ RP2040 (из которых 128 кБ выделено под ОЗУ БК0011М).
ПЗУ БК 0010 монитор / БК 0011М БОС содержится во флэш (используется встроеннное кэширование пики).
Поддерживается эмулятор звукового сопроцессора AY-3-8910 в варианте БК TurboSound на одном чипе (моно).
Эмулятор Covox гибридный - основная часть (моно) на старндартном регистре параллельного порта с loopback. Также реализован стерео вариант на наборе регистров от AZБК, но без ПДП.
Пока не реализовано:
- Прерывание по вектору 14 после выполнения каждой команды при установленном в PSW бите T (трассировка).
- Прерывание от таймера БК-0011М (50 Гц).
- PS/2 клавиатура с автоматической перекодировкой русских букв и спец.символов
- Dendy джойстик
- Wii джойстик
- Маппинг двух джойстиков на произвольные кнопки PS/2 клавиатуры
- Звук от пищалки и моно-Covox на порту 177714 выводится в виде 12-ти битного ШИМ.
- Реализована эмуляция таймера БК-0010 (регистры 177706, 177710, 177712).
Соответствие клавишам БК-0011М:
- любой Alt - АР2
- любой Shift - Нижний регистр
- любой Ctrl - СУ
- Caps Lock - Переключение ЗАГЛ / СТР
- левый Win - РУС*
- правый Win - ЛАТ
- Pause - СТОП
- F1 - ПОВТ
- F2 - КТ
- F3 - =|=>|
- F4 - |<==
- F5 - |==>
- F6 - ИНД СУ
- F7 - БЛОК РЕД
- F8 - ШАГ
- F9 - СБР
- * - Если установлен флаг конфигурации 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
- Print Screen - Reset RP2040/RP2350 CPU
- Esc/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 ускорение эмуляции.
- * по умолчанию скорость эмуляции примерно соответствует частоте процессора в 3 МГц (константа замедления: 6)
- 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)
Клавиши менеджера:
- Ctrl + Alt + Del - Reset ВМ1 CPU, RAM cleanup, set default pages, deafult speed, init system registers
- 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 - Выход из менеджера (блокируется до окончания сеанса USB-host)
- F11 - Меню переключения режима эмуляции: БК-0010-01 (Вильнюс Бейсик 86), БК-0011М (Бейсик Экситон) + КНГМД, БК-0011М + МСТД, БК-0010 + КНГМД А10, БК-0010 Фокал (с глюками)
- F12 - Предустановить режим цвета эмулятора
- Ctrl + F2 - Сохранить состояние БК в файл BK\SNAP2.BKE
- Alt + F2 - Восстановить состояние БК из файла BK\SNAP2.BKE и выйти в режим эмуляции
- Alt + F10 - Монтировать SD-card мурмулятора, как USB-drive
- Ctrl + F10 - Выход в Мурмулятор-ОС
Конфигурационный файл (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 выключается) с дендиджоем несовместимо, если включен денди, то он перебивает эмуляцию
Управление эмулятором с помощью Dendy (или Wii)-джойстика (первого):
- START + SELECT - выход в режим менеджера
- UP / DOWN - навигация по файловой панели
- LEFT / RIGHT - смена панели (смена значения в меню конфигурации)
- START - аналог Enter
- A - аналог ОК в менюшках
- B - в менюшках аналог Esc
- SELECT + A - вход в конфиг
- SELECT + B - выход в эмуляцию
- START + A - mount USB
- START + B - reset