aboutsummaryrefslogtreecommitdiffstats
path: root/src/save.c
blob: 45a099d8d1c40fa1ee91b930a6efc6e6bae703d5 (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
//
// Save data.
//

typedef struct Metadata {
    u8 blank;
    u32 magic;
    int current_bank;
    int current_pattern;
} Metadata;

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));
}

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