Browse Source

Fix MMC1 PRG/CHR bank swap limits

master
Nathaniel Walizer 10 months ago
parent
commit
3c5d6fce77
1 changed files with 7 additions and 5 deletions
  1. +7
    -5
      src/map/mmc1.c

+ 7
- 5
src/map/mmc1.c View File

@@ -59,13 +59,15 @@ static void mmc1_update_vram(mmc1_mapper* map) {
}

static void mmc1_update_chr(mmc1_mapper* map) {
int n_banks = map->chr_rom_banks;
if (n_banks <= 0) n_banks = 32;
int banks[2] = {0};
if (!(map->reg_control & 0b10000)) {
banks[0] = (map->reg_chr_0 & 0b11110);
banks[0] = (map->reg_chr_0 & 0b11110) % n_banks;
banks[1] = banks[0] + 1;
} else {
banks[0] = map->reg_chr_0;
banks[1] = map->reg_chr_1;
banks[0] = map->reg_chr_0 % n_banks;
banks[1] = map->reg_chr_1 % n_banks;
}

MAP_LOG("CHR: %d + %d", banks[0], banks[1]);
@@ -80,7 +82,7 @@ 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_0 = (map->reg_prg & 0b01111);
int bank_0 = (map->reg_prg & 0b01111) % map->prg_rom_banks;
int bank_1 = bank_0;
if (!(mode & 0b10)) {
bank_0 = (bank_0 & 0b01110);
@@ -115,7 +117,7 @@ static void* mmc1_init(nes_mapper* nes_map, nes_cart* cart) {
if (NULL != map) {
map->prg_rom = cart->prg_rom;
map->prg_rom_banks = cart->prg_rom_banks;
map->chr_rom_banks = cart->chr_rom_banks / 2;
map->chr_rom_banks = cart->chr_rom_banks;
if (map->chr_rom_banks > 0) {
map->chr_rom = cart->chr_rom;
map->chr = map->chr_rom;


Loading…
Cancel
Save