- fix bug in VRAM;
This commit is contained in:
mtabachenko 2008-12-01 00:26:06 +00:00
parent e00fc1b849
commit 6907ebfa93
1 changed files with 8 additions and 5 deletions

View File

@ -55,6 +55,8 @@ static const int save_types[7][2] = {
//#define _MMU_DEBUG //#define _MMU_DEBUG
#ifdef _MMU_DEBUG #ifdef _MMU_DEBUG
#include <stdarg.h>
void mmu_log_debug(u32 adr, u8 proc, const char *fmt, ...) void mmu_log_debug(u32 adr, u8 proc, const char *fmt, ...)
{ {
if ((adr>=0x04000000 && adr<=0x04000800) if ((adr>=0x04000000 && adr<=0x04000800)
@ -77,7 +79,7 @@ void mmu_log_debug(u32 adr, u8 proc, const char *fmt, ...)
if (adr >= 0x4000004 && adr <= 0x40001C2) return; // ARM7 I/O Map if (adr >= 0x4000004 && adr <= 0x40001C2) return; // ARM7 I/O Map
if (adr >= 0x4000204 && adr <= 0x4000308) return; // Memory and IRQ Control if (adr >= 0x4000204 && adr <= 0x4000308) return; // Memory and IRQ Control
if (adr >= 0x4000400 && adr <= 0x400051C) return; // Sound Registers if (adr >= 0x4000400 && adr <= 0x400051C) return; // Sound Registers
if (adr >= 0x4100000 && adr <= 0x4000010) return; // IPC/ROM if (adr >= 0x4100000 && adr <= 0x4100010) return; // IPC/ROM
if (adr >= 0x4800000 && adr <= 0x4808000) return; // WLAN Registers if (adr >= 0x4800000 && adr <= 0x4808000) return; // WLAN Registers
} }
@ -413,8 +415,7 @@ u8 *MMU_RenderMapToLCD(u32 vram_addr)
u8 block = MMU.VRAM_MAP[engine][engine_offset]; u8 block = MMU.VRAM_MAP[engine][engine_offset];
if (block == 7) return NULL; if (block == 7) return NULL;
vram_addr -= MMU.LCD_VRAM_ADDR[block]; vram_addr -= MMU.LCD_VRAM_ADDR[block];
u8 *tmp_addr = LCDdst[block] + vram_addr; return (LCDdst[block] + vram_addr);
return (tmp_addr);
} }
return NULL; return NULL;
} }
@ -441,8 +442,10 @@ static INLINE BOOL MMU_LCDmap(u32 *addr)
static INLINE void MMU_VRAMmapControl(u8 block, u8 VRAMBankCnt) static INLINE void MMU_VRAMmapControl(u8 block, u8 VRAMBankCnt)
{ {
if (!(VRAMBankCnt & 0x80)) return;
if (!(VRAMBankCnt & 0x07)) return;
u32 vram_map_addr = 0xFFFFFFFF; u32 vram_map_addr = 0xFFFFFFFF;
BOOL isMapped = FALSE;
u8 *LCD_addr = LCDdst[block]; u8 *LCD_addr = LCDdst[block];
switch (VRAMBankCnt & 0x07) switch (VRAMBankCnt & 0x07)
@ -511,7 +514,7 @@ static INLINE void MMU_VRAMmapControl(u8 block, u8 VRAMBankCnt)
ARM9Mem.textureSlotAddr[slot_index] = LCD_addr; ARM9Mem.textureSlotAddr[slot_index] = LCD_addr;
gpu3D->NDS_3D_VramReconfigureSignal(); gpu3D->NDS_3D_VramReconfigureSignal();
} }
return; break;
case 4: // E case 4: // E
ARM9Mem.texPalSlot[0] = LCD_addr; ARM9Mem.texPalSlot[0] = LCD_addr;
ARM9Mem.texPalSlot[1] = LCD_addr+0x2000; ARM9Mem.texPalSlot[1] = LCD_addr+0x2000;