#ifndef NESE_MAPPER_H_ #define NESE_MAPPER_H_ #include #include "ines.h" struct nes_Memory; struct nes_Mapper { const char* name; int max_chr_banks; int data_size; void* data; int (*init)(struct nes_Mapper*, const ines_Header*, struct nes_Memory*); void (*done)(struct nes_Mapper*); void (*reset)(struct nes_Mapper*, struct nes_Memory*); int (*write_rom)(struct nes_Mapper*, struct nes_Memory*, uint16_t addr, uint8_t val); int (*write_sram)(struct nes_Mapper*, struct nes_Memory*, uint16_t addr, uint8_t val); int (*write_apu)(struct nes_Mapper*, struct nes_Memory*, uint16_t addr, uint8_t val); uint8_t (*read_apu)(struct nes_Mapper*, struct nes_Memory*, uint16_t addr); int (*hsync)(struct nes_Mapper*); int (*vsync)(struct nes_Mapper*); void (*ppu_bus)(struct nes_Mapper*, uint16_t addr); void (*ppu_mem_mode)(struct nes_Mapper*, uint8_t mode); void* irq_arg; void (*irq_callback)(void* irq_arg, bool enable); }; typedef struct nes_Mapper nes_Mapper; extern const nes_Mapper* nes_mappers[256]; #endif // NESE_MAPPER_H_