aboutsummaryrefslogtreecommitdiffstats
path: root/src/save.c
blob: 8c2655755c1a568426168a1abc688666b357c2ae (plain)
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
#include "save.h"

//
// Save data.
//

static Metadata metadata = {0};

void
sram_read(u8 *dst, u16 pos, u16 n_bytes) {
    for (size_t i = 0; i < n_bytes; ++i) {
        dst[i] = SRAM[pos + i];
    }
}

void
sram_write(u8 *src, u16 pos, u16 n_bytes) {
    for (size_t i = 0; i < n_bytes; ++i) {
        SRAM[pos + i] = src[i];
    }
}

void
save_bank(int i) {
    sram_write(&patterns, sizeof(Metadata) + i * sizeof(patterns), sizeof(patterns));
    sram_write(&chain, sizeof(Metadata) + 4 * sizeof(patterns) + i * sizeof(chain), sizeof(chain));
}

void
load_bank(int i) {
    sram_read(&patterns, sizeof(Metadata) + i * sizeof(patterns), sizeof(patterns));
    sram_read(&chain, sizeof(Metadata) + 4 * sizeof(patterns) + i * sizeof(chain), sizeof(chain));
}

void
save_metadata(void) {
    metadata.settings = settings;
    sram_write(&metadata, 0, sizeof(Metadata));
}