| @@ -59,13 +59,15 @@ static void mmc1_update_vram(mmc1_mapper* map) { | |||||
| } | } | ||||
| static void mmc1_update_chr(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}; | int banks[2] = {0}; | ||||
| if (!(map->reg_control & 0b10000)) { | 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; | banks[1] = banks[0] + 1; | ||||
| } else { | } 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]); | 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) { | static void mmc1_update_prg(mmc1_mapper* map) { | ||||
| // PRG ROM selection | // PRG ROM selection | ||||
| int mode = (map->reg_control >> 2) & 3; | 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; | int bank_1 = bank_0; | ||||
| if (!(mode & 0b10)) { | if (!(mode & 0b10)) { | ||||
| bank_0 = (bank_0 & 0b01110); | bank_0 = (bank_0 & 0b01110); | ||||
| @@ -115,7 +117,7 @@ static void* mmc1_init(nes_mapper* nes_map, nes_cart* cart) { | |||||
| if (NULL != map) { | if (NULL != map) { | ||||
| map->prg_rom = cart->prg_rom; | map->prg_rom = cart->prg_rom; | ||||
| map->prg_rom_banks = cart->prg_rom_banks; | 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) { | if (map->chr_rom_banks > 0) { | ||||
| map->chr_rom = cart->chr_rom; | map->chr_rom = cart->chr_rom; | ||||
| map->chr = map->chr_rom; | map->chr = map->chr_rom; | ||||