Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
100.0M
01 марта 2023 года
kutergin.d.n@synaptik.ru
0 / / 01.03.2023
Мне нравитсяМне не нравится
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) - в защищенном режиме
2.
97K
13 февраля 2016 года
Adam Smith
0 / / 13.02.2016
+6 / -3
Мне нравитсяМне не нравится
13 февраля 2016, 17:56:33
Неудобно смотреть
3.
65K
20 октября 2010 года
S_Grey
0 / / 20.10.2010
+5 / -2
Мне нравитсяМне не нравится
20 октября 2010, 21:47:49
А если мне нужно нажатием клавиши F6 увеличить экран до 43 строк. а при повторном нажатии этой клавиши вернуть обратно 25, это прерывание подойдет?
3.1.
100.0M
01 марта 2023 года
kutergin.d.n@synaptik.ru
0 / / 01.03.2023
Мне нравитсяМне не нравится
1 марта 2023, 02:42:47
Подойдет, только изображение нужно сохранять, а затем восстанавливать. Функция AH = 0 прерывания 10H выполняет очистку экрана.
4.
36K
11 февраля 2008 года
stanger
2 / / 11.02.2008
+11 / -4
Мне нравитсяМне не нравится
11 февраля 2008, 19:44:36
Побольше бы таких статей
5.
14K
29 ноября 2005 года
Gue
1 / / 29.11.2005
+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'ом. Огромное спасибо!!!!!!!!!!!!!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог