X86 Nv2A : Use consistent sizes. Also fixed succeeding OUT opcode.

This commit is contained in:
patrickvl 2017-12-18 16:20:19 +01:00
parent 370746412c
commit 3521300ad8
2 changed files with 13 additions and 13 deletions

View File

@ -874,11 +874,11 @@ DEBUG_START(USER)
#define DEBUG_READ32(DEV) DbgPrintf("EmuX86 Read32 NV2A " #DEV "(0x%08X) = 0x%08X [Handle%s]\n", addr, result, DebugNV_##DEV##(addr))
#define DEBUG_READ32_UNHANDLED(DEV) { DbgPrintf("EmuX86 Read32 NV2A " #DEV "(0x%08X) = 0x%08X [Unhandle%s]\n", addr, result, DebugNV_##DEV##(addr)); return result; }
#define DEBUG_READ32(DEV) DbgPrintf("X86 : Rd32 NV2A " #DEV "(0x%08X) = 0x%08X [Handled %s]\n", addr, result, DebugNV_##DEV##(addr))
#define DEBUG_READ32_UNHANDLED(DEV) { DbgPrintf("X86 : Rd32 NV2A " #DEV "(0x%08X) = 0x%08X [Unhandled %s]\n", addr, result, DebugNV_##DEV##(addr)); return result; }
#define DEBUG_WRITE32(DEV) DbgPrintf("EmuX86 Write32 NV2A " #DEV "(0x%08X, 0x%08X) [Handle%s]\n", addr, value, DebugNV_##DEV##(addr))
#define DEBUG_WRITE32_UNHANDLED(DEV) { DbgPrintf("EmuX86 Write32 NV2A " #DEV "(0x%08X, 0x%08X) [Unhandle%s]\n", addr, value, DebugNV_##DEV##(addr)); return; }
#define DEBUG_WRITE32(DEV) DbgPrintf("X86 : Wr32 NV2A " #DEV "(0x%08X, 0x%08X) [Handled %s]\n", addr, value, DebugNV_##DEV##(addr))
#define DEBUG_WRITE32_UNHANDLED(DEV) { DbgPrintf("X86 : Wr32 NV2A " #DEV "(0x%08X, 0x%08X) [Unhandled %s]\n", addr, value, DebugNV_##DEV##(addr)); return; }
#define DEVICE_READ32(DEV) uint32_t EmuNV2A_##DEV##_Read32(xbaddr addr)
#define DEVICE_READ32_SWITCH() uint32_t result = 0; switch (addr)
@ -3394,11 +3394,11 @@ uint32_t EmuNV2A_Read(xbaddr addr, int size)
if (block != nullptr) {
switch (size) {
case 8:
case sizeof(uint8_t):
return block->read(addr - block->offset) & 0xFF;
case 16:
case sizeof(uint16_t) :
return block->read(addr - block->offset) & 0xFFFF;
case 32:
case sizeof(uint32_t) :
return block->read(addr - block->offset);
default:
EmuWarning("EmuNV2A_Read: Invalid read size: %d", size);
@ -3420,7 +3420,7 @@ void EmuNV2A_Write(xbaddr addr, uint32_t value, int size)
uint32_t aligned_value = 0;
uint32_t mask = 0;
switch (size) {
case 8:
case sizeof(uint8_t) :
shift = (addr & 3) * 8;
aligned_addr = addr & ~3;
aligned_value = block->read(aligned_addr - block->offset);
@ -3429,7 +3429,7 @@ void EmuNV2A_Write(xbaddr addr, uint32_t value, int size)
// TODO : Must the second byte be written to the next DWORD?
block->write(aligned_addr - block->offset, (aligned_value & ~mask) | (value << shift));
return;
case 16:
case sizeof(uint16_t) :
assert((addr & 1) == 0);
shift = (addr & 2) * 16;
@ -3440,7 +3440,7 @@ void EmuNV2A_Write(xbaddr addr, uint32_t value, int size)
// TODO : Must the second byte be written to the next DWORD?
block->write(aligned_addr - block->offset, (aligned_value & ~mask) | (value << shift));
return;
case 32:
case sizeof(uint32_t) :
block->write(addr - block->offset, value);
return;
default:

View File

@ -178,7 +178,7 @@ uint32_t EmuX86_Read(xbaddr addr, int size)
if (addr >= NV2A_ADDR && addr < NV2A_ADDR + NV2A_SIZE) {
// Access NV2A regardless weither HLE is disabled or not (ignoring bLLE_GPU)
value = EmuNV2A_Read(addr - NV2A_ADDR, size * 8); // Tmp: Correct nr of bytes into nr of bits
value = EmuNV2A_Read(addr - NV2A_ADDR, size);
// Note : EmuNV2A_Read does it's own logging
} else if (addr >= XBOX_FLASH_ROM_BASE) { // 0xFFF00000 - 0xFFFFFFF
value = EmuFlash_Read32(addr - XBOX_FLASH_ROM_BASE); // TODO : Make flash access size-aware
@ -211,7 +211,7 @@ bool EmuX86_Write(xbaddr addr, uint32_t value, int size)
if (addr >= NV2A_ADDR && addr < NV2A_ADDR + NV2A_SIZE) {
// Access NV2A regardless weither HLE is disabled or not (ignoring bLLE_GPU)
EmuNV2A_Write(addr - NV2A_ADDR, value, size * 8); // Tmp: Correct nr of bytes into nr of bits
EmuNV2A_Write(addr - NV2A_ADDR, value, size);
// Note : EmuNV2A_Write does it's own logging
return true; // Assume successfull NV2A write
}
@ -942,7 +942,7 @@ bool EmuX86_Opcode_OUT(LPEXCEPTION_POINTERS e, _DInst& info)
// Note : OUT instructions never update CPU flags
return false;
return true;
}
bool EmuX86_Opcode_SUB(LPEXCEPTION_POINTERS e, _DInst& info)