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