Interface
Uses Crt;
Const
MaxAddress = 255; { максимальный адрес оперативной памяти }
MaxNumber = 32767.0; { макс.значение 16-разрядного двоично-}
{ го числа для индикации переполнения }
Enter = 13; { код клавиши Enter }
PressKey = 'Нажмите клавишу "В В О Д" ';
BlackLightGray = 16*Black+LightGray; { константы цветовых }
BlackLightGreen = 16*Black+LightGreen; { атрибутов }
BlueLightGray = 16*Blue+LightGray;
BlueLightRed = 16*Blue+LightRed;
BlueYellow = 16*Blue+Yellow;
BlueWhite = 16*Blue+White;
GreenBlack = 16*Green+Black+128;
CyanBlack = 16*Cyan+Black;
RedWhite = 16*Red+White;
MagentaLightGreen = 16*Magenta+LightGreen;
MagentaLightCyan = 16*Magenta+LightCyan;
MagentaYellow = 16*Magenta+Yellow;
MagentaWhite = 16*Magenta+White;
BrownBlack = 16*Brown+Black;
BrownDarkGray = 16*Brown+DarkGray;
BrownLightCyan = 16*Brown+LightCyan;
BrownWhite = 16*Brown+White;
LightGrayBlack = 16*LightGray+Black
Type
set2 = set of 1..2; { описания типов }
set4 = set of 1..4; { для памяти и регистров }
set8 = set of 1..8;
set16 = set of 1..16;
RKType = record { тип регистра команд }
KOP : set4; { код операции }
MA, { модификатор адреса
NR : set2; { номер регистра }
AM : set8; { адрес операнда }
end;
RegType = array[0..3] of set16; { тип блока регистров }
MemoryType = array[0..MaxAddress] of set8;{ тип памяти }
String2 = string[2];
String4 = string[4];
String8 = string[8];
String12 = string[12];
String16 = string[16];
String80 = string[80];
ScreenColRange = 1..80; { тип номера столбца экрана }
ScreenRowRange = 1..25; { тип номера строки экрана }
ScreenChar = record { тип элемента видеопамяти }
Symbol : char; { символ }
Attrib : byte; { атрибут }
end;
ScreenRowArray = array[ScreenColrange] of ScreenChar;
{ тип строки экрана }
ScreenArray = array[ScreenRowRange] of ScreenRowArray;
{ тип видеопамяти }
ScreenPointer = ^ScreenArray;
Const { информационные сообщения }
Mes0 : string[78] = ' Esc \ выход '+
' \Enter \ выполнить';
Mes1 : string[78] = 'Esc \ выход \'+Chr(24)+Chr(25)+
' \ указатель'+' \Enter \ выполнить';
MesReg : string[78] = ' Работа режима закончена. '+
'Нажмите клавишу Enter ';
MesStep : string[78] = 'Esc \ выход '+
' \Enter \ выполнение команды';
Var
Aisp, { исполнительный адрес }
SAK, { счетчик адреса команд }
SAK1, { буферная переменная }
RA, { регистр адреса }
NumReg { номер регистра в блоке R }
: byte;
RP : set4; { регистр признаков }
Slovo, { буферная переменная }
RS : set8; { регистр слова }
RK : RKType; { регистр команд }
OR1, OR2, { операционные регистры }
Res : set16; { регистр результата }
Number1, Number2 { численные значения операндов }
: integer;
CondExec : boolean; { признак выполнения маш.программы }
Reg : RegType; { блок регистров }
Memory : MemoryType; { оперативная память }
CurrRow,CurrCol, { текущие строка и колонка экрана }
Key: byte; { ординальный номер символа }
RowAr : ScreenRowArray; { строка видеопамяти }
Screen : ScreenArray
absolute $B800:$0000; { видеопамять }
BufScreen1,BufScreen2, { указатели буферных массивов }
BufScreen3 { для сохранения видеопамяти }
: ScreenPointer;
FileModul { файл исходных данных }
: text;