d
git-svn-id: https://spexeah.com:8443/svn/Asuro@199 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
BIN
bin/kernel.bin
BIN
bin/kernel.bin
Binary file not shown.
Binary file not shown.
BIN
lib/PCI.ppu
BIN
lib/PCI.ppu
Binary file not shown.
BIN
lib/isr0.ppu
BIN
lib/isr0.ppu
Binary file not shown.
BIN
lib/isr1.ppu
BIN
lib/isr1.ppu
Binary file not shown.
BIN
lib/isr10.ppu
BIN
lib/isr10.ppu
Binary file not shown.
BIN
lib/isr11.ppu
BIN
lib/isr11.ppu
Binary file not shown.
BIN
lib/isr12.ppu
BIN
lib/isr12.ppu
Binary file not shown.
BIN
lib/isr13.ppu
BIN
lib/isr13.ppu
Binary file not shown.
BIN
lib/isr14.ppu
BIN
lib/isr14.ppu
Binary file not shown.
BIN
lib/isr15.ppu
BIN
lib/isr15.ppu
Binary file not shown.
BIN
lib/isr16.ppu
BIN
lib/isr16.ppu
Binary file not shown.
BIN
lib/isr17.ppu
BIN
lib/isr17.ppu
Binary file not shown.
BIN
lib/isr18.ppu
BIN
lib/isr18.ppu
Binary file not shown.
BIN
lib/isr2.ppu
BIN
lib/isr2.ppu
Binary file not shown.
BIN
lib/isr3.ppu
BIN
lib/isr3.ppu
Binary file not shown.
BIN
lib/isr32.ppu
BIN
lib/isr32.ppu
Binary file not shown.
BIN
lib/isr33.ppu
BIN
lib/isr33.ppu
Binary file not shown.
BIN
lib/isr4.ppu
BIN
lib/isr4.ppu
Binary file not shown.
BIN
lib/isr40.ppu
BIN
lib/isr40.ppu
Binary file not shown.
BIN
lib/isr5.ppu
BIN
lib/isr5.ppu
Binary file not shown.
BIN
lib/isr6.ppu
BIN
lib/isr6.ppu
Binary file not shown.
BIN
lib/isr7.ppu
BIN
lib/isr7.ppu
Binary file not shown.
BIN
lib/isr8.ppu
BIN
lib/isr8.ppu
Binary file not shown.
BIN
lib/isr9.ppu
BIN
lib/isr9.ppu
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.
Binary file not shown.
BIN
lib/tss.ppu
BIN
lib/tss.ppu
Binary file not shown.
BIN
lib/util.ppu
BIN
lib/util.ppu
Binary file not shown.
@ -28,22 +28,29 @@ var
|
|||||||
|
|
||||||
procedure Main(); interrupt;
|
procedure Main(); interrupt;
|
||||||
var
|
var
|
||||||
i : integer;
|
i : uint32;
|
||||||
ec : uint32;
|
Regs : PRegisters;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
asm
|
|
||||||
MOV EAX, [ESP-4]
|
|
||||||
MOV ec, EAX
|
|
||||||
end;
|
|
||||||
CLI;
|
CLI;
|
||||||
|
asm
|
||||||
|
MOV EAX, EBP
|
||||||
|
MOV Regs, EAX
|
||||||
|
end;
|
||||||
for i:=0 to MAX_HOOKS-1 do begin
|
for i:=0 to MAX_HOOKS-1 do begin
|
||||||
if uint32(Hooks[i]) <> 0 then Hooks[i](void(13));
|
if uint32(Hooks[i]) <> 0 then Hooks[i](void(13));
|
||||||
end;
|
end;
|
||||||
console.writestring('General Protection Fault. [');
|
console.writestringln('General Protection Fault.');
|
||||||
console.writehex(ec);
|
console.writestring('Flags: ');
|
||||||
console.writestringln(']');
|
console.writehexln(Regs^.EFlags);
|
||||||
util.halt_and_catch_fire;
|
console.writestring('EIP: ');
|
||||||
|
console.writehexln(Regs^.EIP);
|
||||||
|
console.writestring('CS: ');
|
||||||
|
console.writehexln(Regs^.CS);
|
||||||
|
console.writestring('Error Code: ');
|
||||||
|
console.writehexln(Regs^.ErrorCode);
|
||||||
|
Regs^.EIP:= Regs^.EIP - 2;
|
||||||
|
//util.halt_and_catch_fire;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure register();
|
procedure register();
|
||||||
|
@ -15,10 +15,12 @@ const
|
|||||||
MAX_HOOKS = 16;
|
MAX_HOOKS = 16;
|
||||||
|
|
||||||
type
|
type
|
||||||
ISR_REGS = record
|
PRegisters = ^TRegisters;
|
||||||
ip, cs, flags, sp, ss : uint16;
|
TRegisters = record
|
||||||
|
edi,esi,ebp,esp,ebx,edx,ecx,eax: uint32;
|
||||||
|
ErrorCode : uint32;
|
||||||
|
eip,cs,eflags,UserESP,ss: uint32;
|
||||||
end;
|
end;
|
||||||
PISR_REGS = ^ISR_REGS;
|
|
||||||
|
|
||||||
pp_hook_method = procedure(data : void);
|
pp_hook_method = procedure(data : void);
|
||||||
pp_void = pp_hook_method;
|
pp_void = pp_hook_method;
|
||||||
|
@ -77,7 +77,9 @@ begin
|
|||||||
lmemorymanager.init();
|
lmemorymanager.init();
|
||||||
tss.init();
|
tss.init();
|
||||||
scheduler.init();
|
scheduler.init();
|
||||||
|
|
||||||
|
asm INT 13 end;
|
||||||
|
|
||||||
STI;
|
STI;
|
||||||
isr32.hook(uint32(@bios_data_area.tick_update));
|
isr32.hook(uint32(@bios_data_area.tick_update));
|
||||||
|
|
||||||
|
@ -20,10 +20,9 @@ const
|
|||||||
Quantum = 64;
|
Quantum = 64;
|
||||||
|
|
||||||
type
|
type
|
||||||
TTask_State_Segment = packed record
|
TTaskState = packed record
|
||||||
|
//EAX, EDX,
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TScheduler_Entry = packed record
|
TScheduler_Entry = packed record
|
||||||
ThreadID : uint32;
|
ThreadID : uint32;
|
||||||
Priority : uint8;
|
Priority : uint8;
|
||||||
|
111
src/tss.pas
111
src/tss.pas
@ -17,85 +17,6 @@ uses
|
|||||||
console;
|
console;
|
||||||
|
|
||||||
type
|
type
|
||||||
{TTaskStateSegment = packed record
|
|
||||||
Res1 : uint16;
|
|
||||||
IOMap : uint16;
|
|
||||||
LDTR : uint16;
|
|
||||||
Res2 : uint16;
|
|
||||||
GS : uint16;
|
|
||||||
Res3 : uint16;
|
|
||||||
FS : uint16;
|
|
||||||
Res4 : uint16;
|
|
||||||
DS : uint16;
|
|
||||||
Res5 : uint16;
|
|
||||||
SS : uint16;
|
|
||||||
Res6 : uint16;
|
|
||||||
CS : uint16;
|
|
||||||
Res7 : uint16;
|
|
||||||
ES : uint16;
|
|
||||||
Res8 : uint16;
|
|
||||||
EDI : uint32;
|
|
||||||
ESI : uint32;
|
|
||||||
EBP : uint32;
|
|
||||||
ESP : uint32;
|
|
||||||
EBX : uint32;
|
|
||||||
EDX : uint32;
|
|
||||||
ECX : uint32;
|
|
||||||
EAX : uint32;
|
|
||||||
EFLAGS : uint32;
|
|
||||||
EIP : uint32;
|
|
||||||
CR3 : uint32;
|
|
||||||
SS2 : uint16;
|
|
||||||
Res9 : uint16;
|
|
||||||
SS1 : uint16;
|
|
||||||
Res10 : uint16;
|
|
||||||
SS0 : uint16;
|
|
||||||
Res11 : uint16;
|
|
||||||
ESP0 : uint32;
|
|
||||||
LINK : uint16;
|
|
||||||
Res12 : uint16;
|
|
||||||
end;
|
|
||||||
PTaskStateSegment = ^TTaskStateSegment;}
|
|
||||||
|
|
||||||
{
|
|
||||||
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
|
TTaskStateSegment = packed record
|
||||||
link : uint16;
|
link : uint16;
|
||||||
link_h : uint16;
|
link_h : uint16;
|
||||||
@ -144,36 +65,6 @@ type
|
|||||||
end;
|
end;
|
||||||
PTaskStateSegment = ^TTaskStateSegment;
|
PTaskStateSegment = ^TTaskStateSegment;
|
||||||
|
|
||||||
{TTaskStateSegment = packed record
|
|
||||||
link : uint32;
|
|
||||||
esp0 : uint32;
|
|
||||||
ss0 : uint32;
|
|
||||||
esp1 : uint32;
|
|
||||||
ss1 : uint32;
|
|
||||||
esp2 : uint32;
|
|
||||||
ss2 : uint32;
|
|
||||||
cr3 : uint32;
|
|
||||||
eip : uint32;
|
|
||||||
eflags : uint32;
|
|
||||||
eax : uint32;
|
|
||||||
ecx : uint32;
|
|
||||||
edx : uint32;
|
|
||||||
ebx : uint32;
|
|
||||||
esp : uint32;
|
|
||||||
ebp : uint32;
|
|
||||||
esi : uint32;
|
|
||||||
edi : uint32;
|
|
||||||
es : uint32;
|
|
||||||
cs : uint32;
|
|
||||||
ss : uint32;
|
|
||||||
ds : uint32;
|
|
||||||
fs : uint32;
|
|
||||||
gs : uint32;
|
|
||||||
ldt : uint32;
|
|
||||||
iomap : uint32;
|
|
||||||
end;
|
|
||||||
PTaskStateSegment = ^TTaskStateSegment;}
|
|
||||||
|
|
||||||
var
|
var
|
||||||
TaskStateSegment : TTaskStateSegment;
|
TaskStateSegment : TTaskStateSegment;
|
||||||
ptrTaskStateSegment : PTaskStateSegment = @TaskStateSegment;
|
ptrTaskStateSegment : PTaskStateSegment = @TaskStateSegment;
|
||||||
@ -198,7 +89,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
ptrTaskStateSegment^.esp0:= cESP;
|
ptrTaskStateSegment^.esp0:= cESP;
|
||||||
ptrTaskStateSegment^.CR3:= cCR3;
|
ptrTaskStateSegment^.CR3:= cCR3;
|
||||||
gdt.set_gate($05, uint32(ptrTaskStateSegment)-KERNEL_VIRTUAL_BASE, sizeof(TTaskStateSegment)-1, $89, $40); //OFFSET: 40
|
gdt.set_gate($05, uint32(ptrTaskStateSegment) - KERNEL_VIRTUAL_BASE, sizeof(TTaskStateSegment) - 1, $89, $40); //OFFSET: 40
|
||||||
gdt.reload;
|
gdt.reload;
|
||||||
asm
|
asm
|
||||||
mov AX, 40
|
mov AX, 40
|
||||||
|
Reference in New Issue
Block a user