------------------------------------------------------------------------------- ----------- Эмулятор БК-0011М v0.95 is Copyright (c) 1995 by Vicious --------- ------------------------------------------------------------------------------- 1. Описание. Замечания касательно скорости эмуляции. ==================================================== Данная программа представляет собой очередной release эмулятора БК-0011М. Эмулятор задумывался первоначально только как игрушка "для себя", однако перерос во вполне серьезный продукт, и в нем вполне можно работать как на настоящей БК-0011М. Однако, я не расчитываю разбогатеть на продажах эмулятора страждущим (в отличие от некоторых, на кого мы конечно не будем показывать пальцами :-), поэтому Вы можете использовать и распостранять его свободно (т.е. даром), как free-продукт. Естественно, я не беру на себя никакой ответственности за возможные последствия использования эмулятора, так то - крэши винчестеров на банковских серверах, пожары, приход к власти компартии Зюганова, выгорании ЭЛТ у мониторов, концы света локального харак- тера, и другие мелкие неприятности, наступившие в результате запуска эмулятора на Вашем компьютере. Используйте его на свой страх и риск. Большое спасибо всем кто участвовал в обсуждении бета версии эмулятора которая была послана в эхоконференцию MO.DEC. Я старался учесть Ваши замечания и предложения. Пожалуйста, читайте файл WHATSNEW.HIS - в нем описано большинство нововведений данной версии (т.к. мне сложно исправлять всю основную документацию при выходе каждой новой версии эмулятора). Также имейте в виду что основная документация (этот файл, который Вы читаете) скорее всего несколько устарела (outdated) и в ней не отражены все особенности текущей версии. За основу был взят код моего эмулятора БК-0010. Обратите внимание на то, что из-за сложности всех внешних и внутренних устройств БК-11М (два таймера, две экранные страницы, 128KB страничного ОЗУ, муз. сопроцессор и др.) эмулятор БК-0011М работает приблизительно в 1.5 - 2 раза медленне чем соотвествующая ему версия эмулятора БК-0010. Следовательно, если на Вашей машине эмулятор БК-0010 работал очень медленно, то данную программу Вам лучше просто не запускать, чтобы не расстраиваться :-) Я хорошо понимаю, что мой эмулятор работает очень медленно на машинах хуже 486DX2-66. Проблема, в основном, состоит в довольно медленной эмуляции процессра (точнее - в подпрограммах анализа способов адресации), т.к. я не использовал для этого готовые библиотеки (как авторы многих известных мне эмуляторов) а писал все сам, местами - весьма неоптимально. Вполне возможно оптимизировать эти процедуры; по моим расчетам, после оптимизации эмуляции команд процессора эмулятор вполне можно будет использовать на машинах класса 386DX-40; однако, пока я не вижу в этом особого смысла, так как на моей машине (486DX4-100) эмулятор работает нормально (во многих программах - даже слишком быстро - приходится ставить задержку). Категорически не рекомендуется выходить из эмулятора аварийными методами типа Control-Break, Control-C,с использованием программ типа kill, release и т.д., так как при этом не высвобождается ранее выделенная EMS память. Эмулятор был протестирован под DOS 6.22 (EMM386 и QEMM), Windows 3.11, Windows'95 и OS/2. Оказалось, что во всех этих системах эмулятор нормально работет (под OS/2 - даже в окне). 2. Требования к оборудованию ============================ Компьютер с архитектурой AT, клавиатура enhanced 101/102 keys, процессор 80386 или выше, видеоадаптер VGA (лучше SVGA; также очень важна скорость вывода на экран - рекомендуется Cirrus Logic или S3), монитор SVGA (используется видеорежим с частотой горизонтальной развертки 39 kHz), достаточное количество свободной EMS памяти (208 KB для нормальной работы + необходимый объем памяти для загрузки образа системного диска БК-11, обычно около 850KB), а также звуковая карта совместимая с Sound Blaster, если Вы хотите иметь эмуляцию AY-3-8910 или COVOX. 3. Файлы, входящие в комплект поставки ====================================== bk11_eml.exe - собственно эмулятор; R bk11_eml.cfg - конфигурационный файл эмулятора; R bk11_eml.txt - Основная документация (этот файл); O whatsnew.his - Список отличий данной версии; O -make-.com - утилита для создания образов дисков (простейшая) O modetest.exe - небольшая утилита для настройки видеорежима, используемого в эмуляторе (256x256x4) на конкретный SVGA-монитор; O xcolor.crt - файл с данными о цветном видеорежиме; R xmono.crt - файл с данными о черно-белом видеорежиме; R b11m_bos.rom - Образ ПЗУ c Базовой Операционной Системы (БОС); R b11m_ext.rom - Образ ПЗУ с подпрограммами БОС; R bas11m_0.rom - Образ ПЗУ первой части интерпретатора Бейсика БК-11М; R bas11m_1.rom - Образ ПЗУ второй части Бейсика; R diskdrv.rom - Образ ПЗУ контроллера дисковода (327 ver. 2); R sysdisk.img - Образ диска БК с операционной системой AO-DOS. O [R] = Помеченный литерой "R" файл необходим для работы эмулятора. [O] = Помеченный литерой "O" файл не является необходимым и может быть удален. 4. Эмулируемый БК и внешние устройства ====================================== Полная эмуляция БК-0011М стандартной поставки (с Бейсиком в ПЗУ). Работает 50 Mhz таймер, системный таймер, эмулируются оба экрана, при наличии звуковой платы Sound Blaster эмулируется музыкальный сопроцессор типа General Instruments AY-3-8910 / Yamaha 2149F (см. пункт 5 ниже). Процессор: Эмулируются все известные мне команды PDP-11, в том числе правильно работающий вариант MARK и команды безусловной установки/сброса кодов условий. Прерывание по T-разряду также эмулируется. Также частично эмулируется поведение БК при выдаче команд типа INC PC / DEC PC (например, следующий фрагмент кода: CLR R0 MET: INC R0 INC PC BR MET RTS PC как и на настоящей БК выполнится два раза и вернет в регистре R0 число 2. Желающие могут проверить этот факт, например в отладчике MIRAGE). Обращения к стандартному драйверу магнитофона в Мониторе БК-0010 (по адресу 116076o) переадресутся на винчестер IBM PC. (Многие операционные системы на БК-0011М эмулируют среду БК-0010. Таким образом становится возможным осущест- влять обмен файлами между дисками/образами дисков БК-0011 и винчестером PC. К сожалению, в последних версиях операционных систем для БК-0011М драйвер магнитофона может полностью отсутствовать (как например в ANDOS v3.10 с включенным виртуальным диском) или же обращения к нему могут быть заблокиро- ваны (AO-DOS v2.10), что конечно сильно ограничивает возможности переноса файлов). Для обращения к винчестеру в ANDOS v3.10 следует отключить драйвер виртуального диска (запуском программы SVD.M из коплекта оболочки DISK MASTER), а затем установить текущее устройство @: При чтении загружается файл с расширением .BIN, находящийся в той же директо- рии, что и эмулятор. Этот файл должен соответствовать принятым соглашениям о формате .BIN (первое слово - адрес файла,второе слово - длина,далее данные). Аналогично дело обстоит и с записью. Перед физической записью/чтением с винчестера имя указанное в блоке параметров магнитофона преобразуется в формат, допустимый в MS-DOS: (1) используются только первые восемь символов имени, и (2) если расширение не указано, то к имени файла автоматически добавляется ".BIN". Файлы, имеющие автозапуск запускаются корректно. На данный момент из внешних устройств эмулируются (полностью или частично): --------------------------------------------------------------------------- Системный регистр БК: 177716 - Полная эмуляция (регистры переключения страниц памяти, регистр магнитофона, системный регистр доступный по чтению). Клавиатура: 177660 и 177662 - Клавиатура эмулируется достаточно реальным образом. Автоповтор клавиш отключен, так как настоящая клавиатура БК не имеет функции автоповтора. Однако, в работе реальной клавиатуры БК-0011М и эмулируемой существуют отличия - например, в эмуляторе можно нажать сначала одну клавишу и не отпус- кая ее - другую. При этом будет послано два кода (и соответственно выработано два прерыва- ния). На реальной БК-0010 такое невозможно. Такой способ работы клавиатуры был сделан специально, так как иначе во многие игры было бы просто нельзя играть. Не эмулирется влияние команды RESET на клавиатуру для принятия кодов двух и более клавиш (т.к. я не знаю, как при этом ведет себя БК). Регистр палитр/таймера: 177662 Все функции (таймер, переключение экранных страниц, смена палитр). Эмуляция переключения палитр может быть отключена с помощью команды PALETTE=DISABLE в конфигурационном файле. Регистр рулона: 177664 - Полноценная эмуляция, в том числе поддержка режима "малого" экрана. Таймер: 177706, 177710,177712 - Более-менее корректная эмуляция (тех функций таймера, которые мне известны, см. Прило- жение #3). Работа таймера синхронизирована с выборкой команд и следовательно должна работать правильно независимо от производитель- ности IBM PC. Эмуляция таймера может быть отключена специальной командой в конфигурационном файле для ускорения работы. /thanks to S.B. for idea/ Недокументированные регистры: 177700, 177702, 177704 - Программно доступны, запись игнорируется (т.е программа может писать туда и это не вызовет прерывания по 4 вектору, однако записываемые числа никак не влияют на работу эмулятора), по чтению возвращются те же значения что и на обычной БК-0011. /*** more info needed ***/ Дисковод: 177130 и 177132 - Программно доступны, запись игнорируется, по чтению возвращается некоторая специаль- ная комбинация бит, периодически меняющися со временем. Это необходимо для программ, напрямую обращающихся к контроллеру гибко- го диск (например Disk-Test by AO Corp., а также операционная система RT-11). Эмуляция этого регистра по чтению может быть отключена. Внешний порт: 177714 - По чтению возвращается состояние keypad-джойстика (см.ниже). По записи эмулируется одно из двух возможных внешних устройств (задается в конфигура- ционном файле) - музыкальный сопроцессор или приставка типа Covox (8-разрядный ЦАП). Эти внешние устройства эмулируются только при наличии звуковой платы. В предыдущих версиях эмулятора (0.5 и ниже) поддерживался всего один образ системного диска БК (файл с названием SYSDISK.IMG содержал образ диска БК-0011 на приводе A:). Соотвественно, карта распределения дисководов имела вид: БК PC ------------------------------------------------------------------------------- unit# 0 / drive A: VDisk (SysDisk.Img), READ / WRITE, format ignored unit# 1 / drive B: IBM PC floppy drive A:, READ / WRITE / FORMAT (*) unit# 2 / drive C: IBM PC floppy drive B:, READ / WRITE / FORMAT (*) unit# 3 / drive D: ****** no drive ***** Начиная с версии 0.6 поддерживается изменяемая карта распределения дисков для БК. Карта задается в конфигурационном файле эмулятора под названием BK11_EML.CFG. Например, если в этом файле указаны команды: A:=*C:\IMAGES.SYS\ANDOS310.IMG B:=% C:=*D:\STUFF\IMAGES.GMS\MAGIC_2.IMG D:=A: то карта распределения дисков для БК-0011М принимает следующий вид: БК PC ------------------------------------------------------------------------------- unit# 0 / drive A: VDisk (ANDOS310.IMG), READ / WRITE, format ignored unit# 1 / drive B: ****** no drive ***** unit# 2 / drive C: VDisk (MAGIC_2.IMG), READ / WRITE, format ignored unit# 3 / drive D: IBM PC floppy drive A:, READ / WRITE / FORMAT (*) Загрузка IMG-файлов осуществляется в EMS память. Для файла любой длины выделяется 52 страницы EMS по 16 килобайт (52 x 16384 = 851968 байт), что достаточно для эмуляции 82 треков. Если размер IMG файла больше 851968 байт, то загружаются только первые 52 страницы EMS, а остальное содержимое файла игнорируется. При физическом обновлении содержимого на диске такой "длинный" файл будет усечен до размера 819200 байт (50 страниц EMS или 80 треков). Если размер файла менее 851968 байт, то все равно выделяется 52 страницы EMS-памяти, однако загружаются только несколько начальных страниц в соответствии с длиной такого "короткого" файла. Например, если длина IMG файла составляет 409600 байт (40 треков), то данными о диске будут загружены только первые 25 страниц EMS. При обновлении "коротких" файлов их первоначальная длина сохраняется. Таким образом данный метод позволяет работать и с образами 40-трековых дисков. Из Монитора БК-11М можно загрузится с любого привода (при условии, что на дискете или в образе диска содержится валидный загрузчик, конечно), набрав команду nB, где n - номер привода (0 = A:, 1 = B:, 2 = C:, 3 = D:). При записи на виртуальный диск происходят изменения лишь в памяти. Физически файлы-образы дисков (обычно они имеют расширение .IMG) обновляются только после выхода из эмулятора. Если Вы не хотите случайно испортить файл образа диска, то можно запретить его обновление, установив на этот файл атрибут Read-Only. (*) Для операции форматирования требуется наличие в памяти резидентного драй- вера типа PU_1700 или 800, т.к. стандартный для БК формат диска (512K в одном секторе, 10 секторов на дорожку) не поддерживается напрямую BIOS'ом IBM PC. Если такого рода драйвер не установлен в системе перед запуском эмулятора, то физического форматирования диска производится не будет. Также следует иметь в виду некоторые аспекты переносимости дискет с БК на IBM и обратно. В общем случае, диски отформатированные и записанные на БК нормально читаются (и записыватся) на IBM PC. Записанные на PC данные можно опять прочитать на БК. Однако если диск отформатирован на IBM, то на БК с обычным драйвером дисковода 253 или 326 (наиболее распостраненные Floppy ROM) такой диск не прочитается, что связано со слишком маленьким временем ожидания появления первого сектора на дорожке (ошибка была допущена при разработке ROM Саяпиным А. А.). В настоящее время на БК существует несколько дисковых ROM, в которых тем или иным образом исправлена данная ошибка. Примечание: Хотя ПЗУ контроллера дисковода БК-0011М поддерживает работу с 4 дисководами, большинство операционных систем на БК работают только с двумя (приятное исключение в этом смысле - MKDOS v3.10). Если даже в такой системе указать обращение к дискам C: или D:, то физически доступ будет осуществлятся к дисководам A: (или B:), но с включенным признаком пропуска дорожек (для обработки 40-трековых дисков на 80-трековом дисководе на реальной БК; однако эмулятор игнорирует данный признак). Так ведет себя например AO-DOS. 5. Эмуляция музыкального сопроцессора General Instr.AY-3-8910 / Yamaha YM-2149F =============================================================================== Эмулирутеся работа сопроцессора подключенного по так называемой "стандартной", или инверсной схеме, предложенной Денисом Сотченко (RDC). Шумовые каналы сопроцессора эмулируются с помощью ударного инструмента ADlib - Snare. Эмуляция шумовых каналов не учитывает частоту шума, которую можно изменить на AY, но весьма проблематично сэмулировать на Adlib. Эмуляция шумовых каналов может быть отключена с помощью команды AYNoise в конфигурационном файле (см. Приложение #3). Также отсутствует эмуляция генератора огибающих (изменение формы волнового пакета), т.к. я не знаю как это можно сэмулировать с использованием FM-синтезатора Adlib'а/SB. Кроме того, не эмулируется специальный способ работы с сопроцессором - так называемый 4-битный логарифмический ЦАП. К счастью, не так уж много программ используют вышепере- численные особенности AY. Вообще, Adlib/SB по-видимому не имеют достаточно ресурсов для полноценной эмуляции этого устройства. Также следует иметь в виду, что многие демонстрационные программы (например Lyra2/1 или TOP DEMO) во время проигрывания музыки на сопроцессор постоянно (с большой частотой) перекючают экранные страницы. На реальной БК-0011М это не вызывает никаких проблем, так как там переключение между экранами практически мгновенное. Однако в эмуляторе на каждое такое переключение приходится масса довольно медленных операций, связанных с обновлением видеопамяти, в результате чего проигрывание музыки довольно сильно замедляется ("тормозит") даже на очень быстрых IBM PC. Если Вам встретилась такая программа, попробуйте установить ALTSCR=ENABLE в конфигу- рационном файле. 6. Специальные клавиши управления эмулятором ============================================ Control + F1 Получение справки о некоторых специальных клавишах. Control + F6 Переключение видеорежима: Color 256x256 4 цвета / Mono 640x500 2 цвета, "медленная" эмуляция рулона. Первый видеорежим - нестандартный и работает не на всех мониторах; второй должен нормально работать на большинстве. В монохромном режиме каждый бит записываемого в экранную память слова/байта трактуется как пиксел (эмуляция монохромного монитора, разрешение 512x256, 2 цвета); в цветном режиме одному пикселу соответсвует 2 бита (эмуляция цветного монитора, разрешение 256x256, 4 цвета). В большинство игр лучше всего играть в цветном режиме; черно-белый режим подходит для работы с текстовыми редакторами, отладчиками, etc. F11 Вызов встроенного отладчика. Монитор переводится в текстовый режим, на экран выводятся содержимое всех регистров процессора, адрес и код текущей команды, несколько верхних слов стека а также подсказка и некоторая дополнительная отладочная информация. Команды отладчика: G - выход из отладчика, продолжение выполнения эмулятора; Q - выход из эмулятора, возврат в операционную систему; R - вывод на экран содержимого регистров эмулируемго процессора; V - просмотр экрана БК. После нажатия любой клавиши происходит возврат в отладчик; E - Разрешить отладочное прерывание после исполнения каждой команды; D - Запретить отладочное прерывание (стандартный режим); S - Установить адрес точки прерывания. Когда счетчик команд (PC) эмулируемго процессора достигнет данного значения, то произойдет переход в отладчик. Установка 177777 выключает этот режим; W - Просмотр содержимого слова памяти по заданному адресу; B - Просмотр содержимого байта памяти по заданному адресу; C - Изменение содержимого слова памяти по заданному адресу; A - Изменение содержимого байта памяти по заданному адресу; H - Изменение содержимого регистров эмулируемого процессора. T - Установка/сброс признака "Fake Screen Update". Данная клавиша работает как бинарный переключатель. При установ- ленном признаке не происходит перерисовки всего экрана при программной записи в регистр 177662. Состояние этого признака не имеет значения в альтернативном цветном видеорежиме. F12 Завершение работы и выход в DOS. Scroll Lock Загрузка и запуск файла .BIN в стандартном формате КУВТ-86: первое слово - адрес, второе - длина файла, далее данные. Запрашивается имя файла. Автозапуск отрабатывается более-менее корректно. Если расширение не указано, то подразумевается .BIN. Пользоватся этой функцией можно только если загружена операционная система эмулирующая среду БК-0010 (AO-DOS и др.) Control + Загрузка (без запуска!) файла .RAW (просто данные, без Scroll Lock заголовка). Запрашивается адрес загрузки и имя файла. Если расширение не указано, то подразумевается .RAW. После загрузки осуществляется возврат в эмулятор. Control + F2 Запись образа состояния БК в специальный файл с расширением .BMS. Сохраняется все ОЗУ, все регистры процессора, флажки а также дополнительная информация о состоянии экрана,клавиатуры, таймеров и музыкального сопроцессора. Загрузив в последующем в эмулятор такой файл с помощью комбинации Control + F3 можно продолжить работу с того же самого места, на котором она была прервана. Черезвычайно полезная функция например для прохождения сложного места в игре. Запрашивается имя файла. Если расширение не указано, то автоматически будет добавлено расширение .BMS. Если файл с таким именем уже существует на винчестере, то будет выдан запрос типа "File MYGAME.BMS already exists, Overwrite it [Y=Enter / N=ESC] ?" и Вы сможете сами выбрать, перезаписать ли старый файл или отказатся от операции. Control + F3 Загрузка ранее сохраненного BMS - файла. Поддерживаются два формата: BMS-файлы от эмулятора БК-0011М (длина 131146 байт, в начале сигнатура BMS_L2) и BMS-файлы от эмулятора БК-0010 (длина 32816 байт, в начале сигнатура BMS_L0). Control + F4 Уменьшить скорость работы эмулятора (DELAY := DELAY + 5); Control + F5 Увеличить скорость работы эмулятора (DELAY := DELAY - 5); Control + F7 Инициализация музыкального сопроцессра (для программ, которые "забывают" это сделать сами :-) Control + F8 "Мягкий" reset БК (переход по адресу 140000 без очистки памяти). По данному адресу располагается стартовое ПЗУ БК-0011М. SysRq / PtrScr "Мягкий" reset эмулируемго БК (переход по адресу 100000 без очистки памяти). Желательно чтобы по этому адресу располагалась операционная система эмулирующая среду БК-0010 (Монитор), иначе результат непредсказуем. Break / Pause "Жесткий" reset БК (с очисткой всей памяти и перезагрузкой модулей ПЗУ). Управление передается по адресу 140000o. 7. Соответствие клавиатуры IBM PC и эмулируемого компьютера =========================================================== Реализованы почти все клавиши и их комбинации возможные на БК-0011, включая русские заглавные и строчные буквы, а также символы псевдографики. LED - индикаторы на клавиатуре IBM PC отражают текущее состояние эмулятора: Num Lock LED - загорается при обращении к виртуальному диску. Гаснет если обращения в данный момент нет; Caps Lock LED - включен если клавиатура работает на нижнем регистре, СТР (строчные буквы). При работе в режиме ЗАГЛ (default) данный индикатор выключен. Scroll Lock LED - Показывает, что клавиатура работает в режиме РУС. Если этот индикатор не горит, то клавиатура работает в режиме ЛАТ (default). Клавиша IBM PC Значение в эмуляторе ---------------------------------------------------- Right Alt РУС Right Shift ЛАТ ESC СТОП F1 - F9 АР2/1 - АР2/9 F10 АР2/0 Tab ТАБ Backspace ЗАБОЙ Enter ВВОД DEL КТ Gray INSERT ВС HOME СБР END ШАГ Num Lock ПОВТ Gray - ИНД СУ Gray + БЛОК РЕД Keypad 5 СУ/Р Keypad 7 Стрелка ВЛЕВО-ВВЕРХ Keypad 9 Стрелка ВПРАВО-ВВЕРХ Keypad 1 Стрелка ВЛЕВО-ВНИЗ Keypad 3 Стрелка ВПРАВО-ВНИЗ PAGE UP Сдвижка в строке <--| (Dos-Shell: Select Left Drive) PAGE DOWN Раздвижка в строке |--> (Dos-Shell: Select Right Drive) Gray * Удаление символов справа от курсора -|-> CAPS LOCK переключатель CТР/ЗАГЛ Left Control СУ Left Shift временная смена регистра (ПР) Left Alt АР2 Left Alt + "+" АР2/+ (ипользуется в Shell для отметки файлов по маске) Left Alt + "-" AP2/- Left Alt + "<" ИНВ (Включить/выключить признак ИНВЕРСИЯ СТРОКИ) Left Alt + ">" АР2/СУ/Ч (Обновить индикаторы в служебной строке) Left Alt + "?" ПОДЧ (Включить/Выключить признак ПОДЧЕРКИВАНИЕ СТРОКИ) Left Alt + "=" АР2/=, ИНВ.Э (Инверсия экрана) Left Alt + ";" АР2/; (переключатель 32/64 символа в строке) Left Alt + "Э" АР2/*, КУРСОР (включить/выключить курсор) Left Alt + "1" АР2/1 (RED COLOR) Left Alt + "2" АР2/2 (GREEN COLOR) Left Alt + "3" АР2/3 (BLUE COLOR) Left Alt + "4" АР2/4 (BLACK COLOR) Left Alt + "5" АР2/5 (ГРАФ) Left Alt + "6" АР2/6 (ЗАП) Left Alt + "7" АР2/7 (СТИР) Left Alt + "`" АР2/Ъ (закрашенный квадрат) 8. Эмуляция джойстика ===================== Джойстик эмулируется четыремя клавишами на keypad-клавиатуре IBM PC, задающими направление движения, и двумя дополнительными клавишам, отвечаю- щими за нажатие одной из кнопок "джойстика" (fire). Устанваливаемые в порту ввода-вывода биты соответствуют стандарту на подключение джойстика к БК, описанному SW corp, т.е. в играх Савина Вы можете указать в качестве управле- ния "Стандартный джойстик" и все будет работать. В других играх может потребоваться перезадание клавиш. Нажатия одновременно на две и более кнопки "джойстика" естественно возможны. IBM PC Keystroke Joystick Бит в порту ввода-вывода (177714), OCT ------------------------------------------------------------------------- Keypad 9 (UP) Движение ВВЕРХ 2000 Keypad 6 (RIGHT) Движение ВПРАВО 20 Keypad 2 (DOWN) Движение ВНИЗ 40 Keypad 4 (LEFT) Движение ВЛЕВО 1000 Right Control Кнопка FIRE #1 (основная) 2 Keypad 0 (INSERT) Кнопка FIRE #2 (дополнит.) 1 9. Известные ошибки, несовместимости и проблемы =============================================== 1. Неправильно работает игра PLATE by RDA corp (по-видимому имеется как минимум одна ошибка в модуле эмуляции процессора); 2. Эмуляция экранного скроллинга в цветном видеорежиме работает неправильно на Trident VGA, а также в мультизадачных операционных системах (Win'95, OS/2). Попробуйте используйть более медленный альтернативный цветной режим (Команда ALTSCR=ENABLE в конфигурационном файле эмулятора); 3. Подпрограмма эмуляции "мыши" работает неправильно; 4. Эмуляция AY на Gravis Ultrasound под SBOS - абсолютно неправильные ноты. Как ни странно, меня это совсем не удивляет. Претензии можно направлять по адресу фирмы Gravis :-) 5. Странное поведение демонстрационной программы "MUSIC BOX" (файлы MUSIC BOX, MBOX.DT1, MBOX.DT2). Я не поленился и стерев вековую пыль с собственной БК-0011М запустил эту демку на реальной БК. Каково же было мое удивление, когда на экране я ясно увидел 6 различных цветов (??!!!) По-видимому, авторы этой демонстрации используют довольно тонкие соображения относительно синхронизации переключения экранов и смены палитр с помощью 50Hz таймера с вертикальной синхронизацией перерисовки экрана для получения эффекта одновременного нахождения на экране более чем 4 цветов. Естественно, что в эмуляторе результаты их трудов выглядят скажем так довольно странно :-) Исследования в данном направлении продолжаются. 10. Планы на будущее (To Do List) ================================= 1. Корректная эмуляция генератора огибающих музыкального сопроцессора AY-3-8910; 2. Корректная поддержка мыши (по-видимому, возможно будет выбрать одну из двух схем подключения - БК-0010 или БК-0011М с блоком КМ); 3. Два дополнительных внешних устройства на регистре 177714 - PRINTER и FILE (для переадресации выходных данных БК-шных программ, осуществляющих печать, соответственно на принтер подключенный к IBM PC или в файл; 4. Специальный hot-key для снятия образа БК-шного экрана и записи его в PCX файл на винчестер; 5. Оптимизация эмулятора по скорости (заметьте, что данный пункт находится в этом списке отнюдь не на первом месте :-) 6. Я все еще не теряю надежду найти ошибку в эмуляторе команд процессора PDP-11 из-за которой не работает PLATE. 11. Другие известные мне эмуляторы БК для IBM PC ================================================ Как ни странно, их не так уж и много, в отличие от эмуляторов других близких к БК по системе команд машин - PDP11 и ДВК. Кроме эмуляторов, я видел несколь- ко библиотек для эмуляции команд процессора PDP-11 (одна из них была написана в каком-то западном университете целиком на Си; другая - у нас в России, и написана на смеси Ассемблера и Си). Известных же мне эмуляторов БК-0010 всего три (эмуляторов БК-0011М кроме своего я пока не видел :-) 1. Итак, по-видимому самый первый и наиболее широко распостраненный эмулятор БК (обычно он называется BK_EMUL.EXE, хотя ходят версии с различными названиями) - содержит самое большое количество ошибок. Автор, к сожалению, нигде не оставил упоминания о себе. Многие программы в нем не работают, в основном из-за неверной реализации обращения по нечетным адресам. Серьезные проблемы с клавиатурой, почти полное отсутствие всякого сервиса. Для эмуляции цветного видеорежима используется измененная CGA-мода 320x200x4. Весьма быстрый (быстрее чем мой; я не измерял его производительность, но на 386dx-40 этот эмулятор работает уже заметно быстрее БК-0010). Поддержка дисковода и образов дисков. Эмуляция системного таймера отсутствует. Нет эмуляции регистра рулонного сдвига, что весьма раздражает. Основной код эмуляции команд PDP-11 написан по-видимому на C/ASM (скорее всего была использована вышеуказанная российская библиотека). Однако, я считаю что все это простительно, так как этот эмулятор был самым первым; кроме того, возможно это была недоделанная версия. Жаль, что новых версий не последовало. 2. DRON.EXE - Автор: небезызвестный в мире БК DMW corp. (PICK-OUT). Я видел только одну из самых первых версий, фактически только заготовку. Очень быстрый эмулятор, скорее всего написан целиком на ASM. Только черно-белый видеорежим (с использованием стандартной EGA моды 640x350x2). Таймер, рулон и динамик не эмулируются. Возможно у автора уже готова нормальная версия. 3. BK.ELF / BK.AOUT - Автор: Leo Broukhis. Этот эмулятор написан с использованием упоминавшейся выше американской библиотеки эмуляции PDP-11. Написан целиком на C, работает только под Unix/Linux (используются библиотеки X-Windows), и из-за этого очень медленный (рекомендуется Pentium).Весьма аккуратно написанная эмуляция команд процессора и системного таймера (PLATE работает :-). Поддержка черно-белых и цветных режимов работы. В той версии, с которой мне удалось ознакомится отсуствовала поддержка дисковода. 4. Уже довольно давно ходят слухи об отличных эмуляторах БК-0010 / БК-0011М написанных Сергеем Камневым, однако пока я их не видел, поэтому ничего не могу сказать о достоинствах / недостатках. 12. Благодарности ================= Большое спасибо: - Алексею Шмелеву (/423.21, Star Software) за поддержку; - Александру Осипову (/541.22, AO corp) за операционную систему AO-DOS и за информацию о манипуляторе типа "мышь" :-) - Сергею и Лео Б. за весьма ценные советы и критические замечания; - Сергею Контареву за программу Filex; - Денису Сотченко за информацию о муз. сопроцессоре; - Марату Файзуллину, fms@freeflight.com (автору эмулятора fMSX) за исходники модуля эмуляции AY-3-8910 (PSG); - Гертону Люнтеру за превосходный эмулятор Z80 и за его же оригинальную идею эмуляции звуковых каналов AY-3-8910; - Фирме Microsoft за отличную операционную систему Windows-95 :-))); 13. Как связатся с автором? =========================== В настоящее время это представляет небольшую проблему, так как временно я не имею Fido адреса. Однако Вы можете отправить сообщение Алексею Шмелеву по одному из указанных ниже адресов (для меня), и я его прочту и может быть даже отвечу :-) Alex Shmelev, FiDO = 2:5020/423.21, E-MAiL = rusmonzi@accessnet.ru Приложение #1. Технические характеристики БК-0011М. =================================================== - 16-разрядный процессор К1801ВМ1, 4Mhz (такая "тактовая" частота достигается уже на 486DX2-80). Система команд совместима с PDP-11 (DEC-архитектура). Быстродействие - 300 тыс. операций в секунду при работе на 3 Mhz. Объем максимально адресуемого пространства - 64 KB (дополнительное ОЗУ доступно через переключение страниц в двух окнах). Число программно доступных 16-разрядных регистров - 8. Число программно устанавливаемых уровней приоритетов прерываний - 8; - ОЗУ 128 KB со страничной организацией (8 страниц по 16 KB, эмуляция через маппинг EMS-памяти); - ПЗУ Базовой Операционной Системы (16 KB); - ПЗУ Бейсика-БК11 (28 KB в двух разных страницах ПЗУ); - ПЗУ контроллера гибких дисков (8 KB); - Контроллер клавиатуры на основе м/сх К1801ВП1-014. 74 клавиши (новая "пленоч- ная" клавиатура), 2 вектора прерывания; - Контроллер гибких дисков на основе м/сх К1801ВП1-128 (УКНЦ). Поддержка диско- водов 360K и 720K, а также односторонних. Наиболее распотраненный формат дисков - 10 секторов на дорожку, 512 байт в одном секторе, 40 (80) дорожек; - Смешанный контроллер ОЗУ и телевизионного графического дисплея на базе БИС К1801ВП1-037 (экранное пространство входит в состав общего ОЗУ). 256 x 256 4 цвета (черный, красный, зеленый и синий) при отображении на цветной монитор. Кодировку цветов можно изменить, установив одну из 16 возможных палитр. Однако, одновременно на экране может быть отображено всего четыре цвета. 512 x 256, 2 цвета (белый и черный) при работе с монохромным монитором; - Таймер, использующий вектор прерывания и работающий с частотой 50 Hz; - Системный таймер-счетчик (непрерывающий), 3 программируемых режима счета; - 16-разрядный параллельный интерфейс ввода-вывода для подключения мыши, джойстика, принтера и других устройств; - Музыкальный сопроцессор типа AY-3-8910: Три канала для проигрывания мелодии, каждый из которых может быть использован также для генерации шума (ударники, спецэффекты); 16 уровней громкости на каждый канал; Тональность звука задается 12-битовым значением частоты, покрывающей широкий диапазон спектра звуковых волн (8 октав); Возможность изменения характера звучания ноты с помощью генератора огибающих, изменяющих аплитутду (громкость) звука по некоторым специальным правилам; Возможность использования в качестве 4-битного ЦАП для проигрывания оцифрованных звуков. Приложение #2. Файлы в формате .BMS =================================== В файлах с расширением .BMS сохраняется информация о состоянии эмулируемого компьютера; туда записываются все регистры, содержимое всей памяти, некоторые ячейки отвечающие за внешние устройства и др. Однажды сохранив образ машины, можно всегда загрузить его в дальнейшем и таким образом продолжить работу с того же самого места. Очень полезно например для прохождения трудного места в игре. Существует два типа BMS-файлов: от эмулятора БК-0010 (длина 32816 байт) и стандартные для эмулятора БК-0011М (длина 131146 байт). Эмулятор записывает (Control + F2) файлы только в стандартном формате, а читает (Control + F3) оба формата. Обратите внимание на то, что если Вы загружаете файл состояния БК-0010 (файл с расширением BMS длиной 32816 байт) в эмулятор БК-0011М, то необходимо чтобы в памяти находилась какая-нибудь операционная система, эмулирующая среду БК-0010, и распределение памяти также соответствовало БК-0010, иначе результат непредсказуем. Формат файла с информацией о состоянии БК-0010 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ; offset length desc ; --------------------------------------------------------------------------- ; 0 6 BYTES 'BMS_L0' sign (L0 indicate that only low 32k are saved) ; ; 6 BYTE timer_enabled \ ; 7 BYTE slow_factor \ ; 8 BYTE timer_full_flag \ ; 9 BYTE single_pass_mode \ ; 10 BYTE allow_pulse \ ; 11 BYTE delay_cmd | Timer - related variables ; 12 BYTE counter_6 / ; 13 BYTE timer_csr / ; 14 WORD timer_sv / ; 16 WORD timer_count / ; 18 WORD cmd_counter / ; ; 20 WORD R0 \ ; 22 WORD R1 \ ; 24 WORD R2 \ ; 26 WORD R3 \ ; 28 WORD R4 | PDP-11 CPU Registers ; 30 WORD R5 / ; 32 WORD SP / ; 34 WORD PC / ; 36 WORD PSW / ; 40 WORD SCR_CONTROL \ Video ; 42 BYTE SCR_BASE_LINE / hardware ; 43 BYTE RESERVED, =0 ; 44 WORD KBD_CSR \ Keyboard ; 46 WORD KBD_DSR / hardware ; 48 WORD RESERVED, =0 ; 50 32k Memory dump (Adresses 000000-77777 oct) Формат файла с информацией о состоянии БК-0011М ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ; offset length desc ; ----------------------------------------------------------------------------- ; 0 6 BYTES 'BMS_L2' signature (L2 indicate that all 128k are saved) ; ; 6 BYTE timer_enabled \ ; 7 BYTE slow_factor \ ; 8 BYTE timer_full_flag \ ; 9 BYTE single_pass_mode \ ; 10 BYTE allow_pulse \ ; 11 BYTE delay_cmd | Timer - related variables ; 12 BYTE counter_6 / ; 13 BYTE timer_csr / ; 14 WORD timer_sv / ; 16 WORD timer_count / ; 18 WORD cmd_counter / ; ; 20 WORD R0 \ ; 22 WORD R1 \ ; 24 WORD R2 \ ; 26 WORD R3 \ ; 28 WORD R4 | PDP-11 CPU Registers ; 30 WORD R5 / ; 32 WORD SP / ; 34 WORD PC / ; 36 WORD PSW / ; ; 40 WORD SCR_CONTROL -----\ Video ; 42 BYTE SCR_BASE_LINE -----/ hardware ; ; 43 BYTE WAIT_ENABLED -----> WAIT Command-related var ; ; 44 WORD KBD_CSR -----\ Keyboard ; 46 WORD KBD_DSR -----/ hardware ; ; 48 WORD TIMER50HZ_COUNTER 50 Hz system timer-related vars ; 50 BYTE TIMER50HZ_ENABLE ; ; 51 BYTE STOP_DISABLE_FLAG ; ; 52 BYTE PAGE_AT40 \ ; 53 BYTE PAGE_AT100 | Memory manager-related vars ; 54 BYTE SCR_PAGE / ; ; 55 BYTE PSG_REGNUM \ ; 56 BYTE NOISE_ENABLED \ ; 57 BYTE NOISE_VOL \ ; 58 BYTE ADLIB_A_VOL \ ; 59 BYTE ADLIB_B_VOL \ ; 60 BYTE ADLIB_C_VOL \ ; 61 BYTE CH_A_FLSB \ ; 62 BYTE CH_A_FMSB | ; 63 BYTE CH_B_FLSB | ; 64 BYTE CH_B_FMSB | AY-3-8910 Related vars ; 65 BYTE CH_C_FLSB | ; 66 BYTE CH_C_FMSB | ; 67 BYTE CURRENT_PALETTE <------- Last palette in effect ; 68 BYTE RESERVED, = 0 / ; 69 BYTE RESERVED, = 0 / ; 70 WORD CH_A_FREQ / ; 72 WORD CH_B_FREQ / ; 74 WORD CH_C_FREQ / ; ; 76 128k Memory dump (RAM Pages 0-7, total 8 pages, 16k each) Приложение #3. Команды конфигурационного файла BK_EMUL.CFG ========================================================== Файл BK_EMUL.CFG представляет собой обычный текстовый файл, который может быть создан с помощью любого текстового редактора под DOS (использующего в качестве разделителя строк стандартную последовательность 0Dh 0Ah). В этом файле содержится информация о некоторых параметрах эмулятора. Строки, начинающиеся с точки с запятой (;) игнорируются и могут быть использованы для необязательных комментариев. Команды и их параметры могут быть указаны на любом регистре. A:= Команды конфигурирования карты дисководов для БК-0011М. B:= Были подробно описаны в разделе #4 (эмулируемый БК и C:= внешние устройства). D:= SPEAKER=ENA/DIS Разрешить или запретить эмуляцию динамика БК-0011М. По умолчанию вывод на динамик разрешен. IODEVICE= Установка эмуляции желаемого внешнего устройства на порту ввода-вывода (177714). Допустимые варианты - COVOX (требуется SB), AY (требуется SB или Adlib) или NONE (внешние устройства не эмулируются). Значение по умолчанию - NONE. AYNOISE=ENA/DIS Включение/выключение эмуляции шумовых каналов музыкального сопроцессора. Значение по умолчанию - ENABLED. DELAY=N Установка значения задержки при исполнени команд. Используется для замедления работы эмулятора на слишком быстрых IBM PC до приемлемой скорости. N может принимать значения от 0 до 255. N равное 15 замедляет эмулятор работаюий на i486DX-100 до уровня обычной БК-0011М. N=0 означает отсутвие задержки (эмулятор работет с максимально возможной скоростью). Значение по умолчанию - 0. VMODE=COLOR/MONO Установка начального видеорежима: VMODE=COLOR или VMODE=MONO. Скорость запись данных на экран в цветном режиме несколько выше чем в черно-белом (особенно это относится к эмуляции регистра рулонного сдвига). Если эта команда не укзана, то (по уомлчанию) используется черно-белый режим (MONO). ALTSCR=ENA/DIS Использовать ли альтернативный цветной режим. В этом режиме регистр рулонного сдвига БК-0011 (177664) эмулируется с помощью пересылок видеоданных командами типа REP MOVSB, а не изменением регистра начального адреса CRTC (как в обычном цветном режиме). Если во время работы на экране иногда появляется "мусор" (впервые эта несовместимость была обнаружена у видеоадаптеров Trident), то рекомендуется включить данный режим. Установка по умолчанию - DISABLE. Для использования альтернативного режима в конфигурационном файле должна быть указана строка VMODE=COLOR. Кроме совмес- тимости (я надеюсь; во всяком случае, протестировать это мне не удалось) с Trident VGA, в альтернативном режиме используются две видеостраницы (за счет разрешения VGA color bit planes), что позволяет программам переключающим экранные страницы с высокой частотой (например TOP DEMO) работать заметно быстрее. Во всех других случаях вывод на экран в данном режим происходит значительно медленнее. Обратите внимание на то, что если Вы работаете в альтерна- тивном цветном режиме, то переключение в черно-белый режим с помощью комбинации Control+F6 невозможно (это сделано для того чтобы не испортить содержимое второй страницы видео- памяти). RED=R,G,B На некоторых мониторах эмулятор работающий в цветном GREEN=R,G,B видеорежиме может выглядеть слишком темным (из-за того что BLUE=R,G,B дешевые SVGA-мониторы имеют тенденцию к понижению яркости YELLOW=R,G,B картинки с увеличением горизонтальной частоты развертки). MAGENTA=R,G,B С помощью этих команд можно изменить интенсивность CYAN=R,G,B цветов, устанавливая их VGA RAMDAC RGB-эквиваленты. Каждый WHITE=R,G,B из компонетов цвета должен находится в диапазоне [0..63]. LIGHTRED=R,G,B Все 11 цветов используются только если разрешена эмуляция LIGHTBLUE=R,G,B регистра смены палитр (команда PALETTE=ENABLE). Если смена VIOLET=R,G,B палитр запрещена, то из всего списка используются только LIGHTGREEN=R,G,B Красный, Зеленый и Синий цвета. PALETTE=ENA/DIS Разрешает или запрещает эмуляцию смены палитр БК-11М. По умолчанию смена палитр разрешена. Всего на БК-11М можно установить 16 разных палитр: Palet# Description Remarks ========================================================== 0 Red, Blue, Green (Many games use this) 1 Red, Yellow, Magenta 2 Yellow, Green, Cyan 3 Magenta, Cyan, Blue (Shades of Blue w/red) 4 White, Cyan, Yellow 5 White, White, White (Looks ugly) 6 Red, Brown, LightRed (Shades of Red) 7 Magenta, Light Blue, Violet 8 Yellow, Light Green, White (Best choice for 64c) 9 Red, Green, Blue (BK-0010 scheme) 10 Magenta, Yellow, Voliet 11 Red, Magenta, Cyan (Cybernoid) 12 Cyan, Blue, Red 13 White, Magenta, Cyan 14 White, Blue, Magenta 15 White, Blue, Cyan (Monitor default; CGA compatible; also used by games and demos) ========================================================= TIMER=ENA/DIS Разрешает или запрещает эмуляцию системного (непрерываю- щего) таймера БК. Запрещение несколько увеличивает скорость эмуляции. По умолчанию эмуляция таймера включена. FDC=ENA/DIS Запрещение/разрешение эмуляции командного регистра контроллера дисковода (177130). Значение по умолчанию - ENABLED. Приложение #4. Системный таймер БК. =================================== ------------------------------------------------------------------------------ 177706 WORD R/W timer_sv Начальное значение счета, R/W ------------------------------------------------------------------------------ 177710 WORD R timer_count Счетчик (Timer countdown), R, write ignored ------------------------------------------------------------------------------ 177712 WORD R/W timer_csr Регистр управления таймером, формат побитно: биты 15-8 (старший байт) - читаются единицами, запись игнорируется; бит 7: Аппаратно устанавливается в "1", если случился момент перехода через 0 и был разрешен мониторинг этого момента (бит 2 timer_csr был программно установлен ранее); R/W бит 6: 1 = Включить делитель на 4; 0 = Выключить делитель на 4; (R/W) бит 5: 1 = Включить делитель на 16; 0 = Выключить делитель на 16; (R/W) бит 4: 1 = Начать отсчет (значение из 177706 копируется в 177710 и далее счетчик в 177710 будет уменьшатся на единицу со скоростью, зада- ваемой битами 6 и 5; 0 = Остановить счетчик. Таймер останавли- вается, значение из 177706 копируется в 177710. R,W бит 3: 1 = Использовать single-pass timing mode (остановить таймер и сбросить бит 4, когда значение в 177710 перейдет через 0). Для исполь- зования этого режима необходимо сбросить бит 1 (т.е. если и бит 3, и бит 1 установлен, то таймер НЕ ОСТАНОВИТСЯ при переходе счетчика через 0, а будет продолжать отсчет); 0 = Обычный режим работы таймера (после обнаружения момента перехода счетчика через 0 продолжить отсчет задаваемым битом 1 образом. В данном случае (когда бит 3 сброшен) бит 1 может иметь любое значение. R,W. бит 2: 1 = Разрешить мониторинг момента "переход счетчика через 0" (см. описание бита 7). 0 = не отслеживать данный момент. R/W. бит 1 (Undocumented,used by BKDEMO,own research) Задание способа продолжения счета после момента перехода регистра счетчика через 0: 1 = Продолжать счет (уменьшать регистр счетчика) БЕЗ перезагрузки начального значения из 177706; 0 = Стандартный режим, перезагрузить счетчик начальным значением; (R/W) бит 0 (Undocudemted, my own research): Установка в 1 приостанавливает отсчет - регистр счетчика перезагружается начальным значением из регистра начального значения, однако бит 4 регистра управления остается без изменений. ------------------------------------------------------------------------------ Максимальные времена одного полного цикла таймера для стандарной БК-0010, 3Mhz. Инициализация: MOV #177777, @#177706 ; timer_sv MOV {#20, #120, #60, #160},@#177712 ; timer_csr (Стандартный режим счета с перезагрузкой, мониторинг момента перехода запрещен, не использовать single- pass mode, начать счет, делители: отключены (20), делить на 4 (120), делить на 16 (60), делить на 64(160). Делитель timer_csr бит 6 бит 5 Время одного цикла ========================================================== НЕТ 20 0 0 2,812 сек. на 4 120 1 0 11,25 сек. на 16 60 0 1 45,00 сек. на 64 160 1 1 180,0 сек. ------------------------------------------------------------------------------ Значения регистров после включения питания машины: 177706 = 011000 177710 = 177777 177712 = 177400 Савельев Алексей, Москва, 30 Мая 1996 г.