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