Skip to content

DnCraptor/PICO-BK

 
 

Repository files navigation

Raspberry БК-0011M (К1801ВМ1 - PDP-11 based) Emulator for MURMULATOR devboard

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)

Hardware required

Данные исходники тестировались только с ZX Murmulator devboard с VGA выходом.
Схема простейшего мурмулятора доступна тут: https://github.com/AlexEkb4ever/MURMULATOR_classical_scheme
Murmulator Schematics
[S]VGA monitor с поддержкой режима 1024*768 60Гц
Вывод осуществляется с удвоением точек 512x2->1024 и с утроением линий 256x3->768 в Ч.Б режиме и
с учетверением точек 256x4->1024 и с утроением линий 256x3->768 в цветном.

Эмулятор К1801ВМ1

Эмулятор цельнотянутый с 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