home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
hard.hdv
/
HARD
/
FORTH
/
FILTER.ASS
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS
UTF-8
Wrap
Text File
|
1992-12-20
|
22.7 KB
|
1,056 lines
|
[04] ASCII Text (0x0000)
\ FORTH OBJECTS FOR CONTROLLING PIANO DISPLAY
1 ARRAY PC1
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
1 ARRAY PC2
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
1 ARRAY VOLUMES
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
1 ARRAY BRILLS
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
VARIABLE MULTI 0 MULTI !
VARIABLE REVERB 0 REVERB !
VARIABLE EFFECT 0 EFFECT !
VARIABLE TRANSPOSE 0 TRANSPOSE !
0 CONSTANT FALSE \ USED AS A VERB: EX:
1 CONSTANT TRUE \ TRUE MULTI-TIM FALSE LOCAL
HEX
1 ARRAY HEXCHAR
B0 C, B1 C, B2 C, B3 C, B4 C, B5 C, B6 C, B7 C,
B8 C, B9 C, C1 C, C2 C, C3 C, C4 C, C5 C, C6 C,
3 OBJECT HEXASC
\ =============
\ 1 = INPUT HEX BYTE
\ 2 = HI BYTE ASCII OUTPUT
\ 3 = LO BYTE ASCII OUTPUT
BOT LDA,
1 PARM STA, INX, INX,
\ ==============
OBJ-CODE
1 PARM LDA,
.A LSR, .A LSR, .A LSR, .A LSR,
TAX,
0 HEXCHAR ,X LDA,
2 PARM STA,
1 PARM LDA,
0F # AND,
TAX,
0 HEXCHAR ,X LDA,
3 PARM STA,
OBJ-END
VARIABLE DEBUG 0 DEBUG !
1 OBJECT MIDIOUT
\ ==============
\ PARM 1 = MIDI BYTE
BOT LDA,
1 PARM STA, INX, INX,
\ ===============
OBJ-CODE
BEGIN, C0A8 LDA,
2 # AND,
0= NOT UNTIL,
1 PARM LDA,
C0A9 STA,
\ FOR DEBUGGING:
DEBUG LDA,
0= NOT IF,
1 PARM LDA,
FDDA JSR,
THEN,
OBJ-END
3 OBJECT SENDBRE
\ ==============
\ 1=CHANNEL
\ 2= INSTRUCTION
\ 3= DATA
BOT LDA,
3 PARM STA, INX, INX,
BOT LDA,
2 PARM STA, INX, INX,
BOT LDA,
1 PARM STA, INX, INX,
\ =========================
OBJ-CODE
F0 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
43 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
73 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
1A # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
11 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
1 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
2 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
3 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
F7 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
2 OBJECT PROGCHG
\ =======================
\ PARMS:
\ 1 = CHANNEL
\ 2 = PROG #
BOT LDA,
2 PARM STA, INX, INX,
BOT LDA,
1 PARM STA, INX, INX,
\ =========================
OBJ-CODE
\
1 PARM LDX, \ SWAP PROGRAMS
0 PC1 ,X LDA,
0 PC2 ,X STA, \ MOVE 1ST PROG TO 2ND
2 PARM LDA,
0 PC1 ,X STA, \ SAVE NEW 1ST PROG
\ *** DISPLAY PROGRAMS
1 PARM LDX,
0A # CPX,
CS NOT IF,
0 PC1 ,X LDA,
1 'PARM HEXASC STA,
OBJ-CALL HEXASC
2 'PARM HEXASC LDA, \ HI NIBBLE PROG1
3 'PARM SCREEN STA,
1 PARM LDA,
.A ASL, \ CHNL <* 6
CLC,
1 PARM ADC,
.A ASL,
5 # ADC, \ CHNL <+5
1 'PARM SCREEN STA,
1 # LDA,
2 'PARM SCREEN STA,
POKE LDA,
4 'PARM SCREEN STA,
OBJ-CALL SCREEN \ * PRINT HI NIBBLE
1 'PARM SCREEN LDA,
CLC,
1 # ADC,
1 'PARM SCREEN STA,
3 'PARM HEXASC LDA, \ LO NIBBLE PROG1
3 'PARM SCREEN STA,
OBJ-CALL SCREEN \ * PRINT LO NIBBLE
1 'PARM SCREEN LDA,
CLC,
2 # ADC,
1 'PARM SCREEN STA, \ ADJUST XCOORD BY 2
1 PARM LDX,
0 PC2 ,X LDA,
1 'PARM HEXASC STA,
OBJ-CALL HEXASC
2 'PARM HEXASC LDA, \ HI NIBBLE PROG2
3 'PARM SCREEN STA,
OBJ-CALL SCREEN
1 'PARM SCREEN LDA,
CLC,
1 # ADC,
1 'PARM SCREEN STA,
3 'PARM HEXASC LDA, \ LO NIBBLE PROG2
3 'PARM SCREEN STA,
OBJ-CALL SCREEN \ * PRINT LO NIBBLE
THEN,
\ *** SEND THE MIDI INSTRUCTION
1 PARM LDA,
C0 # ORA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
2 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
2 OBJECT VOLCHG
\ ================
\ 1 = CHANNEL 2 = NEW VOLUME
BOT LDA,
2 PARM STA, INX, INX,
BOT LDA,
1 PARM STA, INX, INX,
\ ================
OBJ-CODE
1 PARM LDX,
0A # CPX,
CS NOT IF,
2 PARM LDA,
0 VOLUMES ,X STA,
1 'PARM HEXASC STA,
OBJ-CALL HEXASC
2 'PARM HEXASC LDA, \ HI NIBBLE
3 'PARM SCREEN STA,
1 PARM LDA,
.A ASL, \ CHNL <* 6
CLC,
1 PARM ADC,
.A ASL,
5 # ADC, \ CHNL <+5
1 'PARM SCREEN STA,
2 # LDA,
2 'PARM SCREEN STA,
POKE LDA,
4 'PARM SCREEN STA,
OBJ-CALL SCREEN \ * PRINT HI NIBBLE
1 'PARM SCREEN LDA,
CLC,
1 # ADC,
1 'PARM SCREEN STA,
3 'PARM HEXASC LDA, \ LO NIBBLE
3 'PARM SCREEN STA,
OBJ-CALL SCREEN \ * PRINT LO NIBBLE
THEN,
\ *** SEND THE MIDI INSTRUCTION
1 PARM LDA,
B0 # ORA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
7 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
2 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
2 OBJECT BRILLCHG
\ ================
\ 1 = CHANNEL 2 = NEW BRILL
BOT LDA,
2 PARM STA, INX, INX,
BOT LDA,
1 PARM STA, INX, INX,
\ ================
OBJ-CODE
1 PARM LDX,
0A # CPX,
CS NOT IF,
2 PARM LDA,
0 BRILLS ,X STA,
1 'PARM HEXASC STA,
OBJ-CALL HEXASC
2 'PARM HEXASC LDA, \ HI NIBBLE
3 'PARM SCREEN STA,
1 PARM LDA,
.A ASL, \ CHNL <* 6
CLC,
1 PARM ADC,
.A ASL,
8 # ADC, \ CHNL <+8
1 'PARM SCREEN STA,
2 # LDA,
2 'PARM SCREEN STA,
POKE LDA,
4 'PARM SCREEN STA,
OBJ-CALL SCREEN \ * PRINT HI NIBBLE
1 'PARM SCREEN LDA,
CLC,
1 # ADC,
1 'PARM SCREEN STA,
3 'PARM HEXASC LDA, \ LO NIBBLE
3 'PARM SCREEN STA,
OBJ-CALL SCREEN \ * PRINT LO NIBBLE
THEN,
\ *** SEND THE MIDI INSTRUCTION
1 PARM LDA,
1 'PARM SENDBRE STA,
58 # LDA,
2 'PARM SENDBRE STA,
2 PARM LDA,
3 'PARM SENDBRE STA,
OBJ-CALL SENDBRE
OBJ-END
1 OBJECT REVERBCHG
\ ================
BOT LDA,
1 PARM STA, INX, INX,
\ ================
OBJ-CODE
1 PARM LDA,
REVERB STA,
1 'PARM HEXASC STA,
OBJ-CALL HEXASC
3 'PARM HEXASC LDA,
3 'PARM SCREEN STA,
1 # LDA,
1 'PARM SCREEN STA,
5 # LDA,
2 'PARM SCREEN STA,
POKE # LDA,
4 'PARM SCREEN STA,
OBJ-CALL SCREEN
\ *** SEND THE MIDI INSTRUCTION
0 # LDA,
1 'PARM SENDBRE STA,
59 # LDA,
2 'PARM SENDBRE STA,
1 PARM LDA,
3 'PARM SENDBRE STA,
OBJ-CALL SENDBRE
OBJ-END
1 OBJECT EFFECTCHG
\ ================
BOT LDA,
1 PARM STA, INX, INX,
\ ================
OBJ-CODE
1 PARM LDA,
EFFECT STA,
1 'PARM HEXASC STA,
OBJ-CALL HEXASC
3 'PARM HEXASC LDA,
3 'PARM SCREEN STA,
2 # LDA,
1 'PARM SCREEN STA,
5 # LDA,
2 'PARM SCREEN STA,
POKE # LDA,
4 'PARM SCREEN STA,
OBJ-CALL SCREEN
\ *** SEND THE MIDI INSTRUCTION
0 # LDA,
1 'PARM SENDBRE STA,
5A # LDA,
2 'PARM SENDBRE STA,
1 PARM LDA,
3 'PARM SENDBRE STA,
OBJ-CALL SENDBRE
OBJ-END
1 OBJECT MULTITIM
\ ================
BOT LDA,
1 PARM STA, INX, INX,
\ ================
OBJ-CODE
1 PARM LDA,
MULTI STA,
1 'PARM HEXASC STA,
OBJ-CALL HEXASC
3 'PARM HEXASC LDA,
3 'PARM SCREEN STA,
0 # LDA,
1 'PARM SCREEN STA,
5 # LDA,
2 'PARM SCREEN STA,
POKE # LDA,
4 'PARM SCREEN STA,
OBJ-CALL SCREEN
F0 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
43 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
73 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
1A # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
1 PARM LDA,
.A ASL,
CLC,
13 # ADC,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
F7 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
2 OBJECT DAMPER
\ ================
\ 1 = CHNL 2 = DAMP VALUE
BOT LDA,
2 PARM STA, INX, INX,
BOT LDA,
1 PARM STA, INX, INX,
\ ================
OBJ-CODE
2 PARM LDA,
1 'PARM HEXASC STA,
OBJ-CALL HEXASC
2 'PARM HEXASC LDA,
3 'PARM SCREEN STA,
2 # LDA,
1 'PARM SCREEN STA,
6 # LDA,
2 'PARM SCREEN STA,
POKE # LDA,
4 'PARM SCREEN STA,
OBJ-CALL SCREEN
1 PARM LDA,
B0 # ORA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
40 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
2 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
2 OBJECT SOSTENUTO
\ ================
\ 1 = CHNL 2 = SWITCH
BOT LDA,
2 PARM STA, INX, INX,
BOT LDA,
1 PARM STA, INX, INX,
\ ================
OBJ-CODE
2 PARM LDA,
1 'PARM HEXASC STA,
OBJ-CALL HEXASC
2 'PARM HEXASC LDA,
3 'PARM SCREEN STA,
1 # LDA,
1 'PARM SCREEN STA,
6 # LDA,
2 'PARM SCREEN STA,
POKE # LDA,
4 'PARM SCREEN STA,
OBJ-CALL SCREEN
1 PARM LDA,
B0 # ORA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
42 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
2 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
2 OBJECT SOFTPEDAL
\ ================
\ 1 = CHNL 2 = SWITCH
BOT LDA,
2 PARM STA, INX, INX,
BOT LDA,
1 PARM STA, INX, INX,
\ ================
OBJ-CODE
2 PARM LDA,
1 'PARM HEXASC STA,
OBJ-CALL HEXASC
2 'PARM HEXASC LDA,
3 'PARM SCREEN STA,
0 # LDA,
1 'PARM SCREEN STA,
6 # LDA,
2 'PARM SCREEN STA,
POKE # LDA,
4 'PARM SCREEN STA,
OBJ-CALL SCREEN
1 PARM LDA,
B0 # ORA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
43 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
2 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
3 OBJECT OTHER-CTL
\ ================
\ 1 = CHANNEL
\ 2 = CTRL #
\ 3 = NEW VALUE
BOT LDA,
3 PARM STA, INX, INX,
BOT LDA,
2 PARM STA, INX, INX,
BOT LDA,
1 PARM STA, INX, INX,
\ ================
OBJ-CODE
1 PARM LDA,
B0 # ORA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
2 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
3 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
1 OBJECT LOCAL
\ =============
BOT LDA,
1 PARM STA, INX, INX,
\ ================
OBJ-CODE
B0 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
7A # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
1 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
2 OBJECT NOTEOFF
\ =======================
\ PARMS:
\ 1 = CHANNEL
\ 2 = NOTE #
BOT LDA,
2 PARM STA, INX, INX,
BOT LDA,
1 PARM STA, INX, INX,
\ =========================
OBJ-CODE
\ *** DISPLAY THE ORIGINAL CHARACTER ON THE PIANO
\
2 PARM LDA,
CLC, \ TRANSPOSE IT
' TRANSPOSE ADC,
2 PARM STA,
1 'PARM (PIANOXY) STA, \ NOTE #
OBJ-CALL (PIANOXY)
2 'PARM (PIANOXY) LDA, \ X COORD
1 'PARM SCREEN STA,
3 'PARM (PIANOXY) LDA, \ Y COORD
2 'PARM SCREEN STA,
2 PARM LDA,
TAX,
0 PICSAVE ,X LDA,
3 'PARM SCREEN STA, \ CHAR
POKE # LDA,
4 'PARM SCREEN STA, \ POKE
OBJ-CALL SCREEN
\ *** SEND THE INSTRUCTION
\
1 PARM LDA,
90 # ORA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
2 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
0 # LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
3 OBJECT NOTEON
\ =======================
\ PARMS:
\ 1 = CHANNEL
\ 2 = NOTE #
\ 3 = VELOCITY
BOT LDA,
3 PARM STA, INX, INX,
BOT LDA,
2 PARM STA, INX, INX,
BOT LDA,
1 PARM STA, INX, INX,
\ =========================
OBJ-CODE
\
\ *** DISPLAY THE CHANNEL ON THE PIANO
2 PARM LDA,
CLC, \ TRANSPOSE IT
' TRANSPOSE ADC,
2 PARM STA,
1 'PARM (PIANOXY) STA, \ NOTE #
OBJ-CALL (PIANOXY)
2 'PARM (PIANOXY) LDA, \ X COORD
1 'PARM SCREEN STA,
3 'PARM (PIANOXY) LDA, \ Y COORD
2 'PARM SCREEN STA,
1 PARM LDA,
0= IF,
5D # LDA, \ USE MARKER FOR CHNL 0
ELSE,
0A # CMP,
CS IF,
CLC,
B7 # ADC, \ ALPHA CHAR FOR A-F
ELSE,
CLC,
B0 # ADC, \ 0-9
THEN,
THEN,
3 'PARM SCREEN STA,
POKE # LDA,
4 'PARM SCREEN STA,
OBJ-CALL SCREEN
\ *** SEND THE INSTRUCTION
\
1 PARM LDA,
90 # ORA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
2 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
3 PARM LDA,
1 'PARM MIDIOUT STA,
OBJ-CALL MIDIOUT
OBJ-END
8 OBJECT FILTER
\ ==================
\ PARMS:
\ 1 = CURRENT MIDI DATA BYTE (INPUT)
\ WORK AREA:
\ 2 = CURRENT CHANNEL
\ 3 = CURRENT STATUS BYTE
\ 4 = PHASE
\ 5 = SYSEX COUNTER
\ 6 = 1ST DATA BYTE
\ 7 = 2ND DATA BYTE
\ 8 = SYSEX FLAG
\ ==================
\ FORTH INTERFACE
BOT LDA,
1 PARM STA, INX, INX,
\ ==================
OBJ-CODE
1 PARM LDA,
0< IF, \ IF HI BIT IS SET
1 PARM LDA,
F0 # AND,
F0 # CMP,
CS NOT IF, \ FOR $80..$EF
1 PARM LDA,
3 PARM STA, \ SAVE STATUS BYTE
0F # AND, \ ISOLATE CHANNEL
2 PARM STA,
ELSE, \ SYSEX, COMMON, REALTIME, OR META
1 PARM LDA,
F8 # CMP,
CS IF,
OBJ-EXIT \ SKIP REALTIME MESSAGES
THEN,
F0 # CMP,
0= IF,
F1 # LDA,
4 PARM STA, \ PHASE = F1 (SYSEX IN PROGRESS)
0 # LDA,
5 PARM STA, \ INIT SYSEX CTR TO 0
8 PARM STA, \ & SYSEX ERROR FLAG TO 0
OBJ-EXIT
THEN,
F7 # CMP,
0= IF,
F7 # LDA,
4 PARM STA, \ PHASE = F7 (END OF SYSEX)
OBJ-EXIT
THEN,
F2 # CMP,
0= IF,
F2 # LDA,
4 PARM STA, \ PHASE F2 = IGNORE NEXT 2 BYTES
OBJ-EXIT
THEN,
F3 # CMP,
0= IF,
F3 # LDA,
4 PARM STA, \ PHASE F3 = IGNORE NEXT BYTE
OBJ-EXIT
THEN,
OBJ-EXIT
\ ANY OTHER F- MESSAGE WILL BE IGNORED
THEN,
1 PARM LDA, \ 80-E0: SET PHASE TO HI NIBBLE+1
F0 # AND,
01 # ORA,
4 PARM STA,
OBJ-EXIT
ELSE, \ HI BIT WASN'T SET- USE PHASE
4 PARM LDA,
91 # CMP, \ *** PHASE 91 ***
0= IF,
1 PARM LDA, \ GET NOTE #
6 PARM STA,
92 # LDA,
4 PARM STA, \ CHG PHASE TO 92
OBJ-EXIT
THEN,
92 # CMP, \ *** PHASE 92 ***
0= IF,
1 PARM LDA,
7 PARM STA, \ SAVE VELOCITY
91 # LDA,
4 PARM STA, \ PHASE << 91
7 PARM LDA,
0= IF, \ CALL NOTEOFF
2 PARM LDA,
1 'PARM NOTEOFF STA,
6 PARM LDA,
2 'PARM NOTEOFF STA,
OBJ-CALL NOTEOFF
OBJ-EXIT
ELSE, \ CALL NOTEON
2 PARM LDA,
1 'PARM NOTEON STA,
6 PARM LDA,
2 'PARM NOTEON STA,
7 PARM LDA,
3 'PARM NOTEON STA,
OBJ-CALL NOTEON
OBJ-EXIT
THEN,
THEN,
81 # CMP, \ *** PHASE 81 ***
0= IF,
1 PARM LDA, \ GET NOTE #
6 PARM STA,
82 # LDA,
4 PARM STA, \ CHG PHASE TO 82
OBJ-EXIT
THEN,
82 # CMP, \ *** PHASE 82 ***
0= IF,
81 # LDA,
4 PARM STA, \ PHASE << 81
2 PARM LDA, \ CALL NOTEOFF
1 'PARM NOTEOFF STA,
6 PARM LDA,
2 'PARM NOTEOFF STA,
OBJ-CALL NOTEOFF
OBJ-EXIT
THEN,
C1 # CMP, \ *** PHASE C1 ***
0= IF,
2 PARM LDX, \ GET CHANNEL
1 'PARM PROGCHG STX,
1 PARM LDA,
2 'PARM PROGCHG STA,
OBJ-CALL PROGCHG
OBJ-EXIT
THEN,
B1 # CMP, \ *** PHASE B1 ***
0= IF,
1 PARM LDA, \ GET NOTE #
6 PARM STA,
B2 # LDA,
4 PARM STA, \ CHG PHASE TO B2
OBJ-EXIT
THEN,
B2 # CMP, \ *** PHASE B2 ***
0= IF,
B1 # LDA,
4 PARM STA, \ PHASE << B1
6 PARM LDA,
7 # CMP,
0= IF,
2 PARM LDA,
1 'PARM VOLCHG STA,
1 PARM LDA,
2 'PARM VOLCHG STA,
OBJ-CALL VOLCHG
OBJ-EXIT
THEN,
40 # CMP,
0= IF,
2 PARM LDA,
1 'PARM DAMPER STA,
1 PARM LDA,
2 'PARM DAMPER STA,
OBJ-CALL DAMPER
OBJ-EXIT
THEN,
42 # CMP,
0= IF,
2 PARM LDA,
1 'PARM SOSTENUTO STA,
1 PARM LDA,
2 'PARM SOSTENUTO STA,
OBJ-CALL SOSTENUTO
OBJ-EXIT
THEN,
43 # CMP,
0= IF,
2 PARM LDA,
1 'PARM SOFTPEDAL STA,
1 PARM LDA,
2 'PARM SOFTPEDAL STA,
OBJ-CALL SOFTPEDAL
OBJ-EXIT
THEN,
7A # CMP,
0= IF,
1 PARM LDA,
1 'PARM LOCAL STA,
OBJ-CALL LOCAL
OBJ-EXIT
THEN,
\ ANY OTHER CONTROL CHANGE:
2 PARM LDA,
1 'PARM OTHER-CTL STA,
6 PARM LDA,
2 'PARM OTHER-CTL STA,
1 PARM LDA,
3 'PARM OTHER-CTL STA,
OBJ-CALL OTHER-CTL
OBJ-EXIT
THEN,
\ THE FOLLOWING MESSAGES ARE NOT IMPLEMENTED YET
\ THEY WILL BE IGNORED.
A1 # CMP,
0= IF,
A2 # LDA,
4 PARM STA, \ SET PHASE TO A2
OBJ-EXIT
THEN,
D1 # CMP,
0= IF,
OBJ-EXIT
THEN,
E1 # CMP,
0= IF,
E2 # LDA,
4 PARM STA, \ SET PHASE TO E2
OBJ-EXIT
THEN,
F2 # CMP,
0= IF, \ *** PHASE F2- IGNORE
F3 # LDA,
4 PARM STA, \ SET PHASE TO F3
OBJ-EXIT
THEN,
\ ***** SYSEX HANDLER *****
F1 # CMP, \ *** PHASE F1- SYSEX IN PROGRESS
0= IF,
5 PARM INC, \ INC SYSEX CTR
5 PARM LDA,
1 # CMP, \ 1ST SYSEX BYTE S/B 43
0= IF,
1 PARM LDA,
43 # CMP,
0= NOT IF,
1 # LDA,
8 PARM STA, \ SYSEX ERROR FLAG
OBJ-EXIT
THEN,
THEN,
2 # CMP, \ 2ND SYSEX BYTE S/B 73
0= IF,
1 PARM LDA,
73 # CMP,
0= NOT IF,
1 # LDA,
8 PARM STA, \ SYSEX ERROR FLAG
OBJ-EXIT
THEN,
THEN,
3 # CMP, \ 3RD SYSEX BYTE S/B 01,1A OR 1B
0= IF,
1 PARM LDA,
01 # CMP,
0= IF,
ELSE,
1A # CMP,
0= IF,
ELSE,
1B # CMP,
0= IF,
ELSE,
1 # LDA,
8 PARM STA, \ SYSEX ERROR FLAG
OBJ-EXIT
THEN,
THEN,
THEN,
THEN,
4 # CMP, \ 4TH BYTE OF SYSEX MSG FOR CLAV
0= IF,
8 PARM LDA, \ CHECK ERROR FLAG
0= IF, \ IF OK:
1 PARM LDA,
13 # CMP,
0= IF, \ MULTI TIM OFF
0 # LDA,
1 'PARM MULTITIM STA,
OBJ-CALL MULTITIM
OBJ-EXIT
THEN,
15 # CMP, \ MULTI TIM ON
0= IF,
1 # LDA,
1 'PARM MULTITIM STA,
OBJ-CALL MULTITIM
OBJ-EXIT
THEN,
11 # CMP, \ BRILL REVERB EFFECT
0= IF,
ELSE,
1 # LDA,
8 PARM STA, \ ERROR IF NONE OF ABOVE
OBJ-EXIT
THEN,
THEN,
THEN,
5 # CMP,
0= IF,
1 PARM LDA,
2 PARM STA, \ SAVE CHANNEL
OBJ-EXIT
THEN,
6 # CMP,
0= IF,
1 PARM LDA,
58 # CMP,
CS IF,
5B # CMP,
CS NOT IF,
6 PARM STA, \ SAVE BRE CMD
ELSE,
1 # LDA,
8 PARM STA, \ ELSE ERROR
THEN,
THEN,
THEN,
7 # CMP,
0= IF,
8 PARM LDA, \ IF NO ERRORS
0= IF,
6 PARM LDA, \ CHECK CMD
58 # CMP, \ BRILLIANCE
0= IF,
2 PARM LDA,
1 'PARM BRILLCHG STA,
1 PARM LDA,
2 'PARM BRILLCHG STA,
OBJ-CALL BRILLCHG
OBJ-EXIT
THEN,
59 # CMP, \ REVERB
0= IF,
1 PARM LDA,
1 'PARM REVERBCHG STA,
OBJ-CALL REVERBCHG
OBJ-EXIT
THEN,
5A # CMP, \ EFFECT
0= IF,
1 PARM LDA,
1 'PARM EFFECTCHG STA,
OBJ-CALL EFFECTCHG
OBJ-EXIT
THEN,
THEN,
THEN,
THEN, \ *** END OF PHASE F1
\ ANY OTHER PHASE WILL DO NOTHING (DATA IGNORED)
THEN,
OBJ-END