From e47f935b2e7726bb37394eb85ffcd071c4012211 Mon Sep 17 00:00:00 2001 From: nsx0r Date: Sat, 15 Apr 2023 11:42:35 +0200 Subject: [PATCH] [NES] Fixed mapper 3 CHR bus conflict Fixed mapper 3 CHR bus conflict --- Cart_Reader/NES.ino | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/Cart_Reader/NES.ino b/Cart_Reader/NES.ino index 514c136..706b373 100644 --- a/Cart_Reader/NES.ino +++ b/Cart_Reader/NES.ino @@ -3735,13 +3735,15 @@ void readCHR(boolean readrom) { } break; - case 3: // 8K/16K/32K - case 66: // 16K/32K - case 70: - case 152: // 128K + case 3: // 8K/16K/32K - bus conflicts banks = int_pow(2, chrsize) / 2; - for (int i = 0; i < banks; i++) { // 8K Banks - write_prg_byte(0x8000, i); // CHR Bank 0 + for (int i = 0; i < banks; i++) { + for (int x = 0; x < 0x2000; x++) { + if (read_prg_byte(0x8000 + x) == i) { + write_prg_byte(0x8000 + x, i); + break; + } + } for (word address = 0x0; address < 0x2000; address += 512) { dumpCHR(address); } @@ -4159,6 +4161,18 @@ void readCHR(boolean readrom) { } } break; + + case 66: // 16K/32K + case 70: + case 152: // 128K + banks = int_pow(2, chrsize) / 2; + for (int i = 0; i < banks; i++) { // 8K Banks + write_prg_byte(0x8000, i); // CHR Bank 0 + for (word address = 0x0; address < 0x2000; address += 512) { + dumpCHR(address); + } + } + break; case 67: // 128K banks = int_pow(2, chrsize) * 2;