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