Sona 0.50 Source

Sona 0.50/src-z80/define_sonaop.z80

;****************************************************************************
; 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