diff --git a/Asuro.iso b/Asuro.iso index f9ba05ce..365407e3 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 74f98bc2..d5497202 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 74f98bc2..d5497202 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 302190f2..c1095b9b 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 2c2e8ca2..a7824489 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 0c8d9f83..2f2cee0f 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index f357d2d3..09f2fd0c 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/tss.ppu b/lib/tss.ppu index 1c4f514f..ba1cf3c6 100644 Binary files a/lib/tss.ppu and b/lib/tss.ppu differ diff --git a/src/tss.pas b/src/tss.pas index 8eaa5f42..adbeb8db 100644 --- a/src/tss.pas +++ b/src/tss.pas @@ -17,7 +17,7 @@ uses console; type - TTaskStateSegment = packed record + { Res1 : uint16; IOPBOffset : uint16; LDTR : uint16; @@ -54,6 +54,92 @@ type ESP0 : uint32; LINK : 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; PTaskStateSegment = ^TTaskStateSegment; @@ -67,38 +153,22 @@ implementation procedure init; var - i : uint32; cESP : uint32; begin - console.writestringln('A'); - i:=KERNEL_PAGE_NUMBER+4; - console.writestringln('B'); - 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'); + ptrTaskStateSegment^.ss0:= $10; + ptrTaskStateSegment^.iomap:= sizeof(TTaskStateSegment); + gdt.set_gate($05, uint32(ptrTaskStateSegment) - KERNEL_VIRTUAL_BASE, sizeof(TTaskStateSegment), $89, $40); //OFFSET: 40 asm MOV cESP, ESP end; - console.writestringln('I'); - ptrTaskStateSegment^.ESP0:= cESP; - console.writestringln('J'); + ptrTaskStateSegment^.esp0:= cESP; + console.writestringln('A'); asm mov AX, 40 ltr AX end; - console.writestringln('K'); + console.writestringln('B'); end; end. \ No newline at end of file