Функции 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.