|
|
| version 1.1, 2004/03/09 23:39:19 | version 1.3, 2004/03/10 23:01:07 |
|---|---|
| Line 2 | Line 2 |
| #if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) | #if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) |
| #include "strres.h" | |
| #include "cpucore.h" | #include "cpucore.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "iocore.h" | #include "iocore.h" |
| Line 17 typedef struct { | Line 18 typedef struct { |
| static MEMDBG32 memdbg32; | static MEMDBG32 memdbg32; |
| static const char _mode0[] = "Real Mode"; | |
| static const char _mode1[] = "Protected Mode"; | |
| static const char _mode2[] = "Virutal86"; | |
| static const char *modestr[3] = {_mode0, _mode1, _mode2}; | |
| void memdbg32_initialize(void) { | void memdbg32_initialize(void) { |
| memdbg32.width = MEMDBG32_BLOCKW * 128; | memdbg32.width = (MEMDBG32_BLOCKW * 128) + 8; |
| memdbg32.height = (MEMDBG32_BLOCKH * 2 * 16) + 0; | memdbg32.height = (MEMDBG32_BLOCKH * 2 * 16) + 8; |
| } | } |
| void memdbg32_setpal(CMNPALFN *palfn) { | void memdbg32_setpal(CMNPALFN *palfn) { |
| Line 44 BOOL memdbg32_paint(CMNVRAM *vram, BOOL | Line 49 BOOL memdbg32_paint(CMNVRAM *vram, BOOL |
| UINT mode; | UINT mode; |
| UINT8 use[16*256]; | UINT8 use[16*256]; |
| UINT32 pd[1024]; | |
| UINT pdmax; | |
| UINT i, j; | UINT i, j; |
| UINT32 pde; | UINT32 pde; |
| UINT32 pdea; | |
| UINT32 pte; | UINT32 pte; |
| char str[4]; | |
| mode = 0; | mode = 0; |
| if (CPU_STAT_PM) { | if (CPU_STAT_PM) { |
| Line 64 BOOL memdbg32_paint(CMNVRAM *vram, BOOL | Line 73 BOOL memdbg32_paint(CMNVRAM *vram, BOOL |
| } | } |
| cmddraw_fill(vram, 0, 0, memdbg32.width, memdbg32.height, | cmddraw_fill(vram, 0, 0, memdbg32.width, memdbg32.height, |
| memdbg32.pal + MEMDBG32_PALBG); | memdbg32.pal + MEMDBG32_PALBDR); |
| ZeroMemory(use, sizeof(use)); | ZeroMemory(use, sizeof(use)); |
| if (CPU_STAT_PAGING) { | if (CPU_STAT_PAGING) { |
| pdmax = 0; | |
| for (i=0; i<1024; i++) { | for (i=0; i<1024; i++) { |
| pde = cpu_memoryread_d(CPU_STAT_PDE_BASE + (i * 4)); | pde = cpu_memoryread_d(CPU_STAT_PDE_BASE + (i * 4)); |
| if (pde & CPU_PDE_PRESENT) { | if (pde & CPU_PDE_PRESENT) { |
| pde &= CPU_PDE_BASEADDR_MASK; | for (j=0; j<pdmax; j++) { |
| for (j=0; j<1024; j++) { | if (!((pde ^ pd[j]) & CPU_PDE_BASEADDR_MASK)) { |
| pte = cpu_memoryread_d(pde + (j * 4)); | break; |
| if ((pte & CPU_PTE_PRESENT) && (pte < 0x1000000)) { | } |
| use[pte >> 12] = MEMDBG32_PALPAGE; | } |
| if (j < pdmax) { | |
| pd[j] |= pde & CPU_PDE_ACCESS; | |
| } | |
| else { | |
| pd[pdmax++] = pde; | |
| } | |
| } | |
| } | |
| for (i=0; i<pdmax; i++) { | |
| pde = pd[i]; | |
| pdea = pde & CPU_PDE_BASEADDR_MASK; | |
| for (j=0; j<1024; j++) { | |
| pte = cpu_memoryread_d(pdea + (j * 4)); | |
| if ((pte & CPU_PTE_PRESENT) && (pte < 0x1000000)) { | |
| if ((pde & CPU_PDE_ACCESS) && (pte & CPU_PTE_ACCESS)) { | |
| use[pte >> 12] = MEMDBG32_PALPAGE1; | |
| } | |
| else if (!use[pte >> 12]) { | |
| use[pte >> 12] = MEMDBG32_PALPAGE0; | |
| } | } |
| } | } |
| } | } |
| Line 89 BOOL memdbg32_paint(CMNVRAM *vram, BOOL | Line 118 BOOL memdbg32_paint(CMNVRAM *vram, BOOL |
| } | } |
| for (i=0; i<32; i++) { | for (i=0; i<32; i++) { |
| for (j=0; j<128; j++) { | for (j=0; j<128; j++) { |
| cmddraw_fill(vram, j * MEMDBG32_BLOCKW, i * MEMDBG32_BLOCKH, | cmddraw_fill(vram, 8 + j * MEMDBG32_BLOCKW, i * MEMDBG32_BLOCKH, |
| MEMDBG32_BLOCKW - 1, MEMDBG32_BLOCKH - 1, | MEMDBG32_BLOCKW - 1, MEMDBG32_BLOCKH - 1, |
| memdbg32.pal + use[(i * 128) + j]); | memdbg32.pal + use[(i * 128) + j]); |
| } | } |
| } | } |
| for (i=0; i<16; i++) { | |
| SPRINTF(str, str_x, i); | |
| cmddraw_text8(vram, 0, i * MEMDBG32_BLOCKH * 2, str, | |
| memdbg32.pal + MEMDBG32_PALTXT); | |
| } | |
| cmddraw_text8(vram, 0, memdbg32.height - 8, modestr[mode], | |
| memdbg32.pal + MEMDBG32_PALTXT); | |
| return(TRUE); | return(TRUE); |
| } | } |
| #endif | #endif |