diff --git a/Asuro.iso b/Asuro.iso index f046ba0b..ffb95c25 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 6a953ae6..fdf09053 100755 Binary files a/bin/kernel.bin and b/bin/kernel.bin differ diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index 6a953ae6..fdf09053 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/PCI.ppu b/lib/PCI.ppu index da2b293c..881df335 100644 Binary files a/lib/PCI.ppu and b/lib/PCI.ppu differ diff --git a/lib/isr0.ppu b/lib/isr0.ppu index e634af47..1f6a494a 100644 Binary files a/lib/isr0.ppu and b/lib/isr0.ppu differ diff --git a/lib/isr1.ppu b/lib/isr1.ppu index 9f6977df..cb0ad803 100644 Binary files a/lib/isr1.ppu and b/lib/isr1.ppu differ diff --git a/lib/isr10.ppu b/lib/isr10.ppu index 0428e158..5f41e133 100644 Binary files a/lib/isr10.ppu and b/lib/isr10.ppu differ diff --git a/lib/isr11.ppu b/lib/isr11.ppu index 6b857ebf..130a78e9 100644 Binary files a/lib/isr11.ppu and b/lib/isr11.ppu differ diff --git a/lib/isr12.ppu b/lib/isr12.ppu index 330d5bcb..e6800806 100644 Binary files a/lib/isr12.ppu and b/lib/isr12.ppu differ diff --git a/lib/isr13.ppu b/lib/isr13.ppu index fdc40f0a..9c139023 100644 Binary files a/lib/isr13.ppu and b/lib/isr13.ppu differ diff --git a/lib/isr14.ppu b/lib/isr14.ppu index 7f45aeaa..e09c196e 100644 Binary files a/lib/isr14.ppu and b/lib/isr14.ppu differ diff --git a/lib/isr15.ppu b/lib/isr15.ppu index ab7ff279..32892333 100644 Binary files a/lib/isr15.ppu and b/lib/isr15.ppu differ diff --git a/lib/isr16.ppu b/lib/isr16.ppu index a9a8c001..a8ff1838 100644 Binary files a/lib/isr16.ppu and b/lib/isr16.ppu differ diff --git a/lib/isr17.ppu b/lib/isr17.ppu index 3a978a85..79e2ff12 100644 Binary files a/lib/isr17.ppu and b/lib/isr17.ppu differ diff --git a/lib/isr18.ppu b/lib/isr18.ppu index ff5af473..8a58f237 100644 Binary files a/lib/isr18.ppu and b/lib/isr18.ppu differ diff --git a/lib/isr2.ppu b/lib/isr2.ppu index c57e3812..1ffc1972 100644 Binary files a/lib/isr2.ppu and b/lib/isr2.ppu differ diff --git a/lib/isr3.ppu b/lib/isr3.ppu index 651239c3..153133e0 100644 Binary files a/lib/isr3.ppu and b/lib/isr3.ppu differ diff --git a/lib/isr32.ppu b/lib/isr32.ppu index eeb072a0..bc3a79ab 100644 Binary files a/lib/isr32.ppu and b/lib/isr32.ppu differ diff --git a/lib/isr33.ppu b/lib/isr33.ppu index c65f0636..97a2aa0e 100644 Binary files a/lib/isr33.ppu and b/lib/isr33.ppu differ diff --git a/lib/isr4.ppu b/lib/isr4.ppu index fc8fb807..87b7ba72 100644 Binary files a/lib/isr4.ppu and b/lib/isr4.ppu differ diff --git a/lib/isr40.ppu b/lib/isr40.ppu index 1cfbcaac..53cb9322 100644 Binary files a/lib/isr40.ppu and b/lib/isr40.ppu differ diff --git a/lib/isr5.ppu b/lib/isr5.ppu index abf6a38b..f9d07977 100644 Binary files a/lib/isr5.ppu and b/lib/isr5.ppu differ diff --git a/lib/isr6.ppu b/lib/isr6.ppu index 53daa8ed..6ed41bdf 100644 Binary files a/lib/isr6.ppu and b/lib/isr6.ppu differ diff --git a/lib/isr7.ppu b/lib/isr7.ppu index ee618e4e..7363402c 100644 Binary files a/lib/isr7.ppu and b/lib/isr7.ppu differ diff --git a/lib/isr8.ppu b/lib/isr8.ppu index 1d7116ec..cb75a45c 100644 Binary files a/lib/isr8.ppu and b/lib/isr8.ppu differ diff --git a/lib/isr9.ppu b/lib/isr9.ppu index bc7dcd82..abd8fba6 100644 Binary files a/lib/isr9.ppu and b/lib/isr9.ppu differ diff --git a/lib/isr_types.ppu b/lib/isr_types.ppu index 515543dd..949f9b43 100644 Binary files a/lib/isr_types.ppu and b/lib/isr_types.ppu differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index cfa31dcc..3b18ba12 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 65ce64a5..2aeb8cc2 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index fef10ab1..e519fed5 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index 0cfcbe69..dc873635 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index b95ada6e..ef1c385f 100644 Binary files a/lib/scheduler.ppu and b/lib/scheduler.ppu differ diff --git a/lib/tss.ppu b/lib/tss.ppu index 70b74ce1..4b128531 100644 Binary files a/lib/tss.ppu and b/lib/tss.ppu differ diff --git a/lib/util.ppu b/lib/util.ppu index b04c434b..6a1298a2 100644 Binary files a/lib/util.ppu and b/lib/util.ppu differ diff --git a/src/isr/isr13.pas b/src/isr/isr13.pas index bdbca9c1..65973e81 100644 --- a/src/isr/isr13.pas +++ b/src/isr/isr13.pas @@ -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(); diff --git a/src/isr/isr_types.pas b/src/isr/isr_types.pas index f87ea073..30a2b201 100644 --- a/src/isr/isr_types.pas +++ b/src/isr/isr_types.pas @@ -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; diff --git a/src/kernel.pas b/src/kernel.pas index aacc4c72..0c734bc6 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -77,7 +77,9 @@ begin lmemorymanager.init(); tss.init(); scheduler.init(); - + + asm INT 13 end; + STI; isr32.hook(uint32(@bios_data_area.tick_update)); diff --git a/src/scheduler.pas b/src/scheduler.pas index 06dbf971..4739ad82 100644 --- a/src/scheduler.pas +++ b/src/scheduler.pas @@ -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; diff --git a/src/tss.pas b/src/tss.pas index 18cab7b2..35d7e818 100644 --- a/src/tss.pas +++ b/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