;****************************************************************************
; Stream opcodes
;****************************************************************************
SONAOP_LOAD_FM1: equ $00 ; Load instrument for FM1
SONAOP_LOAD_FM2: equ $01 ; Load instrument for FM2
SONAOP_LOAD_FM3: equ $02 ; Load instrument for FM3 (normal)
SONAOP_LOAD_FM3SP: equ $03 ; Load instrument for FM3 (special)
SONAOP_LOAD_FM4: equ $04 ; Load instrument for FM4
SONAOP_LOAD_FM5: equ $05 ; Load instrument for FM5
SONAOP_LOAD_FM6: equ $06 ; Load instrument for FM6
SONAOP_LOAD_PSG1: equ $08 ; Load instrument for PSG1
SONAOP_LOAD_PSG2: equ $09 ; Load instrument for PSG2
SONAOP_LOAD_PSG3: equ $0A ; Load instrument for PSG3
SONAOP_LOAD_PSG4: equ $0B ; Load instrument for PSG4
SONAOP_KEYON_FM1: equ $10 ; Key-on for FM1
SONAOP_KEYON_FM2: equ $11 ; Key-on for FM2
SONAOP_KEYON_FM3: equ $12 ; Key-on for FM3 (normal)
SONAOP_KEYON_FM3SP: equ $13 ; Key-on for FM3 (special)
SONAOP_KEYON_FM4: equ $14 ; Key-on for FM4
SONAOP_KEYON_FM5: equ $15 ; Key-on for FM5
SONAOP_KEYON_FM6: equ $16 ; Key-on for FM6
SONAOP_KEYON_PSG1: equ $18 ; Key-on for PSG1
SONAOP_KEYON_PSG2: equ $19 ; Key-on for PSG2
SONAOP_KEYON_PSG3: equ $1A ; Key-on for PSG3
SONAOP_KEYON_PSG4: equ $1B ; Key-on for PSG4
SONAOP_KEYON_PCM1: equ $1E ; Key-on for PCM1
SONAOP_KEYON_PCM2: equ $1F ; Key-on for PCM2
SONAOP_KEYOFF_FM1: equ $20 ; Key-off for FM1
SONAOP_KEYOFF_FM2: equ $21 ; Key-off for FM2
SONAOP_KEYOFF_FM3: equ $22 ; Key-off for FM3 (normal)
SONAOP_KEYOFF_FM3SP: equ $23 ; Key-off for FM3 (special)
SONAOP_KEYOFF_FM4: equ $24 ; Key-off for FM4
SONAOP_KEYOFF_FM5: equ $25 ; Key-off for FM5
SONAOP_KEYOFF_FM6: equ $26 ; Key-off for FM6
SONAOP_KEYOFF_PSG1: equ $28 ; Key-off for PSG1
SONAOP_KEYOFF_PSG2: equ $29 ; Key-off for PSG2
SONAOP_KEYOFF_PSG3: equ $2A ; Key-off for PSG3
SONAOP_KEYOFF_PSG4: equ $2B ; Key-off for PSG4
SONAOP_KEYOFF_PCM1: equ $2E ; Key-off for PCM1
SONAOP_KEYOFF_PCM2: equ $2F ; Key-off for PCM2
SONAOP_PITCH_FM1: equ $30 ; Set pitch for FM1
SONAOP_PITCH_FM2: equ $31 ; Set pitch for FM2
SONAOP_PITCH_FM3: equ $32 ; Set pitch for FM3 (normal)
SONAOP_PITCH_FM3SP: equ $33 ; Set pitch for FM3 (special)
SONAOP_PITCH_FM4: equ $34 ; Set pitch for FM4
SONAOP_PITCH_FM5: equ $35 ; Set pitch for FM5
SONAOP_PITCH_FM6: equ $36 ; Set pitch for FM6
SONAOP_PITCH_PSG1: equ $38 ; Set pitch for PSG1
SONAOP_PITCH_PSG2: equ $39 ; Set pitch for PSG2
SONAOP_PITCH_PSG3: equ $3A ; Set pitch for PSG3
SONAOP_PITCH_PSG4: equ $3B ; Set pitch for PSG4
SONAOP_VOLUME_FM1: equ $40 ; Set volume for FM1
SONAOP_VOLUME_FM2: equ $41 ; Set volume for FM2
SONAOP_VOLUME_FM3: equ $42 ; Set volume for FM3 (normal)
SONAOP_VOLUME_FM3SP: equ $43 ; Set volume for FM3 (special)
SONAOP_VOLUME_FM4: equ $44 ; Set volume for FM4
SONAOP_VOLUME_FM5: equ $45 ; Set volume for FM5
SONAOP_VOLUME_FM6: equ $46 ; Set volume for FM6
SONAOP_VOLUME_PSG1: equ $48 ; Set volume for PSG1
SONAOP_VOLUME_PSG2: equ $49 ; Set volume for PSG2
SONAOP_VOLUME_PSG3: equ $4A ; Set volume for PSG3
SONAOP_VOLUME_PSG4: equ $4B ; Set volume for PSG4
SONAOP_PAN_FM1: equ $50 ; Set panning for FM1
SONAOP_PAN_FM2: equ $51 ; Set panning for FM2
SONAOP_PAN_FM3: equ $52 ; Set panning for FM3 (normal)
SONAOP_PAN_FM3SP: equ $53 ; Set panning for FM3 (special)
SONAOP_PAN_FM4: equ $54 ; Set panning for FM4
SONAOP_PAN_FM5: equ $55 ; Set panning for FM5
SONAOP_PAN_FM6: equ $56 ; Set panning for FM6
SONAOP_PMSAMS_FM1: equ $58 ; Set PMS/AMS for FM1
SONAOP_PMSAMS_FM2: equ $59 ; Set PMS/AMS for FM2
SONAOP_PMSAMS_FM3: equ $5A ; Set PMS/AMS for FM3 (normal)
SONAOP_PMSAMS_FM3SP: equ $5B ; Set PMS/AMS for FM3 (special)
SONAOP_PMSAMS_FM4: equ $5C ; Set PMS/AMS for FM4
SONAOP_PMSAMS_FM5: equ $5D ; Set PMS/AMS for FM5
SONAOP_PMSAMS_FM6: equ $5E ; Set PMS/AMS for FM6
SONAOP_VMMOVE_IMM: equ $C0 ; var[dest] ← src
SONAOP_VMMOVE_VAR: equ $C1 ; var[dest] ← var[src]
SONAOP_VMADD_IMM: equ $C2 ; var[dest] ← var[dest] + src
SONAOP_VMADD_VAR: equ $C3 ; var[dest] ← var[dest] + var[src]
SONAOP_VMSUB_IMM: equ $C4 ; var[dest] ← var[dest] - src
SONAOP_VMSUB_VAR: equ $C5 ; var[dest] ← var[dest] - var[src]
SONAOP_VMAND_IMM: equ $C6 ; var[dest] ← var[dest] & src
SONAOP_VMAND_VAR: equ $C7 ; var[dest] ← var[dest] & var[src]
SONAOP_VMOR_IMM: equ $C8 ; var[dest] ← var[dest] | src
SONAOP_VMOR_VAR: equ $C9 ; var[dest] ← var[dest] | var[src]
SONAOP_VMXOR_IMM: equ $CA ; var[dest] ← var[dest] ^ src
SONAOP_VMXOR_VAR: equ $CB ; var[dest] ← var[dest] ^ var[src]
SONAOP_VMNEG: equ $CC ; var[dest] ← -var[dest]
SONAOP_VMNOT: equ $CD ; var[dest] ← ~var[dest]
SONAOP_VMINC: equ $CE ; var[dest] ← var[dest] + 1
SONAOP_VMDEC: equ $CF ; var[dest] ← var[dest] - 1
SONAOP_QDELAY_1: equ $D0 ; Wait 1 tick
SONAOP_QDELAY_2: equ $D1 ; Wait 2 ticks
SONAOP_QDELAY_3: equ $D2 ; Wait 3 ticks
SONAOP_QDELAY_4: equ $D3 ; Wait 4 ticks
SONAOP_QDELAY_5: equ $D4 ; Wait 5 ticks
SONAOP_QDELAY_6: equ $D5 ; Wait 6 ticks
SONAOP_QDELAY_7: equ $D6 ; Wait 7 ticks
SONAOP_QDELAY_8: equ $D7 ; Wait 8 ticks
SONAOP_QDELAY_9: equ $D8 ; Wait 9 ticks
SONAOP_QDELAY_10: equ $D9 ; Wait 10 ticks
SONAOP_QDELAY_11: equ $DA ; Wait 11 ticks
SONAOP_QDELAY_12: equ $DB ; Wait 12 ticks
SONAOP_QDELAY_13: equ $DC ; Wait 13 ticks
SONAOP_QDELAY_14: equ $DD ; Wait 14 ticks
SONAOP_QDELAY_15: equ $DE ; Wait 15 ticks
SONAOP_QDELAY_16: equ $DF ; Wait 16 ticks
SONAOP_LOCK_FM1: equ $E0 ; Request to lock FM1
SONAOP_LOCK_FM2: equ $E1 ; Request to lock FM2
SONAOP_LOCK_FM3: equ $E2 ; Request to lock FM3
SONAOP_LOCK_FM3SP: equ $E3 ; Request to lock FM3
SONAOP_LOCK_FM4: equ $E4 ; Request to lock FM4
SONAOP_LOCK_FM5: equ $E5 ; Request to lock FM5
SONAOP_LOCK_FM6: equ $E6 ; Request to lock FM6
SONAOP_LOCK_PSG1: equ $E8 ; Request to lock PSG1
SONAOP_LOCK_PSG2: equ $E9 ; Request to lock PSG2
SONAOP_LOCK_PSG3: equ $EA ; Request to lock PSG3
SONAOP_LOCK_PSG4: equ $EB ; Request to lock PSG4
SONAOP_LOCK_PCM1: equ $EE ; Request to lock PCM1
SONAOP_LOCK_PCM2: equ $EF ; Request to lock PCM2
SONAOP_SUBSTREAM: equ $F5 ; Set up a substream
SONAOP_REPLINSTR: equ $F6 ; Replace instrument with stream data
SONAOP_VARARG: equ $F7 ; Arguments come from VM variables
SONAOP_YMREG1: equ $F8 ; Direct YM2612 write (bank 0)
SONAOP_YMREG2: equ $F9 ; Direct YM2612 write (bank 1)
SONAOP_SETSPEED: equ $FA ; Set stream speed
SONAOP_LFO: equ $FB ; Set LFO mode
SONAOP_SETLOOP: equ $FC ; Set loop point
SONAOP_GOTOLOOP: equ $FD ; Go to loop point
SONAOP_DELAY: equ $FE ; Wait ## ticks
SONAOP_END: equ $FF ; End of stream