comparison ym2612.h @ 407:c3abc4ada43d

Add support for logging YM2612 channels to WAVE files
author Mike Pavone <pavone@retrodev.com>
date Sun, 16 Jun 2013 17:57:57 -0700
parents f0a3f86595ae
children baf4688901f2
comparison
equal deleted inserted replaced
406:b1bc1947d949 407:c3abc4ada43d
1 #ifndef YM2612_H_ 1 #ifndef YM2612_H_
2 #define YM2612_H_ 2 #define YM2612_H_
3 3
4 #include <stdint.h> 4 #include <stdint.h>
5 #include <stdio.h>
5 6
6 #define NUM_PART_REGS (0xB7-0x30) 7 #define NUM_PART_REGS (0xB7-0x30)
7 #define NUM_CHANNELS 6 8 #define NUM_CHANNELS 6
8 #define NUM_OPERATORS (4*NUM_CHANNELS) 9 #define NUM_OPERATORS (4*NUM_CHANNELS)
10
11 #define YM_OPT_WAVE_LOG 1
9 12
10 typedef struct { 13 typedef struct {
11 uint32_t phase_inc; 14 uint32_t phase_inc;
12 uint32_t phase_counter; 15 uint32_t phase_counter;
13 uint16_t envelope; 16 uint16_t envelope;
20 uint8_t detune; 23 uint8_t detune;
21 uint8_t env_phase; 24 uint8_t env_phase;
22 } ym_operator; 25 } ym_operator;
23 26
24 typedef struct { 27 typedef struct {
28 FILE * logfile;
25 uint16_t fnum; 29 uint16_t fnum;
26 int16_t output; 30 int16_t output;
27 uint8_t block_fnum_latch; 31 uint8_t block_fnum_latch;
28 uint8_t block; 32 uint8_t block;
29 uint8_t keycode; 33 uint8_t keycode;
68 uint8_t status; 72 uint8_t status;
69 uint8_t selected_reg; 73 uint8_t selected_reg;
70 uint8_t selected_part; 74 uint8_t selected_part;
71 } ym2612_context; 75 } ym2612_context;
72 76
73 void ym_init(ym2612_context * context, uint32_t sample_rate, uint32_t master_clock, uint32_t clock_div, uint32_t sample_limit); 77 void ym_init(ym2612_context * context, uint32_t sample_rate, uint32_t master_clock, uint32_t clock_div, uint32_t sample_limit, uint32_t options);
74 void ym_run(ym2612_context * context, uint32_t to_cycle); 78 void ym_run(ym2612_context * context, uint32_t to_cycle);
75 void ym_address_write_part1(ym2612_context * context, uint8_t address); 79 void ym_address_write_part1(ym2612_context * context, uint8_t address);
76 void ym_address_write_part2(ym2612_context * context, uint8_t address); 80 void ym_address_write_part2(ym2612_context * context, uint8_t address);
77 void ym_data_write(ym2612_context * context, uint8_t value); 81 void ym_data_write(ym2612_context * context, uint8_t value);
78 uint8_t ym_read_status(ym2612_context * context); 82 uint8_t ym_read_status(ym2612_context * context);