-------------------------------------------------------------------------------
---  Эмулятор БК-0011М v4.06 copyright (c) 1995-97 by Jay Dee & Ni0L MiCR0 ----
-------------------------------------------------------------------------------


1. Описание.
============

Данная программа представляет собой очередной release эмулятора БК-0011М.
Эмулятор задумывался первоначально только как игрушка "для себя", однако
перерос во вполне серьезный продукт (на текущий момент суммарный объем
исходного текста превышает 25000 строк!), и в нем вполне можно работать как
на настоящей БК-0011М. Вы можете использовать и распостранять его свободно,
как freeware-продукт. Естественно, я не беру на себя никакой ответственности
за возможные последствия использования эмулятора. Используйте его на свой
страх и риск.

Большое спасибо всем кто участвовал в обсуждении бета версии эмулятора
которая была послана в эхоконференцию MO.DEC. Я старался учесть Ваши
замечания и предложения.

Пожалуйста, читайте файл WHATSNEW.HIS - в нем описано большинство
изменений данной версии (т.к. мне сложно исправлять всю основную
документацию при выходе каждой новой версии эмулятора). Также имейте
в виду что основная документация (этот файл, который Вы читаете) скорее всего
несколько устарела и в ней не отражены все особенности текущей версии.

Категорически не рекомендуется выходить из эмулятора аварийными методами, 
с использованием программ типа kill, release и т.д., так как при этом не
высвобождается ранее выделенная EMS память, что может привести к непредска-
зуемым последствиям.

Эмулятор был успешно протестирован под MS-DOS 6.22 (EMM386 и QEMM), 
Windows 3.1/3.11, Windows'95, Win95 OSR2, OS/2, OS/2 Warp.


2. Требования к оборудованию
============================

*** Минимальные ***

Компьютер с архитектурой AT, клавиатура enhanced 101/102 keys, процессор 80386
или выше, видеоадаптер VGA, (очень важна скорость вывода на экран - рекомен-
дуется Cirrus Logic или S3), монитор VGA, достаточное количество свободной 
EMS памяти (208 KB для нормальной работы + необходимый объем памяти для
загрузки образа системного диска БК-11, обычно около 850KB), а также звуковая
карта совместимая с Sound Blaster, если Вы хотите иметь эмуляцию AY-3-8910 
или COVOX.

(*) В связи с большим количеством вопросов еще раз обращаю внимание на
то, что эмулятору требуется EMS-память! Если Вы используете EMM386.EXE,
то убедитесь, что в файле CONFIG.SYS имеется строки типа

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM H=255 D=64

Без EMS памяти (или с недостаточным ее количеством) эмулятор работать
НЕ БУДЕТ!!! Кроме того, EMM386 может быть установлен с параметром NOEMS.
Данный параметр заставляет EMM386 поместить EMS Page Frame в нижнюю память
и за счет этого добавить 64 KB к области UMB; однако самое печальное - то что
с опцией NOEMS не все функции предусмотренные стандартом LIM EMS 4.0 нормально
отрабатываются менеджером EMS-памяти. В результате эмулятор может запустится 
НО БУДЕТ РАБОТАТЬ НЕКОРРЕКТНО. Поэтому при запуске эмулятора УБЕРИТЕ ПАРАМЕТР
'NOEMS' из опций EMM386.EXE!


(*) Хотя эмулятор может работать на компьютере с процессором 386, но
для серьезной работы такая IBM PC категорически не подходит 
(запустите-увидите).


[Рекомендуемая конфигурация]

80486DX4-100, Cirrus Logic/S3/Tseng VGA, Sound Blaster Pro, 4/8 MB RAM.


3. Файлы, входящие в комплект поставки
======================================

BIN\*.*           - Подборка игровых программ в кодах БК-0010 (в формате BIN) O

FDC\*.*           - Два варианта ПЗУ контроллера дисковода: ANCO и 327-v5.    O
                    Оба данных ПЗУ имеют в своем составе в дополнение к
                    контроллеру дисковода и блоку эмуляции EIS/FIS еще
                    и простейшие отладчики. В отладчик 327V5 можно попасть
                    введя из монитора БК-0010 команду T; отладчик Anco 
                    стартует по команде S160456, также из монитора БК-0010.
                    Чтобы установить нужный образ ПЗУ, скопируйте из подката-
                    лога FDC требуемый файл в основную директорию эмулятора
                    (туда где находится BK11_EML.EXE) и переименуйте его в
                    DISKDRV.ROM;

DOC\bk11_eml.txt  - Основная документация (этот файл);                        O
DOC\whatsnew.his  - Список отличий данной версии;                             O
DOC\incompat.txt  - Перечень замеченных несовместимостей;                     O
DOC\debug_ao.txt  - Описание команд отладчика OS-11M;                         O
DOC\asm.txt       - Краткое описание кросс-ассемблера ASM.EXE                 O
DOC\q&a.txt       - Ответы на часто задаваемые вопросы;                       O

UTL\makeimg.com   - Утилита для создания образов дисков (простейшая)          O
UTL\playpsg.exe   - Утилита для проигрывания файлов в формате .PSG            O
UTL\asm.exe       - Кросс-Ассемблер БК-0011М (c) AO Corp.                     O
UTL\koi8.exe      - Утилита для перекодировки текстов из КОИ8 в формат IBM    O

IMG\dos-b11.img   - Образ диска с операционной системой AO-DOS для БК-0011М   O
IMG\insult.img    - Образ диска с демонстрационной программой INSULT          O

ROM\b11m_bos.rom  - Образ ПЗУ c Базовой Операционной Системой (БОС);          R
ROM\b11m_ext.rom  - Образ ПЗУ с подпрограммами БОС;                           R
ROM\bas11m_0.rom  - Образ ПЗУ первой части интерпретатора Бейсика БК-11М;     R
ROM\bas11m_1.rom  - Образ ПЗУ второй части Бейсика БК-11М;                    R
ROM\diskdrv.rom   - Образ ПЗУ контроллера дисковода (327 ver. 5);             R
ROM\monit10.rom   - Образ ПЗУ Монитора БК-0010;                               R
ROM\basic10.rom   - Образ ПЗУ Вильнюсской версиий Бейсика для БК-0010;        R
ROM\debug_ao.rom  - Образ ОЗУ отладчика OS-11M (c) AO Corp.                   O

bk11_eml.exe      - собственно эмулятор;                                      R
bk11_eml.cfg      - конфигурационный файл эмулятора;                          R



R = Помеченный литерой "R" файл необходим для нормальной работы эмулятора.
O = Помеченный литерой "O" файл не является необходимым и может быть удален.


4. Параметры командной строки
=============================

При запуске эмулятора в режиме БК-0010 в командной строке можно указать
имя BIN-файла, который будет затем загружен и запущен. Для того чтобы
перевести эмулятор в режим БК-0010 следует использовать ключ '/B'. Таким
образом, запуск программы в формате .BIN может выглядеть например так:

BK11_EML /B SLIRIS.BIN

(*) Файл SLIRIS.BIN должен находится в той-же директории что и эмулятор!

Также можно указать параметр '/S' (на любом регистре):

C:\EMULS\BK11\BK11_EML.EXE /S

В этом случае эмулятор будет работать несколько секунд (время работы зависит
от скорости IBM PC на которой запущен эмулятор), а затем на экран будет
выдана информация о средней скорости исполнения "команд" PDP-11 в тысячах
операций в секунду, например:

Current PDP-11 CPU performance: 114.000 opcodes per second

Скорость эмуляции зависит не только от скорости процесора IBM PC, но и от
скорости видеокарты. Данные для сравнения (скорость первоначальной "выплыва-
ющей" заставки с надписью МОНИТОР БК11 В1.8):

CPU                Video                  Speed (x 1000 op/sec)  % от БК-0011М
------------------------------------------------------------------------------
Intel 386sx-33     MXIC 86000 ISA                27                  13%
Cyrix 486slc2-50   Oak 037C VGA ISA              43                  20%
AMD 386dx-40       Trident 9000i ISA             60                  27%
Cyrix 486dx-40     S3 PS805 VLB                  104                 48%
IBM/Cyrix 486dx-50 Paradise PVGA 1A ISA          121                 55%
UMC U5-S 40Mhz     S3 Trio64UV+ PCI              138                 63%
Cyrix 486sx-50     Cirrus 5446 PCI               145                 66%
AMD 486dx-40       Paradise PVGA ISA             161                 73%
AMD 486dx2-80      Cirrus 5420 ISA               220                 100% <-
TI 486dx2-100      Cirrus 5429 VLB               248                 112%
AMD 486dx4-100     Trident 9000b ISA             271                 123%
AMD 5x86-133       Tseng ET-6000 PCI             360                 164%
Pentium-150        S3 Trio64V+ PCI               662                 301%
Pentium-166 MMX    Matrox Mistique PCI           790                 360%
Pentium-266 MMX    Ati 3D Rage II + DVD          1990                904%

Учтите что производительность эмулятора на реальных задчах приблизительно в
полтора раза меньше. Работа под Windows также существенно снижает скорость
выполнения БК-программ.


Возможны также другие параметры командной строки. Подсказку можно получить
запустив эмулятор с ключом /?:

BK11_EML /?


5. Эмулируемый БК и внешние устройства
======================================

Полная эмуляция БК-0011М стандартной поставки (с Бейсиком в ПЗУ). Работает
50 Mhz таймер, системный таймер, эмулируются оба экрана, при наличии
звуковой платы Sound Blaster эмулируется музыкальный сопроцессор типа
General Instruments AY-3-8910 / Yamaha 2149F (см. пункт 6 ниже). Достаточно
близко к реальной БК эмулируется контроллер дисковода (обращение к дисководу
отслеживается через перехват обращений в дисковое ПЗУ (160000). Эмуляция
портов контроллера 177130 и 177130 конечно же не реализована (сделать это
просто не представляется возможным из-за принципиальных различий в
контроллерах дисковода БК и IBM PC); однако при обращении прикладных программ
БК к этим портам по чтению возвращается некоторая правдоподобная комбинация
бит, периодически изменяющаяся со временем (это необходимо для создания
видимости работы контроллера дисковода для программ, обращающихся к нему
напрямую, минуя дисковое ПЗУ).


5.1 Процессор.

Эмулируются все известные мне команды PDP-11, в том числе правильно 
работающий вариант MARK и все возможные команды безусловной установки/сброса
кодов условий. Прерывание по T-разряду также эмулируется. Эмулируется 
поведение БК при выдаче команд типа INC PC / DEC PC (например, следующий
фрагмент кода:                  CLR R0
                        MET:    INC R0
                                INC PC
                                BR  MET
                                RTS PC

как и на настоящей БК выполнится два раза и вернет в регистре R0
число 2. Желающие могут проверить этот факт, например в отладчике MIRAGE).
Программные манипуляции с нечетным указателем стека (SP) тоже эмулируются,
но лишь частично (мне пока еще не встречались БК-шные программы, работающие
с нечетным стеком).

Блок эмуляции процессора - одно из наиболее хорошо проверенных и оттестиро-
ванных мест в эмуляторе. Для прикладных программ исполнение в эмуляторе
выглядит как исполнение на реальной БК-0011М, т.к. аккуратность эмуляции
команд процессора близка к 100%. Большинство программ, неработающих в
эмуляторе в режиме БК-0011 - это как правило довольно старые игры (например
2-ой пакет игр Савина - Jetman, Flier, etc, а также SKIN DIVING
Д. Романтовского), написанных для БК-0010 и конфликтующих с регистром
переключения страниц памяти БК-0011М. На реальной БК-0011М эти игры тоже не
работают без переделки. Для запуска этих программ переключите эмулятор в
режим БК-0010.

Однако, существует несколько аспектов, которые отличают эмулятор и настоящий
процессор К1801ВМ1. Во-первых, конечно, это скорость исполнения команд,
которая зависит от производительности IBM PC, на которой запущен эмулятор.
Скорости исполнения команд на реальной БК уже давно измерены (Ю. Зальцман
из Алма-Аты был первым кто это сделал). Таким образом, измерив скорости
выборки и исполнения каких-либо команд и сравнив их с заранее известными 
значениями, прикладная программа имеет возможность опеределить, исполняется 
ли она в эмуляторе или на настоящей БК-0011М (и предпринять соотвествующие
действия). Во-вторых, существуют отличия в обработке команд, вызывающих во
время своего декодирования прерывание по вектору 4. Например, команда типа
"CMP (R3)+, (R3)+", часто используемая в программах Дмитрия Романтовского
(RDA corp.) для увеличения содержимого регистра R3 на 4, будет вызывать
прерывание если в R3 перед выполнением этой команды находилось число 177777.
На реальной БК после прерывания (в программе обработки прерывания по вектору 4)
в регистре R3 будет находится число 1, т.к. прерывание случилось после первого
увеличения регистра R3 на 2. В эмуляторе содержимое R3 будет равно 3, т.к. 
алгоритм эмуляции не позволяет генерировать прерывание непосредственно во
время дешифрации и исполнения команды. Команда должна быть полностью дешифро-
вана и исполнена. Если во время дешифрации и исполнения команды была
зафиксирована необходимость прерывания, то прерывание это генерируется
ПОСЛЕ окончательной дешифрации и исполнения "виноватой" команды, перед
началом выполнения следующей. Используя данный факт, из прикладной программы
также можно очень легко определить, выполняется ли она на настоящей БК
или в эмуляторе. К счастью, пока мне таких программ не встречалось.


5.2 Магнитофон.

Обращения к стандартному драйверу магнитофона в Мониторе БК-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". Файлы, имеющие автозапуск запускаются корректно. Имена
файлов имеющие русские символы преобразуются по фонетическому признаку.


5.3 Внешние устройства (порты ввода-вывода).

Системный регистр БК: 177716  -  Полная эмуляция (регистры переключения
                                 страниц памяти, регистр магнитофона,
                                 системный регистр доступный по чтению).

Клавиатура: 177660 и 177662   -  Клавиатура эмулируется достаточно реальным
                                 образом. Автоповтор клавиш отключен, так
                                 как настоящая клавиатура БК не имеет
                                 функции автоповтора. Однако, в работе
                                 реальной клавиатуры БК-0011М и эмулируемой
                                 существуют отличия - например, в эмуляторе
                                 можно нажать сначала одну клавишу и не отпус-
                                 кая ее - другую. При этом будет послано два
                                 кода (и соответственно выработано два прерыва-
                                 ния). На реальной БК-0010 такое невозможно.
                                 Такой способ работы клавиатуры был сделан
                                 специально, так как иначе во многие игры было
                                 бы просто нельзя играть. Не эмулирется
                                 влияние команды RESET на клавиатуру для
                                 принятия кодов двух и более клавиш (т.к.
                                 я не знаю, как при этом ведет себя БК).

Регистр палитр/таймера: 177662   Все функции (таймер, переключение экранных
                                 страниц, смена палитр). Эмуляция переключения
                                 палитр может быть отключена с помощью команды
                                 PALETTE=DISABLED в конфигурационном файле.

Регистр рулона: 177664        -  Полноценная быстрая эмуляция с использованием
                                 аппаратных возможностей VGA, в том числе 
                                 поддержка режима "малого" экрана.

Таймер: 177706, 177710,177712 -  Корректная эмуляция всех функций и режимов
                                 таймера, которые мне известны, см. Прило-
                                 жение #3). Работа таймера синхронизирована
                                 с выборкой команд и следовательно должна
                                 работать правильно независимо от производи-
                                 тельности IBM PC. Эмуляция таймера может
                                 быть отключена специальной командой
                                 в конфигурационном файле для ускорения
                                 работы. /thanks to S.B. for idea/

Недокументированные регистры:

177700                        -  Запись: эмуляция бита 2 (при установке этого
                                 бита БК переходит в режим ожидания прерывания
                                 от клавиатуры или таймера). По чтению возвра-
                                 щается то же самое значение что и на реальной
                                 БК.

177702, 177704                -  Программно доступны, запись игнорируется
                                 (т.е программа может писать туда и это не
                                 вызовет прерывания по 4 вектору и/или пови-
                                 сания, однако записываемые числа никак не
                                 влияют на работу эмулятора), по чтению
                                 возвращются те же значения что и на обычной
                                 БК /*** more info needed ***/

Дисковод: 177130 и 177132     -  Программно доступны, запись игнорируется,
                                 по чтению возвращается некоторая специаль-
                                 ная комбинация бит, периодически меняющися
                                 со временем. Это необходимо для программ,
                                 напрямую обращающихся к контроллеру гибко-
                                 го диск (например Disk-Test by AO Corp.,
                                 а также операционная система RT-11).
                                 Эмуляция этого регистра по чтению
                                 может быть отключена.

Внешний порт: 177714          -  По чтению возвращается состояние
                                 keypad-джойстика (см.ниже) и/или "мыши".
                                 По записи эмулируется одно из двух возможных
                                 внешних устройств (задается в конфигура-
                                 ционном файле) - музыкальный сопроцессор
                                 или приставка типа Covox (8-разрядный
                                 ЦАП). Эти внешние устройства эмулируются
                                 только при наличии звуковой платы.


5.4 Контроллер дисковода.

В предыдущих версиях эмулятора (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. Файл, поставляемый в коплекте с эмулятором (DOS-B11.IMG) имеет
установленный атрибут Read-Only для защиты от случайного повреждения. 
Некоторые другие эмуляторы БК (например эмулятор Сергея Камнева) не могут
работать с образами дисков имеющими атрибут read-only, поэтому возможно Вы
решите снять его с данного файла. Это можно просто сделать например из
популярной оболочки Norton Commander или с помощью команды MS-DOS attirb.

(*) Для операции форматирования требуется наличие в памяти резидентного драй-
вера типа PU_1700 или 800, т.к. стандартный для БК формат диска (512K в одном
секторе, 10 секторов на дорожку) не поддерживается напрямую BIOS'ом IBM PC.
Если такого рода драйвер не установлен в системе перед запуском эмулятора,
то физического форматирования диска производится не будет. Также следует
иметь в виду некоторые аспекты переносимости дискет с БК на IBM и обратно.
В общем случае, диски отформатированные и записанные на БК нормально читаются
(и записыватся) на IBM PC. Записанные на PC данные можно опять прочитать
на БК. Однако если диск отформатирован на IBM, то на БК с обычным драйвером
дисковода 253 или 326 (наиболее распостраненные Floppy ROM) такой диск не
прочитается, что связано со слишком маленьким временем ожидания появления 
первого сектора на дорожке (ошибка была допущена при разработке ROM Саяпиным
А. А.). В настоящее время на БК существует несколько дисковых ROM, в которых
тем или иным образом исправлена данная ошибка.

Примечание: Хотя ПЗУ контроллера дисковода БК-0011М поддерживает работу с 4
дисководами, некоторые операционные системы на БК работают только с двумя (A:
и B:) Если даже в такой системе указать обращение к дискам C: или D:, то 
физически доступ будет осуществлятся к дисководам A: (или B:), но с включенным
признаком пропуска дорожек (для обработки 40-трековых дисков на 80-трековом 
дисководе на реальной БК; однако эмулятор игнорирует данный признак). 
Так ведет себя например AO-DOS. Для переконфигурации AO-DOS'а следует
использовать команды ASSIGN C C и ASSIGN D D. После этого доступ к приводам
C: и D: становится возможным.


6. Музыкальный сопроцессор General Instruments AY-3-8910 / Yamaha YM-2149F
==========================================================================

Эмулирутеся работа сопроцессора подключенного по так называемой "стандартной",
или инверсной схеме, предложенной Денисом Сотченко (RDC). Шумовые каналы
сопроцессора эмулируются с помощью ударного инструмента ADlib - Snare. 
Эмуляция шумовых каналов не учитывает частоту шума, которую можно изменить на 
AY, но весьма проблематично сэмулировать на Adlib. Эмуляция шумовых каналов 
может быть отключена с помощью команды AYNoise в конфигурационном файле 
(см. Приложение #3). Также отсутствует эмуляция генератора огибающих 
(изменение формы волнового пакета), т.к. я не знаю как это можно сэмулировать 
с использованием FM-синтезатора Adlib'а/SB. Кроме того, не эмулируется 
специальный способ работы с сопроцессором - так называемый 4-битный 
логарифмический ЦАП. К счастью, не так уж много программ используют вышепере-
численные особенности AY. Вообще, Adlib/SB по-видимому не имеют достаточно 
ресурсов для полноценной эмуляции этого устройства.


7. Специальные клавиши управления эмулятором
============================================

Control + F1   Получение справки о некоторых специальных клавишах.

Scroll Lock    Переключение видеорежима: Color 256x256 4 цвета / Mono 512x256
               2 цвета. В монохромном режиме каждый бит записываемого в
               экранную память слова/байта трактуется как пиксел; в цветном 
               режиме одному пикселу соответсвует 2 бита (4 цвета).
               В большинство игр лучше всего играть в цветном режиме;
               черно-белый режим подходит для работы с текстовыми редакторами,
               отладчиками, etc.

Control + F11  Вызов встроенного отладчика. Монитор переводится в текстовый
               режим, на экран выводятся содержимое всех регистров процессора,
               адрес и код текущей команды, несколько верхних слов стека а
               также подсказка и некоторая дополнительная отладочная информация.
               Команды отладчика:

               G - выход из отладчика, продолжение выполнения эмулятора;
               Q - выход из эмулятора, возврат в операционную систему;
               R - вывод на экран содержимого регистров эмулируемго процессора;
               V - просмотр экрана БК. После нажатия любой клавиши происходит
                   возврат в отладчик;
               T - Включить/выключить отладочное прерывание после выполнения
                   каждой команды "процессора" БК;
               S - Установить адрес точки прерывания. Когда счетчик команд (PC)
                   эмулируемго процессора достигнет данного значения, то
                   произойдет переход в отладчик. Установка 177777 выключает
                   этот режим;
               W - Просмотр содержимого слова памяти по заданному адресу;
               B - Просмотр содержимого байта памяти по заданному адресу;
               C - Изменение содержимого слова памяти по заданному адресу;
               A - Изменение содержимого байта памяти по заданному адресу;
               H - Изменение содержимого регистров эмулируемого процессора;
               D - Просмотр памяти в виде восьмеричных слов и кодов ASCII KOI8;
               U - Просмотр памяти в виде ассемблерных мнемоник PDP-11;
               I - Установка/сброс признака "Show FDC Info". При включенном
                   признаке при обращении к драйверу дисковода работа эмулято-
                   ра приостанавливается и на экран выводится дополнительная
                   информация о параметрах, с которыми прикладная программа
                   обращается к драйверу (debug use only);
               F - Установка/сброс признака "Show ROM write fault warning".
                   При включенном признаке при попытке записи в ПЗУ будет
                   осуществлен переход в отладчик. При этом регистр PC будет
                   указывать на следущую команду после "виноватой" команды,
                   вызвавшей прерывание по 4 вектору;
               O - Запуск отладчика OS-11M.TR (только для БК-0011М,см. ниже).

Control + F10  Приостановка работы текущей программы и запуск отладчика
               OS-11M.TR by AO Corp. (отладчик написан в кодах БК-0011М
               и замещает собою ПЗУ БК-0011М по адресу 140000). Подробне
               о командах отладчика см. файл DEBUG_AO.TXT. Отладчик не
               может быть вызван, если при запуске эмулятора в текущей
               директории не был обнаружен файл DEBUG_AO.ROM. EX - выход
               из отладчика и продолжение работы. Отладчик работает только
               в режиме БК-0011М. При работе в режиме БК-0010 нажатие
               Control + F10 игнорируется. На время работы отладчика
               команды "Запись состояния БК" (Control + F2, см. ниже) и
               "Чтение состояния БК" (Control + F3) временно перестают
               функционировать.

F11            Приостановка работы эмулятора и вызов конфигурационного меню.
               Здесь Вы можете изменить некоторые параметры эмуляции, а также
               тип компьютера (БК-0010 или БК-0011М), тип внешнего устройства
               (AY или Covox), а также некоторые другие параметры эмулятора.
               ESC - выход из конфигурационного меню и продолжение работы.

F12            Завершение работы и выход в DOS. Запрашивается подтверждение.
               Следует нажать клавишу 'Y' если Вы действительно желаете выйти
               из эмулятора.

Control + F12  Включить/выключить режим "максимального ускорения". В этом
               режиме не работает клавиатура, системный таймер, не эмулируется
               контроллер дисковода, что позволяет работать с максимально
               возможной скоростью.

Control + F6   Загрузка и запуск файла .BIN в стандартном формате КУВТ-86:
               первое слово - адрес, второе - длина файла, далее данные.
               Запрашивается имя файла. Автозапуск отрабатывается более-менее
               корректно. Если расширение не указано, то подразумевается .BIN.
               Пользоватся этой функцией можно только если загружена
               операционная система эмулирующая среду БК-0010 (AO-DOS и др.)

Control +      Загрузка (без запуска!) файла .RAW (просто данные, без
  Scroll Lock  заголовка). Запрашивается адрес загрузки и имя файла.
               Если расширение не указано, то подразумевается .RAW.
               После загрузки осуществляется возврат в эмулятор.

Control +      Приостановить работу эмулятора (пауза). Для продолжения работы
        Pause  нажмите любую клавишу.

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М.

Control + F9   Переключение информационного байта по адресу 177716. Сразу
               после запуска эмулятора там записано восьмеричное число 140000
               (как и на реальной БК-0011М). Однако существуют программы,
               которые были написаны для БК-0010 (например сериал Десантик
               В. Савина), которые ожидают что по этому адресу находится
               число 100000 (восьмеричное), и в расчете на это осуществляют
               опрос клавиаутры. В результате в эмуляторе (а также и на
               реальной БК-0011М) с такими программами возникают проблемы
               с клавиатурой. Данная горячая клавиша работает как двоичный
               переключатель, позволяющий попеременно заносить числа
               100000 и 140000 по адресу 177716 (регистр чтения). Рекомендуется
               пользоваться с осторожностью.

SysRq / PtrScr "Мягкий" reset эмулируемго БК (переход по адресу 100000 без
               очистки памяти). Желательно чтобы по этому адресу располагалась
               операционная система эмулирующая среду БК-0010 (Монитор), 
               иначе результат непредсказуем.

Break / Pause  "Жесткий" reset БК (с очисткой всей памяти и перезагрузкой
                модулей ПЗУ). Управление передается по адресу 140000o.


8. Соответствие клавиатуры 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/Ъ  (закрашенный квадрат)


9. Эмуляция джойстика
=====================

Джойстик эмулируется четыремя клавишами на 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


10. Известные ошибки, несовместимости и проблемы
================================================

См. файл INCOMPAT.TXT.


11. Планы на будущее (To Do List / Что еще пока не реализовано)
===============================================================

1. Корректная эмуляция генератора огибающих музыкального сопроцессора AY-3-8910;

2. Эмуляция ударных инструментов AY-3-8910 с использованием DMA PCM playback
   на звуковой карте совместимой с Sound Blaster;

3. Эмуляция винчестера БК подключенного по стандарту Альт Про, а также
   поддержка неограниченного количества образов дисков нелимитированного
   размера и возможность добавлять/убирать образы во время работы (on the fly);

4. Оптимизация эмулятора по скорости и по объему исполняемого кода.

5. Переадресация вывода БК-программ, использующих печать, на принтер IBM PC.


12. Другие известные мне эмуляторы БК для IBM PC
================================================

Кроме эмуляторов, я видел несколько библиотек для эмуляции команд процессора
PDP-11 (одна из них была написана в каком-то западном университете целиком
на Си; другая - у нас в России, и написана на смеси Ассемблера и Си). Также
существуют несколько эмуляторов машин, родственных БК (PDP-11 и ДВК). Их
я здесь не рассматриваю. Всего (вместе с моим) мне известно семь эмуляторов
БК:

1. Итак, по-видимому самый первый и наиболее широко распостраненный эмулятор БК
(обычно он называется BK_EMUL.EXE, хотя ходят версии с различными названиями) -
содержит самое большое количество ошибок. Автор, к сожалению, нигде не оставил
упоминания о себе (есть сведения, однако, что автор живет в Москве).
Эмулируется только БК-0010. Многие программы в нем не работают, в основном
из-за неверной реализации обращения по нечетным адресам. Серьезные проблемы
с клавиатурой, почти полное отсутствие всякого сервиса. Для эмуляции цветного
видеорежима используется измененная CGA-мода 320x200x4. Весьма быстрый 
(быстрее чем мой; я не измерял его производительность, но на 386dx-40 этот 
эмулятор работает уже заметно быстрее БК-0010). Поддержка дисковода и образов
дисков. Эмуляция системного таймера отсутствует. Нет эмуляции регистра 
рулонного сдвига, что весьма раздражает. Основной код эмуляции команд PDP-11
написан по-видимому на C/ASM (скорее всего была использована вышеуказанная
российская библиотека). Однако, я считаю что все это простительно, так как
этот эмулятор был самым первым и вдохновил остальных и в том числе меня на
написание более качественных эмуляторов; кроме того, возможно это была
недоделанная версия. Жаль, что новых версий не последовало.

2. DRON.EXE - Автор: небезызвестный в мире БК DMW corp. (PICK-OUT). Автор
живет в Москве. Я видел только одну из самых первых версий, фактически 
заготовку. Очень быстрый эмулятор, скорее всего написан целиком на ASM. 
БК-0010 only; только черно-белый видеорежим (с использованием стандартной 
EGA моды 640x350x2).Таймер, рулон и динамик не эмулируются. Возможно у 
автора уже готова нормальная версия.

3. BK.ELF / BK.AOUT - Автор: Leo Broukhis (США). Эмулирует только БК-0010. 
Этот эмулятор написан с использованием упоминавшейся выше американской 
библиотеки эмуляции PDP-11. Написан целиком на C, работает только на
Unix-платформах; используются библиотеки X-Windows; весьма медленный 
(рекомендуется Pentium). Весьма аккуратно написанная эмуляция команд 
процессора и системного таймера (PLATE работает :-). Поддержка черно-белых
и цветных режимов работы. В той версии, с которой мне удалось ознакомится 
отсуствовала поддержка дисковода. Из достоинств отмечу то, что автор
вместе с эмулятором распостраняет исходный текст.

4. Эмулятор Сергея Камнева (Москва). Существуют две версии - БК-0010 и 
БК-0011М. Исполняемый файл чаще всего называется BK.EXE. Этот эмулятор 
является наболее приличным из всех мною виденных. Он работает даже на 286/EGA!
Также рекордным является размер кода (всего около 8 килобайт!) и скорость
эмуляции (гораздо быстрее чем мой). Поддержка черно-белого и цветного
режимов (используется измененный режим EGA), дисковода (через образы
дисков или дискеты), системного таймера, палитр БК11. К сожалению, версия 
эмулятора БК-0011М имеет ряд серьезных недостатков (некорректная эмуляция
50 hz таймера; отсутствие эмуляции музыкального сопроцессора; проблемы с 
клавиатурой и мышью; неполная эмуляция работы драйвера КНГМД; проблемы
при запуске с установленным менеджером ems и под win95; и др.) что
ограничивает возможность серьезной работы с этим эмулятором. Думаю, что
в будущих версиях автор исправит (или уже исправил) эти досадные ошибки.

5. Эмулятор Дмитрия Тюрева (Ростов-на-Дону). Эмулируется только БК-0010.
По скорости этот эмулятор близок (возможно и превосходит) эмулятор
Сергея Камнева. Черно-белый и цветной режим работы. Мне не очень понравился
способ, с помощью которого автор эмулирует "прокрутку" экрана (переодический
рефреш всего видеобуфера). Незначительные проблемы с клавиатурой.
Эмуляция процессора несовершенна (у меня в этом эмуляторе отказался
работать Перевал). Довольно корректная эмуляция системного таймера (PLATE).
Вместе с эмулятором автор распостраняет исходный текст, за что огромное
ему спасибо - несколько очень красивых оригинальных решений в области
эмуляции процессора PDP-11 перекочевало в мой эмулятор ;-)

6. "Самарский" эмулятор БК-0011М (автор - Алексей Мельников,Caroline Software).
Исполняемый файл называется ELESIM.EXE. Из плюсов отмечу черно-белый и цветной
режим работы, встроенный отладчик, эмуляцию системного таймера и музыкального
сопроцессора. По видимому, получила распостранение незавершенная версия, т.к.
имеют место многочисленные проблемы (неверные палитры БК-11М, остутсвие ПЗУ
Бейсика-11М, некорректая эмуляция системного таймера, проблемы с EIS/FIS,
отсутсвие эмуляции регистров КНГМД, неудачный видеорежим с низкой частотой
кадровой развертки,утомляющий зрение и работающий не на всех (S)VGA-адаптерах,
медленная скорость работы (ELESIM работает приблизительно в 1.5 раза медленнее
чем мой эмулятор). Очень интересна попытка автора ELESIM'а синхронизировать
эмуляцию переключения палитр с кадровой разверткой для правильной работы
демонстрационных программ (что однако не работает на PC более медленных
чем 486DX2-80). Эмуляция мыши и драйвер чтения дисков БК реализованы удачнее
чем в моем эмуляторе. Весьма многообещающий эмулятор и единственный достойный
конкурент моему, я с нетерпением жду новых версий ELESIM'а.


13. Благодарности
=================

Большое спасибо:

- Алексею Шмелеву (/423.21, Star Software), Дмитриеву Даниилу и Александру 
  Осипову (/541.22, AO corp) за всестороннюю поддержку;
- NiOL-MiCRO за исходные тексты модуля поддержки видеорежимов БК на EGA/VGA;
- Дмитрию Рузакову за любезно предоставленную возможность отладки эмулятора
  на большом количестве "свежих" программ;
- Сергею и Лео Брухису за весьма ценные советы и критические замечания;
- Сергею Контареву за программу Filex;
- Денису Сотченко за информацию о муз. сопроцессоре;
- Марату Файзуллину, fms@freeflight.com (автору эмулятора fMSX) за исходники 
  модуля эмуляции AY-3-8910 (PSG);
- Гертону Люнтеру за превосходный эмулятор Z80 и за его же оригинальную
  идею эмуляции звуковых каналов AY-3-8910;
- Фирме Microsoft за отличную операционную систему Windows-95 :-)));



14. Как связатся с автором?
===========================

Наконец-то у автора появился доступ к Internet! Вы можете отослать мне e-mail
по адресу:

Alex Savelev, New_Energy@USA.Net. Связатся со мной можно также через ICQ pager,

мой UIN: 656-2367.

Также Вы можете отправить сообщение Алексею Шмелеву по одному из указанных
ниже адресов (для меня), и я его прочту (а возможно и отвечу):

Alex Shmelev, FiDO = 2:5020/423.21, E-MAiL = uzito@dialup.ptt.ru



Приложение #1. Технические характеристики ПЭВМ БК-0011М (Электроника МС 0511)
=============================================================================

- 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    MOUSE_STROBE    <------- Mouse driver variable
;   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. Команды конфигурационного файла BK11_EML.CFG
===========================================================

Файл BK11_EML.CFG представляет собой обычный текстовый файл, который может
быть создан с помощью любого текстового редактора под DOS (использующего
в качестве разделителя строк стандартную последовательность 0Dh 0Ah).
В этом файле содержится информация о некоторых параметрах эмулятора.
Строки, начинающиеся с точки с запятой (;) игнорируются и могут быть
использованы для необязательных комментариев. Команды и их параметры
могут быть указаны на любом регистре.

A:=                Команды конфигурирования карты дисководов для БК-0011М.
B:=                Были подробно описаны в разделе #4 (эмулируемый БК и
C:=                внешние устройства), в его части, посвященной контрол-
D:=                леру дисковода.

MODE=BK10/BK11     Установка типа эмулируемой БК. По умолчанию - BK11.

CONFIG=DISK/BASIC  Установка типа распределения памяти при работе в режиме
                   БК-0010 (MODE=BK10): CONFIG=DISK эмулирует БК-0010 с ПЗУ
                   драйвера дисковода по адресу 160000 и с расширенным ОЗУ 
                   16KB по адресам 120000-137777. CONFIG=BASIC эмулирует ПЗУ
                   Вильнюсской версии Бейсика по адресам 120000-175777, 
                   естествнно без ПЗУ контроллера дисковода. Значение по 
                   умолчанию - CONFIG=DISK. При работе в режиме БК-0011М
                   состояние данного переключателя игнорируется.

SPEAKER=ENA/DIS    Разрешить или запретить эмуляцию динамика БК-0011М.
                   По умолчанию вывод на динамик разрешен.

MOUSE=ENA/DIS/KM   Разрешение или запрещение эмуляции мыши БК. Для
                   эмуляции требуется реальная мышь IBM PC (на трехкнопоч-
                   ной мыши будут использоваться только две кнопки) и
                   драйвер типа MOUSE.COM, загруженный в памяти. Обратите
                   внимание, что эмуляция мыши конфликтует с эмуляцией
                   джойстика, так как оба эти устройства находятся на
                   одном и том же порту ввода-вывода. Несмотря на то
                   что побитная раскладка мыши и джойстика не совпадает,
                   во многих игровых программах рассчитанных на джойстик
                   при включенной эмуляции мыши будет невозможно переназна-
                   чить управление от джойстика, т.к. мышь сохраняет
                   последние использованные биты направления в порту 177714
                   до программного ресета (данная проблема имеет место и на
                   реальной БК-0011М). Из этих соображений рекомендуется
                   выключать эмуляцию мыши при интенсивном использовании 
                   keypad-джойстика.
                   У данной команды три возможных параметра:

                   ENABLE или STANDART - использовать мышь подключенную
                                         по стандартной, или "прямой" схеме
                                         (стробирующий бит = 3). Большинство
                                         программ рассчитаны на работу с
                                         мышью, подключенной именно таким
                                         образом.

                   KM                  - эмулировать мышь подключенную к блоку
                                         KM (стробирующий бит = 14). Необходимо
                                         для игровых программ фирмы IMS corp.
                                         (Magician, Magician 2). Обратите
                                         внимание, что функция блока КМ, гене-
                                         рирующего прерывание по вектору 270
                                         при приходе данных от мыши НЕ ЭМУЛИРУ-
                                         ЕТСЯ! Это означает, что драйвер мыши
                                         в операционной системе ОС-БК 4.x/RT11
                                         в эмуляторе работать НЕ БУДЕТ.

                   DISABLE             - не эмулировать мышь.

                   Некоторые программы (например Monkey Island) опрашивают
                   мышь с помощью универсального драйвера, в этом случае
                   мышь может эмулироватся по любой из двух схем.

IODEVICE=          Установка эмуляции желаемого внешнего устройства на
                   порту ввода-вывода (177714). Допустимые варианты -
                   COVOX (требуется SB), AY (требуется SB или Adlib) или NONE
                   (внешние устройства не эмулируются). Значение по
                   умолчанию - NONE.

INTERCEPT=AY/NONE  Включение перехвата обращений к музыкальному сопроцессору.
                   Данные, посылаемые в муз. процессор записываются в файл с
                   именем MUSDATA.PSG. Для проигрывания этих файлов на IBM PC
                   можно воспользоватся утилитой PLAYPSG.EXE. По умолчанию
                   перехват выключен (INTERCEPT=NONE). При включенном перехва-
                   те приостанавливается работа системного таймера IBM PC IRQ0
                   что может привести к оставанию часов реального времени.

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     Использовать (ENABLE) или не использовать альтернативные 
                   параметры для перепрограммирования регистров VGA CRTC.

RED=R,G,B          На некоторых мониторах эмулятор работающий в цветном
GREEN=R,G,B        видеорежиме может выглядеть слишком темным (из-за того что
BLUE=R,G,B         дешевые VGA-мониторы имеют тенденцию к понижению яркости
YELLOW=R,G,B       картинки с отклонением горизонтальной частоты развертки от
MAGENTA=R,G,B      стандартных 31 khz). С помощью этих команд можно изменить
CYAN=R,G,B         интенсивность цветов, устанавливая их 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 разных палитр:

                   Pal#             Description             Remarks
                   ==========================================================
                    00   Red        Green        Blue        палитра БК-0010
                    01   Red        Magenta      Yellow
                    02   Magenta    Blue         Cyan
                    03   Yellow     Cyan         Green       для текста 64 c.с.
                    04   White      Cyan         Magenta
                    05   White      White        White       Оттенки белого
                    06   Light Red  Brown        Red         Оттенки красного
                    07   Yellow     Green        Light Green
                    08   Magenta    Light Blue   Violet
                    09   Red        Violet       Yellow
                    10   Light Red  Violet       Yellow
                    11   Light Red  Yellow       Cyan        Cybernoid, Crash
                    12   Cyan       Green        Light Red
                    13   White      Yellow       Cyan
                    14   White      Light Green  Yellow
                    15   White      Light Green  Cyan        Monitor БК11/CGA
                    =========================================================


TIMER=ENA/DIS      Разрешает или запрещает эмуляцию системного (непрерываю-
                   щего) таймера БК. Запрещение несколько увеличивает
                   скорость эмуляции. По умолчанию эмуляция таймера включена.

FDC=ENA/DIS        Запрещение/разрешение эмуляции командного регистра
                   контроллера дисковода (177130). Значение по 
                   умолчанию - ENABLED.

FASTSOB=ENA/DIS    Пропускать (ENABLED) или нет команды SOB вида
                   MET:  SOB Rn, MET. В большинстве случаев эти
                   команды в БК-шных программах используются для получения
                   задержки исполнения какой-либо части кода и могут безболез-
                   ненно быть заменены просто на очистку соответствующего
                   регистра. Если эмулятор работает слишком медленно на Вашей
                   IBM PC, то можно получить некоторый выигрыш в 
                   производительности, включив (ENABLED) данную опцию.
                   Дефолтовое значение - DISABLED. Идея такого пропуска была
                   взята из эмулятора Дмитрия Тюрева.


Приложение #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


Приложение #5. Наиболее часто используемые команды PDP-11
=========================================================

Приводимая ниже информация основана на частотном анализе выборки команд 
большого количества игровых и системных программ для БК.

SOB RN, MET
ADD #WORD, RN
BNE MET
BEQ MET
BPL MET
BMI MET
MOV #WORD, RN
TSTB @#MET
CLRB MET
BIT #WORD, @#MET
CALL @RN
RTS PC
                                      Савельев Алексей, Москва, 6 Июня 1998 г.
