diff --git a/Part #7 - Mappers & Basic Sounds/Mapper_004.cpp b/Part #7 - Mappers & Basic Sounds/Mapper_004.cpp index 4c62aad..8363622 100644 --- a/Part #7 - Mappers & Basic Sounds/Mapper_004.cpp +++ b/Part #7 - Mappers & Basic Sounds/Mapper_004.cpp @@ -51,7 +51,7 @@ Author ~~~~~~ - David Barr, aka javidx9, ©OneLoneCoder 2019 + David Barr, aka javidx9, ©OneLoneCoder 2019 */ #include "Mapper_004.h" @@ -135,46 +135,47 @@ bool Mapper_004::cpuMapWrite(uint16_t addr, uint32_t &mapped_addr, uint8_t data) { // Update target register pRegister[nTargetRegister] = data; + } - // Update Pointer Table - if (bCHRInversion) - { - pCHRBank[0] = pRegister[2] * 0x0400; - pCHRBank[1] = pRegister[3] * 0x0400; - pCHRBank[2] = pRegister[4] * 0x0400; - pCHRBank[3] = pRegister[5] * 0x0400; - pCHRBank[4] = (pRegister[0] & 0xFE) * 0x0400; - pCHRBank[5] = pRegister[0] * 0x0400 + 0x0400; - pCHRBank[6] = (pRegister[1] & 0xFE) * 0x0400; - pCHRBank[7] = pRegister[1] * 0x0400 + 0x0400; - } - else - { - pCHRBank[0] = (pRegister[0] & 0xFE) * 0x0400; - pCHRBank[1] = pRegister[0] * 0x0400 + 0x0400; - pCHRBank[2] = (pRegister[1] & 0xFE) * 0x0400; - pCHRBank[3] = pRegister[1] * 0x0400 + 0x0400; - pCHRBank[4] = pRegister[2] * 0x0400; - pCHRBank[5] = pRegister[3] * 0x0400; - pCHRBank[6] = pRegister[4] * 0x0400; - pCHRBank[7] = pRegister[5] * 0x0400; - } - - if (bPRGBankMode) - { - pPRGBank[2] = (pRegister[6] & 0x3F) * 0x2000; - pPRGBank[0] = (nPRGBanks * 2 - 2) * 0x2000; - } - else - { - pPRGBank[0] = (pRegister[6] & 0x3F) * 0x2000; - pPRGBank[2] = (nPRGBanks * 2 - 2) * 0x2000; - } - - pPRGBank[1] = (pRegister[7] & 0x3F) * 0x2000; - pPRGBank[3] = (nPRGBanks * 2 - 1) * 0x2000; + // Update Pointer Table + if (bCHRInversion) + { + pCHRBank[0] = pRegister[2] * 0x0400; + pCHRBank[1] = pRegister[3] * 0x0400; + pCHRBank[2] = pRegister[4] * 0x0400; + pCHRBank[3] = pRegister[5] * 0x0400; + pCHRBank[4] = (pRegister[0] & 0xFE) * 0x0400; + pCHRBank[5] = pRegister[0] * 0x0400 + 0x0400; + pCHRBank[6] = (pRegister[1] & 0xFE) * 0x0400; + pCHRBank[7] = pRegister[1] * 0x0400 + 0x0400; + } + else + { + pCHRBank[0] = (pRegister[0] & 0xFE) * 0x0400; + pCHRBank[1] = pRegister[0] * 0x0400 + 0x0400; + pCHRBank[2] = (pRegister[1] & 0xFE) * 0x0400; + pCHRBank[3] = pRegister[1] * 0x0400 + 0x0400; + pCHRBank[4] = pRegister[2] * 0x0400; + pCHRBank[5] = pRegister[3] * 0x0400; + pCHRBank[6] = pRegister[4] * 0x0400; + pCHRBank[7] = pRegister[5] * 0x0400; + } + uint8_t lPRGBanks = (nPRGBanks * 2 - 1); + + if (bPRGBankMode) + { + pPRGBank[2] = (pRegister[6] & lPRGBanks) * 0x2000; + pPRGBank[0] = (nPRGBanks * 2 - 2) * 0x2000; } + else + { + pPRGBank[0] = (pRegister[6] & lPRGBanks) * 0x2000; + pPRGBank[2] = (nPRGBanks * 2 - 2) * 0x2000; + } + + pPRGBank[1] = (pRegister[7] & lPRGBanks) * 0x2000; + pPRGBank[3] = lPRGBanks * 0x2000; return false; } @@ -303,7 +304,7 @@ void Mapper_004::reset() nIRQReload = 0x0000; for (int i = 0; i < 4; i++) pPRGBank[i] = 0; - for (int i = 0; i < 8; i++) { pCHRBank[i] = 0; pRegister[i] = 0; } + for (int i = 0; i < 8; i++) { pCHRBank[i] = 0; pRegister[i] = 0xFF; } pPRGBank[0] = 0 * 0x2000; pPRGBank[1] = 1 * 0x2000;