comparison vgmplay.c @ 2044:460e14497120

zlib support in vgmplay
author Michael Pavone <pavone@retrodev.com>
date Tue, 21 Sep 2021 23:03:18 -0700
parents 7ebcbef45362
children cfd53c94fffb
comparison
equal deleted inserted replaced
2040:a61b47d5489e 2044:460e14497120
21 #define MCLKS_PER_68K 7 21 #define MCLKS_PER_68K 7
22 #define MCLKS_PER_YM MCLKS_PER_68K 22 #define MCLKS_PER_YM MCLKS_PER_68K
23 #define MCLKS_PER_Z80 15 23 #define MCLKS_PER_Z80 15
24 #define MCLKS_PER_PSG (MCLKS_PER_Z80*16) 24 #define MCLKS_PER_PSG (MCLKS_PER_Z80*16)
25 25
26
27 #ifdef DISABLE_ZLIB
28 #define VGMFILE FILE*
29 #define vgmopen fopen
30 #define vgmread fread
31 #define vgmseek fseek
32 #define vgmgetc fgetc
33 #define vgmclose fclose
34 #else
35 #include "zlib/zlib.h"
36 #define VGMFILE gzFile
37 #define vgmopen gzopen
38 #define vgmread gzfread
39 #define vgmseek gzseek
40 #define vgmgetc gzgetc
41 #define vgmclose gzclose
42 #endif
43
44
26 system_header *current_system; 45 system_header *current_system;
27 46
28 void system_request_exit(system_header *system, uint8_t force_release) 47 void system_request_exit(system_header *system, uint8_t force_release)
29 { 48 {
30 } 49 }
118 ym_init(&y_context, MCLKS_NTSC, MCLKS_PER_YM, opts); 137 ym_init(&y_context, MCLKS_NTSC, MCLKS_PER_YM, opts);
119 138
120 psg_context p_context; 139 psg_context p_context;
121 psg_init(&p_context, MCLKS_NTSC, MCLKS_PER_PSG); 140 psg_init(&p_context, MCLKS_NTSC, MCLKS_PER_PSG);
122 141
123 FILE * f = fopen(argv[1], "rb"); 142 VGMFILE * f = vgmopen(argv[1], "rb");
124 vgm_header header; 143 vgm_header header;
125 fread(&header, sizeof(header), 1, f); 144 vgmread(&header, sizeof(header), 1, f);
126 if (header.version < 0x150 || !header.data_offset) { 145 if (header.version < 0x150 || !header.data_offset) {
127 header.data_offset = 0xC; 146 header.data_offset = 0xC;
128 } 147 }
129 fseek(f, header.data_offset + 0x34, SEEK_SET); 148 vgmseek(f, header.data_offset + 0x34, SEEK_SET);
130 uint32_t data_size = header.eof_offset + 4 - (header.data_offset + 0x34); 149 uint32_t data_size = header.eof_offset + 4 - (header.data_offset + 0x34);
131 uint8_t * data = malloc(data_size); 150 uint8_t * data = malloc(data_size);
132 fread(data, 1, data_size, f); 151 vgmread(data, 1, data_size, f);
133 fclose(f); 152 vgmclose(f);
134 153
135 uint32_t mclks_sample = MCLKS_NTSC / 44100; 154 uint32_t mclks_sample = MCLKS_NTSC / 44100;
136 uint32_t loop_count = 2; 155 uint32_t loop_count = 2;
137 156
138 uint8_t * end = data + data_size; 157 uint8_t * end = data + data_size;