; OPM v0 stream data, stream-independent commands OPM_STREAM_END_FRAME equ 0xFF ; end of frame, next channel OPM_STREAM_END equ 0xFE ; end of stream, stop here or loop to OPM_STREAM_LOOP stream point OPM_STREAM_NOP equ 0xFD ; nop OPM_STREAM_NEW_ORDER equ 0xFC ; nop, marks new order OPM_STREAM_SET_FRAME_RATE equ 0xFB ; word rate (as in opm_header_t::frame_rate) OPM_STREAM_LOOP equ 0xFA ; set loop point here ; delay commands OPM_STREAM_DELAY_INT32 equ 0xF9 ; dword delay OPM_STREAM_DELAY_INT16 equ 0xF8 ; word delay OPM_STREAM_DELAY_INT12 equ 0xD0 ; D0..DF - 0..4095 frames delay (hibyte in low 4 bits of command) OPM_STREAM_DELAY_SHORT equ 0xC0 ; C0..CF - 1..16 frames delay ; back reference OPM_STREAM_BACKREF equ 0xE0 ; E0..EF - word backrefpos (12 bit), byte frames ; OPN control stream commands OPM_CTRL_EXTCH3 equ 0x00 ; 00..7F - ext. CH3 op1-3 frequency OPM_CTRL_TIMER_CSM equ 0x80 ; 80..9F - set timer/CSM/LFO frequency OPM_CTRL_RHYTHM equ 0xA0 ; A0..BF - rhythm control OPM_CTRL_CMD80_REG25 equ (1 << 0) ; OPM_CTRL_CMD80_REG25_BIT equ 0 ; shift value for OPM_CTRL_CMD80_REG25 OPM_CTRL_CMD80_REG24 equ (1 << 1) ; OPM_CTRL_CMD80_REG24_BIT equ 1 ; shift value for OPM_CTRL_CMD80_REG24 OPM_CTRL_CMD80_REG27 equ (1 << 2) ; OPM_CTRL_CMD80_REG27_BIT equ 2 ; shift value for OPM_CTRL_CMD80_REG27 OPM_CTRL_CMD80_REG22 equ (1 << 3) ; OPM_CTRL_CMD80_REG22_BIT equ 3 ; shift value for OPM_CTRL_CMD80_REG22 OPM_CTRL_CMD80_EOF equ (1 << 4) ; OPM_CTRL_CMD80_EOF_BIT equ 4 ; shift value for OPM_CTRL_CMD80_EOF OPM_CTRL_EXTCH3_OP1_HIGH equ (1 << 0) ; OPM_CTRL_EXTCH3_OP1_HIGH_BIT equ 0 ; shift value for OPM_CTRL_EXTCH3_OP1_HIGH OPM_CTRL_EXTCH3_OP1_LOW equ (1 << 1) ; OPM_CTRL_EXTCH3_OP1_LOW_BIT equ 1 ; shift value for OPM_CTRL_EXTCH3_OP1_LOW OPM_CTRL_EXTCH3_OP2_HIGH equ (1 << 2) ; OPM_CTRL_EXTCH3_OP2_HIGH_BIT equ 2 ; shift value for OPM_CTRL_EXTCH3_OP2_HIGH OPM_CTRL_EXTCH3_OP2_LOW equ (1 << 3) ; OPM_CTRL_EXTCH3_OP2_LOW_BIT equ 3 ; shift value for OPM_CTRL_EXTCH3_OP2_LOW OPM_CTRL_EXTCH3_OP3_HIGH equ (1 << 4) ; OPM_CTRL_EXTCH3_OP3_HIGH_BIT equ 4 ; shift value for OPM_CTRL_EXTCH3_OP3_HIGH OPM_CTRL_EXTCH3_OP3_LOW equ (1 << 5) ; OPM_CTRL_EXTCH3_OP3_LOW_BIT equ 5 ; shift value for OPM_CTRL_EXTCH3_OP3_LOW OPM_CTRL_EXTCH3_EOF equ (1 << 6) ; OPM_CTRL_EXTCH3_EOF_BIT equ 6 ; shift value for OPM_CTRL_EXTCH3_EOF OPM_CTRL_CMDA0_REG_MASK equ (0x0F << 0) ; OPM_CTRL_CMDA0_REG_MASK_BIT equ 0 ; shift value for OPM_CTRL_CMDA0_REG_MASK OPM_CTRL_CMDA0_EOF equ (1 << 4) ; OPM_CTRL_CMDA0_EOF_BIT equ 4 ; shift value for OPM_CTRL_CMDA0_EOF ; OPN FM stream commands OPM_FM_ADSR equ 0x00 ; 00..3F - set ADSR OPM_FM_MUL_TL_EG equ 0x40 ; 40..7F - set MULT/TL/SSG-EG OPM_FM_FREQ_FB_PAN equ 0x80 ; 80..9F - set frequency/feedback/panning OPM_FM_KEY equ 0xA0 ; A0..BF - key on/off OPM_FM_CMD00_REG50 equ (1 << 0) ; OPM_FM_CMD00_REG50_BIT equ 0 ; shift value for OPM_FM_CMD00_REG50 OPM_FM_CMD00_REG60 equ (1 << 1) ; OPM_FM_CMD00_REG60_BIT equ 1 ; shift value for OPM_FM_CMD00_REG60 OPM_FM_CMD00_REG70 equ (1 << 2) ; OPM_FM_CMD00_REG70_BIT equ 2 ; shift value for OPM_FM_CMD00_REG70 OPM_FM_CMD00_REG80 equ (1 << 3) ; OPM_FM_CMD00_REG80_BIT equ 3 ; shift value for OPM_FM_CMD00_REG80 OPM_FM_CMD00_OP_MASK equ (3 << 4) ; OPM_FM_CMD00_OP_MASK_BIT equ 4 ; shift value for OPM_FM_CMD00_OP_MASK OPM_FM_CMD40_REG30 equ (1 << 0) ; OPM_FM_CMD40_REG30_BIT equ 0 ; shift value for OPM_FM_CMD40_REG30 OPM_FM_CMD40_REG40 equ (1 << 1) ; OPM_FM_CMD40_REG40_BIT equ 1 ; shift value for OPM_FM_CMD40_REG40 OPM_FM_CMD40_REG90 equ (1 << 2) ; OPM_FM_CMD40_REG90_BIT equ 2 ; shift value for OPM_FM_CMD40_REG90 OPM_FM_CMD40_EOF equ (1 << 3) ; OPM_FM_CMD40_EOF_BIT equ 3 ; shift value for OPM_FM_CMD40_EOF OPM_FM_CMD40_OP_SHIFT equ 4 ; OPM_FM_CMD40_OP_MASK equ (3 << 4) ; OPM_FM_CMD40_OP_MASK_BIT equ 4 ; shift value for OPM_FM_CMD40_OP_MASK OPM_FM_CMD80_REGA4 equ (1 << 0) ; OPM_FM_CMD80_REGA4_BIT equ 0 ; shift value for OPM_FM_CMD80_REGA4 OPM_FM_CMD80_REGA0 equ (1 << 1) ; OPM_FM_CMD80_REGA0_BIT equ 1 ; shift value for OPM_FM_CMD80_REGA0 OPM_FM_CMD80_REGB0 equ (1 << 2) ; OPM_FM_CMD80_REGB0_BIT equ 2 ; shift value for OPM_FM_CMD80_REGB0 OPM_FM_CMD80_REGB4 equ (1 << 3) ; OPM_FM_CMD80_REGB4_BIT equ 3 ; shift value for OPM_FM_CMD80_REGB4 OPM_FM_CMD80_EOF equ (1 << 4) ; OPM_FM_CMD80_EOF_BIT equ 4 ; shift value for OPM_FM_CMD80_EOF OPM_FM_CMDA0_OP_SHIFT equ 0 ; OPM_FM_CMDA0_OP_MASK equ (0x0F << 0) ; OPM_FM_CMDA0_OP_MASK_BIT equ 0 ; shift value for OPM_FM_CMDA0_OP_MASK OPM_FM_CMDA0_EOF equ (1 << 4) ; OPM_FM_CMDA0_EOF_BIT equ 4 ; shift value for OPM_FM_CMDA0_EOF ; OPNA rhythm channel stream OPN_RHYTHM_KEY equ 0x00 ; 00..7F - key on OPN_RHYTHM_REGS1 equ 0x80 ; 80..9F - write reg set 1 OPN_RHYTHM_REGS2 equ 0xA0 ; A0..BF - write reg set 2 OPN_RHYTHM_KEY_EOF equ (1 << 6) ; OPN_RHYTHM_KEY_EOF_BIT equ 6 ; shift value for OPN_RHYTHM_KEY_EOF OPN_RHYTHM_CMD80_REG10 equ (1 << 0) ; OPN_RHYTHM_CMD80_REG10_BIT equ 0 ; shift value for OPN_RHYTHM_CMD80_REG10 OPN_RHYTHM_CMD80_REG11 equ (1 << 1) ; OPN_RHYTHM_CMD80_REG11_BIT equ 1 ; shift value for OPN_RHYTHM_CMD80_REG11 OPN_RHYTHM_CMD80_REG18 equ (1 << 2) ; OPN_RHYTHM_CMD80_REG18_BIT equ 2 ; shift value for OPN_RHYTHM_CMD80_REG18 OPN_RHYTHM_CMD80_REG19 equ (1 << 3) ; OPN_RHYTHM_CMD80_REG19_BIT equ 3 ; shift value for OPN_RHYTHM_CMD80_REG19 OPN_RHYTHM_CMDA0_REG1A equ (1 << 0) ; OPN_RHYTHM_CMDA0_REG1A_BIT equ 0 ; shift value for OPN_RHYTHM_CMDA0_REG1A OPN_RHYTHM_CMDA0_REG1B equ (1 << 1) ; OPN_RHYTHM_CMDA0_REG1B_BIT equ 1 ; shift value for OPN_RHYTHM_CMDA0_REG1B OPN_RHYTHM_CMDA0_REG1C equ (1 << 2) ; OPN_RHYTHM_CMDA0_REG1C_BIT equ 2 ; shift value for OPN_RHYTHM_CMDA0_REG1C OPN_RHYTHM_CMDA0_REG1D equ (1 << 3) ; OPN_RHYTHM_CMDA0_REG1D_BIT equ 3 ; shift value for OPN_RHYTHM_CMDA0_REG1D OPN_RHYTHM_REGS_EOF equ (1 << 4) ; OPN_RHYTHM_REGS_EOF_BIT equ 4 ; shift value for OPN_RHYTHM_REGS_EOF ; OPN SSG tone stream commands (shared with AY chip type) OPM_AYTONE_REGS equ 0x00 ; 00..7F - set volume and period low OPM_AYTONE_PERIOD equ 0x80 ; 80..BF - set period OPM_AYTONE_MASK equ 0xF0 ; F0..F7 - set tone/noise mask OPM_AYTONE_CMD00_VOLUME_MASK equ (0x1F << 0) ; OPM_AYTONE_CMD00_VOLUME_MASK_BIT equ 0 ; shift value for OPM_AYTONE_CMD00_VOLUME_MASK OPM_AYTONE_CMD00_PERIOD_LOW equ (1 << 5) ; OPM_AYTONE_CMD00_PERIOD_LOW_BIT equ 5 ; shift value for OPM_AYTONE_CMD00_PERIOD_LOW OPM_AYTONE_CMD00_EOF equ (1 << 6) ; OPM_AYTONE_CMD00_EOF_BIT equ 6 ; shift value for OPM_AYTONE_CMD00_EOF OPM_AYTONE_CMD80_PERIOD_HIGH equ (0xF << 0) ; OPM_AYTONE_CMD80_PERIOD_HIGH_BIT equ 0 ; shift value for OPM_AYTONE_CMD80_PERIOD_HIGH OPM_AYTONE_CMD80_PERIOD_LOW equ (1 << 4) ; OPM_AYTONE_CMD80_PERIOD_LOW_BIT equ 4 ; shift value for OPM_AYTONE_CMD80_PERIOD_LOW OPM_AYTONE_CMD80_EOF equ (1 << 5) ; OPM_AYTONE_CMD80_EOF_BIT equ 5 ; shift value for OPM_AYTONE_CMD80_EOF OPM_AYTONE_MASK_TONE equ (1 << 0) ; OPM_AYTONE_MASK_TONE_BIT equ 0 ; shift value for OPM_AYTONE_MASK_TONE OPM_AYTONE_MASK_NOISE equ (1 << 1) ; OPM_AYTONE_MASK_NOISE_BIT equ 1 ; shift value for OPM_AYTONE_MASK_NOISE OPM_AYTONE_MASK_EOF equ (1 << 2) ; OPM_AYTONE_MASK_EOF_BIT equ 2 ; shift value for OPM_AYTONE_MASK_EOF ; OPN SSG envelope/noise stream commands (shared with AY chip type) OPM_AYENV_REGS equ 0x00 ; 00..7F - set noise and period low OPM_AYENV_ENVTYPE equ 0x80 ; 80..BF - set env type and period low OPM_AYENV_PERIOD_FULL equ 0xF0 ; F0..F7 - set full envelope period OPM_AYENV_CMD00_NOISE_MASK equ (0x1F << 0) ; OPM_AYENV_CMD00_NOISE_MASK_BIT equ 0 ; shift value for OPM_AYENV_CMD00_NOISE_MASK OPM_AYENV_CMD00_PERIOD_LOW equ (1 << 5) ; OPM_AYENV_CMD00_PERIOD_LOW_BIT equ 5 ; shift value for OPM_AYENV_CMD00_PERIOD_LOW OPM_AYENV_CMD00_EOF equ (1 << 6) ; OPM_AYENV_CMD00_EOF_BIT equ 6 ; shift value for OPM_AYENV_CMD00_EOF OPM_AYENV_CMD80_ENV_TYPE equ (0xF << 0) ; OPM_AYENV_CMD80_ENV_TYPE_BIT equ 0 ; shift value for OPM_AYENV_CMD80_ENV_TYPE OPM_AYENV_CMD80_PERIOD_LOW equ (1 << 4) ; OPM_AYENV_CMD80_PERIOD_LOW_BIT equ 4 ; shift value for OPM_AYENV_CMD80_PERIOD_LOW OPM_AYENV_CMD80_EOF equ (1 << 5) ; OPM_AYENV_CMD80_EOF_BIT equ 5 ; shift value for OPM_AYENV_CMD80_EOF OPM_AYENV_CMDF0_PERIOD_LOW equ (1 << 0) ; OPM_AYENV_CMDF0_PERIOD_LOW_BIT equ 0 ; shift value for OPM_AYENV_CMDF0_PERIOD_LOW OPM_AYENV_CMDF0_PERIOD_HIGH equ (1 << 1) ; OPM_AYENV_CMDF0_PERIOD_HIGH_BIT equ 1 ; shift value for OPM_AYENV_CMDF0_PERIOD_HIGH OPM_AYENV_CMDF0_EOF equ (1 << 2) ; OPM_AYENV_CMDF0_EOF_BIT equ 2 ; shift value for OPM_AYENV_CMDF0_EOF