all repos — mgba @ f27880525557deaf3b88af95655b8aef3c4a01de

mGBA Game Boy Advance Emulator

src/gba/gba-savedata.h (view raw)

 1#ifndef GBA_SAVEDATA_H
 2#define GBA_SAVEDATA_H
 3
 4#include <stdint.h>
 5
 6enum SavedataType {
 7	SAVEDATA_NONE = 0,
 8	SAVEDATA_SRAM,
 9	SAVEDATA_FLASH512,
10	SAVEDATA_FLASH1M,
11	SAVEDATA_EEPROM
12};
13
14enum SavedataCommand {
15	EEPROM_COMMAND_NULL = 0,
16	EEPROM_COMMAND_PENDING = 1,
17	EEPROM_COMMAND_WRITE = 2,
18	EEPROM_COMMAND_READ_PENDING = 3,
19	EEPROM_COMMAND_READ = 4
20};
21
22enum {
23	SAVEDATA_FLASH_BASE = 0x0E005555
24};
25
26struct GBASavedata {
27	enum SavedataType type;
28	uint8_t* data;
29	const char* filename;
30	enum SavedataCommand command;
31	int fd;
32
33	int readBitsRemaining;
34	int readAddress;
35	int writeAddress;
36	int writePending;
37	int addressBits;
38};
39
40void GBASavedataInit(struct GBASavedata* savedata, const char* filename);
41void GBASavedataDeinit(struct GBASavedata* savedata);
42
43void GBASavedataInitFlash(struct GBASavedata* savedata);
44void GBASavedataInitEEPROM(struct GBASavedata* savedata);
45void GBASavedataInitSRAM(struct GBASavedata* savedata);
46
47void GBASavedataWriteFlash(struct GBASavedata* savedata, uint8_t value);
48
49uint16_t GBASavedataReadEEPROM(struct GBASavedata* savedata);
50void GBASavedataWriteEEPROM(struct GBASavedata* savedata, uint16_t value, uint32_t writeSize);
51
52#endif