procedure not_int;
procedure en_int;
procedure set_unr(base,limit:longint;kseg,g:byte);
procedure save_sreg;
procedure reset;
procedure test_wr;
procedure init_tss_286 (var tss:t_tss_286; cs,ds,es, ofs_task,ofs_task_stack:word);
procedure init_tss_386 (var tss:t_tss_386; cs,ds,es, ofs_task,ofs_task_stack:word);
procedure get_cpu_type(inf:byte;var cpu:byte);
procedure exc_00;
procedure exc_01;
procedure exc_02;
procedure exc_03;
procedure exc_04;
procedure exc_05;
procedure exc_06;
procedure exc_07;
procedure exc_08;
procedure exc_10;
procedure exc_11;
procedure exc_12;
procedure exc_13;
procedure exc_14;
procedure exc_16;
procedure exc_17;
procedure exc_18;
procedure keyb;
procedure int_30h;
procedure int_31h;
implementation
function lin_adr; { Перетвоpення логiчної адреси }
begin { в лiнiйну адресу }
lin_adr:=longint(seg) shl 4+off
end;{lin_adr}
function hex; { Пеpетвоpення даних в 16-рiчну форму }
var s:string;
begin
s:='h';
repeat
s:=hex_tabl[p and $f]+s;
p:=p shr 4
until p=0;
hex:=s
end; {hex}
procedure init_gdt; { Формування дескриптора таблицi GDT }
begin
with gdt[i] do begin
lim_l :=limit;
base_l :=base;
base_h :=base shr 16;
acc :=acces;
lim_h :=limit shr 16 or byte_6h;
base_hh:=base shr 24;
end
end; {init_gdt}
procedure init_gdtr; { Формування даних i завантаження GDTR }
begin
gdtr.lim:=sizeof(gdt)-1;
gdtr.base:=lin_adr(seg(gdt),ofs(gdt));
asm
db 0fh,01h,16h { LGDT gdtr: }
dw gdtr завантаження атрибутiв GDT в GDTR з gdtr }
end
end; {init_gdtr}
procedure init_idt; { Формування дескриптора таблицi IDT }
begin
with idt[i] do begin
off_l:=p_off;
sel:=p_sel;
par:=0;
acc:=acces;
off_h:=0
end
end; {init_idt}
procedure init_idtr_p; { Формування даних i завантаження }
begin { IDTR для роботи в захищеному режимi }
idtr.lim:=sizeof(idt)-1;
idtr.base:=lin_adr(seg(idt),ofs(idt));
asm
db 0fh,01h,1eh { LIDT idtr: }
dw idtr завантаження атрибутiв IDT в IDTR з idtr }
end;
end;
procedure init_idtr_r; { Формування даних регістра IDTR }
begin { для роботи в реальному режимi: }
idtr_r.lim:=$3ff; { розмiр таблицi векторiв, }
idtr_r.base:=0; { базова адреса таблицi векторiв }
end;
procedure save_ret_real;
begin
memw[$40:$67]:=ofs; { В комiрках 40h:67h и 40h:69h - }
memw[$40:$69]:=seg; { повна адреса точки повернення }
{ в реальний режим пiсля апаратного скидання МП }
port[$70]:=$0f; { 0Fh - адреса комiрки КМОП пам'ятi, }
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.