diff --git a/src/CxbxKrnl/EmuX86.cpp b/src/CxbxKrnl/EmuX86.cpp index b8bcaaf00..2b459702a 100644 --- a/src/CxbxKrnl/EmuX86.cpp +++ b/src/CxbxKrnl/EmuX86.cpp @@ -128,6 +128,22 @@ void EmuX86_Mem_Write8(xbaddr addr, uint8_t value) *(uint8_t*)addr = value; } +uint32_t EmuFlash_Read32(xbaddr addr) // TODO : Move to EmuFlash.cpp +{ + uint32_t r; + + switch (addr) { + case 0x78: // ROM_VERSION + r = 0x46; // DVT4 + break; + default: + EmuWarning("EmuX86 Read32 FLASH_ROM (0x%.8X) [Unknown address]", addr); + return -1; + } + + DbgPrintf("EmuX86 Read32 FLASH_ROM (0x%.8X) = 0x%.8X [HANDLED]\n", addr, r); + return r; +} // // Read & write handlers for memory-mapped hardware devices @@ -150,6 +166,8 @@ uint32_t EmuX86_Read32Aligned(xbaddr addr) // Note : EmuNV2A_Read32 does it's own logging } else if (addr >= NVNET_ADDR && addr < NVNET_ADDR + NVNET_SIZE) { value = EmuNVNet_Read(addr - NVNET_ADDR, 32); + } else if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF + value = EmuFlash_Read32(addr - XBOX_FLASH_ROM_BASE); } else { if (g_bEmuException) { EmuWarning("EmuX86_Read32Aligned(0x%08X) [Unknown address]", addr); @@ -193,6 +211,8 @@ uint16_t EmuX86_Read16(xbaddr addr) // Note : EmuNV2A_Read32 does it's own logging } else if (addr >= NVNET_ADDR && addr < NVNET_ADDR + NVNET_SIZE) { value = EmuNVNet_Read(addr - NVNET_ADDR, 16); + } else if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF + value = EmuFlash_Read32(addr - XBOX_FLASH_ROM_BASE); } else { if (g_bEmuException) { EmuWarning("EmuX86_Read16(0x%08X) [Unknown address]", addr); @@ -222,6 +242,8 @@ uint8_t EmuX86_Read8(xbaddr addr) // Note : EmuNV2A_Read32 does it's own logging } else if (addr >= NVNET_ADDR && addr < NVNET_ADDR + NVNET_SIZE) { value = EmuNVNet_Read(addr - NVNET_ADDR, 8); + } else if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF + value = EmuFlash_Read32(addr - XBOX_FLASH_ROM_BASE); } else { if (g_bEmuException) { EmuWarning("EmuX86_Read8(0x%08X) [Unknown address]", addr); @@ -258,6 +280,11 @@ void EmuX86_Write32Aligned(xbaddr addr, uint32_t value) return; } + if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF + EmuWarning("EmuX86_Write32Aligned(0x%08X, 0x%08X) [FLASH_ROM]", addr, value); + return; + } + if (g_bEmuException) { EmuWarning("EmuX86_Write32Aligned(0x%08X, 0x%08X) [Unknown address]", addr, value); return; @@ -296,6 +323,11 @@ void EmuX86_Write16(xbaddr addr, uint16_t value) return; } + if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF + EmuWarning("EmuX86_Write16(0x%08X, 0x%08X) [FLASH_ROM]", addr, value); + return; + } + if (g_bEmuException) { EmuWarning("EmuX86_Write16(0x%08X, 0x%04X) [Unknown address]", addr, value); return; @@ -326,6 +358,11 @@ void EmuX86_Write8(xbaddr addr, uint8_t value) return; } + if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF + EmuWarning("EmuX86_Write8(0x%08X, 0x%08X) [FLASH_ROM]", addr, value); + return; + } + if (g_bEmuException) { EmuWarning("EmuX86_Write8(0x%08X, 0x%02X) [Unknown address]", addr, value); return;