diff options
Diffstat (limited to 'src/cart.h')
| -rw-r--r-- | src/cart.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/cart.h b/src/cart.h new file mode 100644 index 0000000..ec864bb --- /dev/null +++ b/src/cart.h @@ -0,0 +1,53 @@ +#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 |
