home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-05-29 | 9.4 KB | 395 lines | [04] ASCII Text (0x0000) |
- ( ERIC'S VERSION OF MASC )
- ( META LANGUAGE FOR ADAPTIVE SYTHESIS )
-
- \ : DECIMAL DEC ;
- : 2@ DUP 2+ @ OVER @ ROT DROP ;
-
- ( PASSPT APPLE INTERFACE OUT)
-
- HEX
- C0A8 CONSTANT CTRLREG
-
- CTRLREG 1+ CONSTANT DATAREG
-
- VARIABLE FIRSTTIME 1 FIRSTTIME !
-
- : INIT 13 CTRLREG C! 11 CTRLREG C! 0 FIRSTTIME ! ;
-
- : ?XMIT ( -- TDRE ) CTRLREG C@ 2 AND ;
- DECIMAL
- VARIABLE %TO 0 %TO !
-
- : TO 1 %TO ! ;
-
- : FROM/TO
- %TO @ IF ! 0 %TO ! ELSE @ THEN ;
- : PARAMETER ( N -- NAME )
- CREATE , DOES> FROM/TO ;
-
- : PARAMETERS ( SIZE -- NAME )
- CREATE DUP , 0 DO 0 , LOOP
- DOES> SWAP 2* + 2+ FROM/TO ;
-
- : <BUILDS 0 CONSTANT ;
- 0 PARAMETER DEBUGGING
- 0 PARAMETER SEQUENCING
- 0 PARAMETER NEEDZERODLY
- 0 PARAMETER PREVSTAT
- 0 PARAMETER DLYLENGTH
-
- : MSND ( BYTE -- )
- DEBUGGING IF HEX . DEC ELSE
- SEQUENCING IF
- NEEDZERODLY IF
- 0 C, 0 TO NEEDZERODLY
- THEN
- DUP 127 > OVER 240 < AND IF
- DUP PREVSTAT = IF ( CHECK FOR RUNNING STS )
- DROP
- ELSE
- DUP TO PREVSTAT C,
- THEN
- ELSE
- C,
- THEN
- 0 TO DLYLENGTH ( TO SIGNAL THAT THERE WAS AN EVENT SINCE LAST DELAY )
- ELSE
- FIRSTTIME @ IF INIT THEN
- BEGIN ?XMIT UNTIL DATAREG C!
- THEN
- THEN
- ;
-
- VARIABLE JOYX 0 JOYX !
- VARIABLE JOYY 0 JOYY !
-
- HEX
- CODE JOY
- XSAVE STX,
- 0 # LDX, 0 # LDY, 80 # LDA, SEC,
- C070 BIT, C064 BIT, 10 C, 03 C, INX, D0 C, 02 C,
- NOP, NOP, C065 BIT, 10 C, 03 C, INY, D0 C, 02 C,
- NOP, NOP, 1 # SBC, B0 C, E8 C,
- ' JOYX STX, ' JOYY STY,
- XSAVE LDX, NEXT JMP,
- END-CODE
-
-
- ( CODE TO TRAP PROGRAM CHANGES )
-
- CODE WAITPC
- BEGIN,
- C0A8 LDA,
- 1 # AND,
- 0= NOT UNTIL,
- BEGIN,
- C0A9 LDA,
- F0 # AND,
- C0 # CMP,
- 0= UNTIL,
- BEGIN,
- C0A8 LDA,
- 1 # AND,
- 0= NOT UNTIL,
-
- C0A9 LDA,
- PHA,
- 0 # LDA,
- PUSH JMP,
-
- END-CODE
-
- HEX
- 40 PARAMETER VEL ( KEY VELOCITY)
- 40 PARAMETER SAVEVEL
- 10 PARAMETER ACCENTINC ( ACCENTED KEY VELOCITY)
-
- 0 PARAMETER CHANNEL
-
- : VOL ( NUM -- ) DUP TO VEL TO SAVEVEL ;
- : AC ( -- ) VEL DUP TO SAVEVEL ACCENTINC + TO VEL ;
-
- : CHNL ( NUM --) TO CHANNEL ;
-
- : END-INST
- 1 TO NEEDZERODLY ;
-
- : ON ( KEY -- ) 90 CHANNEL 0F AND
- + MSND MSND VEL MSND END-INST ;
-
- : OFF ( KEY -- ) 90 CHANNEL 0F AND
- + MSND MSND 0 MSND END-INST ;
-
-
- : CTRL-CHG ( VALUE CTRL-NUMBER -- )
- CHANNEL 0F AND B0 + MSND MSND MSND END-INST ;
-
- : RESETCTRLS 0 79 CTRL-CHG ;
-
- 0 PARAMETER VARIATION
-
- : VAR ( VARIATION# -- )
- TO VARIATION ;
-
- : PGM ( PROGRAM -- )
- VARIATION 0 CTRL-CHG 0 32 CTRL-CHG
- C0 CHANNEL 0F AND + MSND 1 - MSND END-INST ;
-
- : AFTERTOUCH ( KEY VALUE -- )
- CHANNEL 0F AND A0 + MSND SWAP MSND MSND END-INST ;
-
- : PRESSURE ( VALUE )
- CHANNEL 0F AND D0 + MSND MSND END-INST ;
-
- : BEND ( -8192 THRU +8191 )
- CHANNEL 0F AND E0 + MSND
- DUP 80 MOD MSND 80 / MSND END-INST ;
-
- ( CONTROLLERS )
- HEX
-
- : DAMPER ( 0..7 -- )
- 0 MAX 7 MIN 10 * 40 CTRL-CHG ;
-
- : SOST ( 1=ON 0=OFF -- )
- 0 MAX 1 MIN 40 * 42 CTRL-CHG ;
-
- : SOFT ( 1=ON 0=OFF -- )
- 0 MAX 1 MIN 40 * 43 CTRL-CHG ;
- : MODWHEEL ( 0-127 ) 7F AND 1 CTRL-CHG ;
-
- : VOLUME ( 0-127 ) 7F AND 7 CTRL-CHG ;
-
- : EXPRESSION ( 0-127 ) 7F AND 0B CTRL-CHG ;
-
- : PORTAMENTO ( 0-127 ) 7F AND 41 CTRL-CHG ;
-
- : PANPOT ( 0-40-7F = LEFT,CENTER,RIGHT ) 7F AND 0A CTRL-CHG ;
-
- : PORTATIME ( 0-127 ) 7F AND 5 CTRL-CHG ;
-
- : REVERB ( 0-127 ) 7F AND 5B CTRL-CHG ;
-
- : CHORUS ( 0-127 ) 7F AND 5D CTRL-CHG ;
-
-
- DECIMAL
-
- VARIABLE SPEEDVAL 20 SPEEDVAL !
- : SETSPEED ( NUM -- ) SPEEDVAL ! ;
- : GETSPEED ( -- NUM ) SPEEDVAL @ ;
-
- 2 OBJECT DELTA \ DELAY FOR DELTA TIME PASSED IN
- BOT LDA,
- 1 PARM STA,
- BOT 1+ LDA,
- 2 PARM STA,
- INX, INX,
- OBJ-CODE
- CLC,
- 1 PARM LDA,
- 0= IF,
- 2 PARM LDA,
- 0= IF,
- SEC,
- THEN,
- THEN,
- CS NOT IF,
- BEGIN,
- SPEEDVAL LDA,
- HEX FCA8 JSR, \ CALL APPLE DELAY ROUTINE
-
- 1 PARM DEC, \ DECREMENT 2 BYTE VALUE
- 1 PARM LDA,
- FF # CMP,
- 0= IF,
- 2 PARM DEC,
- THEN,
- CLC,
- 1 PARM LDA,
- 0= IF,
- 2 PARM LDA,
- 0= IF,
- SEC,
- THEN,
- THEN,
- CS UNTIL,
- THEN,
- OBJ-END
-
- DECIMAL
-
- : DELAY ( INTEGER -- )
- SEQUENCING IF
- DLYLENGTH 1 = IF ( THERE HASN'T BEEN AN EVENT SINCE LAST DELAY)
- -1 ALLOT HERE C@ + ( ADD PREV DELAY TO THIS DELAY)
- THEN
- DLYLENGTH 2 = IF
- -2 ALLOT HERE C@ 128 - 128 * HERE 1+ C@ + +
- THEN
-
- 0 TO NEEDZERODLY
- 1 TO DLYLENGTH
- DUP 127 > IF
- DUP 128 / 128 + C, 2 TO DLYLENGTH
- THEN
- 128 MOD C,
-
- ELSE
- DELTA
- THEN
- ;
-
- 240 PARAMETER MGATE
-
- : // MGATE DELAY SAVEVEL TO VEL ;
-
-
- : KK ( KEY -- )
- DUP ON // OFF ;
-
- : CD+ ( NUM -- )
- 0 DO I PICK ON LOOP ;
-
- : CD- ( NUM -- )
- 0 DO I PICK OFF LOOP ;
-
- HEX
-
- : MUTE ( CHNL -- ) ( TURNS ALL SOUNDS OFF FOR CHANNEL )
- B0 + MSND 78 MSND 00 MSND END-INST ;
-
- : SHUTUP
- CHANNEL MUTE ;
-
- : QUIET ( -- )
- 10 0 DO I MUTE LOOP ;
-
-
- 4 PARAMETER OCTAVE
-
- : OCT ( N -- ) TO OCTAVE ;
- : O+ ( -- ) OCTAVE 1+ TO OCTAVE ;
- : O- ( -- ) OCTAVE 1 - TO OCTAVE ;
-
- DECIMAL
- : PITCH ( NAME -- ) CREATE ,
- DOES> @ OCTAVE 12 * + 12 + ;
-
- 0 PITCH B# 0 PITCH C
- 1 PITCH C# 1 PITCH D&
- 2 PITCH D
- 3 PITCH D# 3 PITCH E&
- 4 PITCH E 4 PITCH F&
- 5 PITCH F 5 PITCH E#
- 6 PITCH F# 6 PITCH G&
- 7 PITCH G
- 8 PITCH G# 8 PITCH A&
- 9 PITCH A
- 10 PITCH A# 10 PITCH B&
- 11 PITCH B 11 PITCH C&
-
- 960 PARAMETER WHOLEDELTA
-
- : DURATION CREATE , , DOES>
- WHOLEDELTA SWAP 2@ */ TO MGATE ;
- 2 1 DURATION BN 4 3 DURATION BN3
- 1 1 DURATION WN 2 3 DURATION WN3
- 1 2 DURATION HN 1 3 DURATION HN3
- 1 4 DURATION QN 1 6 DURATION QN3
- 1 8 DURATION EN 1 12 DURATION EN3
- 1 16 DURATION SN 1 24 DURATION SN3
- 1 32 DURATION TN 1 48 DURATION TN3
- 1 64 DURATION GN 1 96 DURATION GN3
-
- 3 2 DURATION WN.
- 3 4 DURATION HN.
- 3 8 DURATION QN.
- 3 16 DURATION EN.
- 3 32 DURATION SN.
- 3 64 DURATION TN.
-
- 1 80 DURATION GN5
- 1 40 DURATION TN5
- 1 20 DURATION SN5
- 1 10 DURATION EN5
- 1 5 DURATION QN5
- 2 5 DURATION HN5
- 4 5 DURATION WN5
- 8 5 DURATION BN5
-
- 0 PARAMETER TIEVAL
-
- : <TIE
- 0 TO TIEVAL ;
-
- : &
- MGATE TIEVAL + TO TIEVAL ;
-
- : TIE>
- & TIEVAL TO MGATE ;
-
- ( GRACE NOTES - SUBTRACTION WITHIN A TIE )
- ( EX: 3 C GN // 3 D HN GN- // )
-
- : GN-
- MGATE GN MGATE - TO MGATE
- ;
-
-
- : CD ( KEYS NUM -- ) ( PLAY A CHORD )
- DUP 0 DO I 2 + PICK ON LOOP
- MGATE DELAY 0 DO OFF LOOP ;
-
-
- ( FORTH SEQUENCER )
-
- HEX
-
- ( SEQUENCE STORES 0 AS THE INITIAL LENGTH AND PFA ADRS FOR END-SEQ)
- ( WHEN WORD IS EXECUTED, RETURNS STARTING ADDRESS AND LENGTH )
-
- VARIABLE SEQPFA
-
- : SEQUENCE ( -- ) ( -- STARTADRS, LENGTH )
- CREATE HERE SEQPFA !
- 0 C, FF C, 7F C, 04 C, GETSPEED , 0 ,
- 0 TO PREVSTAT
- 1 TO NEEDZERODLY
- 1 TO SEQUENCING
- DOES> DUP 6 + @
- ;
-
- : END-SEQ
- ( STORE TERMINATOR BYTES FOR PLAYBACK PROGRAM )
- NEEDZERODLY IF
- 0 C,
- THEN
- FF C, 2F C, 0 C,
- 0 TO PREVSTAT
- 0 TO NEEDZERODLY
- 0 TO SEQUENCING
- ( CALCULATE LENGTH OF SEQUENCE & STORE IT )
- HERE SEQPFA @ - SEQPFA @ 6 + !
- ;
-
- ( LOADING AND SAVING SEQUENCES )
-
- ( SYNTAX: PREFIX" /PATHNAME" )
-
- : PREFIX"
- 1 PAD C! ASCII " WORD PAD 1+ ! PAD C6 MLI
- ;
-
- : BSAVE" ( START.ADRS LENGTH -- )
- OVER ( ADRS LEN ADRS )
- ASCII " WORD DUP ( ADRS LEN ADRS WORD WORD )
- ROT ( ADRS LEN WORD WORD ADRS )
- 6 ( BIN ) SWAP ( ADRS LEN WORD WORD 6 ADRS )
- ( CREATEF USES TOP 3 PARMS, OPENF USES WORD, WRITEF USES ADRS,LEN )
- (CREATEF) ?DERR \ CREATE NEW FILE
- (OPENF) ?DERR \ PASS PATHNAME - RETURN FILE#
- (WRITEF) ?DERR \ WRITE THE BINARY DATA TO THE FILE
- 0 (CLOSEF) ?DERR
- ;
-