Инструменты пользователя

Инструменты сайта


msx:bdos

MSX BDOS

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, которые обычно находятся в нулевых страницах памяти других слотов.


Выражаем огромную благодарность А.Б. Родионову на предоставленную информацию!

Входные точки

Форма описания:

НомерИмя выполняемой функции
ФункцияВыполняемая функция
ВходВходные параметры
ВыходВозвращаемые значения
СовместимостьСуществует ли совместимость с CP/M

Пример вызова:

Из MSX-DOS:
LD C,#**
CALL #0005
Из MSX Disk BASIC:
LD C,#**
CALL #F37D
где ** — номер функции.

Функции, обозначенные "NO FUNCTION" возвращают 0 в регистре A.

00SYSTEM RESET
Если MSX-DOS, то переход по адресу 0000; иначе, осуществляется «тёплый» старт MSX Disk BASIC.
Вход Нет
ВыходНет
СовместимостьЕсть
01CONSOLE INPUT
ФункцияВвод символа с клавиатуры.
Если нажато CTRL+C, то выполняет функцию 00;
если CTRL+P, то начинается выдача эхо–сигналов на печать;
если CTRL+N, то прекращает выдачу эхо–сигналов на печать.
Вводимый символ отображается на экране.
ВходНет
ВыходРегистр А содержит ASCII символ, введённый с клавиатуры.
СовместимостьЕсть
02CONSOLE OUTPUT
ФункцияВывод ASCII символа из регистра Е на экран терминала.
ВходВ регистре Е содержится код выводимого ASCII символа.
ВыходНет
СовместимостьЕсть
03AUX INPUT
ФункцияВвод символа с устройства AUX (вспомогательное устройство, напр. принтер или драйвер диска).
ВходНет
ВыходРегистр А содержит ASCII символ, введённый с устройства AUX.
СовместимостьЕсть
04AUX OUTPUT
ФункцияВывод символа на устройство AUX.
ВходВ регистре Е содержится код выводимого ASCII символа.
ВыходНет
СовместимостьЕсть
05LST OUTPUT
ФункцияВывод на печать ASCII символа из регистра Е.
ВходВ регистре Е содержится код выводимого ASCII символа.
ВыходНет
СовместимостьЕсть
06DIRECT CONSOLE I/O
ФункцияЕсли в Е находится 0xFF, то \\Если нет ввода с клавиатуры, то возвращает 0.
Иначе, возвращает код.
Нет эхо–символов. Не фиксируются управляющие коды CTRL+*.
Иначе, вывод символа из регистра Е на экран.
ВходЕ: определяет функцию ввода или вывода, а также хранит код выводимого символа (если вывод).
ВыходА: если ввод, то содержит код введённого символа.
СовместимостьЕсть
07DIRECT INPUT
ФункцияВвод символа с клавиатуры.
Нет эхо–символов.
Не фиксируются управляющие коды CTRL+*.
ВходНет
ВыходА: содержит код введённого символа.
СовместимостьНет (чтение байта ввода/вывода)
08DIRECT INPUT
ФункцияВвод символа с клавиатуры.
Фиксируются управляющие коды CTRL+C, CTRL+P, CTRL+N.
ВходНет
ВыходА: содержит код введённого символа.
СовместимостьНет (установка байта ввода/вывода)
09STRING OUTPUT
ФункцияВывод строки, начальный адрес которой указывает пара
DE, до символа '$' если он встретится в этой строке.
ВходDE: содержит адрес первого символа строки.
ВыходНет
СовместимостьЕсть
BUFFERED INPUT
ФункцияВвод строки с клавиатуры до возврата каретки.
Первый символ строки заносится по адресу [DE+2].
По адресу [DE+1] заносится число введённых символов строки (не считая кодов LF и CR).
По адресу [DE] хранится максимальное число символов в строке, которое может быть введено.
ВходDE: определяет адрес буфера, отводимого на хранение вводимой строки.
[DE]: определяет максимальное количество символов, которое может быть введено (от 0 до 255).
ВыходНет
СовместимостьЕсть
0BCONSOLE STATUS
ФункцияЕсли нет ввода с клавиатуры, то возвращает 0; иначе, возвращает 0xFF.
ВходНет
ВыходА: содержит состояние клавиатуры: 0 или 0xFF.
СовместимостьЕсть
0CGET VERSION NUMBER
ФункцияОпределение номера версии.
ВходНет
ВыходHL содержит номер версии (H: 0; L: 0x22)
СовместимостьЕсть
0DDISK RESET
ФункцияУстанавливает драйвер диска по умолчанию (А:) \ Устанавливает адрес передачи равным 0x80.
Стирает все сектора, которые были изменены, но не были записаны на диск.
ВходНет
ВыходНет
СовместимостьЕсть
0ESELECT DISK
ФункцияУстанавливает драйвер диска по умолчанию ( 0 соответствует устройству А: ).
ВходЕ содержит номер драйвера диска.
ВыходНет
СовместимостьЕсть
0FOPEN FILE
ФункцияОткрывает файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE.
Поле размера записи, поле текущего блока, поле текущей записи и поле записи прямого доступа будут установлены после выполнения функции. Поле размера файла, поля даты и времени создания, поле идентификатора устройства (ID), поле расположения каталога, поле первого кластера, поле последнего кластера и поле последнего доступного кластера копируются из каталога.
Если функция выполнилась, то возвращает 0; иначе, — 0xFF.
ВходDE: указывает на первый байт FCB
ВыходA: 0, если файл открылся; 0xFF, в противном случае
СовместимостьЕсть
10CLOSE FILE
ФункцияЗакрывает файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE.
Если функция выполнилась, то возвращает 0; иначе, — 0xFF.
ВходDE: указывает на первый байт FCB
ВыходA: 0, если файл закрылся; 0xFF, в противном случае
СовместимостьЕсть
11SEARCH FIRST
ФункцияПоиск первого появления файла, определяемого Блоком Управления Файлом (FCB), начальный адрес которого содержится в DE.
Если файл найден, входная точка каталога (32 байта) копируется по адресу передачи, возвращается 0;
иначе, возвращает 0xFF.
Примечание: В имени файла возможны спец. символы (* и ?).
ВходDE: указывает на первый байт FCB
ВыходA: 0, если файл найден; 0xFF, в противном случае
СовместимостьЕсть
12SEARCH NEXT
ФункцияПоиск следующего появления файла, определённого последним вызовом функции SEARCH FIRST.
Если файл найден, входная точка каталога (32 байта) копируется по адресу передачи, возвращается 0;
иначе, возвращает 0xFF.
Примечание:В имени файла возможны спец. символы (* и ?).
ВходНет
ВыходA: 0, если файл найден; 0xFF, в противном случае
СовместимостьЕсть
13DELETE FILE
ФункцияСтирает файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE.
Если функция выполнилась, то возвращает 0; иначе, — 0xFF.
Примечание: В имени файла возможны спец. символы (* и ?).
ВходDE: указывает на первый байт FCB
ВыходA: 0, если файл был удалён; 0xFF, в противном случае
СовместимостьЕсть
14SEQUENTAL READ
ФункцияЧитает запись файла, определяемого Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Передаёт прочитанную запись по адресу передачи. Запись определяется полем текущего блока и полем текущей записи. Поля текущего блока и текущей записи увеличиваются на 1 при выходе из функции. Размер записи всегда равен 128 байтам.
Если функция выполнилась, то возвращает 0; иначе, — 1.
Примечание: Эта функция оставлена для совместимости с CP/M. Настоятельно рекомендуется использовать другую функцию: RANDOM BLOCK READ.
ВходDE: указывает на первый байт FCB
ВыходA: 0, если чтение выполнилось; 1, в противном случае
СовместимостьЕсть
15SEQUENTAL WRITE
ФункцияПосылает запись в файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Запись определяется полем текущего блока и полем текущей записи. Поля текущего блока и текущей записи увеличиваются на 1 при выходе из функции. Размер записи всегда равен 128 байтам.
Если функция выполнилась, то возвращает 0; иначе, — 1.
Примечание: Эта функция оставлена для совместимости с CP/M. Настоятельно рекомендуется использовать другую функцию: RANDOM BLOCK WRITE.
ВходDE: указывает на первый байт FCB
ВыходA: 0, если запись выполнена; 1, в противном случае
СовместимостьЕсть
16CREATE FILE
ФункцияОткрывает файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Если данный файл уже существует, то он стирается.
Поле размера записи, поле текущей записи, поле текущего блока и поле записи произвольного доступа устанавливаются после выполнения этой функции.
Если функция выполнилась, то возвращает 0; иначе, — 0xFF.
ВходDE: указывает на первый байт FCB
ВыходA: 0, если файл открылся; 0xFF, в противном случае
СовместимостьЕсть
17RENAME FILE
ФункцияМеняет имя файла, определяемого Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE, на имя файла, определяемое Блоком Управления Файлом (FCB), начальный адрес которого содержится в (DE+16).
Если функция выполнилась, то возвращает 0; иначе, — 0xFF.
Примечание: В имени файла возможны спец. символы (* и ?).
ВходDE: указывает на первый байт FCB старого файла (DE+16): указывает на первый байт FCB нового файла
ВыходA: 0, если файл переименовался; 0xFF, в противном случае
СовместимостьЕсть
18GET LOGIN VECTOR
ФункцияВозвращает таблицу битов для включённых устройств (вектор начального состояния системы).
В отличии от CP/M, все системные устройства включены.
ВходНет
ВыходHL: содержит вектор начального состояния системы
СовместимостьЕсть
19GET DEFAULT DRIVE NAME
ФункцияВозвращает имя устройства по умолчанию.
ВходНет
ВыходА: имя (номер) устройства по умолчанию
СовместимостьЕсть
SET DMA ADDRESS
ФункцияУстанавливает адрес передачи.
ВходDE: устанавливаемый (новый) адрес передачи
ВыходНет
СовместимостьЕсть
1BGET ALLOCATION
ФункцияВозвращает информацию о драйвере, определённом в регистре Е, если имя драйвера правильное; иначе, возвращает 0xFF.
ВходЕ: имя драйвера
Выход
СовместимостьНет (чтение адреса расположения)

Системные вызовы для CP/M версии 2.0 и более поздних

1CNO FUNCTION
СовместимостьНет (установка вектора защиты записи)
1DNO FUNCTION
СовместимостьНет (чтение вектора защиты записи)
NO FUNCTION
СовместимостьНет (установка атрибутов файла)
1FNO FUNCTION
СовместимостьНет (чтение адреса параметров диска)
20NO FUNCTION
СовместимостьНет (установка/чтение кода пользователя)
21RANDOM READ
ФункцияЧтение записи файла, определяемого Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Запись переносится по адресу передачи. Запись определяется полем блока произвольного доступа. Это поле не изменяется при выполнении данной функции. Размер записи всегда 128 байт.
Если функция выполнилась, то возвращает 0; иначе, — 1.
Примечание: Эта функция оставлена для совместимости с CP/M. Настоятельно рекомендуется использовать другую функцию: RANDOM BLOCK READ.
ВходDE: указывает на первый байт FCB
ВыходA: 0, если запись прочиталась; 1, в противном случае
СовместимостьЕсть
22RANDOM WRITE
ФункцияПосылает запись в файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Запись переносится, начиная с адреса передачи. Запись определяется полем блока произвольного доступа. Это поле не изменяется при выполнении данной функции. Размер записи всегда 128 байт.
Если функция выполнилась, то возвращает 0; иначе, — 1.
Примечание: Эта функция оставлена для совместимости с CP/M. Настоятельно рекомендуется использовать другую функцию: RANDOM BLOCK WRITE.
ВходDE: указывает на первый байт FCB
ВыходA: 0, если запись осуществилась; 1, в противном случае
СовместимостьЕсть
23GET FILE SIZE
ФункцияВычисляет размер файла (кратное число блоков по 128 байт), определяемого Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Устанавливает размер файла в поле записи произвольного доступа.
Если функция выполнилась, то возвращает 0; иначе, — 0xFF.
ВходDE: указывает на первый байт FCB
ВыходA: 0, если размер получен; 0xFF, в противном случае
СовместимостьЕсть
24SET RANDOM RECORD
ФункцияВычисляет текущую позицию записи по полю текущего блока и полю полю текущей записи данного Блока Управления Файлом (FCB), начальный адрес которого содержится в DE. Устанавливает позицию записи в поле записи прямого доступа данного FCB.
ВходDE: указывает на первый байт FCB
ВыходНет
СовместимостьЕсть

Системные вызовы для CP/M версии 2.2 и более поздних

25NO FUNCTION
СовместимостьНет (сброс драйвера диска)
26

RANDOM BLOCK WRITE

ФункцияПосылает запись (записи) в файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Запись переносится, начиная с адреса передачи. Запись определяется полем блока произвольного доступа. Поле записи прямого доступа автоматически увеличивается при успешном исходе операции. Размер записи определяется полем размера записи.
Количество записей определяет содержимое пары HL.
Если функция выполнилась, то возвращает 0; иначе, — 1.
ВходDE: указывает на первый байт FCB
HL: указывает количество последовательных записей
ВыходA: 0, если запись осуществилась; 1, в противном случае
СовместимостьНет (NO FUNCTION)
27

RANDOM BLOCK READ

ФункцияЧитает запись (записи) из файла, определяемого Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Запись переносится, по адресу передачи. Запись определяется полем блока произвольного доступа. Поле записи прямого доступа автоматически увеличивается при успешном исходе операции. Размер записи определяется полем размера записи.
Количество записей определяет содержимое пары HL.
Количество прочитанных записей после завершения операции заносится в пару HL.
Если функция выполнилась, то возвращает 0; иначе, — 1.
Вход DE: указывает на первый байт FCB
HL: указывает количество последовательных записей
ВыходA: 0, если запись осуществилась; 1, в противном случае HL: указывает количество прочитанных записей
СовместимостьНет (NO FUNCTION)
28RANDOM WRITE WITH ZERO FILL
ФункцияПосылает запись в файл, определяемый Блоком Управления Файлом (File Control Block — FCB), начальный адрес которого содержится в DE. Запись переносится, начиная с адреса передачи. Запись определяется полем блока произвольного доступа. Это поле не изменяется данной операцией. Размер записи всегда равен 128 байт. Если файл расширяется, то все записи, которые не заносятся, заполняются нулями.
Если функция выполнилась, то возвращает 0; иначе, — 1.
ВходDE: указывает на первый байт FCB
ВыходA: 0, если запись осуществилась; 1, в противном случае
СовместимостьЕсть

Системные вызовы только для MSX DOS

Системные вызовы только для MSX-DOS

29NO FUNCTION
СовместимостьНет
2A

GET DATE

ФункцияВозвращает дату.
ВходНет
ВыходHL: год
D: месяц
E: день
А: день недели
СовместимостьНет
2BSET DATA
ФункцияУстанавливает дату. Если успешно, то возвращает 0; иначе, — 0xFF.
ВходАналогичен выходу для функции GET DATE
ВыходA: 0, если дата установилась; 0xFF, в противном случае
СовместимостьНет
2C

GET TIME

ФункцияВозвращает время.
ВходНет
ВыходH: часы
L: минуты
D: секунды
E: 1/100 секунды
СовместимостьНет
2DSET TIME
ФункцияУстанавливает время. Если успешно, то возвращает 0;
иначе, — 0xFF.
ВходАналогичен выходу для функции GET TIME
ВыходA: 0, если дата установилась; 0xFF, в противном случае
СовместимостьНет
2ESET/RESET VERIFY FLAG
ФункцияУстановка/сброс флага «чтение после записи».
ВходЕ: 0 (флаг сбрасывается); не 0 (флаг устанавливается)
ВыходHет
СовместимостьНет
2FABSOLUTE DISK READ
ФункцияЧтение Н секторов, начиная с сектора с логическим номером DE, с драйвера, определяемого регистром L. Данные записываются в память, начиная с адреса передачи.
ВходDЕ: логический номер сектора
Н: количество секторов для чтения
L: спецификация драйвера
Выход Нет
СовместимостьНет
30ABSOLUTE DISK WRITE
ФункцияЗапись Н секторов, начиная с сектора с логическим номером DE, с драйвера, определяемого регистром L. Данные переписываются из памяти, начиная с адреса передачи.
ВходDЕ: логический номер сектора
Н: количество секторов для чтения
L: спецификация драйвера
ВыходНет
СовместимостьНет

Ссылки

msx/bdos.txt · Последние изменения: 2022-08-05 21:53 — GreyWolf