Files
Sprinter-SDCC/docs/Original/BIOS/Функции BIOS v3.md
T
snark13 64ce6339eb docs: справочники по железу Sprinter + правка gfx_scroll_h
- docs/new/ — сводные справочники (архитектура, BIOS, DSS, память,
  графика, акселератор, IRQ, порты, ввод, звук, известные баги);
- docs/Original/ — первоисточники, из которых они собраны (BIOS, Estex
  DSS, мануалы, описание акселератора), + Форум.doc/.docx в reference;
- libbgi/common/gfx_scroll_h.c — обход бага скролла при ширине >256
  (правка автора: шаг банды 255 и продвижение указателей на cw; старый
  вариант с 256 оставлен закомментированным с TODO);
- удалён applications/PoP/roomtest/hang_variants.png — рабочая раскладка
  из разбора позы виса, в репозитории ей не место.

Большие архивы (docs/extra ~568 МБ, docs/sources с вложенными git-репо
~68 МБ) в коммит НЕ включены — см. обсуждение.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 18:26:31 +03:00

49 KiB
Raw Blame History

Функции BIOS v3.00

Вызов функций BIOS

Вызов функций BIOS осуществляется из ассемблерного кода.

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

Ниже приведены таблицы входных и выходных параметров для каждой функции:

  • Функции работы с памятью
  • Функции управления 'железом'
  • Функции управления окнами и режимами экрана
  • Функции вывода текста на экран
  • Графические функции
  • Функции работы с жесткими дисками и дисководами

При работе функций 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 - нормальное завершение
  CF=1 - неправильный идентификатор
         идентификатор не всегда отслеживается правильно

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 Получение адресов портов окон

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

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

Значение регистров на входе:
  C=0C6h 
  A - номер окна процессора - 0,1,2 или 3	
Значение регистров на выходе:
  CF=0 - нормальное завершение
      C - 8-битный адрес порта окна
      B - физический номер подключенной в окно страницы
  CF=1 - ошибка - неверный номер окна

0C7h (199) EMM_FN7 Получить номер следующей страницы блока

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

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

Значение регистров на входе:
  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 - версия железа подробности ниже 
      A - количество полей в буфере (в данный момент - 2) 
          Первое поле - версия BIOS. 
          Второе - название модели компьютера. 
  CF=1 - ошибка - Очень старая версия, 
      не имеющая данной функции 

0F2h (242) FN_SICF=0 Установка синхронизации, очистка страницы режима экрана

Значение регистров на входе:
  C=0F2h 
  A - режим синхронизации 	
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - неверный номер режима синхронизации 

Функции работы с CMOS данными и Turbo режимом

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

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

0F5h (245) CMOS_TEST Проверить наличие CMOS

Значение регистров на входе:
  C=0F5h 	
Значение регистров на выходе:
  CF=0 - часы есть 
  CF=1 - часов нет 

0F6h (246) CMOS_RD Читать из регистра CMOS

Значение регистров на входе:
  C=0F6h 
  D - номер регистра CMOS 	
Значение регистров на выходе:
  A - считанные данные 
  CF=0 - часы есть 
  CF=1 - часов нет 

0F7h (247) CMOS_WR Писать в регистр CMOS

Значение регистров на входе:
  C=0F7h 
  D - номер регистра CMOS 
  A - записываемые данные 	
Значение регистров на выходе:
  CF=0 - часы есть 
  CF=1 - часов нет 

08Fh (143) FN_TURBO Функция управления турбо режимом.

Комментарий к функции FN_TURBO (08Fh):
  Переключение режима турбо может не произойти, если прошивка не 
  поддерживает это переключение. При этом ошибки не происходит. Так 
  же, переключение режима TURBO блокируется кнопкой "Turbo" в 
  режиме Turbo-OFF
Значение регистров на входе:
  C=08Fh 
  A - режим турбо: 2 - off, 3 - on 	
  A - режим FDD: 12h - 720Kb, 13h - 1.44Mb
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - неверный режим турбо 

Функции управления окнами и режимами экрана

0B0h (176) WIN_OPEN Функция открытия окна.

Значение регистров на входе:
  C=0B0h 
  IX - описатель окна 
  E - флаги окна: 
      бит 0 указывает какую страницу режима включать после 
        исполнения функции;
      бит 4 указывает на какой странице режима открывать окно 	
Значение регистров на выходе:
  CF=0 - нормальное завершение: 
      A - идентификатор окна 
  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 - идентификатор глобального окна 
  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 - идентификатор глобального окна 
  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 - идентификатор глобального окна 
  H - размер локального окна по вертикали в символах 
  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 - положение локального окна 
  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 - положение локального окна 
  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 - данные палитры 
  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=3 - установка текстовой палитры CGA
      B=2 - установка спектрумовской палитры 
      B=1 - установка графической плаитры 	
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - неверный номер палитры 

Функции работы с жесткими дисками и дисководами

50h,52h,53h (80,82,83) Зарезервированы

Значение регистров на входе и на выходе:
  нет 

51h (81) DRV_RESET Сброс контроллера и настройка на диск

Значение регистров на входе:
  C=51h 
  A - номер и тип устройства
      бит 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 - номер и тип устройства (см. выше) 
  HL:IX - номер сектора (IX - младшая часть номера сектора)
  B - количество проверяемых секторов	
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - проверка с ошибкой 

55h (85) DRV_READ Чтение с устройства

Значение регистров на входе:
  C=55h 
  A - номер и тип устройства (см. выше) 
  HL:IX - номер сектора (IX - младшая часть номера сектора) 
  B - количество секторов 
  DE - адрес буфера для данных 	
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка чтения 
  HL:IX - номер сектора + кол-во прочитанных секторов 
  DE - адрес буфера для данных + (кол-во прочитанных секторов * размер сектора) 

56h (86) DRV_WRITE Запись на устройства

Значение регистров на входе:
  C=56h 
  A - номер и тип устройства (см. выше) 
  HL:IX - номер сектора (IX - младшая часть номера сектора) 
  B - количество секторов 
  DE - адрес буфера данных для записи 	
Значение регистров на выходе:
  CF=0 - нормальное завершение 
  CF=1 - ошибка записи 
  HL:IX - номер сектора + кол-во прочитанных секторов 
  DE - адрес буфера для данных + (кол-во прочитанных секторов * размер сектора) 

57h (87) DRV_DETECT Определение параметров устройства

Значение регистров на входе:
  C=57h 
  A - номер и тип устройства (см. выше) 
Значение регистров на выходе:
  CF=0 - нормальное завершение 
      A - bit7=0 диск 720Кb 
          bit7=1 диск 1.44Mb 
  CF=1 - нет устройства или нет носителя 

58h (88) DRV_GET_PAR Получить параметры носителя

Значение регистров на входе:
  C=58h 
  A - номер и тип устройства (см. выше) 
Значение регистров на выходе:
  CF=0 - нормальное завершение 
      L - число секторов 
      H - число головок 
      DE - количество цилиндров 
          если HL=DE=0FFFFh - устройства нет 
      IX - размер сектора в байтах 
      B - доп. параметры для дискет: 
          бит7 - тип 1.44Mb/720Kb
  CF=1 - нет устройства 

59h (89) DRV_SET_PAR Установить параметры носителя

Значение регистров на входе:
  A - номер и тип устройства (см. выше) 
  L - число секторов 
  H - число головок 
  DE - количество цилиндров 
  IX - размер сектора в байтах 
  B - доп. параметры для дискет 
      бит7 - тип 1.44Mb/720Kb
Значение регистров на выходе:
  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 в байте режима знакоместа

Страницы 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

остальные номера не используются