```
//////////////////////////////////////////////////////////////////////////
//                                                                      //
// Orion/Z (Orion-128 + Z80-CARD-II, ORION-Pro) emulator, version 1.08. //
//                                                                      //
//                                                                      //
//             Author: Sergey A.        <a-s-m@km.ru>                   //
//                                                                      //
//             Copyright (C)2006-2016 Sergey A.                         //
//                                                                      //
//   This program is free software; you can redistribute it and/or      //
//                  modify it in any ways.                              //
//   This program is distributed "AS IS" in the hope that it will be    //
//   useful, but WITHOUT ANY WARRANTY; without even the implied         //
//   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   //
//                                                                      //
//////////////////////////////////////////////////////////////////////////
```
Вашему вниманию представляется программа Orion/Z emulator.
Это эмулятор домашнего компьютера Орион-128, описанного в
журнале Радио N1 за 1990г., и модифицированного при помощи 
Z80 Card II (ленинградский вариант установки Z80 в Орион),
а также модификацию Орион-ПРО (Orion-Power).


## Технические характеристики эмулируемого компьютера:

- процессор Z80 2.5 МГц (турбо: 3.5/5/7/10/20 MГц), режимы Z80 Орион-Сервис, Z80 Card II, Orion-PRO
- память (ОЗУ) - 128..4096кб,
- клавиатура - РК86, МС7007 Ленинград (совместимо с РК), МС7007 Москва(авторская),
- ROM-BIOS - страндартный (128/ПРО), содержится во внешнем файле,
- ROM-DISK - страндартный, содержится во внешнем файле, + расширенный режим (16 страниц по 64к,
              переключаемые битами D0..D3 порта 0FEh для Ориона-128 и расширенный до 2Mб
              маппер страниц порта 09h для ПЗУ ROM2 Ориона-ПРО)
- КНГМД - эмуляция 1818ВГ93, 2 привода (ODI-файлы), порты F700..7003/F710..F713/F720/F714,
              эмулируется режим HD (ODI-диски более 800к),
- ЧАСЫ (RTC) - эмуляция 512ВИ1 на порту F760/F761 (BlackCat inc.), 50h..51h (Орион-ПРО)
- муз.процессор- эмуляция AY-3-8910 на портах BFFD/FFFD, 3Eh..3Fh (Орион-ПРО)
- IDE (HDD) - эмуляция контролера IDE на 580вв55 (порт F500/F600), 56h..5Fh (Орион-ПРО)
- SD-card - Эмулируются только SDC карты (non-SDHC, объемом до 1Gb). Аппаратно эмулируются 2 варианта:
	- совместимо по схеме с n8vem (port  F762):
          http://n8vem-sbc.pbworks.com/browse/#view=ViewFolder&param=N8VEM%20Schematics
	- совместимо по схеме с MSX MMC-drive V1 (port F762, F763):
          http://msx.retro8bits.com/sd-mmc-drive.html
- последовательный порт (RS-232) - порты F764,F765 (схема на AtTiny2313).
- Ethernet - эмулируются NE2K-устройства, в железе на примере RTL8019AS - порты F770..F77F, F780..F7FF
- Принтер - эмуляция 2-х схем принтера CENTRONICS (порт F600)

## Минимальные требования к PC:

Celeron 400Мгц / 64М RAM / 2M HDD free / Windows 9x, 2000, XP, Vista, W7


## Запуск эмулятора
Программа не требует установки, работает из текущего каталога
куда будет распакована, настройки хранятся в файле, одноименном
исполняемому, но с расширением INI.

При запуске эмулятора можно передать параметры: имена файлов.
Если это файл-снапшот, то он будет загружен; если это 
файл-образ_диска, то он будет установлен как образ диска "A".
Второй параметр командной строки предполагается как образ диска
"B". Также при запуске эмулятора можно передать параметры - имена
файлов *.BRU, *.ORD, *.RKO. Эти файлы обычно содержат ORDOS-код.
Эмулятор загружает их в RAM-диск "В" (ОЗУ второй страницы) так как
они перечислены в командной строке (один за одним пока хватает
места в ОЗУ второй страницы). 

Можно, к примеру, создать в Windows ассоциации OrionZEm.exe
с файлами "*.ori", "*.odi" и открывать такие файлы прямо из 
Проводника Windows по двойному щелчку. В этом случае все пути в
файле настроек эмулятора (OrionZEm.ini) должны быть полными 
(формат вида "от текущего каталога: .\dir1\dir2\file" всего 
вероятнее не будет работать, т.к. текущий каталог при таком
запуске уже скорее всего не является каталогом эмулятора).
```
  ВНИМАНИЕ: 
- если OrionZEm.exe запущен с параметрами, то автоматическое
восстановление автоснапшота из AutoSnap.ori не вызывается,
т.к. оно перекроет переданные параметры своими.
- при загрузке снапшоты восстаналивают полное состояние эмулятора
(т.е. включая файловые буфера ОС в памяти Ориона), но они не
восстанавливают содержимое файлов образов дисков/HDD (это не
дело эмулятора). Поэтому если между записью снапшота и его 
восстановлением содержимое файлов образов поменялось, то
возможны неувязки при записи в эти файлы программами Ориона
(например, в CP/M)!   Это не ошибка эмулятора!
```
На порту F600 кроме эмуляции IDE-контроллера добавлена эмуляция 
произвольных внешних устройств. Модели устройств хранятся в 
подключаемых модулях (плагинах) - специализированных dll, 
подключающихся "на лету" (без дополнительного конфигурирования 
эмулятора - просто копируя dll в каталог эмулятора, что не отменяет 
необходимости конфигурирования самих плагинов - у каждого плагина 
могут быть внутренние настройки - жмите "Configure plugin" на 
закладке "port F600" эмулятора). В настройках эмулятора один из 
плагинов (одно устройство на порт F600) выбирается из списка. 

В плагине F600prn.dll реализован эмулятор принтера (печать в 
файл или на реальный принтер) для двух наиболее часто 
использовавшихся на Орионе вариантов схем подключения 
принтера с интерфейсом CENTRONICS. Печать тестировалась на 
лазерном принтере под Windows XP. В эмуляторе для тестирования 
применялась АСРМ 1.53 с драйвером LPR.COM А.Грачева 
(Centronix, A0..A7 - data, C7 - strobe, C3 - ready=/busy). 

## Утилиты

В составе эмулятора распространяется утилита HddUtil.exe, с помощью
которой под Windows NT, 2000, XP, Vista  можно создать посекторный
образ HDD (как целиком, так и логическго раздела - партиции) в файле.

Аналогично работает утилита DiskUtil.exe, создающая ODI-образы дискет.

Запустите HddUtil.exe (или DiskUtil.exe) без параметров - программа
покажет список своих ключей.

Образы HDD/дисков затем можно просмотреть и изменить их содержимое при
помощи ODI.WCX и OHI-WCX - архиваторных плагинов для файловых оболочек
TotalCommander / DoubleCommander / FarManager.

## В общих чертах про ODI-"диски" и OHI-"диски". 

Первое с чего нужно начать, это сопоставить виртуальным (эмулируемым
программой OrionZEm) дисководам файлы-образы дискет. Это делается при
помощи двух кнопок в панели инструментов эмулятора (в верхней части окна):
на одной кнопке написано "А" - тут по нажатию в выпадающем меню можно
выбрать файл-образ для дисковода А (floppy 0) или очистить привод - 
"извлечь дискету". Аналогично по кнопке "B" для дисковода В (floppy 1). 

Образ диска с приводом сопоставлен (теперь он подсвечивается как hint
на соответствующей кнопке дисковода панели инструментов), теперь нужно
с него загрузиться. Если используется загрузка из ОРДОС (Монитор 
вываливается в Ордос), то нужно пользоваться загрузчиком DOS$ для CPM
фирмы Орион-Софт (они называли их OSDOS v 2.4, 3.6) или загрузчиками 
BOOT$, MBOOT$ для прочих вариантов орионовских CPM.

Ньюанс: поведение Ориона по включению/сбросу зависит от того, 
какой тип Монитора (базовой программы - загрузчика в ПЗУ F800)
использован: некоторые из них загружают с RomDisk-а ORDOS, некоторые
сразу загружают CP/M с дисковода "А". Набор разных Мониторов и небольшое
их описание лежит в подкаталоге .\ROM\ архива эмулятора.
Файл Монитора указывается в настройках эмулятора.

Можно использовать Монитор (ROM-BOIS F800) такой, чтобы он по включению
питания или RESET сразу грузился с дисковода А, без Ордос (будет грузить
все версии орионовских CPM кроме упомянутых OSDOS). Для этого в окне
настроек на закладке ROM нужно выбрать имя файла Монитора содержащего в
суффиксе имени файла символ "D". Также нужно учитывать тип клавиатуры и
выбирать соответствующий тип Монитора (в имени будут суффиксы "RK" или
"MS"). Пример: M35zrkd.bin - Монитор версии 3.5, работает только на Z80,
               клавиатура RK-86, встроен загрузчик с дисковода. 


Незагрузочные диски обычно могут быть 2х вариантов:
1. Диски с исполняемыми файлами (программами или играми) под CP/М -
классическую операционную систему 8-битных ПК, заточенную под
работу с дисководами. Такие файлы имеют расширение COM (как в
MS-DOS) и могут запускаться непосредственно из коммандного режима
CP/M (набрав имя файла) или из графической программы-оболочки
типа NortonCommander или BridgePanels.
2. Диски с программами или играми под ORDOS - оригинальную систему,
расчитанную на работу с Rom-Disk (ПЗУ) и квазидисками (ОЗУ). 
Обычно это диски с файловой системой CP/M, содержащие файлы с 
расширением ORD или BRU. Эти файлы нельзя непосредственно
запустить из CP/M, их нужно скопировать на "квазидиск", а затем
уже запускать под ОС ORDOS. Для копирования файлов BRU с дисков
CP/M на "квазизиск" в ОЗУ можно воспользоваться программой ATLAS,
расположенной в ROM-Диске эмулятора .\ROM\romdisk1.bin (его нужно
указать как файл ROM-диска в настройках эмулятора). ATLAS в 
псевдографическом режиме выбирает с дискеты CP/M файлы *.BRU 
(*.ORD не понимает - их нужно под CP/M переименовывать в *.BRU)
и копирует их на квазидиски ORDOS, а уже под ORDOS в командном 
режиме или оболочке NC с этими файлами можно работать.

OHI-"диски" это диски с образами HDD (CFcard,SDcard).
На Орионе я решил делать так: винт разбивается на стандартные MBR-партиции -
как в Windows/MSDOS. Поддерживается 4 стандартных master-партиции. И разбитый
так винт можно подключать как к PC с виндой (винда работает со своей
FAT-партицией, плюс утилитами можно сдампить в OHI-образ и обратно), так и
к Ориону, который живет (грузится) в своей CP/M партиции и может монтировать
другие CP/M партиции этого или второго винта.

Варианты загрузки с IDE (CF,SD) на Орионе:

- при помощи ПЗУ F800 (один из: M35ZMSH.BIN, M35ZRKH.BIN, M36ZMSH.BIN,
M36ZRKH.BIN,...). ПЗУ при включении питания вместо ORDOS сразу грузит MBR-сектор
с master-IDE в ОЗУ по адресу 1:0000 (т.е. с начала второй физической страницы
памяти) и передает туда управление. M35* работают с IDE с портoм 0F500h, M36*
с портoм 0F600h. Суффикс *RK* обозначает прошивку для клавиатуры RK-86, *MS* -
для клавиатуры МС7007 по лениградской схеме.
- Вариант загрузки из ORDOS. ПЗУ F800 при этом может быть любым. ПЗУ F800 грузит
ORDOS и передает ей управление. Под ORDOS используйте утилиту MBOOT$.ord (ее
можно прошить в ROM-DISK), которая использует загрузчик, полностью аналогичный
Мониторам, но корректирующий в загружаемом с IDE-F600 коде MBR-загрузчика и
BOOT-сектора CPM все вызовы адреса 0F834h (это подпрограмма чтения с IDE 512б
сектора в Мониторах М3*H.BIN) на вызов своей подпрограммы, которая читает с HDD
соответственно схеме подключения, выбранной в меню программы MBOOT.
Дальнейшая загрузка происходит так, как написан MBR (в настоящее время он позволяет
грузиться по выбору с любого из 4-х primary разделов master-HDD, где есть
загрузочный образ CPM. Выводится меню - список меток_дисков [offset +20h]
соотвествующих разделов). MBR (а далее и BOOT-сектор раздела) используют п/п
0F834h (или п\п предоставляемую MBOOT$.ord). После начальной загрузки CP/M
работает уже собственным BIOS, не через Монитор или MBOOT.


## Эмуляция RS-232
В Версии 1.06 добавлен режим эмуляции последовательного порта (RS-232),
порты F764,F765. Эмулятор осуществляет ввод\вывод в реально существующий в РС
СОМ-порт. Поэтому есть 2 варианта использования этого режима: в настройках 
эмулятора выбрать реальный СОМ-порт и подключить к нему некое устройство, либо
создать в Windows пару виртуальных СОМ-портов на нульмодемном соединении 
(я для этого использую бесплатную утилиту com0com, но есть и платные аналоги),
на одном конце повесить эмулятор (выбрать порт CNCB0), а на другом (CNCA0) -  
эмулятор устройства или программу терминал.


## Соответствие некоторых спецкнопок в эмуляторе (RK = PC):
```
УСТ = Home
ПС = End
СТР = Ins
ЗБ = BackSpace
AP2 = Esc
F1..F5 = F1..F5
Ctrl+G = Del
Ctrl+R = PgUp
Ctrl+C = PgDown
РусLat = F8=F9=Scroll (смотря как настроено в настройках
			 эмулятора на закладке "keyboard")
```
C учетом "TurboPascal-style"-расширителя (включается в настройках эмулятора на
закладке "keyboard") добавляются PC-комбинации Ctrl+кнопка для курсорных и 
фукциональных кнопок, которые транслируются Ориону в "CTRL-Q-кнопка"-сочетания.
За соответствием клавиш этого режима (если кому-то нужно) - добро пожаловать в
исходники (mod8255.pas).
