При подключении квазидиска к Микро-80, опубликованного в "Микропроцессорные средства и системы" 1984 года №4, необходимо программное обеспечение для его использования. Стандарной дисковой операционной системой для МикроЭВМ на базе Intel 8080 является CP/M. Она не была опубликована для Микро-80. Но была опубликована для другого компьютера - ЮТ-88 в "Юный техник. Для умелых рук" 1990 года №1. Данный проект посвящен реализации CP/M для Микро-80, ЮТ-88. Данная версия CP/M может запускаться без изменений на машинах Микро-80 и ЮТ-88. Она представляет собой восстановленную версию системы из исходных текстов DRI CP/M, дампов CP/M-64 для ЮТ-88, исходных кодов, опубликованных С.Н.Поповым в МИСиС.
CP/M может быть, в зависимости от конфигурации компьютера, загружена с rom-диска или с ленты. После загрузки и запуска загрузчика будет выведено меню с вариантами подготовки квазидиска. При создании пустого диска, на нем будет расположена утилита ch.com, которая позволяет скопировать файл с ленты на диск или с диска на ленту.
Далее, используя CH.COM, наполняем диск программами:
- CH STAT.COM
- CH POWER.COM
- CH PIP.COM
- CH DUMP.COM и т.д.
Обмен между диском и магнитофоном организован программой ch.com, основанной на ch.com, опубликованной для ЮТ-88. Программа несколько переработана для работы на любой машине, без привязки к МОНИТОРу, CP/M BIOS. Однако, формат записи на ленту (перфоратор) не совместим с директивами МОНИТОРа, что следует учитывать.
- STAT +
- ASM +
- DDT
- LOAD +
- PIP +
- ED +
- SYSGEN +
- SUBMIT +
- DUMP +
- MOVCPM
- POWER (была описана для ЮТ-88, поэтому пусть будет, без исходников)
- BASIC (тоже без исходников, MBASIC-85 5.29)
- FORMAT (пока даже не планируется)
- Восстановлены исходные тексты CP/M-64 на базе исходных текстов CP/M 2.2. Выполнена побайтная проверка бинарника.
- Восстановлены исходные тексты специфических для ЮТ-88 частей. BIOS восстановлен с использованием публикации С.Н.Попова в МПСиС.
- Убран прямой вызов недокументированных точек входа МОНИТОРа из эмулятора терминала
- Поддержка реализации квазидиска на МИКРО-80 (8 банков памяти, а не 4)
- Универсальный BIOS для ЮТ-88/МИКРО-80 (нет "запаздывания" ввода на МИКРО-80)
- Универсальный терминал для ЮТ-88/МИКРО-80
- Квазидиск имеет правильную структуру каталога при создании (не перекрыт частью BIOS)
- Загрузчик позволяет выбрать, формировать новый квазидиск или использовать текущий
- BIOS использует правильную п/п для устроства LST
- Загрузчик может быть загружен в любые адреса памяти (не только в 3100)
- Размер блока диска изменен на 2048 (для поддержки диска больше 256кб)
- Универсальный BIOS для ЮТ-88/МИКРО-80 с поддержкой обоих вариантов реализации диска (автоопределение размера диска? сейчас реализована поддержка максимальной емкости, что не очень хорошо для реальной железки)
- Загрузчик сейчас никак не учитывает возможные разные размеры памяти.
- Попробовать поддержать Радио-86РК, скорее всего, только 32К версию.
- Адаптация power.com под знакогенератор и 64 символа в строке.
Начало BIOS можно опреледить командой МОНИТОРа D1,2. Добавив смещение можно определить адрес точки входа. Данный метод является предпочтительней, чем прямое ипользование адресов точек входа. Вообще, использование BIOS не рекомендуется.
; Пример вызова подпрограмм BIOS
LD DE, -3 ; Смещение подпрограммы
CALL BIOS ; Вызов подпрограммы BIOS
...
RST 0 ; Возврат в систему
BIOS:
LD HL, (1) ; Определение адреса BIOS
ADD HL, DE ; Добавление смещение
JP (HL) ; Вызов подпрограммы
+---------------------+--------+------------------------------+
! Назначение !Смещение! Параметры !
+---------------------+--------+------------------------------+
! Холодный старт ! -3 ! ВХОДНЫЕ !
! ! ! ВЫХОДНЫЕ !
+---------------------+--------+------------------------------+
! Теплый старт ! 0 ! ВХОДНЫЕ !
! ! ! ВЫХОДНЫЕ !
+---------------------+--------+------------------------------+
! Состояние консоли ! 3 ! ВХОДНЫЕ !
! ! ! ВЫХОДНЫЕ !
! ! ! A=00H - клавиша не нажата !
! ! ! A=0FFH - клавиша нажата !
+---------------------+--------+------------------------------+
! Ввод с консоли ! 6 ! ВХОДНЫЕ !
! ! ! ВЫХОДНЫЕ !
+---------------------+--------+------------------------------+
! Вывод на консоль ! 9 ! ВХОДНЫЕ !
! ! ! ВЫХОДНЫЕ !
+---------------------+--------+------------------------------+
! Вывод на принтер ! 12 ! ВХОДНЫЕ !
! ! ! ВЫХОДНЫЕ !
+---------------------+--------+------------------------------+
! Вывод на магнитофон ! 15 ! ВХОДНЫЕ !
! ! ! ВЫХОДНЫЕ !
+---------------------+--------+------------------------------+
! Ввод с магнитофона ! 18 ! ВХОДНЫЕ !
! ! ! ВЫХОДНЫЕ !
+---------------------+--------+------------------------------+
; Пример вызова функций BDOS
LD DE, parameter
LD C, C_READ
CALL 5
+---------------------------+----------------+
! Назначение ! Номер функции !
+---------------------------+----------------+
! Теплый старт ! 0 (P_TERMCPM) !
+---------------------------+----------------+
! Ввод с консоли ! 1 (C_READ) !
+---------------------------+----------------+
! Вывод на консоль ! 2 (C_WRITE) !
+---------------------------+----------------+
! Прямой ввод-вывод консоли ! 6 (C_RAWIO) !
+---------------------------+----------------+
! Вывод строки на косоль ! 9 (C_WRITESTR) !
+---------------------------+----------------+
! Ввод строки с консоли ! 10 (C_READSTR) !
+---------------------------+----------------+
! Состояние консоли ! 11 (C_STAT) !
+---------------------------+----------------+
! Версия CP/M ! 12 (S_BDOSVER) !
+---------------------------+----------------+
+-------+-------+------------------------------------------------------------+
! 00–02 ! Код ! Выход из программы (так же используется для поиска BIOS) !
+-------+-------+------------------------------------------------------------+
! 03 ! Байт ! I/O byte (not implemented) !
+-------+-------+------------------------------------------------------------+
! 04 ! Byte ! Current CCP drive (low 4) and user (high 4) !
+-------+-------+------------------------------------------------------------+
! 05–07 ! Code ! Call CP/M BDOS system call. Also RAMTOP. !
+-------+-------+------------------------------------------------------------+
! 08–3A ! Code ! 8080 restart/interrupt vectors. !
+-------+-------+------------------------------------------------------------+
! 3B–4F ! Bytes ! Reserved !
+-------+-------+------------------------------------------------------------+
! 50 ! Byte ! The drive from which the program was loaded (CP/M 3) !
+-------+-------+------------------------------------------------------------+
! 51–52 ! Word ! Address of the password for the first FCB (CP/M 3) !
+-------+-------+------------------------------------------------------------+
! 53 ! Byte ! Length of the password for the first FCB (CP/M 3) !
+-------+-------+------------------------------------------------------------+
! 54–55 ! Word ! Address of the password for the second FCB (CP/M 3) !
+-------+-------+------------------------------------------------------------+
! 56 ! Byte ! Length of the password for the second FCB (CP/M 3) !
+-------+-------+------------------------------------------------------------+
! 57–5B ! Bytes ! Reserved !
+-------+-------+------------------------------------------------------------+
! 5C–6B ! ! Default FCB 1 !
+-------+-------+------------------------------------------------------------+
! 6C–7F ! ! Default FCB 2 (overwritten if FCB 1 is opened) !
+-------+-------+------------------------------------------------------------+
! 80 ! Byte ! Number of characters in command tail !
+-------+-------+------------------------------------------------------------+
! 81–FF ! Bytes ! Command tail (everything after the program name) !
+-------+-------+------------------------------------------------------------+