--- np2/generic/memdbg32.c 2004/03/09 23:39:19 1.1 +++ np2/generic/memdbg32.c 2005/04/01 15:35:49 1.8 @@ -2,6 +2,7 @@ #if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) +#include "strres.h" #include "cpucore.h" #include "pccore.h" #include "iocore.h" @@ -12,22 +13,31 @@ typedef struct { UINT mode; int width; int height; + int bpp; CMNPAL pal[MEMDBG32_PALS]; } 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}; +static const RGB32 md32pal[MEMDBG32_PALS] = { + RGB32D(0x33, 0x33, 0x33), + RGB32D(0x00, 0x00, 0x00), + RGB32D(0xff, 0xaa, 0x00), + RGB32D(0xff, 0x00, 0x00), + RGB32D(0x11, 0x88, 0x11), + RGB32D(0x00, 0xff, 0x00), + RGB32D(0xff, 0xff, 0xff)}; void memdbg32_initialize(void) { - memdbg32.width = MEMDBG32_BLOCKW * 128; - memdbg32.height = (MEMDBG32_BLOCKH * 2 * 16) + 0; -} - -void memdbg32_setpal(CMNPALFN *palfn) { - - cmndraw_getpals(palfn, memdbg32.pal, MEMDBG32_PALS); + ZeroMemory(&memdbg32, sizeof(memdbg32)); + memdbg32.width = (MEMDBG32_BLOCKW * 128) + 8; + memdbg32.height = (MEMDBG32_BLOCKH * 2 * 16) + 8; } void memdbg32_getsize(int *width, int *height) { @@ -40,13 +50,22 @@ void memdbg32_getsize(int *width, int *h } } -BOOL memdbg32_paint(CMNVRAM *vram, BOOL redraw) { +REG8 memdbg32_process(void) { + + return(MEMDBG32_FLAGDRAW); +} + +BOOL memdbg32_paint(CMNVRAM *vram, CMNPALCNV cnv, BOOL redraw) { 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) { @@ -62,19 +81,49 @@ BOOL memdbg32_paint(CMNVRAM *vram, BOOL if ((!redraw) && (!CPU_STAT_PAGING)) { return(FALSE); } + if (vram == NULL) { + return(FALSE); + } + if ((memdbg32.bpp != vram->bpp) || (redraw)) { + if (cnv == NULL) { + return(FALSE); + } + (*cnv)(memdbg32.pal, md32pal, MEMDBG32_PALS, vram->bpp); + memdbg32.bpp = vram->bpp; + } - cmddraw_fill(vram, 0, 0, memdbg32.width, memdbg32.height, - memdbg32.pal + MEMDBG32_PALBG); + cmndraw_fill(vram, 0, 0, memdbg32.width, memdbg32.height, + 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 +138,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, + cmndraw_fill(vram, 8 + j * MEMDBG32_BLOCKW, i * MEMDBG32_BLOCKH, 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, "%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