Mercurial > repos > blastem
annotate vgmplay.c @ 478:2e4a4188cfb0
Fix DMA fill so that it does not cause observable changes to the FIFO. Get DMA copy mostly correct from an observable ffect perspective. DMA copy probably does not reflect internal implementation still given that evidence seems to suggest no FIFO usage at all.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 17 Sep 2013 00:11:45 -0700 |
parents | 140af5509ce7 |
children | b7b7a1cab44a |
rev | line source |
---|---|
467
140af5509ce7
Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents:
466
diff
changeset
|
1 /* |
140af5509ce7
Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents:
466
diff
changeset
|
2 Copyright 2013 Michael Pavone |
140af5509ce7
Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents:
466
diff
changeset
|
3 This file is part of BlastEm. |
140af5509ce7
Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents:
466
diff
changeset
|
4 BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. |
140af5509ce7
Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents:
466
diff
changeset
|
5 */ |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 #include "render.h" |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 #include "ym2612.h" |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 #include "psg.h" |
466 | 9 #include "config.h" |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 #include <stdint.h> |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 #include <stdio.h> |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 #define MCLKS_NTSC 53693175 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 #define MCLKS_PAL 53203395 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 #define MCLKS_PER_68K 7 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 #define MCLKS_PER_YM MCLKS_PER_68K |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 #define MCLKS_PER_Z80 15 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 #define MCLKS_PER_PSG (MCLKS_PER_Z80*16) |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 #pragma pack(push, 1) |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 typedef struct { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 char ident[4]; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 uint32_t eof_offset; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 uint32_t version; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 uint32_t sn76489_clk; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 uint32_t ym2413_clk; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 uint32_t gd3_offset; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 uint32_t num_samples; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 uint32_t loop_offset; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 uint32_t loop_count; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 uint32_t rate; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 uint16_t sn76489_fb; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 uint8_t sn76489_shift; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 uint8_t sn76489_flags; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 uint32_t ym2612_clk; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 uint32_t ym2151_clk; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 uint32_t data_offset; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 uint32_t sega_pcm_clk; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 uint32_t sega_pcm_reg; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 } vgm_header; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 enum { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 CMD_PSG_STEREO = 0x4F, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 CMD_PSG, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 CMD_YM2413, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 CMD_YM2612_0, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 CMD_YM2612_1, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 CMD_YM2151, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 CMD_YM2203, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 CMD_YM2608_0, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 CMD_YM2608_1, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 CMD_YM2610_0, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 CMD_YM2610_1, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 CMD_YM3812, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 CMD_YM3526, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 CMD_Y8950, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 CMD_YMZ280B, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 CMD_YMF262_0, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 CMD_YMF262_1, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 CMD_WAIT = 0x61, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 CMD_WAIT_60, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 CMD_WAIT_50, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 CMD_END = 0x66, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 CMD_DATA, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 CMD_PCM_WRITE, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 CMD_WAIT_SHORT = 0x70, |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 CMD_YM2612_DAC = 0x80 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 }; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 #pragma pack(pop) |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 void handle_keydown(int keycode) |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 void handle_keyup(int keycode) |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 |
466 | 81 void handle_joydown(int joystick, int button) |
82 { | |
83 } | |
84 | |
85 void handle_joyup(int joystick, int button) | |
86 { | |
87 } | |
88 | |
89 void handle_joy_dpad(int joystick, int dpadnum, uint8_t value) | |
90 { | |
91 } | |
92 | |
409
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
93 #define CYCLE_LIMIT MCLKS_NTSC/60 |
466 | 94 tern_node * config; |
409
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
95 |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 void wait(ym2612_context * y_context, psg_context * p_context, uint32_t * current_cycle, uint32_t cycles) |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
97 { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 *current_cycle += cycles; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 psg_run(p_context, *current_cycle); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 ym_run(y_context, *current_cycle); |
466 | 101 |
409
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
102 if (*current_cycle > CYCLE_LIMIT) { |
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
103 *current_cycle -= CYCLE_LIMIT; |
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
104 p_context->cycles -= CYCLE_LIMIT; |
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
105 y_context->current_cycle -= CYCLE_LIMIT; |
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
106 process_events(); |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
108 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
110 int main(int argc, char ** argv) |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
111 { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
112 uint32_t fps = 60; |
466 | 113 config = load_config(argv[0]); |
114 render_init(320, 240, "vgm play", 60, 0); | |
115 | |
116 | |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
117 ym2612_context y_context; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
118 ym_init(&y_context, render_sample_rate(), MCLKS_NTSC, MCLKS_PER_YM, render_audio_buffer(), 0); |
466 | 119 |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
120 psg_context p_context; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
121 psg_init(&p_context, render_sample_rate(), MCLKS_NTSC, MCLKS_PER_PSG, render_audio_buffer()); |
466 | 122 |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
123 FILE * f = fopen(argv[1], "rb"); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
124 vgm_header header; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
125 fread(&header, sizeof(header), 1, f); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
126 if (header.version < 0x150 || !header.data_offset) { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
127 header.data_offset = 0xC; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
128 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
129 fseek(f, header.data_offset + 0x34, SEEK_SET); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
130 uint32_t data_size = header.eof_offset + 4 - (header.data_offset + 0x34); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
131 uint8_t * data = malloc(data_size); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
132 fread(data, 1, data_size, f); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
133 fclose(f); |
466 | 134 |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 uint32_t mclks_sample = MCLKS_NTSC / 44100; |
466 | 136 |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 uint8_t * end = data + data_size; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
138 uint8_t * cur = data; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 uint32_t current_cycle = 0; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 while (cur < end) { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 uint8_t cmd = *(cur++); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 switch(cmd) |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 case CMD_PSG_STEREO: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
145 //ignore for now |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
146 cur++; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
147 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
148 case CMD_PSG: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
149 psg_write(&p_context, *(cur++)); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
151 case CMD_YM2612_0: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
152 ym_address_write_part1(&y_context, *(cur++)); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
153 ym_data_write(&y_context, *(cur++)); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
154 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
155 case CMD_YM2612_1: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
156 ym_address_write_part2(&y_context, *(cur++)); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
157 ym_data_write(&y_context, *(cur++)); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
158 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
159 case CMD_WAIT: { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
160 uint32_t wait_time = *(cur++); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
161 wait_time |= *(cur++) << 8; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
162 wait_time *= mclks_sample; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
163 wait(&y_context, &p_context, ¤t_cycle, wait_time); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
164 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
165 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
166 case CMD_WAIT_60: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
167 wait(&y_context, &p_context, ¤t_cycle, 735 * mclks_sample); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
168 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
169 case CMD_WAIT_50: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
170 wait(&y_context, &p_context, ¤t_cycle, 882 * mclks_sample); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
171 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
172 case CMD_END: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
173 return 0; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
174 default: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
175 if (cmd >= CMD_WAIT_SHORT && cmd < (CMD_WAIT_SHORT + 0x10)) { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
176 uint32_t wait_time = (cmd & 0xF) + 1; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
177 wait_time *= mclks_sample; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
178 wait(&y_context, &p_context, ¤t_cycle, wait_time); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
179 } else { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
180 printf("unimplemented command: %X at offset %X\n", cmd, cur - data - 1); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
181 exit(1); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
182 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
183 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
184 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
185 return 0; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
186 } |