Функции BIOS v2.12
Вызов функций 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 
Значение регистров на выходе:   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..15; от 8 до 15 - резервные 
Значение регистров на выходе:   CF=0 - всегда 
0A6h (166) SET_PAL_INIT Установка внутренней палитры 
Значение регистров на входе:   C=0A6h    A - страница палитры    B - номер палитры:        B=2 - установка спектрумовской палитры        B=1 - установка графической плаитры 
Значение регистров на выходе:   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.
