--- np2/generic/memdbg32.c 2004/03/09 23:39:19 1.1 +++ np2/generic/memdbg32.c 2004/03/10 23:01:07 1.3 @@ -2,6 +2,7 @@ #if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) +#include "strres.h" #include "cpucore.h" #include "pccore.h" #include "iocore.h" @@ -17,12 +18,16 @@ typedef struct { 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) { - memdbg32.width = MEMDBG32_BLOCKW * 128; - memdbg32.height = (MEMDBG32_BLOCKH * 2 * 16) + 0; + memdbg32.width = (MEMDBG32_BLOCKW * 128) + 8; + memdbg32.height = (MEMDBG32_BLOCKH * 2 * 16) + 8; } void memdbg32_setpal(CMNPALFN *palfn) { @@ -44,9 +49,13 @@ BOOL memdbg32_paint(CMNVRAM *vram, BOOL UINT mode; UINT8 use[16*256]; + UINT32 pd[1024]; + UINT pdmax; UINT i, j; UINT32 pde; + UINT32 pdea; UINT32 pte; + char str[4]; mode = 0; if (CPU_STAT_PM) { @@ -64,17 +73,37 @@ BOOL memdbg32_paint(CMNVRAM *vram, BOOL } cmddraw_fill(vram, 0, 0, memdbg32.width, memdbg32.height, - memdbg32.pal + MEMDBG32_PALBG); + memdbg32.pal + MEMDBG32_PALBDR); ZeroMemory(use, sizeof(use)); if (CPU_STAT_PAGING) { + pdmax = 0; for (i=0; i<1024; i++) { pde = cpu_memoryread_d(CPU_STAT_PDE_BASE + (i * 4)); if (pde & CPU_PDE_PRESENT) { - pde &= CPU_PDE_BASEADDR_MASK; - for (j=0; j<1024; j++) { - pte = cpu_memoryread_d(pde + (j * 4)); - if ((pte & CPU_PTE_PRESENT) && (pte < 0x1000000)) { - use[pte >> 12] = MEMDBG32_PALPAGE; + for (j=0; j> 12] = MEMDBG32_PALPAGE1; + } + else if (!use[pte >> 12]) { + use[pte >> 12] = MEMDBG32_PALPAGE0; } } } @@ -89,13 +118,19 @@ BOOL memdbg32_paint(CMNVRAM *vram, BOOL } for (i=0; i<32; i++) { 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.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); } - #endif