git-svn-id: https://spexeah.com:8443/svn/Asuro@199 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
kieron
2017-05-22 20:14:50 +00:00
parent 058f400b0c
commit b15760b7f6
39 changed files with 28 additions and 127 deletions

BIN
Asuro.iso

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.

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.

View File

@ -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();

View File

@ -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;

View File

@ -77,7 +77,9 @@ begin
lmemorymanager.init();
tss.init();
scheduler.init();
asm INT 13 end;
STI;
isr32.hook(uint32(@bios_data_area.tick_update));

View File

@ -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;

View File

@ -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