blob: ec864bba676a121fb19fc575b10dbe5e1db81a15 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
|