Установка видеорежимов VGA

Видеорежимы, поддерживаемые BIOS'ом адаптеров VGA BIOS:

Экран

Режим Текст Графика Цвета Размер Адрес

 

0 CGA 25*40 only text 16 B&W 2000 0B800h

1 CGA 25*40 only text 16 2000 0B800h

2 CGA 25*80 only text 16 B&W 4000 0B800h

3 CGA 25*80 only text 16 4000 0B800h

4 CGA 25*40 320*200 4 16000 0B800h

5 CGA 25*40 320*200 2 B&W 8000 0B800h

6 CGA 25*80 640*200 2 16000 0B800h

7 MDA 25*80 only text 2 4000

0Dh EGA 25*40 320*200 16 32000 0A000h

0Eh EGA 25*80 640*200 16 64000 0A000h

0Fh EGA 25*80 640*350 2 28000 0A000h

10h EGA 25*80 640*350 16 112000 0A000h

11h VGA 30*80 640*480 2 38400 0A000h

12h VGA 30*80 640*480 16 153600 0A000h

13h VGA 25*40 320*200 256 64000 0A000h

Требуемый видеорежим устанавливается вызовом функции BIOS

mov AH,0 ;POW39

mov AL,ScreenModeNumber

int 10h

Этот фрагмент также очищает экран. Содержимое AX не сохраняется. Стандартный BIOS не возвращает никакой информации, сигнализирующей об ошибке. В подерживаемых режимах можно читать и писать в видеопамять путем вызовов соответствующих функций (функции 8,9,0Ch,0Dh). Нормальный текстовый режим DOS - это режим 3.

Следующий фрагмент загружает набор символов из ROM в RAM и соответственно корректирует высоту отображения символов.

mov AH,11h ;изменить используемый набор символов и корректировать высоту их отображения

;mov AL,11h ;выбрать набор символов 8*14, 28 строк в режиме VGA

;mov AL,12h ;выбрать набор символов 8*8, 50 строк

mov AL,14h ;выбрать набор символов 8*16, 25 строк

mov BX,0 ;банк памяти генератора символов

int 10h

Линейные преобразования в системах с фиксированной точкой

Далее подпрограмма переводит дюймы в миллиметры, но также она может быть использована для любых линейных преобразований, для чего достаточно изменить коэффициент преобразования.

Числа предствалены в 32-битном формате с фиксированной точкой. Старшее слово содержит целую часть числа, а младшее слово - дробную часть. Предполагается, что используются только положительные числа.

Код использует 32-битные инструкции, но может быть откомпилирован и 16-битным компилятором.

; данные

ConvFactor dw 26214 ;младший байт коэффициента преобразования 25.4

dw 25 ;старший байт

Inches dw 32768 ;младший байт представления 12.5 дюймов

dw 12 ;старший байт

mMeters dw ? ;младший байт результата в мм

dw ? ;старший байт

; код

db 66h

mov AX,Inches ;mov EAX,dword ptr ConvFactor

db 66h

mul ConvFactor ;результат в EDX:EAX

mov CL,16

db 66h

shr AX,CL ;shr EAX,16

mov mMeters,AX ;младший байт результата

mov mMeters+2,DX ;старший байт

Таблица размещения файлов FAT

Первый сектор (с номером 0) диска - это загрузочный сектор. Его первые байты содержат следующую информацию:

byte

0-2 Переход на загрузочную программу

3-10 Имя в ASCII формате или что-нибудь еще

11-12 Байт на сектор

13 Секторов на кластер

14-15 Секторов в загрузочной записи =B

16 Количество копий FAT

17-18 Количество каталогов в корне диска

19-20 Секторов на диск

21 Тип диска =xx

22-23 Секторов на FAT =F

и т.д.

Первая таблица FAT начинается с B. Ее копия располагается в секторе B+F etc.
Можно детально рассмотреть FAT используя утилиту DEBUG. Не вносите изменений в таблицу FAT на жестком диске, если вы не уверены, что вы делаете.
Первая запись таблицы FAT выглядит так:

12 bit FAT: xx 0FFh 0FFh

16 bit FAT: xx 0FFh 0FFh 0FFh

xx - тип диска.

Затем, с кластера 2 начинаются элементы таблицы. Возможные значения перечислены в следующей таблице:

12-бит.FAT 16-бит. FAT

000h 0000h пусто

002h-0FEFh 0002h-0FFEFh использовано кластеров.

Значение-указатель на следующую запись в цепочке.

0FF0h-0FF6h 0FFF0h-0FFF6h зарезервировано

0FF7h 0FFF7h bad

0FF8h-0FFFh 0FFF8-0FFFFh последний кластер в цепочке

Вы можете читать сектора, используя прерывание 25h. Отметим, что это прерывание сохраняет флаги в стеке, так что после выполнения прерывания они должны быть восстановлены