CodeNet / Языки программирования / Ассемблер / Прерывания DOS и BIOS
CodeNet / Платформы / Другие платформы / DOS / Прерывания DOS и BIOS
CodeNet / Платформы / Другие платформы / DOS / Прерывания DOS и BIOS
Функции BIOS - INT 10H: видео сервис.
Здесь детализированы функции INT 10H стандартного видеосервиса ROM-BIOS.
AH сервис --- ---------------------------------------------------------------------------- 00H уст. видео режим. Очистить экран, установить поля BIOS, установить режим. вход: AL=режим AL Тип формат цвета адаптер адрес монитор === ======= ======= ============= ======= ==== ================= 0 текст 40x25 16/8 полутона CGA,EGA b800 Composite 1 текст 40x25 16/8 CGA,EGA b800 Comp,RGB,Enhanced 2 текст 80x25 16/8 полутона CGA,EGA b800 Composite 3 текст 80x25 16/8 CGA,EGA b800 Comp,RGB,Enhanced 4 графика 320x200 4 CGA,EGA b800 Comp,RGB,Enhanced 5 графика 320x200 4 полутона CGA,EGA b800 Composite 6 графика 640x200 2 CGA,EGA b800 Comp,RGB,Enhanced 7 текст 80x25 3 (b/w/bold) MA,EGA b000 TTL Monochrome 0dH графика 320x200 16 EGA A000 RGB,Enhanced 0eH графика 640x200 16 EGA A000 RGB,Enhanced 0fH графика 640x350 3 (b/w/bold) EGA A000 Enhanced,TTL Mono 10H графика 640x350 4 или 16 EGA A000 Enhanced 8,9,0aH режимы PCjr 0bH,0cH (резервируется для EGA BIOS) замечание: для EGA и Jr можно добавить 80H к AL, чтобы инициализировать видео режим без очистки экрана. --- ---------------------------------------------------------------------------- 01H уст. размер/форму курсора (текст). курсор, если он видим, всегда мерцает. вход: CH = начальная строка (0-1fH; 20H=подавить курсор) CL = конечная строка (0-1fH) --- ---------------------------------------------------------------------------- 02H уст. позицию курсора. установка на строку 25 делает курсор невидимым. вход: BH = видео страница DH,DL = строка, колонка (считая от 0) --- ---------------------------------------------------------------------------- 03H читать позицию и размер курсора вход: BH = видео страница выход: DH,DL = текущие строка,колонка курсора CH,CL = текущие начальная,конечная строки курсора (см. функцию 01H) --- ---------------------------------------------------------------------------- 04H читать световое перо вход: нет выход: AH = триггер (0=нет значений; 1=возвращены значения светового пера) DH,DL = строка,колонка символа (текст) BX = колонка точки (графика) CH = строка точки (для графики EGA возвращается в CX) --- ---------------------------------------------------------------------------- 05H выбрать активную страницу дисплея вход: AL = номер страницы (большинство программ использует страницу 0) --- ---------------------------------------------------------------------------- 06H листать окно вверх (или очистить). Листать на 1 или более строк вверх. вход: CH,CL = строка,колонка верхнего левого угла окна (считая от 0) DH,DL = строка,колонка нижнего правого угла окна (считая от 0) AL = число пустых строк, вдвигаемых снизу (0=очистить все окно) BH = видео атрибут, используемый для пустых строк --- ---------------------------------------------------------------------------- 07H листать окно вниз (вдвинуть пустые строки в верхнюю часть окна) вход: (аналогично функции 06H) --- ---------------------------------------------------------------------------- 08H читать символ/атрибут в текущей позиции курсора вход: BH = номер видео страницы выход: AL = прочитанный символ AH = прочитанный видео атрибут (только для текстовых режимов) --- ---------------------------------------------------------------------------- 09H писать символ/атрибут в текущей позиции курсора вход: BH = номер видео страницы AL = записываемый символ CX = счетчик (сколько экземпляров символа записать) BL = видео атрибут (текст) или цвет (графика) (графические режимы: +80H означает XOR с символом на экране) --- ---------------------------------------------------------------------------- 0aH писать символ в текущей позиции курсора вход: BH = номер видео страницы AL = записываемый символ CX = счетчик (сколько экземпляров символа записать) --- ---------------------------------------------------------------------------- 0bH выбрать цвет палитры/бордюра (CGA-совместимые режимы) вход: BH = 0: (текст) выбрать цвет бордюра BL = цвет бордюра (0-1fH; от 10H до 1fH - интенсивные) BH = 1: (графика) выбрать палитру BL = 0: палитра green/red/brown BL = 1: палитра cyan/magenta/white --- ---------------------------------------------------------------------------- 0cH писать графическую точку (слишком медленно для большинства приложений!) вход: BH = номер видео страницы DX,CX = строка,колонка AL = значение цвета (+80H означает XOR с точкой на экране) --- ---------------------------------------------------------------------------- 0dH читать графическую точку (слишком медленно для большинства приложений!) вход: BH = номер видео страницы DX,CX = строка,колонка выход: AL = прочитанное значение цвета --- ---------------------------------------------------------------------------- 0eH писать символ на активную видео страницу (эмуляция телетайпа) вход: AL = записываемый символ (использует существующий атрибут) BL = цвет переднего плана (для графических режимов) --- ---------------------------------------------------------------------------- 0fH читать текущий видео режим вход: нет выход: AL = текущий режим (см. функцию 00H) AH = число текстовых колонок на экране BH = текущий номер активной страницы дисплея --- ---------------------------------------------------------------------------- 10H-12H См. EGA BIOS сервис --- ---------------------------------------------------------------------------- 13H писать строку ¦AT¦ EGA Выдает строку в позиции курсора. символы 0dH (CarRet), 0aH (LineFeed), 08H (backspace) и 07H (Beep) трактуются как команды управления и не высвечиваются. вход: ES:BP => выводимая строка (спецформат для AL=2 и AL=3) CX = длина строки (подсчитываются только символы) DH,DL = строка,колонка начала вывода BH = номер страницы AL = код подфункции: 0 = использовать атрибут в BL; не трогать курсор 1 = использовать атрибут в BL; курсор - в конец строки 2 = формат строки: char,attr, char,attr...; не трогать курсор 3 = формат строки: char,attr, char,attr...; передвинуть курсор -------------------------------------------------------------------------------- подфункции 10H-13H: EGA BIOS сервис данные BIOS функции ROM-BIOS EGA BIOS сервис Эти функции устанавливаются в процессе ROM-Scan при наличии платы EGA . См. Детали видео сервиса подф. 00H о видео режимах, применимых к EGA. См. порты в/в EGA о прямом доступе к средствам платы EGA. AH сервис --- ---------------------------------------------------------------------------- 10H установить регистры палитры для EGA Выбирает цвета, используемые данным атрибутом экрана. умалчиваемые цвета - те же, что используются с CGA (см. атрибуты экрана ). вход: AL = 0: уст. один регистр палитры BL = регистр (идентифицирует 4-битовый цвет; 0-15) BH = значение регистра (6-битовый rgbRGB выдаваемый цвет) AL = 1: уст. регистр бордюра. Note: not much of a border. BH = значение регистра AL = 2: уст. все регистры палитры и регистр бордюра ES:BX => 17 байт (регистры палитры и регистр бордюра) AL = 3: выбрать интенсивность или мерцание BL = 0: интенсивность фона (16 возможных цветов фона) BL = 1: мерцание (8 цветов фона + мерцание переднего плана) значения регистра палитры для подфункций 0,1,and 2: --7-T-6-T-5-T-4-T-3-T-2-T-1-T-0-¬ ¦не исп.¦ r g b/I R G B ¦ (6 бит = 64 возможных цвета) L---+---+---+---+-T-+---+---+---- L= действует как интенсивность для режимов CGA --- ---------------------------------------------------------------------------- 11H EGA character generator functions. Resets video variables without change to the current values in the regen buffer (ie, the screen is not cleared). вход: AL = 0: load user-defined text-mode display font ES:BP => user font table CX = count of character patterns to store DX = character offset (font load starts at this ASCII value) BL = font block to load (0 to 4; 4 if 256K EGA memory) BH = count of bytes per character pattern (eg, 8 or 14) AL = 1: load ROM 8x14 character font BL = font block to load (0-4) AL = 2: load ROM 8x8 double-dot character font BL = font block to load (0-4) AL = 3: set block specifier (enables two of the four 256-char sets) The second set of 256 chars is selected by attribute bit 3. (in other words, if you select a "foreground color" above 7, the EGA displays the secondary font). BL = font block selector (4 bits, 0-0fH) --7-T-6-T-5-T-4-T-3-T-2-T-1-T-0-¬ ¦ not used ¦block# ¦block# ¦ L---+---+---+---+---+---+---+---- L=T=- L===¦== selected when attr bit 3=0 L============ used when attr bit 3=1 ---------------------------------------------------------------------------- Sub-functions 10H,11H,and 12H expect page 0 to be active and should be used directly after a mode reset. These recalculate rows and columns and reprogram several CRTC registers, including the cursor registers. AL=10H: load user-defined text-mode display font (see SubFn 00H) AL=11H: load ROM 8x14 character font (see SubFn 01H) AL=12H: load ROM 8x8 double-dot character font (see SubFn 02H) ---------------------------------------------------------------------------- AL=20H: set up user character font for graphics modes ES:BP => 2048-byte table of 8x8 character set for INT 1fH AL=21H: set up user character font for graphics modes ES:BP => table of 8x8 character set for INT 44H CX = points (bytes per character) BL = screen rows code 0 = user-specified DL = character rows on screen 1 = 0eH (14 character rows on screen) 2 = 19H (25 character rows on screen) 3 = 2bH (43 character rows on screen) AL=22H: set up ROM 8x14 character font for graphics modes BL = screen rows code (see above) AL=23H: set up ROM 8x8 double-dot character font for graphics modes BL = screen rows code (see above) ---------------------------------------------------------------------------- AL=30H: Get EGA information BH = table pointer request code 0 = return ES:BP => current INT 1fH graphics font addr 1 = return ES:BP => current INT 44H graphics font addr 2 = return ES:BP => ROM 8x14 font table addr 3 = return ES:BP => ROM 8x8 double dot font table addr 4 = return ES:BP => ROM 8x8 double dot addr (top) 5 = return ES:BP => ROM 9x14 alternate table addr выход: CX = font points (font-definition bytes per character) DL = screen rows --- ---------------------------------------------------------------------------- 12H EGA special functions (Alternate Select) вход: BL=10H: return EGA information выход: BH = mode (0=color; 1=monochrome) BL = memory size code (0=64K; 1=128K; 2=192K; 3=256K) CH = feature bits (values of those unused RCA connectors) CL = switch settings (adaptor/display primary/secondary) вход: BL=20H: select alternate print-screen routine (be sure to use this every time you change the number of screen rows). --- ---------------------------------------------------------------------------- 13H write string ¦AT¦ EGA Displays a string at a selected cursor position. Characters 0dH (CarRet), 0aH (LineFeed), 08H (bksp), and 07H (Beep) are treated as control commands and are not displayed. вход: ES:BP => string to display (special format for AL=2 and AL=3) CX = length of string (character count only) DH,DL = row,column to start displaying BH = page number AL = sub function code: 0 = use attribute in BL; don't update cursor 1 = use attribute in BL; leave cursor at end of string 2 = string format: char,attr, char,attr...; don't update cursor 3 = string format: char,attr, char,attr...; do update cursor
Оставить комментарий
Комментарии
1.
1 марта 2023, 02:40:02
AH = 00, режимы VGA:
11H графика 640x480, 2 цвета, адрес A000
12H графика 640x480, 16 цветов, адрес A000
13H графика 320x200, 256 цветов (байт/пиксель), адрес A000
Для установки режимов SVGA нужно знать их коды, но лучше использовать стандарт VESA. См. статьи Сергея Андрианова в журнале "Мир ПК" (на сайте osp.ru, например):
1. VESA: стандарт новый, проблемы старые (Мир ПК, 1998, № 7) - в реальном режиме DOS
2. VESA 2.0: программируем в защищенном режиме (Мир ПК, 1998, № 8) - в защищенном режиме
11H графика 640x480, 2 цвета, адрес A000
12H графика 640x480, 16 цветов, адрес A000
13H графика 320x200, 256 цветов (байт/пиксель), адрес A000
Для установки режимов SVGA нужно знать их коды, но лучше использовать стандарт VESA. См. статьи Сергея Андрианова в журнале "Мир ПК" (на сайте osp.ru, например):
1. VESA: стандарт новый, проблемы старые (Мир ПК, 1998, № 7) - в реальном режиме DOS
2. VESA 2.0: программируем в защищенном режиме (Мир ПК, 1998, № 8) - в защищенном режиме
2.
+6 / -3
13 февраля 2016, 17:56:33
Неудобно смотреть
3.
+5 / -2
20 октября 2010, 21:47:49
А если мне нужно нажатием клавиши F6 увеличить экран до 43 строк. а при повторном нажатии этой клавиши вернуть обратно 25, это прерывание подойдет?
3.1.
1 марта 2023, 02:42:47
Подойдет, только изображение нужно сохранять, а затем восстанавливать. Функция AH = 0 прерывания 10H выполняет очистку экрана.
4.
+11 / -4
11 февраля 2008, 19:44:36
Побольше бы таких статей
5.
+8 / -2
2 марта 2007, 16:46:39
Замечательно!
Давно искал. А скажите, есть где-нибудь какая-нибудь официальная справка по прерываниям? Пусть на английском.
Давно искал. А скажите, есть где-нибудь какая-нибудь официальная справка по прерываниям? Пусть на английском.
6.
+7 / -1
7 апреля 2006, 11:32:13
Достаточно полное руководство. Не хватает только "новых" функций VBE. И видеорежимов VGA.
7.
+9 / -1
20 января 2006, 19:26:13
Хорошо помогло при одном из первых экспериментов с Assembler'ом. Огромное спасибо!!!!!!!!!!!!!!!