From 0d18c3857cf62c5467d80ad88c087591fa3e59b9 Mon Sep 17 00:00:00 2001 From: Nathaniel Walizer Date: Mon, 6 Jan 2025 22:13:20 -0800 Subject: [PATCH] MMC1 cleanup; Emit cart info on launch --- Makefile | 1 + src/cart.c | 4 +++- src/map/mmc1.c | 25 +++++++++---------------- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index b885cbf..23aa582 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ PFLAGS = -g #PFLAGS += -DDEBUG_PPU -DDEBUG_VRAM -DDEBUG_OAM PFLAGS += -DDEBUG_APU #PFLAGS += -DE6502_DEBUG +PFLAGS += -DE6502_ILLEGAL CFLAGS = $(PFLAGS) -Wall -Werror -Wshadow -Wunused -I.. LDFLAGS = $(PFLAGS) diff --git a/src/cart.c b/src/cart.c index 7ed84b9..cac570a 100644 --- a/src/cart.c +++ b/src/cart.c @@ -26,6 +26,7 @@ int nes_cart_init_mem(nes_cart* cart, void* mem, int len) { INES_ERR("Bad program ROM size: %#x", prg_size); status = -1; } else { + INES_INFO("%d KB PRG ROM", prg_size / 1024); cart->prg_rom = ptr; cart->prg_rom_banks = hdr->prg_size_lsb; } @@ -34,6 +35,7 @@ int nes_cart_init_mem(nes_cart* cart, void* mem, int len) { if (0 == status) { int chr_size = nes_chr_page_size * hdr->chr_size_lsb; + INES_INFO("%d KB CHR ROM", chr_size / 1024); cart->chr_rom = ptr; cart->chr_rom_banks = hdr->chr_size_lsb * 2; ptr += chr_size; @@ -45,7 +47,7 @@ int nes_cart_init_mem(nes_cart* cart, void* mem, int len) { INES_ERR("No mapper found for type %d", index); status = -1; } else if (NULL != cart->mapper->name) { - INES_INFO("Mapper: %s\n", cart->mapper->name); + INES_INFO("Mapper: %s", cart->mapper->name); } } diff --git a/src/map/mmc1.c b/src/map/mmc1.c index 24ce9ee..a0e4a92 100644 --- a/src/map/mmc1.c +++ b/src/map/mmc1.c @@ -73,26 +73,19 @@ static void mmc1_update_chr(mmc1_mapper* map) { static void mmc1_update_prg(mmc1_mapper* map) { // PRG ROM selection int mode = (map->reg_control >> 2) & 3; - int bank = (map->reg_prg & 0b01111); + int bank_0 = (map->reg_prg & 0b01111); + int bank_1 = bank_0; if (!(mode & 0b10)) { - bank = (bank & 0b01110); - MAP_LOG("PRG: 32 KB %d + %d", bank, bank + 1); - bank *= nes_prg_rom_page_size; - map->prg_bank[0] = &map->prg_rom[bank]; - map->prg_bank[1] = &map->prg_rom[bank + - nes_prg_rom_page_size]; + bank_0 = (bank_0 & 0b01110); + bank_1 = bank_0 + 1; } else if (mode == 2) { - MAP_LOG("PRG: %d + %d", 0, bank); - bank *= nes_prg_rom_page_size; - map->prg_bank[0] = &map->prg_rom[0]; - map->prg_bank[1] = &map->prg_rom[bank]; + bank_0 = 0; } else if (mode == 3) { - MAP_LOG("PRG: %d + %d", bank, map->prg_rom_banks - 1); - bank *= nes_prg_rom_page_size; - map->prg_bank[0] = &map->prg_rom[bank]; - map->prg_bank[1] = &map->prg_rom[(map->prg_rom_banks - 1) * - nes_prg_rom_page_size]; + bank_1 = (map->prg_rom_banks - 1); } + MAP_LOG("PRG: %d + %d", bank_0, bank_1); + map->prg_bank[0] = &map->prg_rom[bank_0 * nes_prg_rom_page_size]; + map->prg_bank[1] = &map->prg_rom[bank_1 * nes_prg_rom_page_size]; } static void mmc1_reset(nes_mapper* nes_map) {