Многие из процедур работы с экраном не могут быть выполнены путем применения только средств Турбо Паскаля. Для реализации таких процедур, как ввод-вывод в ненулевые страницы видеопамяти, управление курсором и др., необходимо использовать функции операционной системы MS DOS. Обращение к таким функциям осуществляется через так называемые прерывания, которые представляют собой стандартные подпрограммы базовой системы ввода-вывода (BIOS) операционной системы MS DOS.
Обращение к программным прерываниям выполняется с помощью процедуры Intr, заголовок которой имеет вид
Intr(N:byte; Var Reg:Registers),
где N - номер программного прерывания;
Reg - запись типа Registers, через которую передаются параметры заданного прерывания.
Предописанный тип Registers определен в стандартном модуле Dos и представляет собой запись с вариантами:
Type Registers = record
Case integer of
0 : (AX,BX,CX,DX,BP,SI,ES,Flags : word);
1 : (AL,AH,BL,BH,CL,CH,DL,DH : byte);
end;
Переменная типа Registers служит для доступа к регистрам микропроцессора. Вариант 0 позволяет обращаться к 16-разрядным, а вариант 1 - к 8-разрядным регистрам.
Пример.
VarR1,R2 : Registers;
Begin
R1.AX:=$01FF;
R2.AL:=$CA;
............
Подробно прерывания описаны в техническом руководстве по операционной системе MS DOS.
Значения некоторых прерываний:
$5 - распечатка содержимого экрана;
$10 - управление экраном;
$12 - размер памяти;
$16 - ввод с клавиатуры;
$21 - вызов функции и т.д.
Прерывание $21 содержит в себе большой набор функций операционной системы. Номер функции определяется содержимым регистра AH.
Примеры функций для прерывания $21:
$5 - вывод на печатающее устройство;
$19 - задание текущего дисковода;
$2A - выбор даты;
$2C - выбор времени по таймеру;
$3D - открытие файла и т.д.
Пример. Составить программу, определяющую размер оперативной памяти компьютера. Для выполнения данной задачи можно использовать прерывание $12, которое проверяет оперативную память и помещает размер этой памяти в регистр AX.
Var Size : word;
Reg : Registers;
Begin
Intr($12,Reg);
Size:=Reg.AX;
Writeln('ПЭВМ имеет ',Size,' Кбайт оперативной памяти');
Для управления видеотерминалом используется прерывание $10. Функции, выполняемые этим прерыванием, также определяются содержимым регистра AH. Некоторые функции прерывания $10 приведены на следующей странице.
Функция AH = 2 устанавливает положение курсора в координатах 0 ..79, 0 .. 24. Для каждой страницы имеется свой закрепленный за нею курсор.
Функция AH = 5 используется для того, чтобы сделать видимой нужную текстовую страницу.
При AH = 9 и AH = 10 курсор не перемещается, а записываемый символ и его копии появляются на месте курсора и справа от него. При достижении правого края экрана организуется переход на новую строку.
Функция AH = 14 имитирует вывод на экран в режиме пишущей машинки. Именно этот режим реализуется процедурами Write и Writeln, но только для нулевой страницы.
Содержимое
регистра АН
Действие
Содержимое регистров
Установить размер
курсора
СН - начальная линия
СL - конечная линия
BH - номер страницы
Установить положение
курсора
DH - номер строки
DL - номер позиции
BH - номер страницы
Установить страницу
AL - номер страницы
Записать символ
c атрибутами
AL - символ
BL - атрибуты
BH - номер страницы
CX - количество копий символа
Записать символ
без атрибутов
AL - символ
BH - номер страницы
CX - количество копий символа