N/A
git-svn-id: https://spexeah.com:8443/svn/Asuro@18 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
1 parent
e33d8ad9eb
commit
eebe77ad9b
19 files changed
+36
-31
No files matched your search
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+36
-31
@@ -13,10 +13,11 @@ type
|
|||||||
limit_n_flags : Byte;
|
limit_n_flags : Byte;
|
||||||
base_high : Byte;
|
base_high : Byte;
|
||||||
end;
|
end;
|
||||||
|
PSegmentDescriptor = ^TSegmentDescriptor;
|
||||||
|
|
||||||
var
|
var
|
||||||
GDTarr : array[0..3] of TSegementDescriptor;
|
GDTarr : array of TSegementDescriptor;
|
||||||
GDTptr : ^TSegementDescriptor;
|
GDTptr : PSegmentDescriptor;
|
||||||
GDT_length : integer = 0;
|
GDT_length : integer = 0;
|
||||||
|
|
||||||
procedure init();
|
procedure init();
|
||||||
@@ -46,48 +47,52 @@ end;
|
|||||||
|
|
||||||
procedure create(base : dword; limit : dword; flags : byte);
|
procedure create(base : dword; limit : dword; flags : byte);
|
||||||
var
|
var
|
||||||
descriptor : array[0..8] of Byte;
|
descriptor : array[0..8] of Byte;
|
||||||
descriptor_ptr : ^Byte = @descriptor[0];
|
descriptor_ptr : ^Byte = @descriptor[0];
|
||||||
s_descriptor : TSegementDescriptor;
|
s_descriptor : TSegementDescriptor;
|
||||||
s_descriptor_ptr : ^TSegementDescriptor = @s_descriptor;
|
s_descriptor_ptr : ^TSegementDescriptor = @s_descriptor;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if limit <= 65536 then
|
if limit <= 65536 then begin
|
||||||
descriptor[6] := $40
|
descriptor[6] := $40
|
||||||
else
|
end else begin
|
||||||
if (limit and $FFF) <> $FFF then
|
if (limit and $FFF) <> $FFF then begin
|
||||||
limit := (limit >> 12) -1
|
limit := (limit SHR 12) -1
|
||||||
else
|
end else begin
|
||||||
limit := limit >> 12;
|
limit := limit SHR 12;
|
||||||
descriptor[6] := $C0;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
descriptor[6] := $C0;
|
||||||
|
|
||||||
descriptor[0] := limit and $FF;
|
descriptor[0] := limit and $FF;
|
||||||
descriptor[1] := (limit shr 8) and $FF;
|
descriptor[1] := (limit shr 8) and $FF;
|
||||||
descriptor[6] := limit or ((limit shr 16) and $F);
|
descriptor[6] := limit or ((limit shr 16) and $F);
|
||||||
|
|
||||||
descriptor[2] := base and $FF;
|
descriptor[2] := base and $FF;
|
||||||
descriptor[3] := (base shr 8) and $FF;
|
descriptor[3] := (base shr 8) and $FF;
|
||||||
descriptor[4] := (base shr 16) and $FF;
|
descriptor[4] := (base shr 16) and $FF;
|
||||||
descriptor[7] := (base shr 24) and $FF;
|
descriptor[7] := (base shr 24) and $FF;
|
||||||
|
|
||||||
descriptor[5] := flags;
|
descriptor[5] := flags;
|
||||||
|
|
||||||
asm
|
asm
|
||||||
MOV EAX, descriptor_ptr
|
MOV EAX, descriptor_ptr
|
||||||
MOV s_descriptor_ptr, EAX
|
MOV s_descriptor_ptr, EAX
|
||||||
end;
|
end;
|
||||||
|
|
||||||
descriptor_ptr = @descriptor[4];
|
descriptor_ptr = @descriptor[4];
|
||||||
|
|
||||||
asm
|
asm
|
||||||
MOV EAX, descriptor_ptr
|
MOV EAX, descriptor_ptr
|
||||||
MOV EBX, s_descriptor_ptr
|
MOV EBX, s_descriptor_ptr
|
||||||
ADD EBX, 1
|
ADD EBX, 1
|
||||||
MOV (EBX), EAX
|
MOV (EBX), EAX
|
||||||
end;
|
end;
|
||||||
|
|
||||||
GDTarr[GDT_length] := s_descriptor;
|
GDTarr[GDT_length] := s_descriptor;
|
||||||
GDT_length := GDT_length + 1;
|
GDT_length := GDT_length + 1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
end.
|
end.
|
||||||
Reference in new issue
Block a user