options.src
( Some MIDI interface program words. )
( SET TRANSPOSE VECTOR SET_TRANSP_VECT )
: SET_TRANSP_VECT
RX_VECTOR @ DUP
['] RX_INT_HNDLR 02 + = SWAP
['] RE_RX_INT_HNDLR 2+ = OR
IF RX_VECTOR @ RX_TRANSP_NEXT !
['] TRANSPOSE_RX 2+ RX_VECTOR !
ELSE RX_VECTOR @ ['] CHANGE_RX_CHANNEL 2 + =
IF CHNG_CHAN_NEXT @ RX_TRANSP_NEXT !
['] TRANSPOSE_RX 2+ CHNG_CHAN_NEXT !
ELSE ['] RX_INT_HNDLR 02 + RX_TRANSP_NEXT !
['] TRANSPOSE_RX 2+ RX_VECTOR !
THEN THEN
;
( SET CHANNEL CHANGE VECTOR SET_CHAN_CHNG_VECT )
: SET_CHAN_CHNG_VECT
RX_VECTOR @ DUP
['] RX_INT_HNDLR 02 + = SWAP
['] RE_RX_INT_HNDLR 2+ = OR
IF RX_VECTOR @ CHNG_CHAN_NEXT !
['] CHANGE_RX_CHANNEL 2+ RX_VECTOR !
ELSE RX_VECTOR @ ['] TRANSPOSE_RX 2 + =
IF RX_TRANSP_NEXT @ CHNG_CHAN_NEXT !
['] CHANGE_RX_CHANNEL 2+ RX_TRANSP_NEXT !
ELSE ['] RX_INT_HNDLR 02 + CHNG_CHAN_NEXT !
['] CHANGE_RX_CHANNEL 2+ RX_VECTOR !
THEN THEN
;
( RESET_TIME )
: RESET_TIME
NORMAL_SPEED VAR_TIME_BASE ! 64 NOW_TIME !
0C 14 GOTOXY
ASCIIZ" SPEED SET TO NORMAL - PRESS ANY KEY TO CONTINUE " PR_ASCZ
KEY 0= IF KEY DROP THEN
;
: SET_TIME
0C 14 GOTOXY
ASCIIZ" ENTER % OF NORMAL SPEED (50 to 200) - " PR_ASCZ
0C 27 + 14 GOTOXY
3 GET_NUMBER
DEPTH 0 <> IF
DUP DUP 0C9 < SWAP 31 > AND
IF NOW_TIME !
NORMAL_SPEED 64 NOW_TIME @ */
VAR_TIME_BASE !
0C 15 GOTOXY
ASCIIZ" SPEED SET TO " PR_ASCZ
0C 0E + 15 GOTOXY
DECIMAL NOW_TIME @ . HEX
ASCIIZ" % OF NORMAL. " PR_ASCZ
ELSE DROP 0C 15 GOTOXY
INVALID_ENTRY
THEN
0C 16 GOTOXY
ANY_KEY
THEN
;
( TRANSPOSE_ALL )
: TRANSPOSE_ALL
0C 14 GOTOXY
ASCIIZ" ENTER THE TRANSPOSITION INTERVAL - " PR_ASCZ
0C 24 + 14 GOTOXY
3 GET_NUMBER
DEPTH 0 <>
IF
DUP DUP -80 > SWAP 80 < AND
IF
80 LO_SPLIT C!
LO_DELTA !
0 LO_TRANSP_FLAG !
0 HI_TRANSP_FLAG !
-1 ALL_TRANSP_FLAG !
SET_TRANSP_VECT
0C 15 GOTOXY
ASCIIZ" ALL INPUT TRANSPOSED - INTERVAL = " PR_ASCZ
0C 23 + 15 GOTOXY
DECIMAL LO_DELTA @ . HEX
ELSE DROP 0C 15 GOTOXY
ANY_KEY
THEN
0C 16 GOTOXY
ANY_KEY
THEN
;
( TRANSPOSE_BELOW )
: TRANSPOSE_BELOW
0C 13 GOTOXY
ASCIIZ" ENTER THE NOTE NUMBER TO TRANSPOSE ON OR BELOW - " PR_ASCZ
0C 32 + 13 GOTOXY
3 GET_NUMBER
DEPTH 0 <> IF
DUP DUP -1 > SWAP 80 < AND
IF
TEMP_VAR !
0C 14 GOTOXY
ASCIIZ" ENTER THE TRANSPOSITION INTERVAL - " PR_ASCZ
0C 24 + 14 GOTOXY
3 GET_NUMBER
DEPTH 0 <>
IF
DUP DUP -80 > SWAP 80 < AND
IF
LO_DELTA !
TEMP_VAR @ LO_SPLIT C!
0 ALL_TRANSP_FLAG !
-1 LO_TRANSP_FLAG !
SET_TRANSP_VECT
0C 15 GOTOXY
ASCIIZ" INPUT ON OR BELOW NOTE NUMBER - " PR_ASCZ
0C 24 + 15 GOTOXY
LO_SPLIT C@ DECIMAL . HEX
ASCIIZ" TRANSPOSED. INTERVAL = " PR_ASCZ
0C 3C + 15 GOTOXY
DECIMAL LO_DELTA @ . HEX
ELSE DROP 0C 15 GOTOXY
INVALID_ENTRY
THEN
THEN
ELSE DROP 0C 15 GOTOXY
INVALID_ENTRY
THEN
0C 16 GOTOXY
ANY_KEY
THEN
;
( TRANSPOSE_ABOVE )
: TRANSPOSE_ABOVE
0C 13 GOTOXY
ASCIIZ" ENTER THE NOTE NUMBER TO TRANSPOSE ABOVE - " PR_ASCZ
0C 2C + 13 GOTOXY
3 GET_NUMBER
DEPTH 0 <> IF
DUP DUP -1 > SWAP 80 < AND
IF
TEMP_VAR !
0C 14 GOTOXY
ASCIIZ" ENTER THE TRANSPOSITION INTERVAL - " PR_ASCZ
0C 24 + 14 GOTOXY
3 GET_NUMBER
DEPTH 0 <>
IF
DUP DUP -80 > SWAP 80 < AND
IF
HI_DELTA !
TEMP_VAR @ HI_SPLIT C!
0 ALL_TRANSP_FLAG !
-1 HI_TRANSP_FLAG !
SET_TRANSP_VECT
0C 15 GOTOXY
ASCIIZ" INPUT ABOVE NOTE NUMBER - " PR_ASCZ
0C 1E + 15 GOTOXY
HI_SPLIT C@ DECIMAL . HEX
ASCIIZ" TRANSPOSED. INTERVAL = " PR_ASCZ
0C 36 + 15 GOTOXY
DECIMAL HI_DELTA @ . HEX
ELSE DROP 0C 15 GOTOXY
INVALID_ENTRY
THEN
THEN
ELSE DROP 0C 15 GOTOXY
INVALID_ENTRY
THEN
0C 16 GOTOXY
ANY_KEY
THEN
;
( CHANGE_CHANNEL )
: CHANGE_CHANNEL
0C 13 GOTOXY
ASCIIZ" ENTER THE CHANNEL NUMBER TO CHANGE FROM - " PR_ASCZ
0C 2C + 13 GOTOXY
3 GET_NUMBER
DEPTH 0 <> IF 1 -
DUP DUP -1 > SWAP 10 < AND
IF
TEMP_VAR !
0C 14 GOTOXY
ASCIIZ" ENTER THE CHANNEL NUMBER TO CHANGE TO - " PR_ASCZ
0C 29 + 14 GOTOXY
3 GET_NUMBER
DEPTH 0 <>
IF 1 -
DUP DUP -1 > SWAP 10 < AND
IF
TRACK_TO C!
TEMP_VAR @ TRACK_FROM C!
-1 CHN_CHNG_FLAG !
SET_CHAN_CHNG_VECT
0C 15 GOTOXY
ASCIIZ" CHANNEL NUMBER - " PR_ASCZ
0C 11 + 15 GOTOXY
TRACK_FROM C@ 1+ DECIMAL . HEX
ASCIIZ" WILL BE CHANGED TO " PR_ASCZ
0C 26 + 15 GOTOXY
DECIMAL TRACK_TO C@ 1+ . HEX
ELSE DROP 0C 15 GOTOXY
INVALID_ENTRY THEN
THEN
ELSE DROP 0C 15 GOTOXY
INVALID_ENTRY
THEN
0C 16 GOTOXY
ANY_KEY
THEN
;
: SET_SYNC
0C 14 GOTOXY
ASCIIZ" ENTER THE TEMPO BEATS PER MINUTE (20 TO 280, 0 TO CLEAR) - " PR_ASCZ
0C 3B + 14 GOTOXY
3 GET_NUMBER
DEPTH 0 <>
IF
DUP 0= IF 0 SYNC_EN_FLAG ! THEN
DUP DUP 13 > SWAP 119 < AND
IF
DUP BPM !
DUP 29 < IF 4 SYNC_CMP !
ELSE DUP 51 < IF 2 SYNC_CMP !
ELSE 1 SYNC_CMP ! THEN THEN
DROP
0FF SYNC_EN_FLAG !
1388 3E8 UM* ( = DEC 5,000,000 )
BPM @ SYNC_CMP @ * UM/MOD
HARD_DIV ! DROP
0C 15 GOTOXY
ASCIIZ" RECORD THE TEMPO CLOCK? (Y/N) - " PR_ASCZ
0C 23 + 15 GOTOXY
KEY DUP 0= IF KEY DROP THEN
DUP ASCII Y = SWAP ASCII y = OR
IF 0FF REC_SYNC ! ELSE 0 REC_SYNC ! THEN
ELSE DROP 0C 15 GOTOXY
INVALID_ENTRY
THEN
0C 16 GOTOXY
ANY_KEY
THEN
;
( OPTIONS_MENU )
HEX
: OPTIONS_MENU 0 OP_DONE_FLAG !
BEGIN ( UNTIL )
CLS DRAW_BORDER
0A 2 GOTOXY
ASCIIZ" SPEED - " PR_ASCZ 0A 9 + 2 GOTOXY
DECIMAL NOW_TIME @ . HEX 25 EMIT
ALL_TRANSP_FLAG @ IF
0A 3 GOTOXY
ASCIIZ" ALL INPUT TRANSPOSED - INTERVAL = " PR_ASCZ
0A 23 + 3 GOTOXY
LO_DELTA @ DECIMAL . HEX
THEN
LO_TRANSP_FLAG @ IF
0A 3 GOTOXY
ASCIIZ" INPUT ON OR BELOW NOTE NUMBER " PR_ASCZ
0A 1E + 3 GOTOXY LO_SPLIT C@ DECIMAL . HEX
ASCIIZ" TRANSPOSED. INTERVAL = " PR_ASCZ
0A 3C + 3 GOTOXY LO_DELTA @ DECIMAL . HEX
THEN
HI_TRANSP_FLAG @ IF
0A 4 GOTOXY
ASCIIZ" INPUT ABOVE NOTE NUMBER " PR_ASCZ
0A 18 + 4 GOTOXY HI_SPLIT C@ DECIMAL . HEX
ASCIIZ" TRANSPOSED. INTERVAL = " PR_ASCZ
0A 36 + 4 GOTOXY HI_DELTA @ DECIMAL . HEX
THEN
CHN_CHNG_FLAG @ IF
0A 5 GOTOXY
ASCIIZ" INPUT CHANNEL NUMBER " PR_ASCZ
0A 15 + 5 GOTOXY TRACK_FROM C@ 1+ DECIMAL . HEX
ASCIIZ" WILL BE CHANGED TO = " PR_ASCZ
0A 30 + 5 GOTOXY TRACK_TO C@ 1+ DECIMAL . HEX
THEN
FWHITE C@ PR_COLOR !
SYNC_EN_FLAG @ 0 <> IF 0A 6 GOTOXY
ASCIIZ" TEMPO CLOCK ON - " PR_ASCZ
0A 11 + 6 GOTOXY DECIMAL BPM @ . HEX
0A 16 + 6 GOTOXY
REC_SYNC @ 0 <> IF
ASCIIZ" WILL BE RECORDED " PR_ASCZ
ELSE ASCIIZ" WILL NOT BE RECORDED " PR_ASCZ
THEN THEN
1F 7 GOTOXY
ASCIIZ" SET OPTIONS " PR_ASCZ
0A DUP 8 GOTOXY
ASCIIZ" 0 - RETURN TO PREVIOUS MENU " PR_ASCZ
-->
( CONTINUATION OF OPTIONS_MENU )
DUP 9 GOTOXY
ASCIIZ" 1 - TRANSPOSE ALL INPUT " PR_ASCZ
DUP 0A GOTOXY
ASCIIZ" 2 - TRANSPOSE INPUT BELOW SPLIT " PR_ASCZ
DUP 0B GOTOXY
ASCIIZ" 3 - TRANSPOSE INPUT ABOVE SPLIT " PR_ASCZ
DUP 0C GOTOXY
ASCIIZ" 4 - CHANGE INPUT CHANNEL NUMBER " PR_ASCZ
DUP 0D GOTOXY
ASCIIZ" 5 - CHANGE ODD NUMBER NOTE INPUT CHANNEL NUMBER " PR_ASCZ
DUP 0E GOTOXY
ASCIIZ" 6 - CHANGE PLAYBACK SPEED " PR_ASCZ
-->
( CONT. OF OPTIONS_MENU )
DUP 0F GOTOXY
ASCIIZ" 7 - RESTORE NORMAL PLAYBACK SPEED " PR_ASCZ
10 GOTOXY
ASCIIZ" 8 - SET TEMPO CLOCK " PR_ASCZ
0A DUP 12 GOTOXY
ASCIIZ" PRESS THE NUMBER OF YOUR CHOICE " PR_ASCZ
21 + 12 GOTOXY
KEY DUP 0= IF ?TERMINAL IF KEY DROP THEN THEN
30 -
CASE
0 OF -1 OP_DONE_FLAG ! ENDOF
1 OF TRANSPOSE_ALL ENDOF
2 OF TRANSPOSE_BELOW ENDOF
3 OF TRANSPOSE_ABOVE ENDOF
-->
( CONT. OF OPTIONS_MENU )
4 OF CHANGE_CHANNEL ENDOF
5 OF NOOP ENDOF
6 OF SET_TIME ENDOF
7 OF RESET_TIME ENDOF
8 OF SET_SYNC ENDOF
07 EMIT
ENDCASE
OP_DONE_FLAG @
UNTIL ;