Mercurial > repos > blastem
diff 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 |
line wrap: on
line diff
--- a/ym2612.h Mon May 27 20:56:02 2013 -0700 +++ b/ym2612.h Mon May 27 22:19:11 2013 -0700 @@ -3,27 +3,51 @@ #include <stdint.h> -#define NUM_SHARED_REGS (0x30-0x21) #define NUM_PART_REGS (0xB7-0x30) -#define NUM_OPERATORS (4*6) +#define NUM_CHANNELS 6 +#define NUM_OPERATORS (4*NUM_CHANNELS) + +typedef struct { + uint32_t phase_inc; + uint32_t phase_counter; + uint16_t envelope; + uint16_t output; + uint16_t total_level; + uint16_t sustain_level; + uint8_t rates[4]; + uint8_t key_scaling; + uint8_t multiple; + uint8_t detune; + uint8_t env_phase; +} ym_operator; typedef struct { - uint32_t current_cycle; - uint32_t write_cycle; - uint8_t *selected_reg; - uint32_t phase_inc[NUM_OPERATORS]; - uint32_t phase_counter[NUM_OPERATORS]; - uint16_t envelope[NUM_OPERATORS]; - uint16_t op_out[NUM_OPERATORS]; - uint16_t channel_out[6]; - uint16_t timer_a; - uint8_t env_phase[NUM_OPERATORS]; - uint8_t keycode[NUM_OPERATORS]; - uint8_t timer_b; - uint8_t reg_num; - uint8_t status; - uint8_t part1_regs[NUM_SHARED_REGS+NUM_PART_REGS]; - uint8_t part2_regs[NUM_PART_REGS]; + uint16_t fnum; + int16_t output; + uint8_t block_fnum_latch; + uint8_t block; + uint8_t keycode; + uint8_t algorithm; + uint8_t feedback; + uint8_t ams; + uint8_t pms; + uint8_t lr; +} ym_channel; + +typedef struct { + uint32_t current_cycle; + uint32_t write_cycle; + ym_operator operators[NUM_OPERATORS]; + ym_channel channels[NUM_CHANNELS]; + uint16_t timer_a; + uint16_t timer_a_load; + uint8_t timer_b; + uint8_t timer_b_load; + uint8_t timer_control; + uint8_t dac_enable; + uint8_t status; + uint8_t selected_reg; + uint8_t selected_part; } ym2612_context; void ym_init(ym2612_context * context);