annotate vgmplay.c @ 491:193ca779988e opengl

Close OpenGL feature branch
author Mike Pavone <pavone@retrodev.com>
date Sun, 27 Oct 2013 22:07:43 -0700
parents 140af5509ce7
children b7b7a1cab44a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
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
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
81 void handle_joydown(int joystick, int button)
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
82 {
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
83 }
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
84
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
85 void handle_joyup(int joystick, int button)
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
86 {
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
87 }
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
88
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
89 void handle_joy_dpad(int joystick, int dpadnum, uint8_t value)
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
90 {
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
91 }
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
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
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
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
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
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
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
113 config = load_config(argv[0]);
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
114 render_init(320, 240, "vgm play", 60, 0);
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
115
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
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
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
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
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
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
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
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
bc9e0829ffc7 Fix vgmplay
Mike Pavone <pavone@retrodev.com>
parents: 409
diff changeset
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, &current_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, &current_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, &current_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, &current_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 }