Files
Sprinter-SDCC/docs/converted/BIOS_v3.txt
T
snark13 c71e249a4e Add full compiler toolchain, libc, examples and reference docs
First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.

What's in here:
  bin/sprinter-cc        — driver script invoking SDCC + linker + mkexe
  libc/                  — Sprinter-specific libc layer over ESTEX/BIOS
                           (conio, gfx, io, mem, stdio + headers)
  runtime/               — crt0 variants (default/small/banked/minimal)
                           + heap + bank trampolines
  toolchain/             — mkexe (SprintEXE packer, C + tests)
  examples/              — 30 demo programs (gfx, file I/O, env, time, …)
  lib/Makefile           — builds the libc archive (sprinter.lib)
  docs/                  — converted Sprinter manuals + asm reference samples
  third_party/           — solid-c reference compiler dump + sdcc setup script
  release_docs/          — packaging / release notes

gitignore overhaul:
  • Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
    and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
    on macOS APFS).  Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
  • Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
    INPUT fixtures, not build outputs.
  • Collapse the duplicated SDCC/C/Sdcc sections into one section per
    concern (build outputs / vendored / OS-junk).
  • Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-03 16:13:21 +03:00

358 lines
47 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Функции BIOS v3.00
Вызов функций BIOS осуществляется из ассемблерного кода.

    Номер функции задается в регистре C процессора. В остальные регистры, при необходимости, загружаются входные параметры функции. После исполнения функции происходит возврат в программу, из которой произошел вызов функции. Установленный флаг CF (CF=1) означает, что работа функции произошла с ошибкой. В некоторых регистрах передаются выходные параметры.

Ниже приведены таблицы входных и выходных параметров для каждой функции:
HYPERLINK "" \l "t01" Функции работы с памятью
HYPERLINK "" \l "t04" Функции управления 'железом'
HYPERLINK "" \l "t06" Функции управления окнами и режимами экрана
HYPERLINK "" \l "t07" Функции вывода текста на экран
HYPERLINK "" \l "t08" Графические функции
HYPERLINK "" \l "t11" Функции работы с жесткими дисками и дисководами
    При работе функций BIOS необходимо что бы стек находился в области 8000h..0BFFFh, так как часть функций использует переключение страниц PAGE1 и PAGE3.

Вызов функций BIOS возможен в различных конфигурациях компьютера Sprinter.

Конфигурация Spectrum: вызов функций BIOS осуществляется через 3D13h. При этом работают и все функции TR-DOS.

Конфигурации Sprinter: вызов функций BIOS осуществляется через RST 18h при подключенном системном ПЗУ.

Для постоянного подключения системного ПЗУ можно воспользоваться такой последовательностью команд:
LD A,0
OUT (07Ch),A
После ее исполнения в 0-м окне Z80 будет включено ПЗУ BIOSа и программа может вызывать функции BIOSа через RST 18h.

Отключение ПЗУ BIOSа из нулевого окна Z80 производится следующей последовательностью команд:
LD A,0
OUT (03Ch),A
При необходимости, функции BIOSа могут быть вызваны программой, находящейся в ОЗУ непосредственно в нулевом окне Z80. Для этого надо установить в адресе 0008h следующий код:
ADDRESS_0008h:
PUSH AF
LD A,0
OUT (7Ch),A
POP AF
RET
    После этого BIOS можно вызывать командой RST 8. (Функции TR-DOS, так же как и в случае RST 18 остаются недоступны.) Вызывая программы таким образом, через RST 8, следует помнить что адреса 3FFFh..0000h после входа в BIOS будут содержать код ПЗУ, поэтому, если фунция использует данные в ОЗУ, они должны находиться в других адресах.

    Оптимизация программы для RST 8 недопустима, так как в ПЗУ, для обратного переключения, стоит такая же программа, только порт 3Ch для отключения ПЗУ BIOSа.

    Вызов функций BIOS в exe-файлах, вызываемых с помощью операционной системы Estex, производится командой RST 8. Необходимая программа в адресе 0008h уже имеется в блоке кода ОС Estex.


Функции работы с памятью
0C0h (192) EMM_FN0 Определение объемов ОЗУ
Значение регистров на входе:
  C=0C0h
Значение регистров на выходе:
  HL - общий объем ОЗУ в страницах по 16k
  BC - объем свободного ОЗУ в страницах по 16k
0C1h (193) EMM_FN1 Инициализация распределения памяти.
  Стирается вся информация о выделенных ранее блоках ОЗУ.
  Блоки с системной информацией и первые 256K ОЗУ объявляются занятыми.
Значение регистров на входе:
  C=0C1h
Значение регистров на выходе:
  нет
0C2h (194) EMM_FN2 Выделение блока ОЗУ
Значение регистров на входе:
  C=0C2h
  B - число запрашиваемых страниц
Значение регистров на выходе:
  CF=0 - нормальное завершение - A - идентификатор блока
  CF=1 - ошибка - A=1 - не хватает памяти
0C3h (195) EMM_FN3 Освободить блок ОЗУ
Значение регистров на входе:
  C=0C3h 
  A - идентификатор блока
Значение регистров на выходе:
  CF=0 - нормальное завершение
  C - неправильный идентификатор
    идентификатор не всегда отслеживается правильно
0C4h (196) EMM_FN4 Получить физический номер страницы из блока памяти
Значение регистров на входе:
  C=0C4h
  A - идентификатор блока
  B - логическая номер страницы в блоке
Значение регистров на выходе:
  CF=0 - A - логический номер страницы
  CF=1 - ошибка:
      A=0 - блок не существует
      A=255 - запрашиваемый номер страницы слишком велик
0C5h (197) EMM_FN5 Получить список физических страниц блока
Значение регистров на входе:
  C=0C5h 
  A - идентификатор блока 
  HL - буфер 256 байт для размещения списка страниц
Значение регистров на выходе:
  CF=0 - нормальное завершение:
      B - число страниц в блоке
      HL - тот же адрес буфера, в буфере список физических страниц по порядку, заканчивающийся байтом 0FFh
  CF=1 - неверный идентификатор блока; старая информация в буфере может быть затерта
0C6h (198) EMM_FN6 Получение адресов портов окон
 HYPERLINK "" \l "02" примечание по использованию
Значение регистров на входе:
  C=0C6h 
  A - номер окна процессора - 0,1,2 или 3
Значение регистров на выходе:
  CF=0 - нормальное завершение
      C - 8-битный адрес порта окна
      B - физический номер подключенной в окно страницы
  CF=1 - ошибка - неверный номер окна
0C7h (199) EMM_FN7 Получить номер следующей страницы блока 
 HYPERLINK "" \l "03" примечание по использованию
Значение регистров на входе:
  C=0C7h
  A - физическая страница
Значение регистров на выходе:
  CF=0 - нормальное завершение
      A - следуюшая физическая страница блока
      A=0FFh - индицирует конец блока
  CF=1 - ошибка - страница не принадлежит никакому блоку. фактически, это означает, что она свободна.
09Eh (158) EMM_FN8 Слияние блоков
Значение регистров на входе:
  A - идентификатор блока 1
  B - идентификатор блока 2
Значение регистров на выходе:
  CF=0 - нормальное завершение
      A - идентификатор объединенного блока
  CF=1 - ошибка - неверный идентификатор блока
09Dh (157) EMM_FN9 Разделение блока
Значение регистров на входе:
  C=09Dh 
  A - идентификатор блока 
  B - новая длина блока
Значение регистров на выходе:
  CF=0 - нормальное завершение 
      A - идентификатор блока результата 
      B - идентификатор блока остатка 
  CF=1 - ошибка - неверный идентификатор блока
Функции управления 'железом'
0EFh (239) FN_VERSION Выдача информации о версии BIOSа и железа.
Значение регистров на входе:
  C=0EFh 
  HL - буфер, куда будет помещена ASCII строка с несколькими полями, номером версии BIOS и названием модели компьютера. Конец строки отмечен двойным нулем.
Значение регистров на выходе:
  CF=0 - нормальное завершение 
      HL - тот же буфер с записанной строкой. 
      DE - версия BIOSа 
      BC - версия железа HYPERLINK "" \l "04" подробности ниже 
      A - количество полей в буфере (в данный момент - 2) 
          Первое поле - версия BIOS. 
          Второе - название модели компьютера. 
  CF=1 - ошибка - Очень старая версия, 
      не имеющая данной функции
0F2h (242) FN_SICF=0 Установка синхронизации, очистка страницы режима экрана
Значение регистров на входе:
  C=0F2h 
  A - режим синхронизации
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - неверный номер режима синхронизации
0F5h (245) CMOS_TEST Проверить наличие CMOS HYPERLINK "" \l "08" комментарий
Значение регистров на входе:
  C=0F5h
Значение регистров на выходе:
  CF=0 - часы есть 
  CF=1 - часов нет
0F6h (246) CMOS_RD Читать из регистра CMOS HYPERLINK "" \l "08" комментарий
Значение регистров на входе:
  C=0F6h 
  D - номер регистра CMOS
Значение регистров на выходе:
  A - считанные данные 
  CF=0 - часы есть 
  CF=1 - часов нет
0F7h (247) CMOS_WR Писать в регистр CMOS HYPERLINK "" \l "08" комментарий
Значение регистров на входе:
  C=0F7h 
  D - номер регистра CMOS 
  A - записываемые данные
Значение регистров на выходе:
  CF=0 - часы есть 
  CF=1 - часов нет
08Fh (143) FN_TURBO Функция управления турбо режимом. 
  HYPERLINK "" \l "09" комментарий
Значение регистров на входе:
  C=08Fh 
  A - режим турбо: 2 - off, 3 - on   A - режим FDD: 12h - 720, 13h - 1.44
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - неверный режим турбо
Функции управления окнами и режимами экрана
0B0h (176) WIN_OPEN Функция открытия окна.
Значение регистров на входе:
  C=0B0h   IX - HYPERLINK "" \l "10" описатель окна 
  E - флаги окна: 
      бит 0 указывает какую страницу режима включать после исполнения функции;
      бит 4 указывает на какой странице режима открывать окно
Значение регистров на выходе:
  CF=0 - нормальное завершение: 
      A - HYPERLINK "" \l "17" идентификатор окна 
  CF=1 - ошибка слишком много окон
0B1h (177) WIN_CLOSE закрытие окна
Значение регистров на входе:
  C=0B1h 
  A - идентификатор окна
Значение регистров на выходе:
  CF=0 - успешное завершение 
  CF=1 - ошибка - неверный идентификатор 
      Окно с номером 0 никогда не закрывается и попытка закрытия приводит к ошибке
0B2h (178) WIN_COPY_WIN Копирование данных текстового окна в память (запоминание окна) 
  При работе этой функции через RST 18h или RST 8, обязателен запрет прерываний, так как функция пользуется стеком для ускорения своей работы.
Значение регистров на входе:
  C=0B2h   A - HYPERLINK "" \l "17" идентификатор глобального окна 
  H - размер окна в символах по вертикали 
  L - размер окна в символах по горизонтали 
  D - вертикальное положение окна в глобальном окне 
  E - горизонтальное положение окна в глобальном окне 
  IX - адрес буфера для запоминания данных 
      адрес буфера указывается для окна 0C000h если адрес указан с 8000h, номер страницы буфера не действителен ниже 8000h адрес указывать нельзя
  A' - страница буфера для данных окна 
      эта страница должна принадлежать программе
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка - неверный идентификатор окна
0B3h (179) WIN_RESTORE_WIN Копирование из памяти в текстовое окно (восстановление окна) 
  При работе этой функции через RST 18h или RST 8, обязателен запрет прерываний, так как функция пользуется стеком для ускорения своей работы.
Значение регистров на входе:
  C=0B2h   A - HYPERLINK "" \l "17" идентификатор глобального окна 
  H - размер окна в символах по вертикали 
  L - размер окна в символах по горизонтали 
  D - вертикальное положение окна в глобальном окне 
  E - горизонтальное положение окна в глобальном окне 
  IX - адрес буфера для запоминания данных 
      адрес буфера указывается для окна 0C000h если адрес указан с 8000h, номер страницы буфера не действителен ниже 8000h адрес указывать нельзя
  A' - страница буфера для данных окна 
      эта страница должна принадлежать программе
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка - неверный идентификатор окна
0B4h (180) WIN_GET_SYM Взять символ с экрана
Значение регистров на входе:
  C=0B4h 
  A - идентификатор окна 
  DE - положение символа в окне: 
      D - вертикаль, E - горизонталь
Значение регистров на выходе:
  CF=0 - нормальное завершение 
      L - символ, H - атрибут, 
      B - знакогенератор 
  CF=1 - ошибка неверный идентификатор окна
0B5h (181) WIN_PUT_SYM Положить символ на экран
Значение регистров на входе:
  C=0B5h 
  A - идентификатор окна 
  DE - положение символа в окне: 
      D - вертикаль, E - горизонталь 
  L - символ, H - атрибут символа 
  B - знакогенератор
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка неверный идентификатор окна
0B6h (182) WIN_SET_ZG установка знакогенератора
Значение регистров на входе:
  C=0B6h 
  A - системный номер знакогенератора 
  DE - указатель на 2Kb блок данных знакогенератора
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка (старая версия, нет функции)
0B7h (183) WIN_MOVE_WIN Перемещение окна 
  При работе этой функции через RST 18h или RST 8, обязателен запрет прерываний, так как функция пользуется стеком для ускорения своей работы.
Значение регистров на входе:
  C=0B7h   A - HYPERLINK "" \l "17" идентификатор глобального окна 
  H - размер HYPERLINK "" \l "15" локального окна по вертикали в символах 
  L - размер локального окна по горизонтали в символах 
  D - положение локального окна по вертикали в символах 
  E - положение локального окна по горизонтали в символах 
  IX - новое положение локального окна (подобно DE)
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка - неверный идентификатор окна
0B8h (184) WIN_GET_ZG Получение знакогенератора
Значение регистров на входе:
  C=0B8h 
  DE - адрес, куда будет загружено 2kb знакогенератора
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка (старая версия, нет функции)
Функции вывода текста на экран
081h (129) LP_PRINT_ALL Печать символов с атрибутом 
  На экран выводится строка из B одинаковых символов
Значение регистров на входе:
  C=081h 
  A - символ 
  E - атрибут 
  B - число выводимых символов 
      регистры HL,IX - сохраняются
Значение регистров на выходе:
  CF=0 - всегда
082h (131) LP_PRINT_SYM Вывод символов на экран без атрибута 
  На экран выводится строка из B одинаковых символов атрибут остается тот, который был на экране
Значение регистров на входе:
  C=082h 
  A - символ 
  B - число выводимых символов 
      регистры HL,IX - сохраняются
Значение регистров на выходе:
  CF=0 - всегда
083h (131) LP_PRINT_ATR печать атрибутов 
  На экран выводится строка из B одинаковых атрибутов. 
  Символы не меняются.
Значение регистров на входе:
  C=083h 
  E - атрибут 
  B - число выводимых символов 
      регистры HL,IX - сохраняются
Значение регистров на выходе:
  CF=0 - всегда
084h (132) LP_SET_PLACE Установка текущего знакоместа в окне 
  Позиция печати устанавливается в соответстии с регистром DE
Значение регистров на входе:
  C=084h 
  E - положение символа по горизонтали 
  D - номер символа по вертикали 
      Превышение границ приводит не к ошибке, а к переустановке сначала, за вычетом полного размера окна
Значение регистров на выходе:
  CF=0 - всегда
085h (133) LP_PRINT_LN Вывод строки символов на экран с текущего знакоместа
Значение регистров на входе:
  C=085h 
  HL - адрес строки должен быть между 04000h и 0BFFFh 
  E - атрибут, с которым будет выведена строка 
  B - длина выводимой строки
Значение регистров на выходе:
  CF=0 - всегда
086h (134) LP_PRINT_LN2 Вывод строки символов на экран без атрибутов
Значение регистров на входе:
  C=086h 
  HL - адрес строки должен быть между 04000h и 0BFFFh 
  B - длина выводимой строки
Значение регистров на выходе:
  CF=0 - всегда
087h (135) LP_PRINT_LN3 Вывод строки символов до разделителя 
  После разделителя выводятся пробелы, что бы вывести B символов
Значение регистров на входе:
  C=087h 
  HL - адрес строки должен быть между 04000h и 0BFFFh 
  E - атрибут, с которым будет выведена строка 
  B - длина выводимой строки 
  D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
  CF=0 - всегда
088h (136) LP_PRINT_LN4 Вывод строки символов до разделителя, без атрибутов 
  символы из выводятся на экран, пока не встретится символ равный D, далее печатаются пробелы, как дополнение строки до B символов. Атрибуты не изменяются.
Значение регистров на входе:
  C=088h 
  HL - адрес строки должен быть между 04000h и 0BFFFh 
  B - длина выводимой строки 
  D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
  CF=0 - всегда
089h (137) LP_CLS_WIN Очистка экрана 
  Выполнение произворится выводом пробелов с заданным атрибутом
Значение регистров на входе:
  C=089h 
  DE положение HYPERLINK "" \l "15" локального окна 
  H - размер в символах локального окна по вертикали 
  L - размер в символах локального окна по горизонтали 
  B - атрибут очистки
Значение регистров на выходе:
  CF=0 - всегда
08Ah (138) LP_SCROLL_UD Скроллинг части глобального окна вверх/вниз 
  Скроллируются полные строки глобального окна
Значение регистров на входе:
  C=08Ah 
  B - тип скроллинга: 1 - вверх; 2 - вниз 
  D - начальная строка скроллинга 
  E - число скроллируемых строк
Значение регистров на выходе:
  CF=0 - всегда
08Bh (139) LP_PRINT_LN5 Вывод строки символов на экран до разделителя 
  После разделителя вывод останавливается
Значение регистров на входе:
  HL - адрес строки должен быть между 04000h и 0BFFFh 
  E - атрибут, с которым будет выведена строка 
  B - максимальная длина выводимой строки 
  D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
  CF=0 - всегда
08Ch (140) LP_PRINT_LN6 Вывод строки символов на экран до разделителя без атрибутов 
  После разделителя вывод останавливается.
Значение регистров на входе:
  C=08Ch 
  HL - адрес строки должен быть между 04000h и 0BFFFh 
  B - максимальная длина выводимой строки 
  D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
  CF=0 - всегда
08Dh (141) LP_CLS_WIN2 Очистка экрана с указанием символа заполнения
Значение регистров на входе:
  C=08Dh 
  DE положение HYPERLINK "" \l "15" локального окна 
  H - размер в символах локального окна по вертикали 
  L - размер в символах локального окна по горизонтали 
  B - атрибут очистки 
  A - символ очистки
Значение регистров на выходе:
  CF=0 - всегда
08Eh (142) LP_GET_PLACE Получить текущее положение вывода на экран
Значение регистров на входе:
  C=08Eh
Значение регистров на выходе:
  CF=0 - всегда 
  DE - координаты, в которых будет напечатан 
      следующий символ: 
      D - вертикаль, E - горизонталь
Графические функции
0A1h (161) PIC_POINT Установить точку
Значение регистров на входе:
  C=0A1h 
  DE - координата по вертикали (пиксели) 
  HL - координата по горизонтали (пиксели) 
      Координаты считаются от верхнего левого угла экрана 
  A - идентификатор окна 
  B - цвет точки
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - неверный идентификатор окна
0A4h (164) PIC_SET_PAL Установка палитры
Значение регистров на входе:
  C=0A4h   HL - HYPERLINK "" \l "18" данные палитры 
  E - номер начального цвета 
  D - количество устанавливаемых цветов 
  B - маска при установке палитры. 
      Для нормального режима должнa быть 0FFh 
  A - 0..3 биты: 
        - значения 0..7 - номер палитры
        - значения 8..15 - зарезервированы 
      - 4..6 биты - зарезервированы (установить в 0) 
      - 7 бит: 
        - значение 0 - установить 
        - значение 1 - загрузить палитру в память
Значение регистров на выходе:
  CF=0 - всегда
0A6h (166) SET_PAL_INIT Установка внутренней палитры
Значение регистров на входе:
  C=0A6h 
  A - страница палитры 
  B - номер палитры: 
      B=1 - установка графической палитры 
      B=2 - установка спектрумовской палитры 
      B=3 - установка текстовой палитры CGA
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - неверный номер палитры
Функции работы с жесткими дисками и дисководами
50h,52h,53h (80,82,83) Зарезервированы
Значение регистров на входе:
  нет
Значение регистров на выходе:
  нет
51h (81) DRV_RESET Сброс контроллера и настройка на диск
Значение регистров на входе:
  C=51h 
  A - номер и HYPERLINK "" \l "22" тип устройства
бит 7..4 - тип устройства:
  #0x - FDD  #6x - RAM-DISK  #8x - HDD  #Cx - CD-ROM
бит 3..0 - номер устройства
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка, нет диска или нет устройства
54h (84) DRV_VERIFY Проверка секторов 
  Проверка внутренняя на совпадение ECC
Значение регистров на входе:
  C=54h 
  A - номер и HYPERLINK "" \l "22" тип устройства (см. выше) 
  HL:IX - номер сектора (IX - младшая часть номера сектора)
  B - количество проверяемых секторов
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - проверка с ошибкой
55h (85) DRV_READ Чтение с устройства
Значение регистров на входе:
  C=55h 
  A - номер и HYPERLINK "" \l "22" тип устройства (см. выше) 
  HL:IX - номер сектора (IX - младшая часть номера сектора) 
  B - количество секторов 
  DE - адрес буфера для данных
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка чтения 
  HL:IX - номер сектора + кол-во прочитанных секторов 
  DE - адрес буфера для данных + (кол-во прочитанных секторов * размер сектора)
56h (86) DRV_WRITE Запись на устройства
Значение регистров на входе:
  C=56h 
  A - номер и HYPERLINK "" \l "22" тип устройства (см. выше) 
  HL:IX - номер сектора (IX - младшая часть номера сектора) 
  B - количество секторов 
  DE - адрес буфера данных для записи
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка записи 
  HL:IX - номер сектора + кол-во прочитанных секторов 
  DE - адрес буфера для данных + (кол-во прочитанных секторов * размер сектора)
57h (87) DRV_DETECT Определение параметров устройства
Значение регистров на входе:
  C=57h 
  A - номер и HYPERLINK "" \l "22" тип устройства (см. выше)
Значение регистров на выходе:
  CF=0 - нормальное завершение 
      A - bit7=0 диск 720Кb               Bit7=1 диск 1.44Mb   CF=1 - нет устройства или нет носителя
58h (88) DRV_GET_PAR Получить параметры носителя
Значение регистров на входе:
  C=58h 
  A - номер и HYPERLINK "" \l "22" тип устройства (см. выше)
Значение регистров на выходе:
  CF=0 - нормальное завершение 
      L - число секторов 
      H - число головок 
      DE - количество цилиндров 
          если HL=DE=0FFFFh - устройства нет 
      IX - размер сектора в байтах 
      B - доп. параметры для дискет: 
          бит7 - тип 1.44/720 
  CF=1 - нет устройства
59h (89) DRV_SET_PAR Установить параметры носителя
Значение регистров на входе:
  A - номер и HYPERLINK "" \l "22" тип устройства (см. выше) 
  L - число секторов 
  H - число головок 
  DE - количество цилиндров 
  IX - размер сектора в байтах 
  B - доп. параметры для дискет 
      бит7 - тип 1.44/720
Значение регистров на выходе:
  CF=0 - нормальное завершение
5Ah (90) EXT_VERSION Номер версии дисковой спецификации.
Значение регистров на входе:
  C=5Ah
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  D - версия
  E - модификация
  CF=1 - ошибка
5Fh (95) DRV_LIST Список дисковых устройств
Значение регистров на входе:
  C=5Fh
  IX - буфер для списка устройств
Значение регистров на выходе:
  CF=0 - нормальное завершение 
В буфере список дисков в формате:
IX+0 - размер заполненого буфера
IX+1 - кол-во устройств FDD
IX+2 - кол-во устройств HDD
IX+3 - кол-во устройств CD DRIVE
IX+4 - #00 - конец списка, иначе кол-во устройств нового типа


Примечания и комментарии. 

Примечание по использованию функции получения адресов портов окон (0C6h). 

Cледует хотя бы один раз вызвать эти функции и сравнить адреса портов с теми, что используются в программе и, если они не совпадают, выдать соответствующее предупреждение. В данный момент эти порты таковы: PAGE0=82h, PAGE1=0A2h, PAGE2=0C2h, PAGE3=0E2h 

Примечание по использованию функции EMM_FN7 (0C7h). 

Информация о распределении памяти хранится в виде RAM Allocation Table, похожей на дисковый FAT. Поэтому нахождение физического номера следующей страницы по предыдущему физическому номеру происходит значительно быстрее, чем поиск по увеличенному на единицу логическому номеру. 

Комментарий к функции FN_VERSION (0EFh). 

Значения регистра BC на выходе и соответствующая ему конфигурация
BC=FFFF - Не определено
BC=FFFE - Конфигурация Spectrum, режим Sprinter ZX
BC=FFFD - Конфигурация Sprinter
BC=FFFC - Зарезервировано
BC=FFFB - Зарезервировано
BC=FFFA - Зарезервировано
BC=FFF9 - Зарезервировано
Иные значения BC - новые прошивки. 

Комментарий к функциям CMOS (0F5h-0F7h) 

Функции CMOS_RD, CMOS_WR, CMOS_TEST работают всегда. Если в машине нет микросхемы CMOS, то эмулируется ее память. Наличие микросхемы определяется функцией CMOS_TEST.

Комментарий к функции FN_TURBO (08Fh)

Переключение режима турбо может не произойти, если прошивка не поддерживает это переключение. При этом ошибки не происходит. Так же, переключение режима TURBO блокируется кнопкой "Turbo" в режиме Turbo-OFF 

Комментарий к функциям печати текста. 

Эти функции работают с текущим окном, которым всегда является последнее открытое окно. К графическому экрану функции печати текста не применимы.

Описатель окна. 

Для открытия окон используется 32-хбайтовый описатель окна (дескриптор), адрес которого указывается в регистре IX.
IX - 32-хбайтовый описатель окна
(IX+0) - горизонтальный размер окна в знакоместах
(IX+1) - вертикальный размер в знакоместах
(IX+2) - положение окна по горизонтали на экране в знакоместах
(IX+3) - положение окна по вертикали на экране в знакоместах
(IX+4) - режим знакоместа
bit4=1 - text_mode bit4=0 - graf_mode
bit5=0 - 16, bit5=1 - 8 точек в знакоместе
graf_mode bit3..0 - не существенны
bit7..6 - номер палитры
text_mode bit7..6,3..0 - номер знакогенератора
исключение: bit7..6=B"11" - бордер
(IX+5) - дополнительный режим знакоместа
bit0=1 - указывает на включение спектрумовской
адресации экрана
(IX+6) - положение по X в поле графики (по знакоместам)
(IX+7) - положение по Y в поле графики (по знакоместам)
разъяснения о положении в поле графики - ниже
(IX+8..31) - зарезервировано (переменные окна)
в этих байтах должны быть нули
При открытии окна описатель копируется в системную страницу ОЗУ и программа может не сохранять его. Что бы описатель окна не потерялся, программа получает идентификатор окна. Он же идентификатор глобального окна. В функциях запоминания, восстановления, перемещения, а так же функциях стирания, скроллинга и т.п. идентификатор окна определяет область экрана, относительно которой производится работа с локальными окнами. Подразумеваются локальные окна в смысле "окно в окне". Идентификатор окна определяет глобальное окно, отнoсительно которого адресуются локальные. В части функций глобальное окно определяется по умолчанию, как последнее, с которым производились действия с явным указанием идентификатора.

В данный момент BIOS хранит только один описатель окна - последний, с которым была произведена функция открытия. Идентификатор окна выставляется в 0. В дальнейшем планитруется разработка функций со множеством окон, потому, во избежание неприятностей в будущем, при работе с окнами, программисту следует запоминать идентификатор окна и пользоваться этим значением при работе с ним. 

Типы стандартных окон:
0 - окно 32x24 в формате ZX Spectrum
1 - текстовое окно 64x24
2 - текстовое окно 40x32
3 - текстовое окно 80x32
4 - окно в формате ZX Spectrum, HL - положение окна на экране в знакоместах
5 - текстовое окно 64x24, HL - положение окна на экране в знакоместах
6 - текстовое окно 40x32, HL - положение окна на экране в знакоместах
7 - текстовое окно 80x32, HL - положение окна на экране в знакоместах
8 - графическое окно 0, HL - положение окна на экране
9 - графическое окно 1, HL - положение окна на экране

Данные палитры должны представлять собой список приблизительно такого вида:
DB blue1,green1,red1,0
DB blue2,green2,red2,0
.....................
DB blueN,greenN,redN,0
N - количество цветов. Значеное равное 0 соответствует 256-ти цветам. При записи в видео-ОЗУ все данные предварительно проходят функцию AND со значением регистра маски - B.

Страницы палитры 0..3 соответствуют графическим режимам. Для вывода в соответствующей палитре нужно задать соответствующее значение bit7..6 в байте HYPERLINK "" \l "19" режима знакоместа

Страницы 4..7 соответствуют текстовому режиму и спектрумовскому режиму. В странице 4 задается цвет PAPER для каждого атрибута. В странице 5 задается цвет INK для каждого атрибута. В странице 6 задается цвет PAPER, которым он будет моргать в режиме FLASH В странице 7 задается цвет INK, которым он будет моргать в режиме FLASH. Таким образом, для каждого из 256-ти атрибутов задается четыре цвета если цвета 4,5 совпадают с цветами 6,7 то режим FLASH оказывается отключенным. Для его включения в спектрумовском режиме надо поменять местами цвета 6 и 7. Если надо включить FLASH в режим IBM-CGA, следует установить цвета 6 и 7 одинаковыми и равными цвету 4. По сути режим FLASH всегда включен, и на экране постоянно меняются цвета PAPER с 4-го на 6-й, а цвета INK с 5 на 7-й. Если эти пары цветов для атрибута знакоместа устанавливаются одинаковыми, то FLASH в этом месте не виден.


Комментарий к функциям работы с устройствами хранения информации. 

В этих функциях в регистре A обычно задается номер и тип устройства:
бит 0..3 - номер устройства
бит 4..7 - тип устройства:
0 - дисковод
6 - ram-disk
8 - HDD
C - CD-ROM
остальные номера не используются
А так же задаются: старшая часть номера сектора в регисте HL, младшая часть номера сектора в регистре IX.