comparison ym2612.h @ 362:b7c3facee762

YM2612 WIP update
author Mike Pavone <pavone@retrodev.com>
date Mon, 27 May 2013 22:19:11 -0700
parents cc39629e8d06
children 62177cc39049
comparison
equal deleted inserted replaced
361:946ae3749260 362:b7c3facee762
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 5
6 #define NUM_SHARED_REGS (0x30-0x21)
7 #define NUM_PART_REGS (0xB7-0x30) 6 #define NUM_PART_REGS (0xB7-0x30)
8 #define NUM_OPERATORS (4*6) 7 #define NUM_CHANNELS 6
8 #define NUM_OPERATORS (4*NUM_CHANNELS)
9 9
10 typedef struct { 10 typedef struct {
11 uint32_t current_cycle; 11 uint32_t phase_inc;
12 uint32_t write_cycle; 12 uint32_t phase_counter;
13 uint8_t *selected_reg; 13 uint16_t envelope;
14 uint32_t phase_inc[NUM_OPERATORS]; 14 uint16_t output;
15 uint32_t phase_counter[NUM_OPERATORS]; 15 uint16_t total_level;
16 uint16_t envelope[NUM_OPERATORS]; 16 uint16_t sustain_level;
17 uint16_t op_out[NUM_OPERATORS]; 17 uint8_t rates[4];
18 uint16_t channel_out[6]; 18 uint8_t key_scaling;
19 uint16_t timer_a; 19 uint8_t multiple;
20 uint8_t env_phase[NUM_OPERATORS]; 20 uint8_t detune;
21 uint8_t keycode[NUM_OPERATORS]; 21 uint8_t env_phase;
22 uint8_t timer_b; 22 } ym_operator;
23 uint8_t reg_num; 23
24 uint8_t status; 24 typedef struct {
25 uint8_t part1_regs[NUM_SHARED_REGS+NUM_PART_REGS]; 25 uint16_t fnum;
26 uint8_t part2_regs[NUM_PART_REGS]; 26 int16_t output;
27 uint8_t block_fnum_latch;
28 uint8_t block;
29 uint8_t keycode;
30 uint8_t algorithm;
31 uint8_t feedback;
32 uint8_t ams;
33 uint8_t pms;
34 uint8_t lr;
35 } ym_channel;
36
37 typedef struct {
38 uint32_t current_cycle;
39 uint32_t write_cycle;
40 ym_operator operators[NUM_OPERATORS];
41 ym_channel channels[NUM_CHANNELS];
42 uint16_t timer_a;
43 uint16_t timer_a_load;
44 uint8_t timer_b;
45 uint8_t timer_b_load;
46 uint8_t timer_control;
47 uint8_t dac_enable;
48 uint8_t status;
49 uint8_t selected_reg;
50 uint8_t selected_part;
27 } ym2612_context; 51 } ym2612_context;
28 52
29 void ym_init(ym2612_context * context); 53 void ym_init(ym2612_context * context);
30 void ym_run(ym2612_context * context, uint32_t to_cycle); 54 void ym_run(ym2612_context * context, uint32_t to_cycle);
31 void ym_address_write_part1(ym2612_context * context, uint8_t address); 55 void ym_address_write_part1(ym2612_context * context, uint8_t address);