;; File: cpu.inc ;; Structure: tss ;; ;; > 31 23 15 7 0 ;; > +----------|----------+----------|----------+ ;; > 0x64 | I/O map base | 00000000 0000000T | ;; > +----------|----------+----------|----------+ ;; > 0x60 | 00000000 00000000 | LDT | ;; > +----------|----------+----------|----------+ ;; > 0x5c | 00000000 00000000 | GS | ;; > +----------|----------+----------|----------+ ;; > 0x58 | 00000000 00000000 | FS | ;; > +----------|----------+----------|----------+ ;; > 0x54 | 00000000 00000000 | DS | ;; > +----------|----------+----------|----------+ ;; > 0x50 | 00000000 00000000 | SS | ;; > +----------|----------+----------|----------+ ;; > 0x4C | 00000000 00000000 | CS | ;; > +----------|----------+----------|----------+ ;; > 0x48 | 00000000 00000000 | ES | ;; > +----------|----------+----------|----------+ ;; > 0x44 | EDI | ;; > +----------|----------+----------|----------+ ;; > 0x40 | ESI | ;; > +----------|----------+----------|----------+ ;; > 0x3C | EBP | ;; > +----------|----------+----------|----------+ ;; > 0x38 | ESP | ;; > +----------|----------+----------|----------+ ;; > 0x34 | EBX | ;; > +----------|----------+----------|----------+ ;; > 0x30 | EDX | ;; > +----------|----------+----------|----------+ ;; > 0x2C | ECX | ;; > +----------|----------+----------|----------+ ;; > 0x28 | EAX | ;; > +----------|----------+----------|----------+ ;; > 0x24 | EFLAGS | ;; > +----------|----------+----------|----------+ ;; > 0x20 | EIP | ;; > +----------|----------+----------|----------+ ;; > 0x1C | CR3 | ;; > +----------|----------+----------|----------+ ;; > 0x18 | 00000000 00000000 | SS2 | ;; > +----------|----------+----------|----------+ ;; > 0x14 | ESP2 | ;; > +----------|----------+----------|----------+ ;; > 0x10 | 00000000 00000000 | SS1 | ;; > +----------|----------+----------|----------+ ;; > 0x0C | ESP1 | ;; > +----------|----------+----------|----------+ ;; > 0x08 | 00000000 00000000 | SS0 | ;; > +----------|----------+----------|----------+ ;; > 0x04 | ESP0 | ;; > +----------|----------+----------|----------+ ;; > 0x00 | 00000000 00000000 | old TSS selector | ;; > +----------|----------+----------|----------+ struc TSS { .prev_tss dd ? .esp0 dd ? .ss0 dd ? .esp1 dd ? .ss1 dd ? .esp2 dd ? .ss2 dd ? .cr3 dd ? .eip dd ? .eflags dd ? .eax dd ? .ecx dd ? .edx dd ? .ebx dd ? .esp dd ? .ebp dd ? .esi dd ? .edi dd ? .es dd ? .cs dd ? .ss dd ? .ds dd ? .fs dd ? .gs dd ? .ldt dd ? .trap dw ? .iomap dw ? } struc GDTGate { } ;; Structure: IDTGate ;; .offset_low - TODO ;; .selector - TODO ;; .zero - TODO ;; .attributes - TODO ;; .offset_high - TODO ;; struc IDTGate { .offset_low dw ? .selector dw ? .zero db 0 .attributes db ? .offset_high dw ? } ;; About: Gates ;; - Task Gate ;; > 31 23 15 7 0 ;; > +----------------|----------------+-----------------|-----------------+ ;; > | (NOT USED) | P DPL 0 0 1 0 1 (NOT USED) | ;; > +----------------|----------------+-----------------|-----------------+ ;; > | SELECTOR | (NOT USED) | ;; > +----------------|----------------+-----------------|-----------------+ ;; ;; - Interrupt Gate ;; > 31 23 15 7 0 ;; > +----------------|----------------+-----------------|-----------------+ ;; > | OFFSET 31..16 | P DPL 0 1 1 1 0 0 0 0 0 0 0 0 0 | ;; > +----------------|----------------+-----------------|-----------------+ ;; > | SELECTOR | OFFSET 15..0 | ;; > +--------------- |----------------+-----------------|-----------------+ ;; ;; - Trap Gate ;; > 31 23 15 7 0 ;; > +----------------|----------------+-----------------|-----------------+ ;; > | OFFSET 31..16 | P DPL 0 1 1 1 1 0 0 0 0 0 0 0 0 | ;; > +----------------|----------------+-----------------|-----------------+ ;; > | SELECTOR | OFFSET 15..0 | ;; > +--------------- |----------------+-----------------|-----------------+ struc IntFrame { ;; registers .edi dd ? .esi dd ? .ebp dd ? .esp dd ? .ebx dd ? .edx dd ? .ecx dd ? .eax dd ? ;; .gs dd ? .fs dd ? .es dd ? .ds dd ? .intno dd ? ;; by x86 hardware .err dd ? .eip dd ? .cs dd ? .eflags dd ? ;; crossring .useresp dd ? .ss dd ? } virtual at 0 IntFrame IntFrame sizeof.IntFrame: end virtual