pavone@862: #ifndef VGM_H_ pavone@862: #define VGM_H_ pavone@862: pavone@862: #pragma pack(push, 1) pavone@862: typedef struct { pavone@862: char ident[4]; pavone@862: uint32_t eof_offset; pavone@862: uint32_t version; pavone@862: uint32_t sn76489_clk; pavone@862: uint32_t ym2413_clk; pavone@862: uint32_t gd3_offset; pavone@862: uint32_t num_samples; pavone@862: uint32_t loop_offset; pavone@862: uint32_t loop_samples; pavone@862: uint32_t rate; pavone@862: uint16_t sn76489_fb; pavone@862: uint8_t sn76489_shift; pavone@862: uint8_t sn76489_flags; pavone@862: uint32_t ym2612_clk; pavone@862: uint32_t ym2151_clk; pavone@862: uint32_t data_offset; pavone@862: uint32_t sega_pcm_clk; pavone@862: uint32_t sega_pcm_reg; pavone@862: } vgm_header; pavone@862: pavone@862: enum { pavone@862: CMD_PSG_STEREO = 0x4F, pavone@862: CMD_PSG, pavone@862: CMD_YM2413, pavone@862: CMD_YM2612_0, pavone@862: CMD_YM2612_1, pavone@862: CMD_YM2151, pavone@862: CMD_YM2203, pavone@862: CMD_YM2608_0, pavone@862: CMD_YM2608_1, pavone@862: CMD_YM2610_0, pavone@862: CMD_YM2610_1, pavone@862: CMD_YM3812, pavone@862: CMD_YM3526, pavone@862: CMD_Y8950, pavone@862: CMD_YMZ280B, pavone@862: CMD_YMF262_0, pavone@862: CMD_YMF262_1, pavone@862: CMD_WAIT = 0x61, pavone@862: CMD_WAIT_60, pavone@862: CMD_WAIT_50, pavone@862: CMD_END = 0x66, pavone@862: CMD_DATA, pavone@862: CMD_PCM_WRITE, pavone@862: CMD_WAIT_SHORT = 0x70, pavone@862: CMD_YM2612_DAC = 0x80, pavone@862: CMD_DAC_STREAM_SETUP = 0x90, pavone@862: CMD_DAC_STREAM_DATA, pavone@862: CMD_DAC_STREAM_FREQ, pavone@862: CMD_DAC_STREAM_START, pavone@862: CMD_DAC_STREAM_STOP, pavone@862: CMD_DAC_STREAM_STARTFAST, pavone@862: CMD_DATA_SEEK = 0xE0 pavone@862: }; pavone@862: pavone@862: enum { pavone@862: DATA_YM2612_PCM = 0 pavone@862: }; pavone@862: pavone@862: #pragma pack(pop) pavone@862: pavone@862: typedef struct { pavone@862: struct data_block *next; pavone@862: uint8_t *data; pavone@862: uint32_t size; pavone@862: uint8_t type; pavone@862: } data_block; pavone@862: pavone@862: #endif //VGM_H_