Change LOCALPORT and GLOBALPORT macros so that SU_SEND commands are easier to parse.

The new format is to give either 5 or 6 parameters to SU_SEND, corresponding to local and global send, respectively. For example, a global send:
        SU_SEND     MONO,AMOUNT(128),VOICE(2),UNIT(0),PORT(1),FLAGS(SEND_POP)

The SU_SEND macro does the address packing into word.
This commit is contained in:
Veikko Sariola 2020-11-04 23:11:51 +02:00
parent 4eaa54ecee
commit d99cfd92d9
24 changed files with 59 additions and 49 deletions

View File

@ -99,23 +99,33 @@ endstruc
%endif
%endmacro
%macro SU_SEND 3
%macro SU_SEND 5 ; local send (params: STEREO, AMOUNT, UNIT, PORT, FLAGS)
db %2
dw %3
dw ((%3+1)*su_unit.size + su_unit.ports)/4 + %4 + %5
USE_SEND
%xdefine CMDS CMDS SEND_ID + %1,
%if %1 == STEREO
%define INCLUDE_STEREO_SEND
%endif
%if (%3) & SEND_GLOBAL == SEND_GLOBAL
%define INCLUDE_GLOBAL_SEND
%endif
%endmacro
%macro SU_SEND 6 ; global send (params: STEREO, AMOUNT, VOICE, UNIT, PORT, FLAGS)
db %2
dw SEND_GLOBAL + (su_synthworkspace.voices+%3*su_voice.size+su_voice.workspace+%4*su_unit.size + su_unit.ports)/4 + %5 + %6
USE_SEND
%xdefine CMDS CMDS SEND_ID + %1,
%if %1 == STEREO
%define INCLUDE_STEREO_SEND
%endif
%define INCLUDE_GLOBAL_SEND
%endmacro
%define VOICE(val) val
%define UNIT(val) val
%define PORT(val) val
%define AMOUNT(val) val
%define LOCALPORT(unit,port) ((unit+1)*su_unit.size + su_unit.ports)/4 + port
%define GLOBALPORT(voice,unit,port) SEND_GLOBAL + (su_synthworkspace.voices+voice*su_voice.size+su_voice.workspace+unit*su_unit.size + su_unit.ports)/4 + port
%define OUTPORT 0
%define NONE 0
%define SEND_POP 0x8000
%define SEND_GLOBAL 0x4000

View File

@ -19,8 +19,8 @@ BEGIN_PATCH
SU_OSCILLAT MONO,TRANSPOSE(88),DETUNE(64),PHASE(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(TRISAW)
SU_OSCILLAT MONO,TRANSPOSE(88),DETUNE(64),PHASE(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(TRISAW)
SU_MULP STEREO
SU_SEND MONO,AMOUNT(128),GLOBALPORT(2,0,0) + SEND_POP
SU_SEND MONO,AMOUNT(128),GLOBALPORT(2,0,1) + SEND_POP
SU_SEND MONO,AMOUNT(128),VOICE(2),UNIT(0),PORT(0),FLAGS(SEND_POP)
SU_SEND MONO,AMOUNT(128),VOICE(2),UNIT(0),PORT(1),FLAGS(SEND_POP)
END_INSTRUMENT
BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_ENVELOPE MONO,ATTAC(64),DECAY(64),SUSTAIN(64),RELEASE(64),GAIN(128)
@ -28,8 +28,8 @@ BEGIN_PATCH
SU_OSCILLAT MONO,TRANSPOSE(88),DETUNE(64),PHASE(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE)
SU_OSCILLAT MONO,TRANSPOSE(88),DETUNE(64),PHASE(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE)
SU_MULP STEREO
SU_SEND MONO,AMOUNT(128),GLOBALPORT(2,0,0) + SEND_POP
SU_SEND MONO,AMOUNT(128),GLOBALPORT(2,0,1) + SEND_POP
SU_SEND MONO,AMOUNT(128),VOICE(2),UNIT(0),PORT(0),FLAGS(SEND_POP)
SU_SEND MONO,AMOUNT(128),VOICE(2),UNIT(0),PORT(1),FLAGS(SEND_POP)
END_INSTRUMENT
BEGIN_INSTRUMENT VOICES(1) ; Global compressor effect
SU_RECEIVE STEREO

View File

@ -19,8 +19,8 @@ BEGIN_PATCH
SU_OSCILLAT MONO,TRANSPOSE(88),DETUNE(64),PHASE(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(TRISAW)
SU_OSCILLAT MONO,TRANSPOSE(88),DETUNE(64),PHASE(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(TRISAW)
SU_MULP STEREO
SU_SEND MONO,AMOUNT(128),GLOBALPORT(2,0,0) + SEND_POP
SU_SEND MONO,AMOUNT(128),GLOBALPORT(2,0,1) + SEND_POP
SU_SEND MONO,AMOUNT(128),VOICE(2),UNIT(0),PORT(0),FLAGS(SEND_POP)
SU_SEND MONO,AMOUNT(128),VOICE(2),UNIT(0),PORT(1),FLAGS(SEND_POP)
END_INSTRUMENT
BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_ENVELOPE MONO,ATTAC(64),DECAY(64),SUSTAIN(64),RELEASE(64),GAIN(128)
@ -28,8 +28,8 @@ BEGIN_PATCH
SU_OSCILLAT MONO,TRANSPOSE(88),DETUNE(64),PHASE(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE)
SU_OSCILLAT MONO,TRANSPOSE(88),DETUNE(64),PHASE(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE)
SU_MULP STEREO
SU_SEND MONO,AMOUNT(128),GLOBALPORT(2,0,0) + SEND_POP
SU_SEND MONO,AMOUNT(128),GLOBALPORT(2,0,1) + SEND_POP
SU_SEND MONO,AMOUNT(128),VOICE(2),UNIT(0),PORT(0),FLAGS(SEND_POP)
SU_SEND MONO,AMOUNT(128),VOICE(2),UNIT(0),PORT(1),FLAGS(SEND_POP)
END_INSTRUMENT
BEGIN_INSTRUMENT VOICES(1) ; Global compressor effect
SU_RECEIVE STEREO

View File

@ -19,7 +19,7 @@ BEGIN_PATCH
SU_PAN MONO,PANNING(64)
SU_OUT STEREO,GAIN(128)
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE+LFO)
SU_SEND MONO,AMOUNT(32),LOCALPORT(3,3) + SEND_POP
SU_SEND MONO,AMOUNT(32),UNIT(3),PORT(3),FLAGS(SEND_POP)
END_INSTRUMENT
END_PATCH

View File

@ -19,7 +19,7 @@ BEGIN_PATCH
SU_PAN MONO,PANNING(64)
SU_OUT STEREO,GAIN(128)
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE+LFO)
SU_SEND MONO,AMOUNT(32),LOCALPORT(3,1) + SEND_POP
SU_SEND MONO,AMOUNT(32),UNIT(3),PORT(1),FLAGS(SEND_POP)
END_INSTRUMENT
END_PATCH

View File

@ -19,7 +19,7 @@ BEGIN_PATCH
SU_PAN MONO,PANNING(64)
SU_OUT STEREO,GAIN(128)
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE+LFO)
SU_SEND MONO,AMOUNT(32),LOCALPORT(3,2) + SEND_POP
SU_SEND MONO,AMOUNT(32),UNIT(3),PORT(2),FLAGS(SEND_POP)
END_INSTRUMENT
END_PATCH

View File

@ -20,7 +20,7 @@ BEGIN_PATCH
SU_PAN MONO,PANNING(64)
SU_OUT STEREO,GAIN(128)
SU_OSCILLAT MONO,TRANSPOSE(50),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE+LFO)
SU_SEND MONO,AMOUNT(65),LOCALPORT(3,5) + SEND_POP
SU_SEND MONO,AMOUNT(65),UNIT(3),PORT(5),FLAGS(SEND_POP)
END_INSTRUMENT
END_PATCH

View File

@ -19,7 +19,7 @@ BEGIN_PATCH
SU_PAN MONO,PANNING(64)
SU_OUT STEREO,GAIN(128)
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE+LFO)
SU_SEND MONO,AMOUNT(32),LOCALPORT(3,0) + SEND_POP
SU_SEND MONO,AMOUNT(32),UNIT(3),PORT(0),FLAGS(SEND_POP)
END_INSTRUMENT
END_PATCH

View File

@ -17,8 +17,8 @@ BEGIN_PATCH
SU_ENVELOPE MONO, ATTAC(64),DECAY(64),SUSTAIN(64),RELEASE(80),GAIN(128)
SU_DISTORT MONO, DRIVE(96)
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE+LFO)
SU_SEND MONO,AMOUNT(68),LOCALPORT(1,0)
SU_SEND MONO,AMOUNT(68),LOCALPORT(3,0) + SEND_POP
SU_SEND MONO,AMOUNT(68),UNIT(1),PORT(0),FLAGS(NONE)
SU_SEND MONO,AMOUNT(68),UNIT(3),PORT(0),FLAGS(SEND_POP)
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT
END_PATCH

View File

@ -15,11 +15,11 @@ BEGIN_PATCH
SU_ENVELOPE MONO,ATTAC(80),DECAY(80),SUSTAIN(64),RELEASE(80),GAIN(128)
SU_ENVELOPE MONO,ATTAC(80),DECAY(80),SUSTAIN(64),RELEASE(80),GAIN(128)
SU_OSCILLAT MONO,TRANSPOSE(120),DETUNE(64),PHASE(0),COLOR(128),SHAPE(96),GAIN(128),FLAGS(SINE+LFO)
SU_SEND MONO,AMOUNT(68),LOCALPORT(0,0)
SU_SEND MONO,AMOUNT(68),LOCALPORT(0,1)
SU_SEND MONO,AMOUNT(68),UNIT(0),PORT(0),FLAGS(NONE)
SU_SEND MONO,AMOUNT(68),UNIT(0),PORT(1),FLAGS(NONE)
; Sustain modulation seems not to be implemented
SU_SEND MONO,AMOUNT(68),LOCALPORT(0,3)
SU_SEND MONO,AMOUNT(68),LOCALPORT(1,4) + SEND_POP
SU_SEND MONO,AMOUNT(68),UNIT(0),PORT(3),FLAGS(NONE)
SU_SEND MONO,AMOUNT(68),UNIT(1),PORT(4),FLAGS(SEND_POP)
SU_OUT STEREO,GAIN(110)
END_INSTRUMENT
END_PATCH

View File

@ -19,7 +19,7 @@ BEGIN_PATCH
SU_PAN MONO,PANNING(64)
SU_OUT STEREO,GAIN(128)
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE + LFO)
SU_SEND MONO,AMOUNT(32),LOCALPORT(3,0) + SEND_POP
SU_SEND MONO,AMOUNT(32),UNIT(3),PORT(0),FLAGS(SEND_POP)
END_INSTRUMENT
END_PATCH

View File

@ -19,7 +19,7 @@ BEGIN_PATCH
SU_PAN MONO,PANNING(64)
SU_OUT STEREO,GAIN(128)
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE + LFO)
SU_SEND MONO,AMOUNT(32),LOCALPORT(3,1) + SEND_POP
SU_SEND MONO,AMOUNT(32),UNIT(3),PORT(1),FLAGS(SEND_POP)
END_INSTRUMENT
END_PATCH

View File

@ -17,8 +17,8 @@ BEGIN_PATCH
SU_ENVELOPE MONO,ATTAC(64),DECAY(64),SUSTAIN(64),RELEASE(80),GAIN(128)
SU_HOLD MONO,HOLDFREQ(3)
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE+LFO)
SU_SEND MONO,AMOUNT(68),LOCALPORT(1,0)
SU_SEND MONO,AMOUNT(68),LOCALPORT(3,0) + SEND_POP
SU_SEND MONO,AMOUNT(68),UNIT(1),PORT(0),FLAGS(NONE)
SU_SEND MONO,AMOUNT(68),UNIT(3),PORT(0),FLAGS(SEND_POP)
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT
END_PATCH

View File

@ -17,7 +17,7 @@ BEGIN_PATCH
SU_MULP MONO
SU_PUSH MONO
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE + LFO)
SU_SEND MONO,AMOUNT(68),LOCALPORT(1,3) + SEND_POP
SU_SEND MONO,AMOUNT(68),UNIT(1),PORT(3),FLAGS(SEND_POP)
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT
END_PATCH

View File

@ -17,7 +17,7 @@ BEGIN_PATCH
SU_MULP MONO
SU_PUSH MONO
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE+LFO)
SU_SEND MONO,AMOUNT(96),LOCALPORT(1,1) + SEND_POP
SU_SEND MONO,AMOUNT(96),UNIT(1),PORT(1),FLAGS(SEND_POP)
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT
END_PATCH

View File

@ -17,7 +17,7 @@ BEGIN_PATCH
SU_MULP MONO
SU_PUSH MONO
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE + LFO)
SU_SEND MONO,AMOUNT(68),LOCALPORT(1,5) + SEND_POP
SU_SEND MONO,AMOUNT(68),UNIT(1),PORT(5),FLAGS(SEND_POP)
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT
END_PATCH

View File

@ -17,7 +17,7 @@ BEGIN_PATCH
SU_MULP MONO
SU_PUSH MONO
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE + LFO)
SU_SEND MONO,AMOUNT(128),LOCALPORT(1,2) + SEND_POP
SU_SEND MONO,AMOUNT(128),UNIT(1),PORT(2),FLAGS(SEND_POP)
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT
END_PATCH

View File

@ -17,7 +17,7 @@ BEGIN_PATCH
SU_MULP MONO
SU_PUSH MONO
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE + LFO)
SU_SEND MONO,AMOUNT(68),LOCALPORT(1,4) + SEND_POP
SU_SEND MONO,AMOUNT(68),UNIT(1),PORT(4),FLAGS(SEND_POP)
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT
END_PATCH

View File

@ -17,7 +17,7 @@ BEGIN_PATCH
SU_MULP MONO
SU_PUSH MONO
SU_OSCILLAT MONO,TRANSPOSE(70),DETUNE(64),PHASE(64),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE + LFO)
SU_SEND MONO,AMOUNT(68),LOCALPORT(1,0) + SEND_POP
SU_SEND MONO,AMOUNT(68),UNIT(1),PORT(0),FLAGS(SEND_POP)
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT
END_PATCH

View File

@ -13,10 +13,10 @@ END_TRACKS
BEGIN_PATCH
BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(32) ; should receive -0.5
SU_SEND MONO,AMOUNT(128),LOCALPORT(5,0) ; should send -0.25
SU_SEND MONO,AMOUNT(128),LOCALPORT(6,0) + SEND_POP ; should send -0.25
SU_SEND MONO,AMOUNT(128),UNIT(5),PORT(0),FLAGS(NONE) ; should send -0.25
SU_SEND MONO,AMOUNT(128),UNIT(6),PORT(0),FLAGS(SEND_POP) ; should send -0.25
SU_LOADVAL MONO,VALUE(128) ; should receive 1
SU_SEND MONO,AMOUNT(128),LOCALPORT(6,0) + SEND_POP ; should send 0.5
SU_SEND MONO,AMOUNT(128),UNIT(6),PORT(0),FLAGS(SEND_POP) ; should send 0.5
SU_RECEIVE MONO ; should receive -0.5
SU_RECEIVE MONO ; should receive 0.5
SU_OUT STEREO,GAIN(128)

View File

@ -13,10 +13,10 @@ END_TRACKS
BEGIN_PATCH
BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(32) ; should receive -0.5
SU_SEND MONO,AMOUNT(128),LOCALPORT(5,1) ; should send -0.25
SU_SEND MONO,AMOUNT(128),LOCALPORT(5,0) + SEND_POP ; should send -0.25
SU_SEND MONO,AMOUNT(128),UNIT(5),PORT(1),FLAGS(NONE) ; should send -0.25
SU_SEND MONO,AMOUNT(128),UNIT(5),PORT(0),FLAGS(SEND_POP) ; should send -0.25
SU_LOADVAL MONO,VALUE(128) ; should receive 1
SU_SEND MONO,AMOUNT(128),LOCALPORT(5,0) + SEND_POP ; should send 0.5
SU_SEND MONO,AMOUNT(128),UNIT(5),PORT(0),FLAGS(SEND_POP) ; should send 0.5
SU_RECEIVE STEREO; should receive 0.5 -0.5
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT

View File

@ -13,10 +13,10 @@ END_TRACKS
BEGIN_PATCH
BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(32) ; should receive -0.5
SU_SEND MONO,AMOUNT(96),LOCALPORT(5,0) ; should send -0.25
SU_SEND MONO,AMOUNT(96),LOCALPORT(6,0) + SEND_POP ; should send -0.25
SU_SEND MONO,AMOUNT(96),UNIT(5),PORT(0),FLAGS(NONE) ; should send -0.25
SU_SEND MONO,AMOUNT(96),UNIT(6),PORT(0),FLAGS(SEND_POP) ; should send -0.25
SU_LOADVAL MONO,VALUE(128) ; should receive 1
SU_SEND MONO,AMOUNT(96),LOCALPORT(6,0) + SEND_POP ; should send 0.5
SU_SEND MONO,AMOUNT(96),UNIT(6),PORT(0),FLAGS(SEND_POP) ; should send 0.5
SU_LOADVAL MONO,VALUE(64) ; should receive -0.5
SU_LOADVAL MONO,VALUE(64) ; should receive 0.5
SU_OUT STEREO,GAIN(128)

View File

@ -13,14 +13,14 @@ END_TRACKS
BEGIN_PATCH
BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(96)
SU_SEND MONO,AMOUNT(96),GLOBALPORT(1,3,0) + SEND_POP
SU_SEND MONO,AMOUNT(96),VOICE(1),UNIT(3),PORT(0),FLAGS(SEND_POP)
SU_LOADVAL MONO,VALUE(64)
SU_LOADVAL MONO,VALUE(64)
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT
BEGIN_INSTRUMENT VOICES(1) ; Instrument1
SU_LOADVAL MONO,VALUE(32)
SU_SEND MONO,AMOUNT(96),GLOBALPORT(0,2,0) + SEND_POP
SU_SEND MONO,AMOUNT(96),VOICE(0),UNIT(2),PORT(0),FLAGS(SEND_POP)
SU_LOADVAL MONO,VALUE(64)
SU_LOADVAL MONO,VALUE(64)
SU_OUT STEREO,GAIN(128)

View File

@ -14,10 +14,10 @@ BEGIN_PATCH
BEGIN_INSTRUMENT VOICES(1) ; Instrument0
SU_LOADVAL MONO,VALUE(0)
SU_LOADVAL MONO,VALUE(0)
SU_SEND STEREO,AMOUNT(96),LOCALPORT(6,0) + SEND_POP
SU_SEND STEREO,AMOUNT(96),UNIT(6),PORT(0),FLAGS(SEND_POP)
SU_LOADVAL MONO,VALUE(64)
SU_LOADVAL MONO,VALUE(128)
SU_SEND STEREO,AMOUNT(128),LOCALPORT(6,0) + SEND_POP
SU_SEND STEREO,AMOUNT(128),UNIT(6),PORT(0),FLAGS(SEND_POP)
SU_RECEIVE STEREO; should receive 0.5 -0.5
SU_OUT STEREO,GAIN(128)
END_INSTRUMENT