ds
git-svn-id: https://spexeah.com:8443/svn/Asuro@172 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
parent
b7d7f17c3a
commit
781914b160
BIN
bin/kernel.bin
BIN
bin/kernel.bin
Binary file not shown.
Binary file not shown.
BIN
lib/kernel.ppu
BIN
lib/kernel.ppu
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/libpsystem.a
BIN
lib/libpsystem.a
Binary file not shown.
BIN
lib/tss.ppu
BIN
lib/tss.ppu
Binary file not shown.
116
src/tss.pas
116
src/tss.pas
@ -17,7 +17,7 @@ uses
|
|||||||
console;
|
console;
|
||||||
|
|
||||||
type
|
type
|
||||||
TTaskStateSegment = packed record
|
{
|
||||||
Res1 : uint16;
|
Res1 : uint16;
|
||||||
IOPBOffset : uint16;
|
IOPBOffset : uint16;
|
||||||
LDTR : uint16;
|
LDTR : uint16;
|
||||||
@ -54,6 +54,92 @@ type
|
|||||||
ESP0 : uint32;
|
ESP0 : uint32;
|
||||||
LINK : uint16;
|
LINK : uint16;
|
||||||
Res12 : uint16;
|
Res12 : uint16;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Res12 : uint16;
|
||||||
|
LINK : uint16;
|
||||||
|
ESP0 : uint32;
|
||||||
|
Res11 : uint16;
|
||||||
|
SS0 : uint16;
|
||||||
|
Res10 : uint16;
|
||||||
|
SS1 : uint16;
|
||||||
|
Res9 : uint16;
|
||||||
|
SS2 : uint16;
|
||||||
|
CR3 : uint32;
|
||||||
|
EIP : uint32;
|
||||||
|
EFLAGS : uint32;
|
||||||
|
EAX : uint32;
|
||||||
|
ECX : uint32;
|
||||||
|
EDX : uint32;
|
||||||
|
EBX : uint32;
|
||||||
|
ESP : uint32;
|
||||||
|
EBP : uint32;
|
||||||
|
ESI : uint32;
|
||||||
|
EDI : uint32;
|
||||||
|
Res8 : uint16;
|
||||||
|
ES : uint16;
|
||||||
|
Res7 : uint16;
|
||||||
|
CS : uint16;
|
||||||
|
Res6 : uint16;
|
||||||
|
SS : uint16;
|
||||||
|
Res5 : uint16;
|
||||||
|
DS : uint16;
|
||||||
|
Res4 : uint16;
|
||||||
|
FS : uint16;
|
||||||
|
Res3 : uint16;
|
||||||
|
GS : uint16;
|
||||||
|
Res2 : uint16;
|
||||||
|
LDTR : uint16;
|
||||||
|
IOPBOffset : uint16;
|
||||||
|
Res1 : uint16;
|
||||||
|
}
|
||||||
|
|
||||||
|
TTaskStateSegment = packed record
|
||||||
|
link : uint16;
|
||||||
|
link_h : uint16;
|
||||||
|
|
||||||
|
esp0 : uint32;
|
||||||
|
ss0 : uint16;
|
||||||
|
ss0_h : uint16;
|
||||||
|
|
||||||
|
esp1 : uint32;
|
||||||
|
ss1 : uint16;
|
||||||
|
ss1_h : uint16;
|
||||||
|
|
||||||
|
esp2 : uint32;
|
||||||
|
ss2 : uint16;
|
||||||
|
ss2_h : uint16;
|
||||||
|
|
||||||
|
cr3 : uint32;
|
||||||
|
eip : uint32;
|
||||||
|
eflags : uint32;
|
||||||
|
|
||||||
|
eax : uint32;
|
||||||
|
ecx : uint32;
|
||||||
|
edx : uint32;
|
||||||
|
ebx : uint32;
|
||||||
|
|
||||||
|
esp : uint32;
|
||||||
|
ebp : uint32;
|
||||||
|
esi : uint32;
|
||||||
|
edi : uint32;
|
||||||
|
es : uint16;
|
||||||
|
es_h : uint16;
|
||||||
|
cs : uint16;
|
||||||
|
cs_h : uint16;
|
||||||
|
ss : uint16;
|
||||||
|
ss_h : uint16;
|
||||||
|
ds : uint16;
|
||||||
|
ds_h : uint16;
|
||||||
|
fs : uint16;
|
||||||
|
fs_h : uint16;
|
||||||
|
gs : uint16;
|
||||||
|
gs_h : uint16;
|
||||||
|
ldt : uint16;
|
||||||
|
ldt_h : uint16;
|
||||||
|
trap : uint16;
|
||||||
|
iomap : uint16;
|
||||||
end;
|
end;
|
||||||
PTaskStateSegment = ^TTaskStateSegment;
|
PTaskStateSegment = ^TTaskStateSegment;
|
||||||
|
|
||||||
@ -67,38 +153,22 @@ implementation
|
|||||||
|
|
||||||
procedure init;
|
procedure init;
|
||||||
var
|
var
|
||||||
i : uint32;
|
|
||||||
cESP : uint32;
|
cESP : uint32;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
console.writestringln('A');
|
ptrTaskStateSegment^.ss0:= $10;
|
||||||
i:=KERNEL_PAGE_NUMBER+4;
|
ptrTaskStateSegment^.iomap:= sizeof(TTaskStateSegment);
|
||||||
console.writestringln('B');
|
gdt.set_gate($05, uint32(ptrTaskStateSegment) - KERNEL_VIRTUAL_BASE, sizeof(TTaskStateSegment), $89, $40); //OFFSET: 40
|
||||||
while not vmemorymanager.new_page(i) do begin
|
|
||||||
i:= i + 1;
|
|
||||||
end;
|
|
||||||
console.writestringln('C');
|
|
||||||
ptrTaskStateSegment:= PTaskStateSegment(i SHL 22);
|
|
||||||
console.writestringln('D');
|
|
||||||
ptrTaskStateSegment^.SS0:= $10;
|
|
||||||
console.writestringln('E');
|
|
||||||
ptrTaskStateSegment^.ESP0:= $00;
|
|
||||||
console.writestringln('F');
|
|
||||||
ptrTaskStateSegment^.IOPBOffset:= sizeof(TTaskStateSegment);
|
|
||||||
console.writestringln('G');
|
|
||||||
gdt.set_gate($05, i SHL 22 - KERNEL_VIRTUAL_BASE, sizeof(TTaskStateSegment), $89, $40); //OFFSET: 40
|
|
||||||
console.writestringln('H');
|
|
||||||
asm
|
asm
|
||||||
MOV cESP, ESP
|
MOV cESP, ESP
|
||||||
end;
|
end;
|
||||||
console.writestringln('I');
|
ptrTaskStateSegment^.esp0:= cESP;
|
||||||
ptrTaskStateSegment^.ESP0:= cESP;
|
console.writestringln('A');
|
||||||
console.writestringln('J');
|
|
||||||
asm
|
asm
|
||||||
mov AX, 40
|
mov AX, 40
|
||||||
ltr AX
|
ltr AX
|
||||||
end;
|
end;
|
||||||
console.writestringln('K');
|
console.writestringln('B');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
Loading…
x
Reference in New Issue
Block a user