168 lines
5.6 KiB
PHP
168 lines
5.6 KiB
PHP
;; 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
|