diff --git a/asm.h b/asm.h index 68210d7..b8a7353 100644 --- a/asm.h +++ b/asm.h @@ -14,8 +14,5 @@ (0xC0 | (((lim) >> 28) & 0xf)), (((base) >> 24) & 0xff) #define STA_X 0x8 // Executable segment -#define STA_E 0x4 // Expand down (non-executable segments) -#define STA_C 0x4 // Conforming code segment (executable only) #define STA_W 0x2 // Writeable (non-executable segments) #define STA_R 0x2 // Readable (executable segments) -#define STA_A 0x1 // Accessed diff --git a/mmu.h b/mmu.h index 7b63db0..9d6673c 100644 --- a/mmu.h +++ b/mmu.h @@ -2,39 +2,11 @@ // x86 memory management unit (MMU). // Eflags register -#define FL_CF 0x00000001 // Carry Flag -#define FL_PF 0x00000004 // Parity Flag -#define FL_AF 0x00000010 // Auxiliary carry Flag -#define FL_ZF 0x00000040 // Zero Flag -#define FL_SF 0x00000080 // Sign Flag -#define FL_TF 0x00000100 // Trap Flag #define FL_IF 0x00000200 // Interrupt Enable -#define FL_DF 0x00000400 // Direction Flag -#define FL_OF 0x00000800 // Overflow Flag -#define FL_IOPL_MASK 0x00003000 // I/O Privilege Level bitmask -#define FL_IOPL_0 0x00000000 // IOPL == 0 -#define FL_IOPL_1 0x00001000 // IOPL == 1 -#define FL_IOPL_2 0x00002000 // IOPL == 2 -#define FL_IOPL_3 0x00003000 // IOPL == 3 -#define FL_NT 0x00004000 // Nested Task -#define FL_RF 0x00010000 // Resume Flag -#define FL_VM 0x00020000 // Virtual 8086 mode -#define FL_AC 0x00040000 // Alignment Check -#define FL_VIF 0x00080000 // Virtual Interrupt Flag -#define FL_VIP 0x00100000 // Virtual Interrupt Pending -#define FL_ID 0x00200000 // ID flag // Control Register flags #define CR0_PE 0x00000001 // Protection Enable -#define CR0_MP 0x00000002 // Monitor coProcessor -#define CR0_EM 0x00000004 // Emulation -#define CR0_TS 0x00000008 // Task Switched -#define CR0_ET 0x00000010 // Extension Type -#define CR0_NE 0x00000020 // Numeric Errror #define CR0_WP 0x00010000 // Write Protect -#define CR0_AM 0x00040000 // Alignment Mask -#define CR0_NW 0x20000000 // Not Writethrough -#define CR0_CD 0x40000000 // Cache Disable #define CR0_PG 0x80000000 // Paging #define CR4_PSE 0x00000010 // Page size extension @@ -82,23 +54,11 @@ struct segdesc { // Application segment type bits #define STA_X 0x8 // Executable segment -#define STA_E 0x4 // Expand down (non-executable segments) -#define STA_C 0x4 // Conforming code segment (executable only) #define STA_W 0x2 // Writeable (non-executable segments) #define STA_R 0x2 // Readable (executable segments) -#define STA_A 0x1 // Accessed // System segment type bits -#define STS_T16A 0x1 // Available 16-bit TSS -#define STS_LDT 0x2 // Local Descriptor Table -#define STS_T16B 0x3 // Busy 16-bit TSS -#define STS_CG16 0x4 // 16-bit Call Gate -#define STS_TG 0x5 // Task Gate / Coum Transmitions -#define STS_IG16 0x6 // 16-bit Interrupt Gate -#define STS_TG16 0x7 // 16-bit Trap Gate #define STS_T32A 0x9 // Available 32-bit TSS -#define STS_T32B 0xB // Busy 32-bit TSS -#define STS_CG32 0xC // 32-bit Call Gate #define STS_IG32 0xE // 32-bit Interrupt Gate #define STS_TG32 0xF // 32-bit Trap Gate @@ -124,7 +84,6 @@ struct segdesc { #define NPTENTRIES 1024 // # PTEs per page table #define PGSIZE 4096 // bytes mapped by a page -#define PGSHIFT 12 // log2(PGSIZE) #define PTXSHIFT 12 // offset of PTX in a linear address #define PDXSHIFT 22 // offset of PDX in a linear address @@ -135,12 +94,7 @@ struct segdesc { #define PTE_P 0x001 // Present #define PTE_W 0x002 // Writeable #define PTE_U 0x004 // User -#define PTE_PWT 0x008 // Write-Through -#define PTE_PCD 0x010 // Cache-Disable -#define PTE_A 0x020 // Accessed -#define PTE_D 0x040 // Dirty #define PTE_PS 0x080 // Page Size -#define PTE_MBZ 0x180 // Bits must be zero // Address in page table or page directory entry #define PTE_ADDR(pte) ((uint)(pte) & ~0xFFF) @@ -197,7 +151,7 @@ struct gatedesc { uint cs : 16; // code segment selector uint args : 5; // # args, 0 for interrupt/trap gates uint rsv1 : 3; // reserved(should be zero I guess) - uint type : 4; // type(STS_{TG,IG32,TG32}) + uint type : 4; // type(STS_{IG32,TG32}) uint s : 1; // must be 0 (system) uint dpl : 2; // descriptor(meaning new) privilege level uint p : 1; // Present @@ -226,3 +180,6 @@ struct gatedesc { } #endif + +//PAGEBREAK! +// Blank page.