Mercurial > repos > blastem
comparison vgmplay.c @ 812:574495372d1c
Finish OS X support in build_release script. Fix a name conflict in vgmplay on OS X. Call set_exe_str in vgmplay and stateview
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 26 Jul 2015 21:18:44 -0700 |
parents | 3eced113081c |
children | 7068a9db6dd0 |
comparison
equal
deleted
inserted
replaced
811:b1a09ef90755 | 812:574495372d1c |
---|---|
108 | 108 |
109 #define CYCLE_LIMIT MCLKS_NTSC/60 | 109 #define CYCLE_LIMIT MCLKS_NTSC/60 |
110 #define MAX_SOUND_CYCLES 100000 | 110 #define MAX_SOUND_CYCLES 100000 |
111 tern_node * config; | 111 tern_node * config; |
112 | 112 |
113 void wait(ym2612_context * y_context, psg_context * p_context, uint32_t * current_cycle, uint32_t cycles) | 113 void vgm_wait(ym2612_context * y_context, psg_context * p_context, uint32_t * current_cycle, uint32_t cycles) |
114 { | 114 { |
115 while (cycles > MAX_SOUND_CYCLES) | 115 while (cycles > MAX_SOUND_CYCLES) |
116 { | 116 { |
117 wait(y_context, p_context, current_cycle, MAX_SOUND_CYCLES); | 117 vgm_wait(y_context, p_context, current_cycle, MAX_SOUND_CYCLES); |
118 cycles -= MAX_SOUND_CYCLES; | 118 cycles -= MAX_SOUND_CYCLES; |
119 } | 119 } |
120 *current_cycle += cycles; | 120 *current_cycle += cycles; |
121 psg_run(p_context, *current_cycle); | 121 psg_run(p_context, *current_cycle); |
122 ym_run(y_context, *current_cycle); | 122 ym_run(y_context, *current_cycle); |
136 uint8_t type; | 136 uint8_t type; |
137 } data_block; | 137 } data_block; |
138 | 138 |
139 int main(int argc, char ** argv) | 139 int main(int argc, char ** argv) |
140 { | 140 { |
141 set_exe_str(argv[0]); | |
141 data_block *blocks = NULL; | 142 data_block *blocks = NULL; |
142 data_block *seek_block = NULL; | 143 data_block *seek_block = NULL; |
143 uint32_t seek_offset; | 144 uint32_t seek_offset; |
144 uint32_t block_offset; | 145 uint32_t block_offset; |
145 | 146 |
197 break; | 198 break; |
198 case CMD_WAIT: { | 199 case CMD_WAIT: { |
199 uint32_t wait_time = *(cur++); | 200 uint32_t wait_time = *(cur++); |
200 wait_time |= *(cur++) << 8; | 201 wait_time |= *(cur++) << 8; |
201 wait_time *= mclks_sample; | 202 wait_time *= mclks_sample; |
202 wait(&y_context, &p_context, ¤t_cycle, wait_time); | 203 vgm_wait(&y_context, &p_context, ¤t_cycle, wait_time); |
203 break; | 204 break; |
204 } | 205 } |
205 case CMD_WAIT_60: | 206 case CMD_WAIT_60: |
206 wait(&y_context, &p_context, ¤t_cycle, 735 * mclks_sample); | 207 vgm_wait(&y_context, &p_context, ¤t_cycle, 735 * mclks_sample); |
207 break; | 208 break; |
208 case CMD_WAIT_50: | 209 case CMD_WAIT_50: |
209 wait(&y_context, &p_context, ¤t_cycle, 882 * mclks_sample); | 210 vgm_wait(&y_context, &p_context, ¤t_cycle, 882 * mclks_sample); |
210 break; | 211 break; |
211 case CMD_END: | 212 case CMD_END: |
212 if (header.loop_offset && --loop_count) { | 213 if (header.loop_offset && --loop_count) { |
213 cur = data + header.loop_offset + 0x1C - (header.data_offset + 0x34); | 214 cur = data + header.loop_offset + 0x1C - (header.data_offset + 0x34); |
214 } else { | 215 } else { |
263 | 264 |
264 default: | 265 default: |
265 if (cmd >= CMD_WAIT_SHORT && cmd < (CMD_WAIT_SHORT + 0x10)) { | 266 if (cmd >= CMD_WAIT_SHORT && cmd < (CMD_WAIT_SHORT + 0x10)) { |
266 uint32_t wait_time = (cmd & 0xF) + 1; | 267 uint32_t wait_time = (cmd & 0xF) + 1; |
267 wait_time *= mclks_sample; | 268 wait_time *= mclks_sample; |
268 wait(&y_context, &p_context, ¤t_cycle, wait_time); | 269 vgm_wait(&y_context, &p_context, ¤t_cycle, wait_time); |
269 } else if (cmd >= CMD_YM2612_DAC && cmd < CMD_DAC_STREAM_SETUP) { | 270 } else if (cmd >= CMD_YM2612_DAC && cmd < CMD_DAC_STREAM_SETUP) { |
270 if (seek_block) { | 271 if (seek_block) { |
271 ym_address_write_part1(&y_context, 0x2A); | 272 ym_address_write_part1(&y_context, 0x2A); |
272 ym_data_write(&y_context, seek_block->data[block_offset++]); | 273 ym_data_write(&y_context, seek_block->data[block_offset++]); |
273 seek_offset++; | 274 seek_offset++; |
280 } | 281 } |
281 uint32_t wait_time = (cmd & 0xF); | 282 uint32_t wait_time = (cmd & 0xF); |
282 if (wait_time) | 283 if (wait_time) |
283 { | 284 { |
284 wait_time *= mclks_sample; | 285 wait_time *= mclks_sample; |
285 wait(&y_context, &p_context, ¤t_cycle, wait_time); | 286 vgm_wait(&y_context, &p_context, ¤t_cycle, wait_time); |
286 } | 287 } |
287 } else { | 288 } else { |
288 fatal_error("unimplemented command: %X at offset %X\n", cmd, (unsigned int)(cur - data - 1)); | 289 fatal_error("unimplemented command: %X at offset %X\n", cmd, (unsigned int)(cur - data - 1)); |
289 } | 290 } |
290 } | 291 } |