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;
|
||||
var
|
||||
i : integer;
|
||||
ec : uint32;
|
||||
i : uint32;
|
||||
Regs : PRegisters;
|
||||
|
||||
begin
|
||||
asm
|
||||
MOV EAX, [ESP-4]
|
||||
MOV ec, EAX
|
||||
end;
|
||||
CLI;
|
||||
asm
|
||||
MOV EAX, EBP
|
||||
MOV Regs, EAX
|
||||
end;
|
||||
for i:=0 to MAX_HOOKS-1 do begin
|
||||
if uint32(Hooks[i]) <> 0 then Hooks[i](void(13));
|
||||
end;
|
||||
console.writestring('General Protection Fault. [');
|
||||
console.writehex(ec);
|
||||
console.writestringln(']');
|
||||
util.halt_and_catch_fire;
|
||||
console.writestringln('General Protection Fault.');
|
||||
console.writestring('Flags: ');
|
||||
console.writehexln(Regs^.EFlags);
|
||||
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;
|
||||
|
||||
procedure register();
|
||||
|
@ -15,10 +15,12 @@ const
|
||||
MAX_HOOKS = 16;
|
||||
|
||||
type
|
||||
ISR_REGS = record
|
||||
ip, cs, flags, sp, ss : uint16;
|
||||
PRegisters = ^TRegisters;
|
||||
TRegisters = record
|
||||
edi,esi,ebp,esp,ebx,edx,ecx,eax: uint32;
|
||||
ErrorCode : uint32;
|
||||
eip,cs,eflags,UserESP,ss: uint32;
|
||||
end;
|
||||
PISR_REGS = ^ISR_REGS;
|
||||
|
||||
pp_hook_method = procedure(data : void);
|
||||
pp_void = pp_hook_method;
|
||||
|
@ -77,7 +77,9 @@ begin
|
||||
lmemorymanager.init();
|
||||
tss.init();
|
||||
scheduler.init();
|
||||
|
||||
|
||||
asm INT 13 end;
|
||||
|
||||
STI;
|
||||
isr32.hook(uint32(@bios_data_area.tick_update));
|
||||
|
||||
|
@ -20,10 +20,9 @@ const
|
||||
Quantum = 64;
|
||||
|
||||
type
|
||||
TTask_State_Segment = packed record
|
||||
|
||||
TTaskState = packed record
|
||||
//EAX, EDX,
|
||||
end;
|
||||
|
||||
TScheduler_Entry = packed record
|
||||
ThreadID : uint32;
|
||||
Priority : uint8;
|
||||
|
111
src/tss.pas
111
src/tss.pas
@ -17,85 +17,6 @@ uses
|
||||
console;
|
||||
|
||||
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
|
||||
link : uint16;
|
||||
link_h : uint16;
|
||||
@ -144,36 +65,6 @@ type
|
||||
end;
|
||||
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
|
||||
TaskStateSegment : TTaskStateSegment;
|
||||
ptrTaskStateSegment : PTaskStateSegment = @TaskStateSegment;
|
||||
@ -198,7 +89,7 @@ begin
|
||||
end;
|
||||
ptrTaskStateSegment^.esp0:= cESP;
|
||||
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;
|
||||
asm
|
||||
mov AX, 40
|
||||
|
Reference in New Issue
Block a user