Mercurial > repos > blastem
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); |