#ifndef GBC_CART_H #define GBC_CART_H #include "types.h" typedef enum { MBC_NONE, MBC_1, MBC_2, MBC_3, MBC_5, } MbcType; typedef struct { u8 *rom; // full ROM image size_t rom_size; int rom_banks; // number of 16KB banks u8 *ram; // external cartridge RAM size_t ram_size; int ram_banks; // number of 8KB banks MbcType mbc; bool has_ram; bool has_battery; bool has_rtc; bool cgb; // CGB flag set in header char title[17]; // MBC state bool ram_enabled; u8 rom_bank; // low bank register u8 rom_bank_hi; // high bits (mbc1 mode / mbc5) u8 ram_bank; u8 bank_mode; // MBC1 banking mode select // RTC (MBC3) u8 rtc_reg[5]; // S, M, H, DL, DH u8 rtc_latch; char save_path[512]; } Cart; // Load a ROM file into cart. Returns 0 on success. int cart_load(Cart *c, const char *path); void cart_free(Cart *c); void cart_save(Cart *c); u8 cart_read(Cart *c, u16 addr); void cart_write(Cart *c, u16 addr, u8 val); #endif