Функции BIOS v2.12

Вызов функций 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 - нормальное завершение

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

примечание по использованию


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

  C=0C6h 

  A - номер окна процессора - 0,1,2 или 3	Значение регистров на выходе:

  CF=0 - нормальное завершение

      C - 8-битный адрес порта окна

      B - физический номер подключенной в окно страницы

  CF=1 - ошибка - неверный номер окна

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

примечание по использованию


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

  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 - неверный номер режима синхронизации 

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 Функция управления турбо режимом. 

  комментарий 


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

  C=08Fh 

  A - режим турбо: 2 - off, 3 - on 	Значение регистров на выходе:

  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..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 - номер и тип устройства

бит 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.44/720 

  CF=1 - нет устройства 

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

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

  A - номер и тип устройства (см. выше) 

  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 в байте режима знакоместа



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

