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'ом. Огромное спасибо!!!!!!!!!!!!!!!

