diff --git a/src/map/nrom.c b/src/map/nrom.c index be83916..d1aba8f 100644 --- a/src/map/nrom.c +++ b/src/map/nrom.c @@ -22,7 +22,11 @@ static int nrom_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 = cart->chr_rom; + if (cart->chr_rom_banks <= 0) { + map->chr_rom = calloc(8, 1024); + } else { + map->chr_rom = cart->chr_rom; + } map->chr_rom_banks = cart->chr_rom_banks; map->mirror = (cart->flags & Cart_Flag_Horizontal) ? 0 : 1; } @@ -30,7 +34,13 @@ static int nrom_init(nes_mapper* nes_map, nes_cart* cart) { } static void nrom_done(nes_mapper* nes_map) { - free(nes_map->data); + nrom_mapper* map = (nrom_mapper*)nes_map->data; + if (NULL != map) { + if (map->chr_rom_banks <= 0) { + free(map->chr_rom); + } + free(nes_map->data); + } } static inline uint8_t* nrom_prg_addr(nrom_mapper* map, @@ -78,10 +88,13 @@ static uint8_t* nrom_vram_addr(nes_mapper* nes_map, return &map->vram[addr]; } -static void nrom_chr_write(nes_mapper* map, +static void nrom_chr_write(nes_mapper* nes_map, uint16_t addr, uint8_t val) { - // ROM only. - printf("CHR ROM Write: $%04x < %02x\n", addr, val); + nrom_mapper* map = (nrom_mapper*)nes_map->data; + if (map->chr_rom_banks <= 0) { + *(nrom_chr_addr(nes_map, addr)) = val; + } +// printf("CHR ROM Write: $%04x < %02x\n", addr, val); } nes_mapper mapper_nrom = {