Copyleft HUMONGOUS CP/M Archives
При поддержке журналаRadio Magazine
RU | EN

CRISS CP/M

Краткое руководство по программированию в ОС CP/M 2.2

CP/M (Control Program/Monitor либо Control Programs for Microcomputers) - операционная система, первоначально предназначенная для 8-разрядных микрокомпьютеров. Написана в 1973 году программистом Гэри Килдаллом. Данная ОС является базовой для компьютера КРИСС CP/M.

Структура распределения памяти

Общая структура памяти в ОС CP/M имеет следующий вид (взято отсюда) :

CP/M RAM

В компьютере КРИСС CP/M размер ОЗУ равен 64 Кб (FFFFh) Область в адресах 0000H - 0100H является служебной ОС CP/M. Конкретные значения адресов расположения модулей CCP, BDOS, BIOS зависят от конкретной реализации ОС.

АдресКомандаОписание
0000 - 0002 JMP WBOOT горячий старт
0004 DS номер текущего диска
0005 - 0007 JMP BDOS системные вызовы
0038 - 003A JMP MONITOR переход к процедурам отладчика
005C - 007C FCB блок описания файла FCB по умолчанию
0080 - 00FF DMABUF буфер обмена с диском по умолчанию
0100 - **** TPA область пользовательских программ
CCP - **** CCP процессор консольных команд
BDOS - **** BDOS BDOS
BIOS - **** BDOS BIOS
F800 - FFFF VIDEO Область памяти экрана

Функции BDOS

Вызов функций BDOS осуществляется командой JP 0005, код функции передается в регистре C.

#d#hВходВыходОписание
000--сброс системы (горячий рестарт системы)
101-A = введенный символ ввод с клавиатуры
202E = выводимый символ- вывод на терминал
3 03-A = введенный символв КРИСС CP/M устройство назначается в системной консоли
4 04E = выводимый символ-вывод на внешнее устройство, в КРИСС CP/M устройство назначается в системной консоли
5 05E = выводимый символ-вывод на печатающее устройство
6 06E = 0FFh или символ A = символ или состояние ввод/вывод на терминал: E=0FFH - ввод в A символа, либо 00 E=ASCII символ - вывод
707-A = IOBYTEчтение байта управления вводом/выводом
808E = значение IOBYTE - установка байта ввода/вывода
909DE = адрес строки - вывод строки на терминал до символа $ (не печатается)
100ADE = адрес буфера строки - ввод строки с клавиатуры в буфер, его структура MX NS C1 .. Cn, MX - размер буфера, NS - число фактически считанных символов C* - символы
110B-A = FFh/00 есть/нет символ в вводе опрос состояния клавиатуры
120C-HL = номер версии ОС получение номера версии CPM: H=0 - CP/M , H=11 - MP/M, L=20...2F на CP/M 2.0 ... 2.15
130D-- сброс дисковой системы
140EE = дисковод-выбор диска, 0-A, 1-B, 2-C, .., 15-P
150FDE = FCBA = код каталога открытие файла вход, возвращает 0FFH ,если файл отсутствует
1610DE = FCBA = код каталога закрытие файла, возвращает 0FFH, если файл отсутствует
1711DE = FCBA = код каталога поиск первого файла в каталоге диска, по текущему адресу DMA заносится запись,содержащая точку входа каталога
1812DE = FCBA = код каталога поиск следующего файла - то же что и 17 но с текущего положения в каталоге
1913 DE = FCBA = код каталога стирание файла, возвращает 0FFH, если файл отсутствует
2014 DE = FCBA = код ошибки последовательное чтение, файл должен быть открыт, DMA, номер сек. и номер дорожки должен быть установлены, возвращает A=0 если норма и A<>0 если конец файла
2115 DE = FCBA = код ошибки последовательная запись, файл должен быть открыт, DMA, номер сек. и номер дорожки должен быть установлены, возвращает A=0 если норма и A<>0 если диск полон
2216 DE = FCBA = код каталога создание файла, возвращает 0FFH, если диск полон
2317 DE = FCBA = код каталогапереименование файла, FCB имеет другую структуру
2418-HL = состояние опрос вектора распределения активного дисковода
2519 -A = текущий дисковод получение активного диска
261ADE = DMA- установка адреса DMA
271B-HL = адрес вектора распределения получение адреса размещения вектора распределения
281C-- защита диска от записи
291D -HL = адрес вектора распределения получение вектора дисковода "только чтение"
301E DE = FCBA = код каталога установка атрибутов файла
311F -HL = DPB получение адреса блока параметров диска
3220E = FF/номерA = номер пользователя установка или получение (E=FFh) номера пользователя
3321 DE = FCBA = код каталогачтение в произвольном порядке
3422 DE = FCBA = код каталогазапись в произвольном порядке
3523 DE = FCBA = код каталога вычисление размера файла
3624 DE = FCB- расчет текущего адреса записи
3725 DE = DPHA = 00 сброс выбранного дисковода
4028 DE = FCBA = код каталога прямая запись адресованной записи

Функции BIOS

Вход в BIOS осуществляется посредством вектора перехода, размещенного в определенной ячейке. Адрес "нулевого" вектора WBOOT определяется как 16-битный адрес, расположенный в ячейках ОЗУ 0001, 0002h (байты 0h..2h ОЗУ содержат команду JMP WBOOT).

Описание функций BIOS компьютера КРИСС CP/M не полностью соответствует первоначальной спецификации CP/M 2.2.

#МнемоникаНазваниеВходВыходОписание
-BOOTхолодный старт-C = активный дисководотвечает за начальную инициализацию системы, включая выдачу сообщения о запуске CP/M. После инициализации управление передается CCP
0WBOOTгорячий старт--получает управление, когда имеет место повторный старт системы, обычно когда программа пользователя передает управление в ячейку с адресом 0000H - стандартный способ окончания программ пользователя в среде CP/M. По завершении инициализации управление передается в CCP
1 CONSTсостояние консоли-A = 0FFH, если клавиша нажата, иначе 00Hпроизводит опрос активности клавиатуры
2CONINввод символа с консоли-A = принятый символ считывает символ, до этого ожидает нажатия клавиши
3CONOUTвывод на дисплейC = символ для вывода-выводит символ на экран дисплея
4 LISTвывод на принтерC = символ для вывода- выводит символ на печать.
5PUNCHвывод на устройство C = символ для вывода-в КРИСС CP/M вывод осуществляется на устройство, назначенное через системную консоль.
6READERввод с устройства- A = принятый символ в КРИСС CP/M - ввод с устройства, назначенного через системную консоль, 0, если нет данных на входе.
7HOMEустановка дорожки 0 на выбранном диске-- устанавливает указатель дорожки в 0
8SELDSKвыбор диска C = номер дисководаHL = DPHвыбирает дисковод, (C=0 - дисковод "A",C=1 - дисковод "B" и т.д. до "P"). При выборе несуществующего дисковода возвращается HL=0000H
9SETTRK установка номера дорожки BC = номер дорожки-выбирает дорожку на диске, обычно номер дорожки не превышает 80D
10SETSECустановка номера сектораBC = номер сектора- выбирает сектор на выбранной дорожке, обычно номер сектора не превышает 26D
11SETDMA установка адреса DMABC = адрес буфера DMA- устанавливает адрес прямого доступа в память для последующих операций ввода-вывода с диском
12READчтение сектора-A = код ошибки, 00, если без ошибкисчитывает один сектор 128 байт с диска в ОЗУ, начиная с адреса, установленного в последней операции SETDMA
13WRITEзапись сектора-A = код ошибки, 00, если без ошибки записывает один сектор 128 байт из ОЗУ с адреса, определенного в последней операции SETDMA
14LISTSTчтение порта принтера-A = байт данныхв КРИСС CP/M при работе с последовательным портом возвращает последний принятый байт, 00, если нет данных
15SECTRANперенумерация секторовBC, DEHL = BC в оригинале осуществляет преобразование логического номера сектора на диске в физический. В КРИСС CP/M не используется, физический и логический адреса совпадают.

© Copyright Radio / Радио / OGSS / НГСС / I. Reshetnikov / Решетников И.С. 2020-2022