From befc3c90a190b3657ffb244a7926c5f641ac82be Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Wed, 29 May 2024 11:14:07 -0700 Subject: [PATCH] Fix incorrect code mapping logic --- source/quickerNES/core/cpu.cpp | 10 +++++----- source/quickerNES/core/cpu.hpp | 9 +++++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/source/quickerNES/core/cpu.cpp b/source/quickerNES/core/cpu.cpp index 9daf8ce..af12954 100644 --- a/source/quickerNES/core/cpu.cpp +++ b/source/quickerNES/core/cpu.cpp @@ -146,12 +146,12 @@ void Cpu::reset( void const* unmapped_page ) irq_time_ = LONG_MAX / 2 + 1; end_time_ = LONG_MAX / 2 + 1; - code_map [0] = low_mem; - code_map [1] = low_mem - 1 * page_size; - code_map [2] = low_mem - 2 * page_size; - code_map [3] = low_mem - 3 * page_size; + set_code_page(0, low_mem); + set_code_page(1, low_mem); + set_code_page(2, low_mem); + set_code_page(3, low_mem); for ( int32_t i = 4; i < page_count + 1; i++ ) - code_map [i] = (uint8_t*) unmapped_page; + set_code_page(i, (uint8_t *) unmapped_page); isCorrectExecution = true; } diff --git a/source/quickerNES/core/cpu.hpp b/source/quickerNES/core/cpu.hpp index 9eb1857..4b2a798 100644 --- a/source/quickerNES/core/cpu.hpp +++ b/source/quickerNES/core/cpu.hpp @@ -51,11 +51,16 @@ class Cpu // Clear registers, unmap memory, and map code pages to unmapped_page. void reset(void const *unmapped_page = 0); + inline void set_code_page(int i, uint8_t const *p) + { + code_map[i] = p - (unsigned)i * page_size; + } + inline void map_code(nes_addr_t start, unsigned size, const void *data) { unsigned first_page = start / page_size; - const uint8_t *newPtr = (uint8_t *)data - start; - for (unsigned i = size / page_size; i--;) code_map[first_page + i] = newPtr; + for (unsigned i = size / page_size; i--;) + set_code_page(first_page + i, (uint8_t *)data + i * page_size); } // Access memory as the emulated CPU does.