BDOS — Basic Disk Operating System (Базовая Дисковая Операционная Система)
MSXDOS.SYS
это интерфейс между программой пользователя и дисковыми функциями ROM. Кроме дисковых функций он включает в себя и некоторые базовые функции ввода/вывода для работы с другими устройствами, в частности, с консолью. Часть этих функций выполняется при помощи обращений к ROM MSX BIOS, а часть выполняется непосредственно программами MSX-DOS Kernel, которые находятся в памяти постоянно. Этими же функциями пользуется и COMMAND.COM
.
По большей части, вектор встроенных вызовов MSXDOS.SYS
совместим с CP/M, что позволяет запускать в MSX-DOS программы, написанные для CP/M без изменений, но, кроме этого, MSXDOS.SYS
включает в себя и некоторые дополнительные функции, которых в CP/M нет. В частности, работу с датами и временем.
Вектор обращений к функциям MSXDOS.SYS
занимает в оперативной памяти адреса 0x0000–0x0100 и совпадает с CP/M, а сами исполняемые программы находятся в верхней области памяти.
Адреса ОЗУ между 0x0100 и верхней рабочей областью MSXDOS.SYS
называются «транзитной областью» (TPA — transient program area) и предоставляются программам пользователя. Подробнее от TPA написано здесь.
Вектор переходов в рабочую область, находящуюся на 3–й странице оперативной памяти (0x0С00–0xFFFF), удобен также и тем, что эта страница остаётся в RAM при межслотовых обращениях к BIOS, SUB-ROM и DISK-ROM, которые обычно находятся в нулевых страницах памяти других слотов.
В DISK-ROM есть строка:
MSX-DOS ver. 2.2 Copyright 1984 by Microsoft
Это значит, что BDOS MSX совместим с версией CP/M 2.2
Выражаем огромную благодарность А.Б. Родионову на предоставленную информацию!
Форма описания:
Номер | Имя выполняемой функции |
---|---|
Функция | Выполняемая функция |
Вход | Входные параметры |
Выход | Возвращаемые значения |
Совместимость | Существует ли совместимость с CP/M |
Пример вызова:
Из MSX-DOS: LD C,#** CALL #0005 | Из MSX Disk BASIC:LD C,#** CALL #F37D |
где ** — номер функции. |
00 | SYSTEM RESET |
---|---|
Если MSX-DOS, то переход по адресу 0000; иначе, осуществляется «тёплый» старт MSX Disk BASIC. | |
Вход | Нет |
Выход | Нет |
Совместимость | Есть |
01 | CONSOLE INPUT |
Функция | Ввод символа с клавиатуры. Если нажато CTRL+C, то выполняет функцию 00; если CTRL+P, то начинается выдача эхо–сигналов на печать; если CTRL+N, то прекращает выдачу эхо–сигналов на печать. Вводимый символ отображается на экране. |
Вход | Нет |
Выход | Регистр А содержит ASCII символ, введённый с клавиатуры. |
Совместимость | Есть |
02 | CONSOLE OUTPUT |
Функция | Вывод ASCII символа из регистра Е на экран терминала. |
Вход | В регистре Е содержится код выводимого ASCII символа. |
Выход | Нет |
Совместимость | Есть |
03 | AUX INPUT |
Функция | Ввод символа с устройства AUX (вспомогательное устройство, напр. принтер или драйвер диска). |
Вход | Нет |
Выход | Регистр А содержит ASCII символ, введённый с устройства AUX. |
Совместимость | Есть |
04 | AUX OUTPUT |
Функция | Вывод символа на устройство AUX. |
Вход | В регистре Е содержится код выводимого ASCII символа. |
Выход | Нет |
Совместимость | Есть |
05 | LST OUTPUT |
Функция | Вывод на печать ASCII символа из регистра Е. |
Вход | В регистре Е содержится код выводимого ASCII символа. |
Выход | Нет |
Совместимость | Есть |
06 | DIRECT CONSOLE I/O |
Функция | Если в Е находится 0xFF, то \\Если нет ввода с клавиатуры, то возвращает 0. Иначе, возвращает код. Нет эхо–символов. Не фиксируются управляющие коды CTRL+*. Иначе, вывод символа из регистра Е на экран. |
Вход | Е: определяет функцию ввода или вывода, а также хранит код выводимого символа (если вывод). |
Выход | А: если ввод, то содержит код введённого символа. |
Совместимость | Есть |
07 | DIRECT INPUT |
Функция | Ввод символа с клавиатуры. Нет эхо–символов. Не фиксируются управляющие коды CTRL+*. |
Вход | Нет |
Выход | А: содержит код введённого символа. |
Совместимость | Нет (чтение байта ввода/вывода) |
08 | DIRECT INPUT |
Функция | Ввод символа с клавиатуры. Фиксируются управляющие коды CTRL+C, CTRL+P, CTRL+N. |
Вход | Нет |
Выход | А: содержит код введённого символа. |
Совместимость | Нет (установка байта ввода/вывода) |
09 | STRING OUTPUT |
Функция | Вывод строки, начальный адрес которой указывает пара DE, до символа '$' если он встретится в этой строке. |
Вход | DE: содержит адрес первого символа строки. |
Выход | Нет |
Совместимость | Есть |
0А | BUFFERED INPUT |
Функция | Ввод строки с клавиатуры до возврата каретки. Первый символ строки заносится по адресу [DE+2]. По адресу [DE+1] заносится число введённых символов строки (не считая кодов LF и CR). По адресу [DE] хранится максимальное число символов в строке, которое может быть введено. |
Вход | DE: определяет адрес буфера, отводимого на хранение вводимой строки. [DE]: определяет максимальное количество символов, которое может быть введено (от 0 до 255). |
Выход | Нет |
Совместимость | Есть |
0B | CONSOLE STATUS |
Функция | Если нет ввода с клавиатуры, то возвращает 0; иначе, возвращает 0xFF. |
Вход | Нет |
Выход | А: содержит состояние клавиатуры: 0 или 0xFF. |
Совместимость | Есть |
0C | GET VERSION NUMBER |
Функция | Определение номера версии. |
Вход | Нет |
Выход | HL содержит номер версии (H: 0; L: 0x22) |
Совместимость | Есть |
0D | DISK RESET |
Функция | Устанавливает драйвер диска по умолчанию (А:) \ Устанавливает адрес передачи равным 0x80. Стирает все сектора, которые были изменены, но не были записаны на диск. |
Вход | Нет |
Выход | Нет |
Совместимость | Есть |
0E | SELECT DISK |
Функция | Устанавливает драйвер диска по умолчанию ( 0 соответствует устройству А: ). |
Вход | Е содержит номер драйвера диска. |
Выход | Нет |
Совместимость | Есть |
0F | OPEN FILE |
Функция | Открывает файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Поле размера записи, поле текущего блока, поле текущей записи и поле записи прямого доступа будут установлены после выполнения функции. Поле размера файла, поля даты и времени создания, поле идентификатора устройства (ID), поле расположения каталога, поле первого кластера, поле последнего кластера и поле последнего доступного кластера копируются из каталога. Если функция выполнилась, то возвращает 0; иначе, — 0xFF. |
Вход | DE: указывает на первый байт FCB |
Выход | A: 0, если файл открылся; 0xFF, в противном случае |
Совместимость | Есть |
10 | CLOSE FILE |
Функция | Закрывает файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Если функция выполнилась, то возвращает 0; иначе, — 0xFF. |
Вход | DE: указывает на первый байт FCB |
Выход | A: 0, если файл закрылся; 0xFF, в противном случае |
Совместимость | Есть |
11 | SEARCH FIRST |
Функция | Поиск первого появления файла, определяемого Блоком Управления Файлом (FCB), начальный адрес которого содержится в DE. Если файл найден, входная точка каталога (32 байта) копируется по адресу передачи, возвращается 0; иначе, возвращает 0xFF. Примечание: В имени файла возможны спец. символы (* и ?). |
Вход | DE: указывает на первый байт FCB |
Выход | A: 0, если файл найден; 0xFF, в противном случае |
Совместимость | Есть |
12 | SEARCH NEXT |
Функция | Поиск следующего появления файла, определённого последним вызовом функции SEARCH FIRST. Если файл найден, входная точка каталога (32 байта) копируется по адресу передачи, возвращается 0; иначе, возвращает 0xFF. Примечание:В имени файла возможны спец. символы (* и ?). |
Вход | Нет |
Выход | A: 0, если файл найден; 0xFF, в противном случае |
Совместимость | Есть |
13 | DELETE FILE |
Функция | Стирает файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Если функция выполнилась, то возвращает 0; иначе, — 0xFF. Примечание: В имени файла возможны спец. символы (* и ?). |
Вход | DE: указывает на первый байт FCB |
Выход | A: 0, если файл был удалён; 0xFF, в противном случае |
Совместимость | Есть |
14 | SEQUENTAL READ |
Функция | Читает запись файла, определяемого Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Передаёт прочитанную запись по адресу передачи. Запись определяется полем текущего блока и полем текущей записи. Поля текущего блока и текущей записи увеличиваются на 1 при выходе из функции. Размер записи всегда равен 128 байтам. Если функция выполнилась, то возвращает 0; иначе, — 1. Примечание: Эта функция оставлена для совместимости с CP/M. Настоятельно рекомендуется использовать другую функцию: RANDOM BLOCK READ . |
Вход | DE: указывает на первый байт FCB |
Выход | A: 0, если чтение выполнилось; 1, в противном случае |
Совместимость | Есть |
15 | SEQUENTAL WRITE |
Функция | Посылает запись в файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Запись определяется полем текущего блока и полем текущей записи. Поля текущего блока и текущей записи увеличиваются на 1 при выходе из функции. Размер записи всегда равен 128 байтам. Если функция выполнилась, то возвращает 0; иначе, — 1. Примечание: Эта функция оставлена для совместимости с CP/M. Настоятельно рекомендуется использовать другую функцию: RANDOM BLOCK WRITE . |
Вход | DE: указывает на первый байт FCB |
Выход | A: 0, если запись выполнена; 1, в противном случае |
Совместимость | Есть |
16 | CREATE FILE |
Функция | Открывает файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Если данный файл уже существует, то он стирается. Поле размера записи, поле текущей записи, поле текущего блока и поле записи произвольного доступа устанавливаются после выполнения этой функции. Если функция выполнилась, то возвращает 0; иначе, — 0xFF. |
Вход | DE: указывает на первый байт FCB |
Выход | A: 0, если файл открылся; 0xFF, в противном случае |
Совместимость | Есть |
17 | RENAME FILE |
Функция | Меняет имя файла, определяемого Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE, на имя файла, определяемое Блоком Управления Файлом (FCB), начальный адрес которого содержится в (DE+16). Если функция выполнилась, то возвращает 0; иначе, — 0xFF. Примечание: В имени файла возможны спец. символы (* и ?). |
Вход | DE: указывает на первый байт FCB старого файла (DE+16): указывает на первый байт FCB нового файла |
Выход | A: 0, если файл переименовался; 0xFF, в противном случае |
Совместимость | Есть |
18 | GET LOGIN VECTOR |
Функция | Возвращает таблицу битов для включённых устройств (вектор начального состояния системы). В отличии от CP/M, все системные устройства включены. |
Вход | Нет |
Выход | HL: содержит вектор начального состояния системы |
Совместимость | Есть |
19 | GET DEFAULT DRIVE NAME |
Функция | Возвращает имя устройства по умолчанию. |
Вход | Нет |
Выход | А: имя (номер) устройства по умолчанию |
Совместимость | Есть |
1А | SET DMA ADDRESS |
Функция | Устанавливает адрес передачи. |
Вход | DE: устанавливаемый (новый) адрес передачи |
Выход | Нет |
Совместимость | Есть |
1B | GET ALLOCATION |
Функция | Возвращает информацию о драйвере, определённом в регистре Е, если имя драйвера правильное; иначе, возвращает 0xFF. |
Вход | Е: имя драйвера |
Выход | |
Совместимость | Нет (чтение адреса расположения) |
1C | NO FUNCTION |
---|---|
Совместимость | Нет (установка вектора защиты записи) |
1D | NO FUNCTION |
Совместимость | Нет (чтение вектора защиты записи) |
1Е | NO FUNCTION |
Совместимость | Нет (установка атрибутов файла) |
1F | NO FUNCTION |
Совместимость | Нет (чтение адреса параметров диска) |
20 | NO FUNCTION |
Совместимость | Нет (установка/чтение кода пользователя) |
21 | RANDOM READ |
Функция | Чтение записи файла, определяемого Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Запись переносится по адресу передачи. Запись определяется полем блока произвольного доступа. Это поле не изменяется при выполнении данной функции. Размер записи всегда 128 байт. Если функция выполнилась, то возвращает 0; иначе, — 1. Примечание: Эта функция оставлена для совместимости с CP/M. Настоятельно рекомендуется использовать другую функцию: RANDOM BLOCK READ . |
Вход | DE: указывает на первый байт FCB |
Выход | A: 0, если запись прочиталась; 1, в противном случае |
Совместимость | Есть |
22 | RANDOM WRITE |
Функция | Посылает запись в файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Запись переносится, начиная с адреса передачи. Запись определяется полем блока произвольного доступа. Это поле не изменяется при выполнении данной функции. Размер записи всегда 128 байт. Если функция выполнилась, то возвращает 0; иначе, — 1. Примечание: Эта функция оставлена для совместимости с CP/M. Настоятельно рекомендуется использовать другую функцию: RANDOM BLOCK WRITE . |
Вход | DE: указывает на первый байт FCB |
Выход | A: 0, если запись осуществилась; 1, в противном случае |
Совместимость | Есть |
23 | GET FILE SIZE |
Функция | Вычисляет размер файла (кратное число блоков по 128 байт), определяемого Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Устанавливает размер файла в поле записи произвольного доступа. Если функция выполнилась, то возвращает 0; иначе, — 0xFF. |
Вход | DE: указывает на первый байт FCB |
Выход | A: 0, если размер получен; 0xFF, в противном случае |
Совместимость | Есть |
24 | SET RANDOM RECORD |
Функция | Вычисляет текущую позицию записи по полю текущего блока и полю полю текущей записи данного Блока Управления Файлом (FCB), начальный адрес которого содержится в DE. Устанавливает позицию записи в поле записи прямого доступа данного FCB. |
Вход | DE: указывает на первый байт FCB |
Выход | Нет |
Совместимость | Есть |
Системные вызовы только для MSX-DOS
29 | NO FUNCTION |
---|---|
Совместимость | Нет |
2A | GET DATE |
Функция | Возвращает дату. |
Вход | Нет |
Выход | HL: год D: месяц E: день А: день недели |
Совместимость | Нет |
2B | SET DATA |
Функция | Устанавливает дату. Если успешно, то возвращает 0; иначе, — 0xFF. |
Вход | Аналогичен выходу для функции GET DATE |
Выход | A: 0, если дата установилась; 0xFF, в противном случае |
Совместимость | Нет |
2C | GET TIME |
Функция | Возвращает время. |
Вход | Нет |
Выход | H: часы L: минуты D: секунды E: 1/100 секунды |
Совместимость | Нет |
2D | SET TIME |
Функция | Устанавливает время. Если успешно, то возвращает 0; иначе, — 0xFF. |
Вход | Аналогичен выходу для функции GET TIME |
Выход | A: 0, если дата установилась; 0xFF, в противном случае |
Совместимость | Нет |
2E | SET/RESET VERIFY FLAG |
Функция | Установка/сброс флага «чтение после записи». |
Вход | Е: 0 (флаг сбрасывается); не 0 (флаг устанавливается) |
Выход | Hет |
Совместимость | Нет |
2F | ABSOLUTE DISK READ |
Функция | Чтение Н секторов, начиная с сектора с логическим номером DE, с драйвера, определяемого регистром L. Данные записываются в память, начиная с адреса передачи. |
Вход | DЕ: логический номер сектора Н: количество секторов для чтения L: спецификация драйвера |
Выход | Нет |
Совместимость | Нет |
30 | ABSOLUTE DISK WRITE |
Функция | Запись Н секторов, начиная с сектора с логическим номером DE, с драйвера, определяемого регистром L. Данные переписываются из памяти, начиная с адреса передачи. |
Вход | DЕ: логический номер сектора Н: количество секторов для чтения L: спецификация драйвера |
Выход | Нет |
Совместимость | Нет |