| version 1.4, 2004/01/23 14:33:26 | version 1.6, 2004/02/03 14:49:39 | 
| Line 121  extern "C" { | Line 121  extern "C" { | 
 | #define CPU_PTE_WRITABLE        (1 << 1) | #define CPU_PTE_WRITABLE        (1 << 1) | 
 | #define CPU_PTE_PRESENT         (1 << 0) | #define CPU_PTE_PRESENT         (1 << 0) | 
 |  |  | 
 |  | /* paging_check(): rw */ | 
 |  | #define CPU_PAGING_PAGE_READ    (0 << 0) | 
 |  | #define CPU_PAGING_PAGE_WRITE   (1 << 0) | 
 |  | #define CPU_PAGING_PAGE_CODE    (1 << 1) | 
 |  | #define CPU_PAGING_PAGE_DATA    (1 << 2) | 
 |  |  | 
 |  |  | 
 | /* enter/leave paging mode */ | /* enter/leave paging mode */ | 
 | void FASTCALL change_pg(int onoff); | void FASTCALL change_pg(int onoff); | 
| Line 128  void FASTCALL change_pg(int onoff); | Line 134  void FASTCALL change_pg(int onoff); | 
 | /* paging check */ | /* paging check */ | 
 | void MEMCALL paging_check(DWORD laddr, DWORD length, int rw); | void MEMCALL paging_check(DWORD laddr, DWORD length, int rw); | 
 |  |  | 
 | /* paging_check(): rw */ |  | 
 | #define CPU_PAGING_PAGE_READ    (0 << 0) |  | 
 | #define CPU_PAGING_PAGE_WRITE   (1 << 0) |  | 
 |  |  | 
 | /* | /* | 
 | * linear address function | * linear address function | 
 | */ | */ | 
 | DWORD MEMCALL cpu_linear_memory_read(DWORD address, DWORD length, int code); | DWORD MEMCALL cpu_linear_memory_read(DWORD address, DWORD length, int code); | 
| void MEMCALL cpu_linear_memory_write(DWORD address, DWORD length, DWORD value); | void MEMCALL cpu_linear_memory_write(DWORD address, DWORD value, DWORD length); | 
|  |  | 
| /* cpu_linear_memory_read(): code */ |  | 
| #define CPU_PAGING_PAGE_CODE    (1 << 1) |  | 
| #define CPU_PAGING_PAGE_DATA    (1 << 2) |  | 
 |  |  | 
 | #define cpu_lmemoryread(a) \ | #define cpu_lmemoryread(a) \ | 
| (CPU_STAT_PAGING) ? \ | (!CPU_STAT_PAGING) ? \ | 
| (BYTE)cpu_linear_memory_read(a, 1, FALSE) : \ | cpu_memoryread(a) : \ | 
| cpu_memoryread(a); | (BYTE)cpu_linear_memory_read(a,1,FALSE) | 
 | #define cpu_lmemoryread_w(a) \ | #define cpu_lmemoryread_w(a) \ | 
| (CPU_STAT_PAGING) ? \ | (!CPU_STAT_PAGING) ? \ | 
| (WORD)cpu_linear_memory_read(a, 2, FALSE) : \ | cpu_memoryread_w(a) : \ | 
| cpu_memoryread_w(a); | (WORD)cpu_linear_memory_read(a,2,FALSE) | 
 | #define cpu_lmemoryread_d(a) \ | #define cpu_lmemoryread_d(a) \ | 
| (CPU_STAT_PAGING) ? \ | (!CPU_STAT_PAGING) ? \ | 
| cpu_linear_memory_read(a, 4, FALSE) : \ | cpu_memoryread_d(a) : \ | 
| cpu_memoryread_d(a); | cpu_linear_memory_read(a,4,FALSE) | 
 |  |  | 
 | #define cpu_lmemorywrite(a,v) \ | #define cpu_lmemorywrite(a,v) \ | 
| (CPU_STAT_PAGING) ? \ | (!CPU_STAT_PAGING) ? \ | 
| cpu_linear_memory_write(a, 1, v) : \ | cpu_memorywrite(a,v) : \ | 
| cpu_memorywrite(a,v); | cpu_linear_memory_write(a,v,1) | 
 | #define cpu_lmemorywrite_w(a,v) \ | #define cpu_lmemorywrite_w(a,v) \ | 
| (CPU_STAT_PAGING) ? \ | (!CPU_STAT_PAGING) ? \ | 
| cpu_linear_memory_write(a, 2, v) : \ | cpu_memorywrite_w(a,v) : \ | 
| cpu_memorywrite_w(a,v); | cpu_linear_memory_write(a,v,2) | 
 | #define cpu_lmemorywrite_d(a,v) \ | #define cpu_lmemorywrite_d(a,v) \ | 
| (CPU_STAT_PAGING) ? \ | (!CPU_STAT_PAGING) ? \ | 
| cpu_linear_memory_write(a, 4, v) : \ | cpu_memorywrite_d(a,v) : \ | 
| cpu_memorywrite_d(a,v); | cpu_linear_memory_write(a,v,4) | 
 |  |  | 
 | #define cpu_lcmemoryread(a) \ | #define cpu_lcmemoryread(a) \ | 
| (CPU_STAT_PAGING) ? \ | (!CPU_STAT_PAGING) ? \ | 
| (BYTE)cpu_linear_memory_read(a, 1, TRUE) : \ | cpu_memoryread(a) : \ | 
| cpu_memoryread(a); | (BYTE)cpu_linear_memory_read(a,1,TRUE) | 
 | #define cpu_lcmemoryread_w(a) \ | #define cpu_lcmemoryread_w(a) \ | 
| (CPU_STAT_PAGING) ? \ | (!CPU_STAT_PAGING) ? \ | 
| (WORD)cpu_linear_memory_read(a, 2, TRUE) : \ | cpu_memoryread_w(a) : \ | 
| cpu_memoryread_w(a); | (WORD)cpu_linear_memory_read(a,2,TRUE) | 
 | #define cpu_lcmemoryread_d(a) \ | #define cpu_lcmemoryread_d(a) \ | 
| (CPU_STAT_PAGING) ? \ | (!CPU_STAT_PAGING) ? \ | 
| cpu_linear_memory_read(a, 4, TRUE) : \ | cpu_memoryread_d(a) : \ | 
| cpu_memoryread_d(a); | cpu_linear_memory_read(a,4,TRUE) | 
 |  |  | 
 | #define set_CR3(cr3) \ | #define set_CR3(cr3) \ | 
 | do { \ | do { \ | 
 | CPU_CR3 = (cr3) & CPU_CR3_MASK; \ | CPU_CR3 = (cr3) & CPU_CR3_MASK; \ | 
 |  | CPU_STAT_PDE_BASE = CPU_CR3 & CPU_CR3_PD_MASK; \ | 
 | tlb_flush(FALSE); \ | tlb_flush(FALSE); \ | 
 | } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) | 
 |  |  |