RMW simplification

This commit is contained in:
Adrian Conlon 2024-03-07 08:31:28 +00:00
parent 9a0cf0cca8
commit b582412231

View File

@ -176,20 +176,21 @@ namespace EightBit {
#define FIXUP_RMW(ADDRESSING, OPERATION) \ #define FIXUP_RMW(ADDRESSING, OPERATION) \
{ \ { \
fixup(ADDRESSING()); \ fixup(ADDRESSING()); \
const auto result = OPERATION(memoryRead()); \ _RMW(OPERATION); \
memoryModifyWrite(result); \
} }
#define RMW(ADDRESSING, OPERATION) \ #define RMW(ADDRESSING, OPERATION) \
{ \ { \
const auto result = OPERATION(memoryRead(ADDRESSING())); \ BUS().ADDRESS() = ADDRESSING(); \
memoryModifyWrite(result); \ _RMW(OPERATION); \
} }
void memoryModifyWrite(const uint8_t data) noexcept { #define _RMW(OPERATION) \
// The read will have already taken place... { \
memoryWrite(); const auto data = memoryRead(); \
memoryWrite(data); const auto result = OPERATION(data); \
memoryWrite(); \
memoryWrite(result); \
} }
void maybe_fixup(register16_t address, uint8_t unfixed_page, bool always_fixup = false) noexcept { void maybe_fixup(register16_t address, uint8_t unfixed_page, bool always_fixup = false) noexcept {