BK2010 - Эмулятор БК-0010 на платформе Java 1.6 Версия 0.5 0. Системные требования и всё такое Вашему вниманию предлагается эмулятор версии 0.5 Что же это значит: - Основные отличия от предыдущей версии заключаются в возможности выбрать размер окна эмулятора, смены дисков во время работы и сохранения настроек эмулятора. Кроме того, исправлено некоторое количество ошибок, в том числе -- приводиших к неработоспособности программ. - Эмулируется БК-0010.01 либо БК0011М в стандартной поставке (с Бейсиком) - Эмулируются два привода гибких дисков DS/DD 80 дорожек - В эмуляции процессора могут быть ошибки. Я решил не откладывать из-за этого выпуск эмулятора, т.к. на исправление может потребоваться неопределённое время - Вместо нормальной эмуляции клавиатуры сделана заглушка - Есть экспериментальная реализация развёртки ЭЛТ - Есть поддержка Covox и AY-3-8910 - Поддерживается EMT-перехват для БК-0010, в самом примитивном варианте, только для чтения и записи, и экпериментальная версия EMT-перехвата для БК-0011М - Можно сохранять звук эмулятора в .WAV файл. Используется формат 16 бит/48 КГц моно. - Можно читать звук (для эмуляции чтения с ленты) из .WAV файла в формате PCM. Расширенные форматы .WAV файлов не поддерживаются. Для запуска эмулятора должна быть установлена Java SE (Standard Edition) версии 1.6.0 или выше. Последнюю официальную версию для поддерживаемых ОС можно скачать по адресу: http://java.com/ru/download/ Минимально необходимой мощности процессора пока назвать не могу, но для Java-машины от Sun Microsystems она должна приблизительно соответствовать Celeron 333A (в стандартной версии; текущая по-прежнему загружает процессор гораздо сильнее из-за эмуляции развёртки). 1. Описание Для установки следует распаковать zip-архив, в результате чего будет получен каталог bk2010. Программы в формате .bin и подгружаемые данные (в том же формате) следует помещать в подкаталог bk2010/files. К эмулятору прилагается несколько игр, проверенных на работоспособность. Образы дисков следует размещать в подкаталоге bk2010/disks Копии магнитофонных лент в формате .wav следует размещать в подкаталоге bk2010/tapes Запуск эмулятора производится из каталога bk2010 командой "java -jar bk2010-0.5-release.jar" (без кавычек). Для пользователей ОС Windows прилагается выполняющий эту команду файл start.bat После запуска появится окно с предложением выбрать аппаратную конфигурацию БК. При первом запуске эмулятора будет предложена стандартная конфигурация: БК-0011М+диск. Кнопка "More" позволяет настроить параметры видеовывода. Выбранная конфигурация сохраняется в файле config.ini в корневом каталоге эмулятора. При работе эмулятора в консоль выдаются служебные сообщения; в частности, потеря синхронизации с выводом звука обозначается символом $, пропуск кадра обозначается точкой, а сообщение "Stalled for __ msec" означает, что эмулятор не смог эмулировать БК в реальном времени. Непрерывная выдача этого сообщения означает, что вычислительной мощности недостаточно для эмуляции БК (возможна случайная выдача этого сообщения из-за загрузки ЭВМ другими задачами). 2. Эмулируемое оборудование БК0010.01 либо БК-0011М в стандартной конфигурации. Контроллер гибких дисков на основе микросхемы 1801ВП1-128 Два привода гибких дисков: две стороны, 82 дорожки, физическая длина дорожки 6250.(14152) байт. 16КБ ОЗУ по адресам 120000-157777 для конфигурации БК-0010.01+диск. Генератор звука AY-3-8910/8912, включенный по так называемой "инверсной" схеме (предложенной RDC ЕМНИМС). Covox, подключенный по общепринятой схеме (в младшем байте порта 177714) 2.1 Процессор К1801ВМ1А на частоте 3 МГц (для БК-0010.01) либо 4МГц (для БК-0011М). Не эмулируется переключение режимов HALT/USER (не имеет смысла для БК и не используется программами), включая отстутствие эмуляции команд "СТАРТ" и "ШАГ". 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М, в сумме 40КБ. Кроме того, эмулируется 4 КБ ПЗУ с прошивкой 326 (драйвер дисковода). 2.3 Экран По умолчанию вывод изображения производится в окно с размером клиентской области 1024x768; кроме того, можно выбрать и другие разрешения. Возможен вывод изображения с интерполяцией, если это поддерживается используемой версией Java Runtime. Поддерживается чёрно-белый режим 512x256, монохромный режим 256x256 (по умолчанию для БК-0010) и цветной режим 256x256(по умолчанию для БК-0011М). Переключение режимов производится клавишей Scroll Lock либо комбинацией клавиш Ctrl+F8. Реализованы все функции контроллера -- рулон и режим короткого экрана. Есть экспериментальная версия за лучом ЭЛТ. Однако, временные параметры скорее всего не соответствуют реальной БК. Палитры для БК-0011М пока предварительные -- у меня нет дампа прошивки РТ4, задающей палитры. Возможно сохранение снимков экрана БК в формате PNG. Снимок сохраняется в разрешении 512x256x8бит. ВАЖНО: на некоторых версиях Java Runtime вывод изображения без интерполяции будет производиться с ошибками, если выбранное разрешение не равно 1024x768! 2.4 Клавиатура Раскладка ЯВЕРТЫ-образная. Верхний ("серый") ряд клавиш отображается на F1-F9, клавиша "ВС" -- на F10. Автоповтор клавиатуры НЕ транслируется в БК при нажатии только одной клавиши, так как в некоторых играх он приводит к "заклиниванию" управления. При нажатии нескольких клавиш автоповтор транслируется. Назначение специальных клавиш: [Left Win] - РУС (*) [Right Win] - ЛАТ (*) [Ctrl] - СУ [Shift] - Верхний регистр (**) [Alt] - АР2 [Esc] - СТОП (*) - На платформе Windows приводит к появлению системного меню, поэтому следует нажимать [Ctrl+N] и [Ctrl+O], соответственно. (**) - Фиксирование верхнего регистра производится клавишей CapsLock. Управление эмулятором: [Scroll Lock] - Переключение видеорежима [Ctrl+F4] - Выбор образа диска для привода A: [Ctrl+F5] - Выбор образа диска для привода B: [Ctrl+F8] - Переключение видеорежима [Ctrl+F11] - Аппаратный сброс процессора [F12] - Сохранение снимка экрана БК в подкаталоге shots/ (не более 10 тысяч снимков) [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. Синтезированный эмулятором звук можно сохранять в .WAV файл. Помните, что из-за ограничений формата в него можно сохранить не более 6 часов звука (в используемом качестве). 2.6 Магнитофон Для режима БК-0010.01 реализован перехват обработчика команды EMT 36 (по адресу 116076), подменяющий чтение или запись файла с магнитофона чтением или записью файла формата .bin из подкаталога files. В случае, если файл с требуемым именем не найден, либо указан код операции, отличный от чтения/записи, производится возврат управления с кодом ошибки 4 ("операция прервана пользователем"). Имя файла преобразуется следующим образом (алгоритм не самый удачный -- есть предложения?): а) Все символы отображаются на набор ASCII7 посредством сброса старшего бита б) Управляющие символы (с кодами 0-37) заменяются на символ подчёркивания в) Символы из набора ?*"'\/:,; также заменяются на символ подчёркивания г) Все символы латинского алфавита приводятся к нижнему регистру и к имени файла добавляется расширение .bin; производится поиск файла с таким именем д) Если файл найти не удалось, то все сиволы латинского алфавита в имени и расширении приводятся к верхнему регистру, и производится поиск файла с таким именем Кроме того, есть экспериментальная реализация перехвата EMT 115 на чтение для БК-0011М, но она содержит ошибки. Также можно читать звук (для эмуляции чтения с ленты) из .WAV файла в формате PCM. 2.7 Периферийный порт Порт по адресу 177714 обслуживает обращения процессора. Эмулируются следующие устройства: - Джойстик, совместимый со "стандартной" распайкой для игр Савина (SW corp). Для эмуляции используется цифровой блок клавиатуры. - Генератор звуковых эффектов AY-3-8910/8912, включенный по так называемой "инферсной" схеме (предложенной RDC ЕМНИМС). - Covox в младшем байте порта 177714. При использовании настройки "Smart Covox" эмулятор пытается распознать обращения в AY-3-8910 и в случае такого обращения блокирует запись в Covox. Кроме того, запись в Covox блокируется, если изменятся только бит 2. Это необходимо для избегания свиста в случае работы с программами, рассчитывающими на мышь в младшем байте порта. 2.8 Процессорный (системный) таймер Реализован полностью. 2.9 Контроллер дисковода Стандартный для БК вариант -- контроллер на основе микросхемы 1801ВП1-128 плюс ПЗУ 1801РЕ1-326. При чтении полностью воспроизводится структура дорожки из 10 секторов по 512 байт, за исключением CRC (возвращается фиктивное значение, но контроллер сигнализирует о совпадении CRC). Из особенностей контроллера имитируется только поведение при поиске маркера, поэтому можно легко программно отличить эмулируемый контроллер от настоящего. При записи на диск используется анализ получившейся структуры дорожки для выделения секторов и записи их в файл образа диска. В случае наличия повреждённых или нестандартных секторов они игнорируются. Если при запуске был выбран вариант БК-0010.01 Бейсик+диск, то разряды выбора привода DS2 и DS3 используются для переключения между режимами работы Бейсик и диск+ДОЗУ. Используется стандартная схема, предложенная RDC (ЕМНИМС): 11 выбирает Бейсик, 10 -- отключает ДОЗУ. Эмулируются два привода дисков 2 стороны / 82 дорожки. По умолчанию образы дисков загружаются из фалов a.img и b.img в подкаталоге disks/ ; кроме того, при запуске эмулятора можно выбрать другие образы дисков. Также при запуске эмулятора можно установить защиту образа диска от записи. При этом в работающее на эмулируемой БК программное обеспечение будет передан флаг защиты диска от записи. Механика привода не эмулируется: диск вращается всегда, смена дорожки происходит мгновенно. ВАЖНО: для защиты образа диска от изменений можно запретить запись в него средствами файловой системы (установив атрибут защиты от записи под Windows или через chmod 444 под Unix). Эмулятор корректно распознаёт такие образы и подключает их как защищённые от записи. При инициализации эмулятора в режиме БК-0010.01 в дополнительное ОЗУ по адресу 120000 прописывается команда перехода на дисковый загрузчик, что позволяет сэкономить время при загрузке с диска. (c) 2010, Александр Тишин (Sandro)