Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 08

INT 13H: дисковый ввод-вывод

Этот сервис предоставляет прямой доступ а адаптерам дискеты и жесткого диска. Рекомендуется там, где это возможно, использовать INT 25H и INT 26H, чтобы предоставить драйверам устройств DOS выполнять всю низкоуровневую обработку. Разумеется, для таких операций, как форматирование диска или установка защиты от копирования, прерывание INT 13H может оказаться единственной альтернативой.

подфункции: 00H сброс контроллера 08H дать парам диска 10H проверить готовность 01H дать статус 09H иниц табл парам 11H рекалибрация 02H читать секторы 0aH длинное чтение 14H диагностика 03H писать секторы 0bH длинная запись 15H дать тип диска 04H верификация 0cH искать цилиндр 16H изменить статус 05H форматир дорожку 0dH альтерн сброс 17H уст тип дискаAH сервис--- ----------------------------------------------------------------------------00H Сброс устройства. вызывает рекалибрацию контроллера. если DL равен 80H или 81H, выполнен сброс контр тверд диска, иначе FDC.--- ----------------------------------------------------------------------------01H дать статус ошибки последней операции. вход: DL = диск. DL < 80H = дискета; DL > 7FH = твердый диск выход: AL содержит код ошибки диска (то же, что значение по адресу 0:0441)--- ----------------------------------------------------------------------------02H читать секторы вход: DL = номер диска (0=диск A...; 80H=тв.диск 0; 81H=тв.диск 1) DH = номер головки чтения/записи CH = номер дорожки (цилиндра)(0-n) =¬ CL = номер сектора (1-n) ===========¦== См. замечание ниже. AL = число секторов (в сумме не больше чем один цилиндр) ES:BX => адрес буфера вызывающей программы 0:0078 => таблица параметров дискеты (для гибких дисков) 0:0104 => таблица параметров тв.диска (для твердых дисков) выход: Carry-флаг=1 при ошибке и код ошибки диска в AH. ES:BX буфер содержит данные, прочитанные с диска замечание: на сектор и цилиндр отводится соответственно 6 и 10 бит: 1 1 1 1 1 1 +5-4-3-2-1-0-9-8-7-6-5-4-3-2-1-0+ CX: ¦c c c c c c c c C c S s s s s s¦ +-+-+-+-+-+-+-+-¦-+-+-+-+-+-+-+-+ +======> исп. как старшие биты номера цилиндра--- ----------------------------------------------------------------------------03H писать секторы вход: (аналогично подфункции 02H) ES:BX => данные, записываемые на диск. выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.--- ----------------------------------------------------------------------------04H проверить секторы. проверяет CRC для указанных секторов на ошибки. вход: (аналогично подф. 02H. ES:BX лучше также предоставить) выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.--- ----------------------------------------------------------------------------05H форматировать дорожку. данные на дорожке, если есть, разрушаются. вход: DL,DH,CH = диск,головка,дорожка (см. подф. 02H) ES:BX => дескрипторы секторов (требуется 512-байтовый буфер) дискета: 1 4-байтовый 'CHNS' (цилиндр,Головка,Nсектора,размер) для каждого сектора на дорожке (т.е. 36 байт для 9-сек- торных дорожек); номера секторов д.б. упорядочены. 'Z' - код размера сектора: 0=128; 1=256; 2=512; 3=1024 ¦AT¦ Тв. диск: 1 2-байтовый 'FN' (флаг,Nсектора) для каждого сектора на дорожке. последовательность полей 'N' определяет "коэффи- циент прослаивания" ("interleave factor"). ¦XT¦ Тв. диск: ES:BX не используется. Вместо этого AL содержит значение "прослаивания" между 1 и 16 (10H). выход: Carry-флаг=1 при ошибке и код ошибки диска в AH. (тв. диск: 'F'-поля установлены в 80H, чтобы пометить плохие секторы)--- ----------------------------------------------------------------------------08H ¦AT¦ ¦XT¦ дать параметры диска. возвращает информацию об устройстве. вход: DL = диск выход: DL = число тв. дисков на первом контроллере DH = максимальный номер головки CH = максимальный номер цилиндра (младшие 8 бит) CL = максим. номер сектора (и старшие биты макс. номера цилиндра)--- ----------------------------------------------------------------------------09H ¦AT¦ инициализировать параметры диска. Сообщает BIOS о любом динамическом изменении таблиц параметров устройства. вход: векторы для INT 41H и INT 46H адресуют Табл. параметров тв. диска соответственно для устройств 0 и 1. замечание: ¦XT¦ должен указывать обе таблицы через вектор INT 40H.--- ----------------------------------------------------------------------------0aH ¦AT¦ ¦XT¦ чтение длинное: 512 байт + 4-байтоый ECC (код коррекции ошибок). вход: (как для подф. 02H) выход: Carry-флаг=1 при ошибке и код ошибки диска в AH. ES:BX => в буфере (данные сектора + 4 байта) * число секторов (из AL)--- ----------------------------------------------------------------------------0bH ¦AT¦ ¦XT¦ запись длинная. Пишет 512 байт + 4-байтовый ECC. вход: (как для подф. 02H) ES:BX => буфер содержит данные сектора + 4 байта на каждый сектор выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.--- ----------------------------------------------------------------------------0cH ¦AT¦ ¦XT¦ Искать цилиндр. перемещает головку к нужной дорожке. вход: DL,DH,CH = диск,головка,дорожка (см. подф. 02H) выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.--- ----------------------------------------------------------------------------0dH ¦AT¦ ¦XT¦ Альтернативный сброс устройства вход: DL = диск--- ----------------------------------------------------------------------------0eH ¦AT¦ читать буфер секторов вход: (как для подф. 02H) выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.--- ----------------------------------------------------------------------------0fH ¦AT¦ писать буфер секторов вход: (как для подф. 02H) выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.--- ----------------------------------------------------------------------------10H ¦AT¦ ¦XT¦ проверить готовность устройства вход: DL = диск выход: код ошибки диска (статус) в AH.--- ----------------------------------------------------------------------------11H ¦AT¦ ¦XT¦ Рекалибровать устройство вход: DL = диск выход: код ошибки диска (статус) в AH.--- ----------------------------------------------------------------------------12H ¦AT¦ Диагностика RAM контроллера выход: код ошибки диска (статус) в AH.--- ----------------------------------------------------------------------------13H ¦AT¦ Диагностика устройства выход: код ошибки диска (статус) в AH.--- ----------------------------------------------------------------------------14H ¦AT¦ ¦XT¦ Внутренняя диагностика контроллера выход: код ошибки диска (статус) в AH.--- ----------------------------------------------------------------------------15H ¦AT¦ читать тип диска (недоступна в XT BIOS) вход: DL = диск выход: AH = код устройства: 0 = устройство DL отсутствует 1 = дискета; логика замены диска отсутствует 2 = дискета; логика замены диска доступна (большинство случаев) 3 = твердый диск--- ----------------------------------------------------------------------------16H ¦AT¦ читать статус замены диска выход: AH = код статуса: 0 = диск не был заменен 6 = замена активна (открыта дисковая дверь); DL = номер заменяемого диска--- ----------------------------------------------------------------------------17H ¦AT¦ установить тип дискеты (используется перед операцией форматирования) вход: DL = номер устройства диска (0 или 1) AL = тип носителя диска: 0 = не используется 1 = 360K дискета в 360K устройстве 2 = 360K дискета в 1.2M устройстве 3 = 1.2M дискета в 1.2M устройстве


INT 19H: начальный загрузчик (Bootstrap Loader)

Этот вектор рассматривается после POST, чтобы попытаться загрузить и выполнить какой-либо код "начального вызова" на дискете или твердом диске. Данные в секторе 1 дорожки 0 головки 0 дисковода 0 для первого откликнувшегося диска (дискеты или твердого диска) загружаются по абсолютному адресу 0000:7c00, и управление передается по этому адресу. если опрос всех дисков неудачен, управление передается на прерывание INT 18H.

На твердом диске, этот код в "корневом секторе" в действительности определяет активный раздел диска, а затем загружает и выполняет корневой сектор для этого раздела. это передает управление активной операционной системе диска.

Замечание:

Вы можете использовать этот сервис, чтобы перезагрузить DOS после изменения каких-либо значений в Списке оборудования или иных переменных BIOS (не забудьте установить по адресу 0:0472 значение 1234H). после перезагрузки DOS примет во внимание все ваши изменения.

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

 

<== предыдущая лекция | следующая лекция ==>
Типы данных. Опции компоновщика (редактора связей) TLINK | Этические принципы аудиторской деятельности
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 323; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.