aboutsummaryrefslogtreecommitdiffstats
path: root/src/save.c
blob: 0e990868ffce93cbc394f9ca010c76822e3c63c7 (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) + 6 * 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) + 6 * sizeof(patterns) + i * sizeof(chain), sizeof(chain));
}

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