added banks saving to a .tic cart

This commit is contained in:
BADIM-PC\Vadim 2017-12-15 11:52:37 +03:00
parent 07616adaca
commit f7f30d47dc
1 changed files with 22 additions and 19 deletions

View File

@ -53,7 +53,7 @@ typedef enum
CHUNK_TEMP, // 6 CHUNK_TEMP, // 6
CHUNK_TEMP2, // 7 CHUNK_TEMP2, // 7
CHUNK_TEMP3, // 8 CHUNK_TEMP3, // 8
CHUNK_SOUND, // 9 CHUNK_SAMPLES, // 9
CHUNK_WAVEFORM, // 10 CHUNK_WAVEFORM, // 10
CHUNK_TEMP4, // 11 CHUNK_TEMP4, // 11
CHUNK_PALETTE, // 12 CHUNK_PALETTE, // 12
@ -68,7 +68,7 @@ typedef struct
u32 size:24; u32 size:24;
} Chunk; } Chunk;
STATIC_ASSERT(rom_chunk_size, sizeof(Chunk) == 4); STATIC_ASSERT(tic_chunk_size, sizeof(Chunk) == 4);
STATIC_ASSERT(tic_map, sizeof(tic_map) < 1024*32); STATIC_ASSERT(tic_map, sizeof(tic_map) < 1024*32);
STATIC_ASSERT(tic_sample, sizeof(tic_sample) == 66); STATIC_ASSERT(tic_sample, sizeof(tic_sample) == 66);
STATIC_ASSERT(tic_track_pattern, sizeof(tic_track_pattern) == 3*MUSIC_PATTERN_ROWS); STATIC_ASSERT(tic_track_pattern, sizeof(tic_track_pattern) == 3*MUSIC_PATTERN_ROWS);
@ -1619,14 +1619,14 @@ static void api_load(tic_cartridge* cart, const u8* buffer, s32 size, bool palet
switch(chunk.type) switch(chunk.type)
{ {
case CHUNK_TILES: memcpy(&cart->banks[bank.tiles++].tiles, buffer, min(sizeof(tic_tiles), chunk.size)); break; case CHUNK_TILES: LOAD_CHUNK(cart->banks[bank.tiles++].tiles); break;
case CHUNK_SPRITES: memcpy(&cart->banks[bank.sprites++].sprites, buffer, min(sizeof(tic_tiles), chunk.size)); break; case CHUNK_SPRITES: LOAD_CHUNK(cart->banks[bank.sprites++].sprites); break;
case CHUNK_MAP: memcpy(&cart->banks[bank.map++].map, buffer, min(sizeof(tic_map), chunk.size)); break; case CHUNK_MAP: LOAD_CHUNK(cart->banks[bank.map++].map); break;
case CHUNK_CODE: memcpy(&cart->banks[bank.code++].code, buffer, min(sizeof(tic_code), chunk.size)); break; case CHUNK_CODE: LOAD_CHUNK(cart->banks[bank.code++].code); break;
case CHUNK_SOUND: memcpy(&cart->banks[bank.sfx++].sfx.samples, buffer, min(sizeof(tic_samples), chunk.size)); break; case CHUNK_SAMPLES: LOAD_CHUNK(cart->banks[bank.sfx++].sfx.samples); break;
case CHUNK_WAVEFORM: memcpy(&cart->banks[bank.waves++].sfx.waveform, buffer, min(sizeof(tic_waveforms), chunk.size)); break; case CHUNK_WAVEFORM: LOAD_CHUNK(cart->banks[bank.waves++].sfx.waveform); break;
case CHUNK_MUSIC: memcpy(&cart->banks[bank.tracks++].music.tracks, buffer, min(sizeof(tic_tracks), chunk.size)); break; case CHUNK_MUSIC: LOAD_CHUNK(cart->banks[bank.tracks++].music.tracks); break;
case CHUNK_PATTERNS: memcpy(&cart->banks[bank.patterns++].music.patterns, buffer, min(sizeof(tic_patterns), chunk.size)); break; case CHUNK_PATTERNS: LOAD_CHUNK(cart->banks[bank.patterns++].music.patterns); break;
case CHUNK_PALETTE: case CHUNK_PALETTE:
if(palette) if(palette)
LOAD_CHUNK(cart->palette); LOAD_CHUNK(cart->palette);
@ -1688,16 +1688,19 @@ static s32 api_save(const tic_cartridge* cart, u8* buffer)
#define SAVE_CHUNK(id, from) saveChunk(buffer, id, &from, sizeof(from)) #define SAVE_CHUNK(id, from) saveChunk(buffer, id, &from, sizeof(from))
buffer = SAVE_CHUNK(CHUNK_TILES, cart->bank0.tiles); for(s32 i = 0; i < TIC_BANKS; i++)
buffer = SAVE_CHUNK(CHUNK_SPRITES, cart->bank0.sprites); {
buffer = SAVE_CHUNK(CHUNK_MAP, cart->bank0.map); buffer = SAVE_CHUNK(CHUNK_TILES, cart->banks[i].tiles);
buffer = SAVE_CHUNK(CHUNK_CODE, cart->bank0.code); buffer = SAVE_CHUNK(CHUNK_SPRITES, cart->banks[i].sprites);
buffer = SAVE_CHUNK(CHUNK_SOUND, cart->bank0.sfx.samples); buffer = SAVE_CHUNK(CHUNK_MAP, cart->banks[i].map);
buffer = SAVE_CHUNK(CHUNK_WAVEFORM, cart->bank0.sfx.waveform); buffer = SAVE_CHUNK(CHUNK_CODE, cart->banks[i].code);
buffer = SAVE_CHUNK(CHUNK_PATTERNS, cart->bank0.music.patterns.data); buffer = SAVE_CHUNK(CHUNK_SAMPLES, cart->banks[i].sfx.samples);
buffer = SAVE_CHUNK(CHUNK_MUSIC, cart->bank0.music.tracks.data); buffer = SAVE_CHUNK(CHUNK_WAVEFORM, cart->banks[i].sfx.waveform);
buffer = SAVE_CHUNK(CHUNK_PALETTE, cart->palette); buffer = SAVE_CHUNK(CHUNK_PATTERNS, cart->banks[i].music.patterns);
buffer = SAVE_CHUNK(CHUNK_MUSIC, cart->banks[i].music.tracks);
}
buffer = SAVE_CHUNK(CHUNK_PALETTE, cart->palette);
buffer = saveFixedChunk(buffer, CHUNK_COVER, cart->cover.data, cart->cover.size); buffer = saveFixedChunk(buffer, CHUNK_COVER, cart->cover.data, cart->cover.size);
#undef SAVE_CHUNK #undef SAVE_CHUNK