           BK2010 - Эмулятор БК-0010 на платформе Java 1.8
		   
                             Версия 0.8 alpha 8

0. Функции и системные требования

  Новое в версии 0.8a8:

   Установка (настройка) режима цветности на загрузочном экране эмулятора. Режим трассировки (ключ -trace) теперь сохраняет в трассу все записи в память.
  
  Функции эмулятора:
 
  - Эмулируется БК-0010.01 либо БК0011М в стандартной поставке (с Бейсиком).
  - Эмулируются два привода гибких дисков DS/DD 80 дорожек.
  - Эмулируется один жёсткий диск, подключенный по стандарту СМК
  - Эмулируется 512 КБайт дополнительной памяти контроллера СМК.
  - В эмуляции процессора имеются неточности. Планируется написание точного аналога по результатам трудов BarsMonster'а и VSlav. 
  - Упрощённая эмуляция клавиатуры БК.
  - Есть реализация развёртки ЭЛТ.
  - Есть поддержка Covox и AY-3-8910. В том числе, поддерживается подключение двух AY по стандарту контроллера AZБК.
  - Поддерживается EMT-перехват для БК-0010, в самом примитивном варианте, только для чтения и записи, и экпериментальная версия EMT-перехвата для БК-0011М.
  - Можно сохранять звук эмулятора в .WAV файл. Используется формат 16 бит/48 КГц моно.
  - Можно читать звук (для эмуляции чтения с ленты) из .WAV файла в формате PCM. Расширенные форматы .WAV файлов не поддерживаются.
  
  Для запуска эмулятора должна быть установлена Java SE (Standard Edition) версии 1.8 или выше. Последнюю официальную версию для поддерживаемых ОС можно скачать по адресу: http://java.com/

1. Описание

  Для установки следует распаковать zip-архив, в результате чего будет получен каталог bk2010. Программы в формате .bin и подгружаемые данные (в том же формате) следует помещать в подкаталог bk2010/files.
  Образы дисков следует размещать в подкаталоге bk2010/disks
  Копии магнитофонных лент в формате .wav следует размещать в подкаталоге bk2010/tapes
  Запуск эмулятора производится из каталога bk2010 командой "java -jar bk2010-0.8-alpha8.jar" (без кавычек). Для пользователей ОС Windows прилагается выполняющий эту команду файл start.bat 
  
  После запуска появится окно с предложением выбрать аппаратную конфигурацию БК. При первом запуске эмулятора будет предложена стандартная конфигурация: БК-0011М+диск. Кнопка "Modes and colors" позволяет настроить параметры видеовывода.
  Выбранная конфигурация сохраняется в файле config.ini в корневом каталоге эмулятора.

2. Эмулируемое оборудование

  БК0010.01 либо БК-0011М в стандартной конфигурации.
  Дополнительно:
  Контроллер гибких дисков на основе микросхемы 1801ВП1-128
  Два привода гибких дисков: две стороны, 82 дорожки, физическая длина дорожки 6250.(14152) байт.
  16КБ ОЗУ по адресам 120000-157777 для конфигурации БК-0010.01+диск.
  Либо: совмещенный контроллер СМК-512 с поддержкой двух гибких и жёсткого диска, и 512КБ дополнительного ОЗУ.
  Генератор звука AY-3-8910/8912, включенный по так называемой "инверсной" схеме, а так же парное подключение таких генераторов по стандарту AZБК.
  Covox, подключенный по общепринятой схеме (в младшем байте порта 177714).
  Джойстик, подключенный по схеме заводского джойстика от БК-0011М с расширениями от JoyVox (кнопки Start, Select).
  Мышь "Марсианка".

2.1 Процессор

  К1801ВМ1А на частоте 3 МГц (для БК-0010.01) либо 4МГц (для БК-0011М). 
  
  Не эмулируется переключение режимов HALT/USER (не имеет смысла для БК и не используется программами), включая отстутствие эмуляции команд "СТАРТ" и "ШАГ".
  Не эмулируются ошибка с вычислением флага C при некоторых последовательностях команд.
  Эмуляция производительности процессора по прежнему приблизительна; для БК-0010.01 примерно соответветствует документации Зальцмана, для БК-0011М вводится коррекция с учётом как частоты процессора, так и времени доступа к памяти.

2.2 Память

  В режиме БК-0010.01 эмулируется 32 КБ ОЗУ по адресам 0-77777, 8 КБ ПЗУ системного монитора по адресам 100000-117777, и 23 КБ ПЗУ БЕЙСИКа по адресам 120000-177577.
  В режиме БК-0010.01+диск эмулируется 16КБ дополнительного ОЗУ по адресам 120000-157777 и 4КБ ПЗУ с прошивкой 326 по адресам 160000-167777.
  В режиме Бейсик+диск используется стандартная схема отключения ПЗУ и подключения ОЗУ через разряды DS3 и DS2 выбора привода (на БК они не используются).
  В режиме БК-0011М эмулируется 128 КБ ОЗУ со стандартной схемой отображения страниц, ПЗУ Базовой Операционной Системы (БОС) и ПЗУ Бейсика 11М, в сумме 48КБ. Кроме того, эмулируется 4 КБ ПЗУ с прошивкой 326 (драйвер дисковода).
  Кроме того, поддерживается расширение ОЗУ по стандарту SMK-512 (512КБ дополнительной памяти).

2.3 Экран

  По умолчанию вывод изображения производится в окно с размером клиентской области 1024x768; кроме того, можно выбрать и другие разрешения. Возможен запуск эмулятора в полноэкранном режиме; при этом используется разрешение рабочего стола. Возможен вывод изображения с интерполяцией, если это поддерживается используемой версией Java Runtime.
  Поддерживается чёрно-белый режим 512x256, монохромный режим 256x256 4 градации серого (по умолчанию для БК-0010) и цветной режим 256x256(по умолчанию для БК-0011М). Переключение режимов производится клавишей Scroll Lock либо комбинацией клавиш Ctrl+F8. Комбинация Ctrl+Alt+F8 принудительно включает монохромный режим 256x256 вне зависимости от эмулируемой машины.
  Для БК-0011М поддерживаются корректные палитры.
  Реализованы все функции контроллера -- рулон и режим короткого экрана.
  Есть фильтр подавления мерцания (антифликер) для программ, использующих покадровую смену изображения для увеличения числа отображаемых цветов.
  Есть слежение за лучом ЭЛТ.
  Возможно сохранение снимков экрана БК в формате PNG. Снимок сохраняется в разрешении 512x256x8бит.
  

2.4 Клавиатура

  Раскладка ЯВЕРТЫ-образная. Верхний ("серый") ряд клавиш отображается на F1-F9, клавиша "ВС" -- на F10. Автоповтор клавиатуры НЕ транслируется в БК при нажатии только одной клавиши, так как в некоторых играх он приводит к "заклиниванию" управления. При нажатии нескольких клавиш автоповтор транслируется.
  
  Назначение специальных клавиш:
  
  [Left Win]  - РУС (*)
  [Right Win] - ЛАТ (*)
  [Ctrl]      - СУ
  [Shift]     - Верхний регистр (**)
  [Alt]       - АР2
  [Esc]       - СТОП
  
  (*) - На платформе Windows приводит к появлению системного меню, поэтому следует нажимать [Ctrl+N] и [Ctrl+O], соответственно.
  (**) - Фиксирование верхнего регистра производится клавишей CapsLock.
  
  Управление эмулятором:
  
  [Scroll Lock] - Переключение видеорежима
  [Ctrl+F8]     - Переключение видеорежима
  [Ctrl+F4]     - Выбор образа диска для привода A:
  [Ctrl+F5]     - Выбор образа диска для привода B:
  [Alt+Ctrl+F8] - Принудительное включение видеорежима оттенки серого 256x256, даже если эмулирется БК-0011М
  [Ctrl+F11]    - Аппаратный сброс процессора
  [F12]         - Сохранение снимка экрана БК в подкаталоге shots/ (не более 10 тысяч снимков)
  [Ctrl+F12]    - Сохранение снимка экрана БК в буфер обмена
  [Ctrl+F10]    - Выход из эмулятора
  [Pause/Break] - Выход из эмулятора
  
  Поддерживается возможность переназначения клавиш. Для этого служит файл keyboard.ini в корневом каталоге эмулятора. Файл состоит из текстовых строк следующего вида:
  
"КЛАВИША_ПК" = "КЛАВИША_БК_БЕЗ_SHIFT" / "КЛАВИША_БК_С_SHIFT"

Пример:

LBRACKET = "[" / "{"

  Вокруг символа / должны быть пробелы. Строка, начинающаяся с символа # считается комментарием. В случае отсутствия файла keyboard.ini он автоматически создаётся при запуске эмулятора.
  
  ВНИМАНИЕ: чтобы узнать, какие имена клавиш ПК доступны эмулятору, просто сотрите или переместите файл keyboard.ini и запустите эмулятор. Во вновь созданном keyboard.ini будут прописаны все имена клавиш.

2.5 Звук

  Поддерживается стандартный для БК вариант -- однобитовый звук через бит 6 порта 177716. Эмулятор производит переоцифровку звука (с интегрированием) в формат 16 бит/48 КГц.
  Этот формат поддерживается любой звуковой картой стандарта AC'97, а так же встроенным звуковым кодеком во всех современных ПЭВМ.
  Кроме того, есть реализация Covox и AY-3-8910. Реализация AY-3-8910 соответсвует реальной микросхеме (документация от производителя некорректна).
  Для Covox возможно включение режима обратной связи (loopback), когда из порта читается записанное в Covox значение. Требуется некоторым проигрывателям цифровой музыки, например -- демо "In Your Space".
  Так же имеется поддержка двух генераторов звука (музыкальных синтезаторов) AY-3-8910 по стандарту контроллера AZБК.

  Синтезированный эмулятором звук можно сохранять в .WAV файл. Помните, что из-за ограничений формата в него можно сохранить не более 6 часов звука (в используемом качестве).

2.6 Магнитофон

  Для режима БК-0010.01 реализован перехват обработчика команды EMT 36 (по адресу 116076), подменяющий чтение или запись файла с магнитофона чтением или записью файла формата .bin из подкаталога files. Для БК-0011М аналогичным образом эмулируется команда EMT 115.
  В случае, если файл с требуемым именем не найден, либо указан код операции, отличный от чтения/записи, производится возврат управления с кодом ошибки 4 ("операция прервана пользователем").
  
  Имя файла преобразуется следующим образом (алгоритм не самый удачный -- есть предложения?):
  а) Все символы отображаются на набор ASCII7 посредством сброса старшего бита
  б) Управляющие символы (с кодами 0-37) заменяются на символ подчёркивания
  в) Символы из набора ?*"'\/:,; также заменяются на символ подчёркивания
  г) Все символы латинского алфавита приводятся к нижнему регистру и к имени файла добавляется расширение .bin; производится поиск файла с таким именем
  д) Если файл найти не удалось, то все сиволы латинского алфавита в имени и расширении приводятся к верхнему регистру, и производится поиск файла с таким именем
  
  Также можно читать звук (для эмуляции чтения с ленты) из .WAV файла в формате PCM.
  
2.7 Периферийный порт

  Порт по адресу 177714 обслуживает обращения процессора. Эмулируются следующие устройства:
  
  - Джойстик, совместимый с джойстиком из комплекта поставки БК-0011М и расширениями JoyVox. Для эмуляции используется цифровой блок клавиатуры.
  - Мышь "Марсианка".
  - Генератор звуковых эффектов AY-3-8910/8912, включенный по так называемой "инверсной" схеме.
  - Covox в младшем байте порта 177714.
  - При использовании настройки "Smart Covox" эмулятор пытается распознать обращения в AY-3-8910 и в случае такого обращения блокирует запись в Covox. Кроме того, запись в Covox блокируется, если изменятся только бит 2. Это необходимо для избегания свиста в случае работы с программами, рассчитывающими на мышь в младшем байте порта.
  - При использовании настройки "Loopback Covox" из периферийного порта читается последнее записанное в него значение.

2.7.1 Особенности эмуляции джойстика
  Эмулируется один джойстик в младшем байте порта 177714. Назначение клавиш цифрового блока:
  1..9             - движение
  0, запятая/точка - кнопка A
  +, ввод          - кнопка B
  /                - Select
  *                - Start

2.7.1 Особенности эмуляции мыши
  Эмулируется мышь "Марсианка" в младшем байте порта 177714, т.е. подключенная напрямую, без блока КМ. Для использования мыши нужно щёлкнуть в любом месте окна эмулятора, после чего произойдёт "захват" мыши, и её передвижение будет транслироваться в эмулируемую машину. Для освобождения мыши следует использовать Ctrl+щелчок или переключиться в любое другое окно.
  
2.8 Процессорный (системный) таймер

  Реализован полностью.
  
2.9 Контроллер дисковода

  Стандартный для БК вариант -- контроллер на основе микросхемы 1801ВП1-128 плюс ПЗУ 1801РЕ1-326. При чтении полностью воспроизводится структура дорожки из 10 секторов по 512 байт, за исключением CRC (возвращается фиктивное значение, но контроллер сигнализирует о совпадении CRC). Из особенностей контроллера имитируется только поведение при поиске маркера, поэтому можно легко программно отличить эмулируемый контроллер от настоящего.
  При записи на диск используется анализ получившейся структуры дорожки для выделения секторов и записи их в файл образа диска. В случае наличия повреждённых или нестандартных секторов они игнорируются.
  Если при запуске был выбран вариант БК-0010.01 Бейсик+диск, то разряды выбора привода DS2 и DS3 используются для переключения между режимами работы Бейсик и диск+ДОЗУ. Используется стандартная схема, принятая в контроллерах A16, A64, SMK: 11 выбирает Бейсик, 10 -- отключает ДОЗУ.
  Эмулируются два привода дисков 2 стороны / 82 дорожки. По умолчанию образы дисков загружаются из фалов a.img и b.img в подкаталоге disks/ ; кроме того, при запуске эмулятора можно выбрать другие образы дисков. Также при запуске эмулятора можно установить защиту образа диска от записи. При этом в работающее на эмулируемой БК программное обеспечение будет передан флаг защиты диска от записи.
  Механика привода не эмулируется: диск вращается всегда, смена дорожки происходит мгновенно.
  
ВАЖНО: для защиты образа диска от изменений можно запретить запись в него средствами файловой системы (установив атрибут защиты от записи под Windows или через chmod 444 под Unix). Эмулятор корректно распознаёт такие образы и подключает их как защищённые от записи.

  При инициализации эмулятора в режиме БК-0010.01 в дополнительное ОЗУ по адресу 120000 прописывается команда перехода на дисковый загрузчик, что позволяет сэкономить время при загрузке с диска.

2.10 Совмещённый контроллер СМК-512

  Содержит стандартный контроллер дисковода, контроллер жёсткого диска (типа IDE) и 512 КБ дополнительной памяти.
  
  ВНИМАНИЕ! Поддержка СМК пока экспериментальная. Сохраняйте резервные копии образов HDD!

3.0 Ключи командной строки

  Для передачи параметров запуска эмулятора можно использовать ключи командной строки. Ключи имеют больший приоритет, чем настройки в файле config.ini и не сохраняются в него.
  Если у ключа есть параметр, то он указывается сразу после ключа.
  Список клбчей:

3.1 Ключи общего назначения

-bk0010
-bk10
-b10

  Выбрать конфигурацию БК0010-01.

-bk0010d
-bk10d
-b10d

  Выбрать конфигурацию БК0010 + диск.
  
-bk0010bd
-bk10bd
-b10bd

  Выбрать конфигурацию БК0010-01 Бейсик + диск.
  
-bk0011
-bk0011m
-bk11
-bk11m
-b11
-b11m

  Выбрать конфигурацию БК0011М.
  
-a
-da
-diska
-deva
-drivea
-fda

  Указать образ для монтирования в привод A: 

-b
-db
-diskb
-devb
-driveb
-fdb

  Указать образ для монтирования в привод B:
   
-tapein
-readtape
-rt

  Указать .wav файл для использования в качестве читаемой ленты.
   
-tapeout
-writetape
-wt

  Указать .wav файл для использования в качестве записываемой ленты.
 
-bin

  Указать .bin файл для загрузки и запуска при старте эмулятора. Подразумевает ключ -nohud.
  ВАЖНО: при использовании ключа -bin инициализации монитора/БОС не происходит! Программы, использующие EMT вызовы в этом режиме работать не будут!
  ВАЖНО: при использовании ключа -bin совместно с конфигурацией БК-0011М начальное отображение памяти соответствует настройке "MOV #5000, @#177716".
  ВАЖНО: при использовании ключа -bin совместно с конфигурацией БК-0011М прерывания от таймера запрещены.
  
-run

  Пропустить экран настроек эмулятора, немедленный старт.

-hud

  Выводить техническую информацию поверх окна эмулятора в течении 5 секунд после старта.

-log

  Выдача протокола работы эмулятора в файл bk2010.log

-verbose

  Выдача протокола работы эмулятора в консоль.

-debug

  Запуск отладчика. В процессе реализации.

-profile

  Профилирование исполнения программы. Для каждого адреса подсчитывается количество исполненных с него команд и приблизительное количество затраченных на это тактов.
  
-trace [address]

  Вывод трассы исполнения программы в файл cputrace.log. Если указан параметр, то он используется как адрес команды процессора, с которой следует
  начинать трассировку. Если параметр не указан, то трассировка начинается сразу после запуска.

-flic
-flc
-fli

  Запись видео в формате FLIC (экспериментальная версия).

3.2 Ключи-переключатели

  Можно передавать желаемое состояние переключателя в качеств аргумента. Для включения -- on/yes/true/1, для выключения -- off/no/false/0.
  Добавление "no" перед названием переключателя изменяет действие на противоположное. Например, -nosilent включает звук, если он был отключён в файле настроек.  

-fullscreen

  Полноэкранный режим.
  
-filter

  Включить фильтрацию звука (рекомендуется).

-silent

  Выключить звук.

-faketape

  Включить замену чтения с ленты на чтение .bin файлов (EMT-перехват). 
  
3.3 Многовариантные ключи.

-ay

  Выбор режима эмуляции звукового синтезатора AY-3-8910. Варианты:
  
  disabled -- выключен.
  enabled -- включен.
  
  
-covox

  Выбор режима эмуляции звукового Covox. Варианты:

  disabled -- выключен.
  simple -- включен.
  smart -- включен с фильтрацией запросов к мыши (для подавления треска при использовании мыши; рекомендуется).
  loopback -- включен с возможностью чтения ранее записанного значения.
  
-screensize

  Выбор разрешения экрана. Варианты:

  256x192
  320x240
  384x288
  512x384
  768x576
  1024x768
  1280x960
  1536x1152

  Произвольное разрешение не поддерживается.

-interpolate

  Условия включения режима интерполяции экрана. Варианты:

  always -- всегда. 
  never -- никогда.
  *shrink -- только только если размер окна менее 512x384.
  *less1k -- только если размер окна менее 1024x768.
  *not1k -- только если размер окна не равен 1024x768.

-monocolor

  Выбор цвета монохромного режима. Варианты:

  *white -- белый
  *green -- зелёный
  *amber -- в процессе реализации.
  *bluish -- в процессе реализации.

4. Ссылки

Официальная страница эмулятора: http://sandro.pdp-11.ru/

(c) 2010-2023, Александр Тишин (Sandro); sandro.tishin@gmail.com
