| @@ -22,7 +22,11 @@ static int nrom_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 = 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->chr_rom_banks = cart->chr_rom_banks; | ||||
| map->mirror = (cart->flags & Cart_Flag_Horizontal) ? 0 : 1; | 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) { | 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, | 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]; | 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) { | 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 = { | nes_mapper mapper_nrom = { | ||||