Mercurial > repos > blastem
annotate vgmplay.c @ 505:b7b7a1cab44a
The local clone on my laptop got messed up and some changes had not been pushed. This commit represents the status of the working copy from that clone. It unfortunately contains some changes that I did not intend to commit yet, but this seems like the best option at the moment.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 06 Jan 2014 22:54:05 -0800 |
parents | 140af5509ce7 |
children | 2c1679058727 |
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 |
505
b7b7a1cab44a
The local clone on my laptop got messed up and some changes had not been pushed. This commit represents the status of the working copy from that clone. It unfortunately contains some changes that I did not intend to commit yet, but this seems like the best option at the moment.
Michael Pavone <pavone@retrodev.com>
parents:
467
diff
changeset
|
3 This file is part of BlastEm. |
467
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 | |
505
b7b7a1cab44a
The local clone on my laptop got messed up and some changes had not been pushed. This commit represents the status of the working copy from that clone. It unfortunately contains some changes that I did not intend to commit yet, but this seems like the best option at the moment.
Michael Pavone <pavone@retrodev.com>
parents:
467
diff
changeset
|
93 uint8_t headless = 0; |
b7b7a1cab44a
The local clone on my laptop got messed up and some changes had not been pushed. This commit represents the status of the working copy from that clone. It unfortunately contains some changes that I did not intend to commit yet, but this seems like the best option at the moment.
Michael Pavone <pavone@retrodev.com>
parents:
467
diff
changeset
|
94 |
409
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
95 #define CYCLE_LIMIT MCLKS_NTSC/60 |
466 | 96 tern_node * config; |
409
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
97 |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 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
|
99 { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 *current_cycle += cycles; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 psg_run(p_context, *current_cycle); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 ym_run(y_context, *current_cycle); |
466 | 103 |
409
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
104 if (*current_cycle > CYCLE_LIMIT) { |
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
105 *current_cycle -= CYCLE_LIMIT; |
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
106 p_context->cycles -= CYCLE_LIMIT; |
c1bddeadc566
Process events in vgm player so that quitting works
Mike Pavone <pavone@retrodev.com>
parents:
408
diff
changeset
|
107 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
|
108 process_events(); |
408
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 } |
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 int main(int argc, char ** argv) |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
113 { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
114 uint32_t fps = 60; |
466 | 115 config = load_config(argv[0]); |
505
b7b7a1cab44a
The local clone on my laptop got messed up and some changes had not been pushed. This commit represents the status of the working copy from that clone. It unfortunately contains some changes that I did not intend to commit yet, but this seems like the best option at the moment.
Michael Pavone <pavone@retrodev.com>
parents:
467
diff
changeset
|
116 render_init(320, 240, "vgm play", 60, 0, 0); |
466 | 117 |
118 | |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
119 ym2612_context y_context; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
120 ym_init(&y_context, render_sample_rate(), MCLKS_NTSC, MCLKS_PER_YM, render_audio_buffer(), 0); |
466 | 121 |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
122 psg_context p_context; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
123 psg_init(&p_context, render_sample_rate(), MCLKS_NTSC, MCLKS_PER_PSG, render_audio_buffer()); |
466 | 124 |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
125 FILE * f = fopen(argv[1], "rb"); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
126 vgm_header header; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
127 fread(&header, sizeof(header), 1, f); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
128 if (header.version < 0x150 || !header.data_offset) { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
129 header.data_offset = 0xC; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
130 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
131 fseek(f, header.data_offset + 0x34, SEEK_SET); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
132 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
|
133 uint8_t * data = malloc(data_size); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
134 fread(data, 1, data_size, f); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 fclose(f); |
466 | 136 |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 uint32_t mclks_sample = MCLKS_NTSC / 44100; |
466 | 138 |
408
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 uint8_t * end = data + data_size; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 uint8_t * cur = data; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 uint32_t current_cycle = 0; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 while (cur < end) { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 uint8_t cmd = *(cur++); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 switch(cmd) |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
145 { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
146 case CMD_PSG_STEREO: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
147 //ignore for now |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
148 cur++; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
149 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 case CMD_PSG: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
151 psg_write(&p_context, *(cur++)); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
152 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
153 case CMD_YM2612_0: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
154 ym_address_write_part1(&y_context, *(cur++)); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
155 ym_data_write(&y_context, *(cur++)); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
156 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
157 case CMD_YM2612_1: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
158 ym_address_write_part2(&y_context, *(cur++)); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
159 ym_data_write(&y_context, *(cur++)); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
160 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
161 case CMD_WAIT: { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
162 uint32_t wait_time = *(cur++); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
163 wait_time |= *(cur++) << 8; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
164 wait_time *= mclks_sample; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
165 wait(&y_context, &p_context, ¤t_cycle, wait_time); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
166 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
167 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
168 case CMD_WAIT_60: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
169 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
|
170 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
171 case CMD_WAIT_50: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
172 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
|
173 break; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
174 case CMD_END: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
175 return 0; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
176 default: |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
177 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
|
178 uint32_t wait_time = (cmd & 0xF) + 1; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
179 wait_time *= mclks_sample; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
180 wait(&y_context, &p_context, ¤t_cycle, wait_time); |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
181 } else { |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
182 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
|
183 exit(1); |
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 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
186 } |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
187 return 0; |
a13a83934ba3
Add primitive vgm player for testing
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
188 } |