#include "map.h" typedef struct { uint8_t* prg_rom; int prg_rom_size; uint8_t* prg_ram; int prg_ram_size; uint8_t* chr_rom; int chr_rom_size; uint8_t reg_shift; uint8_t reg_control; uint8_t reg_chr_0; uint8_t reg_chr_1; uint8_t reg_prg; } mmc1_mapper; /* int mmc1_init(nes_mapper* nes_map, nes_cart* cart) { nrom_mapper* map = malloc(sizeof(nrom_mapper)); nes_map->data = map; if (NULL != map) { map->prg_rom = cart->prg_rom; map->prg_rom_size = cart->prg_rom_size; map->chr_rom = cart->chr_rom; map->chr_rom_size = cart->chr_rom_size; map->prg_ram = cart->wram; map->prg_ram_size = nes_mem_wram_size; map->shift_reg = 0; } return (NULL == map ? -1 : 0); } void nrom_done(nes_mapper* nes_map) { free(nes_map->data); } static inline uint8_t* nrom_prg_addr(nrom_mapper* map, uint16_t addr) { if (addr > map->prg_rom_size) { addr &= 0x3FFF; } return &(map->prg_rom[addr]); } uint8_t nrom_prg_read(nes_mapper* map, uint16_t addr) { return *(nrom_prg_addr((nrom_mapper*)map->data, addr)); } void nrom_prg_write(nes_mapper* map, uint16_t addr, uint8_t val) { // No ROM writes. } uint8_t* nrom_chr_addr(nes_mapper* nes_map, uint16_t addr) { nrom_mapper* map = (nrom_mapper*)nes_map->data; return &map->chr_rom[addr % map->chr_rom_size]; } */ nes_mapper mapper_mmc1 = { /* .init = mmc1_init, .done = mmc1_done, .prg_read = mmc1_prg_read, .prg_write = mmc1_prg_write, .chr_addr = mmc1_chr_addr, .vram_addr = mmc1_chr_addr, */ };