aboutsummaryrefslogtreecommitdiffstats
path: root/src/save.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/save.c')
-rw-r--r--src/save.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/save.c b/src/save.c
new file mode 100644
index 0000000..45a099d
--- /dev/null
+++ b/src/save.c
@@ -0,0 +1,37 @@
1//
2// Save data.
3//
4
5typedef struct Metadata {
6 u8 blank;
7 u32 magic;
8 int current_bank;
9 int current_pattern;
10} Metadata;
11
12static Metadata metadata = {0};
13
14void
15sram_read(u8 *dst, u16 pos, u16 n_bytes) {
16 for (size_t i = 0; i < n_bytes; ++i) {
17 dst[i] = SRAM[pos + i];
18 }
19}
20
21void
22sram_write(u8 *src, u16 pos, u16 n_bytes) {
23 for (size_t i = 0; i < n_bytes; ++i) {
24 SRAM[pos + i] = src[i];
25 }
26}
27
28void
29save_bank(int i) {
30 sram_write(&patterns, sizeof(Metadata) + i * sizeof(patterns), sizeof(patterns));
31}
32
33void
34load_bank(int i) {
35 sram_read(&patterns, sizeof(Metadata) + i * sizeof(patterns), sizeof(patterns));
36}
37