diff options
| author | gbc dev <gbc@localhost> | 2026-07-04 22:05:31 +0200 |
|---|---|---|
| committer | gbc dev <gbc@localhost> | 2026-07-04 22:05:31 +0200 |
| commit | 0d0f4f1d23851c0c34e518834f7d316e61dec1f3 (patch) | |
| tree | e46296c247617ee0ead1fb93e9d0dc475a07f9b9 /src/cart.h | |
| download | sl0pboy-0d0f4f1d23851c0c34e518834f7d316e61dec1f3.tar.gz sl0pboy-0d0f4f1d23851c0c34e518834f7d316e61dec1f3.tar.xz sl0pboy-0d0f4f1d23851c0c34e518834f7d316e61dec1f3.zip | |
scaffolding: build system, cartridge loader with MBC1/2/3/5, core types
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 |
