Browse Source

MMC1 cleanup; Emit cart info on launch

master
Nathaniel Walizer 11 months ago
parent
commit
0d18c3857c
3 changed files with 13 additions and 17 deletions
  1. +1
    -0
      Makefile
  2. +3
    -1
      src/cart.c
  3. +9
    -16
      src/map/mmc1.c

+ 1
- 0
Makefile View File

@@ -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)



+ 3
- 1
src/cart.c View File

@@ -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);
}
}



+ 9
- 16
src/map/mmc1.c View File

@@ -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) {


Loading…
Cancel
Save