mirror of
https://github.com/erangell/A2NoSlotMIDI.git
synced 2024-06-12 06:29:29 +00:00
Added legacy files
This commit is contained in:
parent
dced8b2879
commit
463a69b5c2
BIN
LEGACY/ANN0TEST.DSK
Normal file
BIN
LEGACY/ANN0TEST.DSK
Normal file
Binary file not shown.
226
LEGACY/MFF0DRVR.SC0.txt
Normal file
226
LEGACY/MFF0DRVR.SC0.txt
Normal file
|
@ -0,0 +1,226 @@
|
||||||
|
;MFF0DRVR.SC0
|
||||||
|
;
|
||||||
|
;-------------------
|
||||||
|
;MAINLINE CODE
|
||||||
|
;-------------------
|
||||||
|
AUXSETUP LDA #>ENTRYPTS ;MOVE WHOLE PROGRAM TO AUX
|
||||||
|
STA SRCMAINL
|
||||||
|
STA TGTAUXL
|
||||||
|
LDA #<ENTRYPTS
|
||||||
|
STA SRCMAINH
|
||||||
|
STA TGTAUXH
|
||||||
|
LDA #>EOF
|
||||||
|
STA ENDMAINL
|
||||||
|
LDA #<EOF
|
||||||
|
STA ENDMAINH
|
||||||
|
LDA #$01
|
||||||
|
STA TOAUX
|
||||||
|
JSR DOAUXMV
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
PLAYMAIN JMP PLAYIT1
|
||||||
|
PLAYAUX LDA #>PLAYSTRT ;MOVE PARM AREA TO AUX
|
||||||
|
STA SRCMAINL
|
||||||
|
STA TGTAUXL
|
||||||
|
LDA #<PLAYSTRT
|
||||||
|
STA SRCMAINH
|
||||||
|
STA TGTAUXH
|
||||||
|
LDA #>AUXSETUP ;ALSO MOVE ALL DATA VARIABLES
|
||||||
|
STA ENDMAINL
|
||||||
|
LDA #<AUXSETUP
|
||||||
|
STA ENDMAINH
|
||||||
|
LDA #$01
|
||||||
|
STA TOAUX
|
||||||
|
JSR DOAUXMV
|
||||||
|
;
|
||||||
|
LDA #>AUXCODE ;TRANSFER TO AUX PROGRAM
|
||||||
|
STA XFERADRL
|
||||||
|
LDA #<AUXCODE
|
||||||
|
STA XFERADRH
|
||||||
|
LDA #$01
|
||||||
|
STA XFTOAUX
|
||||||
|
LDA #$00
|
||||||
|
STA USEAUXZP
|
||||||
|
JMP DOXFER
|
||||||
|
AUXRTN RTS
|
||||||
|
; ;TRANSFER BACK TO MAIN MEMORY PROGRAM
|
||||||
|
AUXCODE JSR PLAYIT1 ;PLAY THE AUX BUFFER
|
||||||
|
LDA #>PLAYSTRT ;MOVE PARM AREA BACK TO MAIN
|
||||||
|
STA SRCMAINL
|
||||||
|
STA TGTAUXL
|
||||||
|
LDA #<PLAYSTRT
|
||||||
|
STA SRCMAINH
|
||||||
|
STA TGTAUXH
|
||||||
|
LDA #>AUXSETUP
|
||||||
|
STA ENDMAINL
|
||||||
|
LDA #<AUXSETUP
|
||||||
|
STA ENDMAINH
|
||||||
|
LDA #$00
|
||||||
|
STA TOAUX
|
||||||
|
JSR DOAUXMV
|
||||||
|
;
|
||||||
|
LDA #>AUXRTN ;TRANSFER BACK TO MAIN PROGRAM
|
||||||
|
STA XFERADRL
|
||||||
|
LDA #<AUXRTN
|
||||||
|
STA XFERADRH
|
||||||
|
LDA #$00
|
||||||
|
STA XFTOAUX
|
||||||
|
LDA #$00
|
||||||
|
STA USEAUXZP
|
||||||
|
JMP DOXFER
|
||||||
|
;
|
||||||
|
DOAUXMV LDA SRCMAINL
|
||||||
|
STA $3C
|
||||||
|
LDA SRCMAINH
|
||||||
|
STA $3D
|
||||||
|
LDA ENDMAINL
|
||||||
|
STA $3E
|
||||||
|
LDA ENDMAINH
|
||||||
|
STA $3F
|
||||||
|
LDA TGTAUXL
|
||||||
|
STA $42
|
||||||
|
LDA TGTAUXH
|
||||||
|
STA $43
|
||||||
|
LDA TOAUX
|
||||||
|
BNE AUXMOVE1
|
||||||
|
CLC
|
||||||
|
JMP AUXMOVE
|
||||||
|
AUXMOVE1 SEC
|
||||||
|
JMP AUXMOVE
|
||||||
|
;
|
||||||
|
DOXFER LDA XFERADRL
|
||||||
|
STA $3ED
|
||||||
|
LDA XFERADRH
|
||||||
|
STA $3EE
|
||||||
|
LDA XFTOAUX
|
||||||
|
BNE DOXFER1
|
||||||
|
CLC
|
||||||
|
JMP DOXFER2
|
||||||
|
DOXFER1 SEC
|
||||||
|
DOXFER2 LDA USEAUXZP
|
||||||
|
BNE DOXFER3
|
||||||
|
CLV
|
||||||
|
JMP DOXFER4
|
||||||
|
DOXFER3 BIT MONRTS ;SET OVERFLOW
|
||||||
|
DOXFER4 JMP AUXXFER
|
||||||
|
;=============================
|
||||||
|
PLAYIT1 LDA PLAYSTRT ;INITIALIZE PTR TO BEGINNING OF AREA
|
||||||
|
STA PLAYPTR
|
||||||
|
LDA PLAYSTRT+1
|
||||||
|
STA PLAYPTR+1
|
||||||
|
LDA KARALOOK ;12/17/95-KARALOOK LOGIC
|
||||||
|
BEQ PLAYLOOP
|
||||||
|
LDA #$8D
|
||||||
|
JSR COUT
|
||||||
|
JSR KARASCAN
|
||||||
|
PLAYLOOP LDY #$00 ;READ 1 BYTE
|
||||||
|
LDA (PLAYPTR),Y
|
||||||
|
STA INBYTE
|
||||||
|
JSR PRCSBYTE
|
||||||
|
LDA ENDOFTRK
|
||||||
|
BEQ PLAYLOO1
|
||||||
|
RTS
|
||||||
|
PLAYLOO1 JSR CHKKBD
|
||||||
|
LDA ENDOFTRK
|
||||||
|
BEQ INCPTR
|
||||||
|
RTS
|
||||||
|
INCPTR INC PLAYPTR
|
||||||
|
BNE INCPTR2
|
||||||
|
INC PLAYPTR+1
|
||||||
|
INCPTR2 LDA PLAYPTR
|
||||||
|
CMP PLAYSTOP
|
||||||
|
BNE PLAYLOOP
|
||||||
|
LDA PLAYPTR+1
|
||||||
|
CMP PLAYSTOP+1
|
||||||
|
BNE PLAYLOOP
|
||||||
|
RTS
|
||||||
|
;-------
|
||||||
|
; CHKKBD - MAY SET ENDOFTRK
|
||||||
|
;-------
|
||||||
|
CHKKBD LDA $C000
|
||||||
|
BPL NOKEY1
|
||||||
|
LDA $C010
|
||||||
|
AND #$7F
|
||||||
|
CMP #$20
|
||||||
|
BNE CHKESC
|
||||||
|
LDA #$01
|
||||||
|
STA ENDOFTRK
|
||||||
|
NOKEY1 RTS
|
||||||
|
CHKESC CMP #$1B
|
||||||
|
BNE CHKFLAT
|
||||||
|
WAITKEY LDA #$00
|
||||||
|
STA PAUSEFLG
|
||||||
|
WAITKEY1 LDA $C000
|
||||||
|
BPL WAITKEY1
|
||||||
|
LDA $C010
|
||||||
|
AND #$7F
|
||||||
|
CMP #$1B
|
||||||
|
BNE ESCDONE
|
||||||
|
INC PAUSEFLG
|
||||||
|
ESCDONE RTS
|
||||||
|
CHKFLAT CMP #$46 ;'F'-CHANGE UCS<->LCF
|
||||||
|
BNE TESTTMPO
|
||||||
|
LDA DISPMODE
|
||||||
|
EOR #$01
|
||||||
|
STA DISPMODE
|
||||||
|
RTS
|
||||||
|
TESTTMPO CMP #$54 ;'T'-TEMPO CHGS
|
||||||
|
BNE CHKDRUM
|
||||||
|
LDA DOTMPOCG
|
||||||
|
EOR #$01
|
||||||
|
STA DOTMPOCG
|
||||||
|
RTS
|
||||||
|
CHKDRUM CMP #$44 ;'D'-MASK DRUMS
|
||||||
|
BNE CHKLEFT
|
||||||
|
DEC MASKDRUM
|
||||||
|
LDA MASKDRUM
|
||||||
|
CMP #$FE
|
||||||
|
BNE DRUMDONE
|
||||||
|
LDA #$01
|
||||||
|
STA MASKDRUM
|
||||||
|
DRUMDONE RTS
|
||||||
|
CHKLEFT CMP #$08
|
||||||
|
BNE CHKRIGHT
|
||||||
|
DEC SPEED
|
||||||
|
LDA SPEED
|
||||||
|
BMI LEFTBAD
|
||||||
|
BEQ LEFTBAD
|
||||||
|
DEC SPEEDINC
|
||||||
|
JSR SPEEDDEC
|
||||||
|
JSR METRPOKE
|
||||||
|
LDA PRNTSPED
|
||||||
|
BEQ LEFTDONE
|
||||||
|
LDA #$A0
|
||||||
|
JSR COUT
|
||||||
|
LDA SPEED
|
||||||
|
JSR PRINTHEX
|
||||||
|
LDA #$A0
|
||||||
|
JSR COUT
|
||||||
|
LEFTDONE RTS
|
||||||
|
LEFTBAD INC SPEED
|
||||||
|
RTS
|
||||||
|
CHKRIGHT CMP #$15
|
||||||
|
BNE NOKEY
|
||||||
|
INC SPEED
|
||||||
|
LDA SPEED
|
||||||
|
BMI RIGHTBAD
|
||||||
|
BEQ RIGHTBAD
|
||||||
|
INC SPEEDINC
|
||||||
|
JSR SPEEDDEC
|
||||||
|
JSR METRPOKE
|
||||||
|
LDA PRNTSPED
|
||||||
|
BEQ NOKEY
|
||||||
|
LDA #$A0
|
||||||
|
JSR COUT
|
||||||
|
LDA SPEED
|
||||||
|
JSR PRINTHEX
|
||||||
|
LDA #$A0
|
||||||
|
JSR COUT
|
||||||
|
NOKEY RTS
|
||||||
|
RIGHTBAD DEC SPEED
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
;=========
|
||||||
|
; PRCSBYTE - MAY SET ENDOFTRK
|
||||||
|
;=========
|
||||||
|
CHN MFF0DRVR.SC1
|
335
LEGACY/MFF0DRVR.SC1.txt
Normal file
335
LEGACY/MFF0DRVR.SC1.txt
Normal file
|
@ -0,0 +1,335 @@
|
||||||
|
;MFF0DRVR.SC1
|
||||||
|
;-------
|
||||||
|
PRCSBYTE LDA PHASE
|
||||||
|
CMP #DELTA0
|
||||||
|
BNE PHDELT1
|
||||||
|
LDA #$00
|
||||||
|
STA DELTATIM
|
||||||
|
STA DELTATIM+1
|
||||||
|
STA DELTATIM+2
|
||||||
|
STA DELTATIM+3
|
||||||
|
LDA INBYTE
|
||||||
|
STA DELTATIM
|
||||||
|
BEQ DELTAEQ0 ;GET DELTA TIME
|
||||||
|
BPL DELTA7F
|
||||||
|
LDA #DELTA1 ;IF >127 - MORE TO FETCH
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
DELTAEQ0 LDA #GETINST ;IF 0 - WILL GET INSTRUCTION NEXT TIME
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
DELTA7F JSR COUNT
|
||||||
|
LDA #GETINST ;IF <=127 - DELAY, THEN GET INSTRUCTION NEXT TIME
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
; ;NEED TO CONVERT DELTA TIME BYTES TO COUNTER
|
||||||
|
COUNT LDA DELTATIM
|
||||||
|
STA DELTACTR
|
||||||
|
LDA #$00
|
||||||
|
STA DELTACTR+1
|
||||||
|
LDA DELTATIM+1 ;USE ONLY FIRST 2 BYTES OF DELTATIM
|
||||||
|
BEQ DOCOUNT
|
||||||
|
AND #$7F ;IF NON-ZERO HI BYTE, MOVE LO BIT
|
||||||
|
LSR A
|
||||||
|
STA DELTACTR+1
|
||||||
|
BCC DOCOUNT
|
||||||
|
LDA DELTACTR
|
||||||
|
ORA #$80 ;TO HI BIT OF LO BYTE
|
||||||
|
STA DELTACTR
|
||||||
|
DOCOUNT DEC DELTACTR
|
||||||
|
LDA DELTACTR
|
||||||
|
CMP #$FF
|
||||||
|
BNE DECR1
|
||||||
|
DEC DELTACTR+1
|
||||||
|
DECR1 LDA DELTACTR+1
|
||||||
|
CMP #$FF
|
||||||
|
BEQ DONECNT
|
||||||
|
LDA SPEED
|
||||||
|
JSR MONWAIT
|
||||||
|
CLV
|
||||||
|
BVC DOCOUNT
|
||||||
|
DONECNT RTS
|
||||||
|
;
|
||||||
|
PHDELT1 CMP #DELTA1
|
||||||
|
BNE PHDELT2
|
||||||
|
LDA DELTATIM
|
||||||
|
STA DELTATIM+1
|
||||||
|
LDA INBYTE
|
||||||
|
STA DELTATIM
|
||||||
|
BPL DELT1A
|
||||||
|
LDA #DELTA2
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
DELT1A JSR COUNT
|
||||||
|
LDA #GETINST
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;-------
|
||||||
|
PHDELT2 CMP #DELTA2
|
||||||
|
BNE PHDELT3
|
||||||
|
LDA DELTATIM+1
|
||||||
|
STA DELTATIM+2
|
||||||
|
LDA DELTATIM
|
||||||
|
STA DELTATIM+1
|
||||||
|
LDA INBYTE
|
||||||
|
STA DELTATIM
|
||||||
|
BPL DELT2A
|
||||||
|
LDA #DELTA3
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
DELT2A JSR COUNT
|
||||||
|
LDA #GETINST
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;-------
|
||||||
|
PHDELT3 CMP #DELTA3
|
||||||
|
BNE PHINST
|
||||||
|
LDA DELTATIM+2
|
||||||
|
STA DELTATIM+3
|
||||||
|
LDA DELTATIM+1
|
||||||
|
STA DELTATIM+2
|
||||||
|
LDA DELTATIM
|
||||||
|
STA DELTATIM+1
|
||||||
|
LDA INBYTE
|
||||||
|
STA DELTATIM
|
||||||
|
BPL DELT3A
|
||||||
|
LDA PLAYPTR+1
|
||||||
|
JSR PRINTHEX
|
||||||
|
LDA PLAYPTR
|
||||||
|
JSR PRINTHEX
|
||||||
|
BRK
|
||||||
|
DELT3A JSR COUNT
|
||||||
|
LDA #GETINST
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;-------
|
||||||
|
PHINST CMP #GETINST
|
||||||
|
BEQ PHINST0
|
||||||
|
JMP PHDATA3
|
||||||
|
PHINST0 LDA PAUSEFLG ;12/8/95-STEP THRU EVENTS WITH ESC
|
||||||
|
BEQ PHINST1
|
||||||
|
JSR WAITKEY
|
||||||
|
PHINST1 LDA INBYTE
|
||||||
|
BPL RUNNING
|
||||||
|
;
|
||||||
|
CMP #$F0
|
||||||
|
BCS CHKF0
|
||||||
|
;
|
||||||
|
STA LASTSTAT
|
||||||
|
STA XMITSTS
|
||||||
|
CMP #$E0
|
||||||
|
BCS TWOBYTES
|
||||||
|
CMP #$C0
|
||||||
|
BCC TWOBYTES
|
||||||
|
;
|
||||||
|
LDA #1
|
||||||
|
STA DBYTES
|
||||||
|
LDA #DATA1
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
TWOBYTES LDA #2
|
||||||
|
STA DBYTES
|
||||||
|
LDA #DATA2
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
CHKF0 BNE CHKF7
|
||||||
|
LDA #SYSX0
|
||||||
|
STA PHASE
|
||||||
|
LDA #$F0
|
||||||
|
JSR XMITBYTE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
XMITBYTE JSR XMITONE ;ANNUNCIATOR MIDI DRIVER
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
CHKF7 CMP #$F7
|
||||||
|
BNE CHKFF
|
||||||
|
LDA #SYSX0
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
CHKFF CMP #$FF
|
||||||
|
BNE INVAL
|
||||||
|
LDA #META0
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
INVAL BRK
|
||||||
|
;
|
||||||
|
RUNNING LDA LASTSTAT
|
||||||
|
STA XMITSTS
|
||||||
|
LDA INBYTE
|
||||||
|
STA XMITBYT1
|
||||||
|
LDA #$FF
|
||||||
|
STA XMITBYT2
|
||||||
|
LDA DBYTES
|
||||||
|
CMP #1
|
||||||
|
BEQ SENDMSG
|
||||||
|
LDA #DATA3
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
PHDATA3 CMP #DATA3
|
||||||
|
BNE PHDATA2
|
||||||
|
LDA INBYTE
|
||||||
|
STA XMITBYT2
|
||||||
|
LDA #$FF
|
||||||
|
STA XMITBYT3
|
||||||
|
JMP SENDMSG
|
||||||
|
;
|
||||||
|
PHDATA2 CMP #DATA2
|
||||||
|
BNE PHDATA1
|
||||||
|
LDA INBYTE
|
||||||
|
STA XMITBYT1
|
||||||
|
LDA #DATA2B
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
PHDATA1 CMP #DATA1
|
||||||
|
BNE PHDATA2B
|
||||||
|
LDA INBYTE
|
||||||
|
STA XMITBYT1
|
||||||
|
LDA #$FF
|
||||||
|
STA XMITBYT2
|
||||||
|
JMP SENDMSG
|
||||||
|
;
|
||||||
|
PHDATA2B CMP #DATA2B
|
||||||
|
BNE PHSYSX
|
||||||
|
LDA INBYTE
|
||||||
|
STA XMITBYT2
|
||||||
|
LDA #$FF
|
||||||
|
STA XMITBYT3
|
||||||
|
JMP SENDMSG
|
||||||
|
;
|
||||||
|
SENDMSG LDX #$01
|
||||||
|
SEND0 LDA XMITMSG,X
|
||||||
|
CMP #$FF
|
||||||
|
BEQ SEND2
|
||||||
|
JSR XMITONE ;ANNUNCIATOR MIDI DRIVER
|
||||||
|
INX
|
||||||
|
BNE SEND0
|
||||||
|
SEND2 LDA PIANOSCR ;ADDED 12/9/95-PIANO SCREEN OPTION
|
||||||
|
BEQ SENDEXIT
|
||||||
|
LDA XMITSTS
|
||||||
|
LDX XMITBYT1
|
||||||
|
LDY XMITBYT2
|
||||||
|
JSR MIDIPOKE
|
||||||
|
SENDEXIT LDA #DELTA0
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
PHSYSX CMP #SYSX0
|
||||||
|
BNE PHSYSX1
|
||||||
|
LDA INBYTE
|
||||||
|
STA SYSXLEN
|
||||||
|
BPL GOODSLEN
|
||||||
|
LDA PLAYPTR+1
|
||||||
|
JSR PRINTHEX
|
||||||
|
LDA PLAYPTR
|
||||||
|
JSR PRINTHEX
|
||||||
|
BRK ;SYSX OVER 127 BYTES NOT SUPPORTED
|
||||||
|
GOODSLEN LDA #SYSX1
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
PHSYSX1 CMP #SYSX1
|
||||||
|
BNE PHMETA0
|
||||||
|
LDA INBYTE
|
||||||
|
JSR XMITBYTE
|
||||||
|
DEC SYSXLEN
|
||||||
|
LDA SYSXLEN
|
||||||
|
BNE MORESYSX
|
||||||
|
LDA #DELTA0
|
||||||
|
STA PHASE
|
||||||
|
MORESYSX RTS
|
||||||
|
;--------
|
||||||
|
PHMETA0 CMP #META0
|
||||||
|
BNE PHMETA1
|
||||||
|
;
|
||||||
|
LDA #$00
|
||||||
|
STA TEXTEVT
|
||||||
|
LDA INBYTE
|
||||||
|
CMP #$2F
|
||||||
|
BNE CHKTEXT
|
||||||
|
LDA #$01
|
||||||
|
STA ENDOFTRK
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
CHKTEXT CMP #$0F
|
||||||
|
BCS CHKTMPO
|
||||||
|
LDA #$01
|
||||||
|
STA TEXTEVT
|
||||||
|
LDA #META1
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
CHKTMPO CMP #$51
|
||||||
|
BNE CHKKYSG
|
||||||
|
LDA #TEMPO1
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
CHKKYSG CMP #$59
|
||||||
|
BNE OTHER
|
||||||
|
LDA #KEYSIG1
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
OTHER LDA #META1
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
PHMETA1 CMP #META1
|
||||||
|
BNE PHMETA2
|
||||||
|
STORMLEN LDA INBYTE
|
||||||
|
STA METALEN
|
||||||
|
BPL GOODMLEN
|
||||||
|
LDA PLAYPTR+1
|
||||||
|
JSR PRINTHEX
|
||||||
|
LDA PLAYPTR+2
|
||||||
|
JSR PRINTHEX
|
||||||
|
BRK ;META OVER 127 BYTES NOT SUPPORTED
|
||||||
|
GOODMLEN LDA #META2
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
PHMETA2 CMP #META2
|
||||||
|
BNE PHTEMPO1
|
||||||
|
LDA TEXTEVT
|
||||||
|
BEQ NOTTEXT
|
||||||
|
LDA LYRICS
|
||||||
|
BEQ NOTTEXT ;BYPASS IF USER DOESNT WANT LYRICS
|
||||||
|
LDA INBYTE
|
||||||
|
CMP #$0D
|
||||||
|
BEQ PRCSCR
|
||||||
|
NOTUC ORA #$80 ;DISPLAY IN NORMAL TEXT
|
||||||
|
JSR COUT
|
||||||
|
NOTTEXT DEC METALEN
|
||||||
|
LDA METALEN
|
||||||
|
BNE MOREMETA
|
||||||
|
LDA #DELTA0
|
||||||
|
STA PHASE
|
||||||
|
MOREMETA RTS
|
||||||
|
;
|
||||||
|
PRCSCR ORA #$80 ;PRINT CR
|
||||||
|
JSR COUT
|
||||||
|
LDA KARALOOK
|
||||||
|
BEQ NOKARA
|
||||||
|
JSR KARASCAN ;KARAOKE LOGIC TO SCAN AHEAD ONE LINE & PRINT LINE 24
|
||||||
|
NOKARA JMP NOTTEXT
|
||||||
|
;
|
||||||
|
PRINTHEX PHA ;CLONE OF $FDDA BUT USING $FDF0 OUTPUT
|
||||||
|
LSR A
|
||||||
|
LSR A
|
||||||
|
LSR A
|
||||||
|
LSR A
|
||||||
|
JSR PRNTHEX1
|
||||||
|
PLA
|
||||||
|
AND #$0F
|
||||||
|
PRNTHEX1 ORA #$B0
|
||||||
|
CMP #$BA
|
||||||
|
BCC PRNTHEX2
|
||||||
|
ADC #$06
|
||||||
|
PRNTHEX2 JMP COUT
|
||||||
|
;
|
||||||
|
CHN MFF0DRVR.SC2
|
262
LEGACY/MFF0DRVR.SC2.txt
Normal file
262
LEGACY/MFF0DRVR.SC2.txt
Normal file
|
@ -0,0 +1,262 @@
|
||||||
|
;MFF0DRVR.SC2
|
||||||
|
;
|
||||||
|
PHTEMPO1 CMP #TEMPO1
|
||||||
|
BNE PHTEMPO2
|
||||||
|
LDA INBYTE
|
||||||
|
CMP #$03
|
||||||
|
BNE STORMLEN
|
||||||
|
LDA #TEMPO2
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
PHTEMPO2 CMP #TEMPO2
|
||||||
|
BNE PHTEMPO3
|
||||||
|
LDA INBYTE
|
||||||
|
STA TMPOHI
|
||||||
|
LDA #TEMPO3
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
PHTEMPO3 CMP #TEMPO3
|
||||||
|
BNE PHTEMPO4
|
||||||
|
LDA INBYTE
|
||||||
|
STA TMPOMED
|
||||||
|
LDA #TEMPO4
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
PHTEMPO4 CMP #TEMPO4
|
||||||
|
BNE PHKYSIG1
|
||||||
|
LDA INBYTE
|
||||||
|
STA TMPOLO
|
||||||
|
LDA RESOLUTN
|
||||||
|
STA RESHI
|
||||||
|
LDA RESOLUTN+1
|
||||||
|
STA RESLO
|
||||||
|
LDA DOTMPOCG
|
||||||
|
BEQ TMPODONE
|
||||||
|
JSR TEMPOCHG
|
||||||
|
JSR METRONOM
|
||||||
|
LDA NEWSPEED
|
||||||
|
CLC
|
||||||
|
ADC SPEEDINC
|
||||||
|
BMI BADSPEED
|
||||||
|
BEQ BADSPEED
|
||||||
|
STA SPEED
|
||||||
|
LDA PRNTSPED
|
||||||
|
BEQ TMPODONE
|
||||||
|
LDA #$A0
|
||||||
|
JSR COUT
|
||||||
|
LDA SPEED
|
||||||
|
JSR PRINTHEX
|
||||||
|
LDA #$A0
|
||||||
|
JSR COUT
|
||||||
|
TMPODONE JSR SPEEDDEC
|
||||||
|
JSR METRPOKE
|
||||||
|
LDA #DELTA0
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
BADSPEED LDA NEWSPEED
|
||||||
|
STA SPEED
|
||||||
|
JSR SPEEDDEC
|
||||||
|
JSR METRPOKE
|
||||||
|
LDA #DELTA0
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
PHKYSIG1 CMP #KEYSIG1
|
||||||
|
BNE PHKYSIG2
|
||||||
|
LDA #KEYSIG2
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
PHKYSIG2 CMP #KEYSIG2
|
||||||
|
BNE PHKYSIG3
|
||||||
|
LDA INBYTE
|
||||||
|
BEQ NOCHANGE ;DON'T DO FOR C MAJOR/A MINOR
|
||||||
|
AND #$80 ;SET UPPERCASE SHARPS ($00)
|
||||||
|
ASL A
|
||||||
|
ROL A
|
||||||
|
STA DISPMODE ;OR LOWERCASE FLATS ($01)
|
||||||
|
NOCHANGE LDA #KEYSIG3
|
||||||
|
STA PHASE
|
||||||
|
LDA #$00
|
||||||
|
STA FLATKEY
|
||||||
|
LDA INBYTE
|
||||||
|
BPL STORSF
|
||||||
|
INC FLATKEY
|
||||||
|
EOR #$FF
|
||||||
|
CLC
|
||||||
|
ADC #$01
|
||||||
|
STORSF STA KEYNUMSF
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
BADPHASE JSR PRINTHEX
|
||||||
|
BRK
|
||||||
|
PHKYSIG3 CMP #KEYSIG3
|
||||||
|
BNE BADPHASE
|
||||||
|
LDA #'M'
|
||||||
|
STA KEYSIGP4
|
||||||
|
LDA INBYTE
|
||||||
|
BNE MINORKEY
|
||||||
|
LDA FLATKEY
|
||||||
|
BNE MAJFLAT
|
||||||
|
LDA KEYNUMSF
|
||||||
|
ASL A
|
||||||
|
TAX
|
||||||
|
LDA MAJORSHP,X
|
||||||
|
STA KEYSIGP2
|
||||||
|
INX
|
||||||
|
LDA MAJORSHP,X
|
||||||
|
STA KEYSIGP3
|
||||||
|
CLV
|
||||||
|
BVC PRNTKYSG
|
||||||
|
MAJFLAT LDA KEYNUMSF
|
||||||
|
ASL A
|
||||||
|
TAX
|
||||||
|
LDA MAJORFLT,X
|
||||||
|
STA KEYSIGP2
|
||||||
|
INX
|
||||||
|
LDA MAJORFLT,X
|
||||||
|
STA KEYSIGP3
|
||||||
|
CLV
|
||||||
|
BVC PRNTKYSG
|
||||||
|
MINORKEY LDA #'m'
|
||||||
|
STA KEYSIGP4
|
||||||
|
LDA FLATKEY
|
||||||
|
BNE MINFLAT
|
||||||
|
LDA KEYNUMSF
|
||||||
|
ASL A
|
||||||
|
TAX
|
||||||
|
LDA MINORSHP,X
|
||||||
|
STA KEYSIGP2
|
||||||
|
INX
|
||||||
|
LDA MINORSHP,X
|
||||||
|
STA KEYSIGP3
|
||||||
|
CLV
|
||||||
|
BVC PRNTKYSG
|
||||||
|
MINFLAT LDA KEYNUMSF
|
||||||
|
ASL A
|
||||||
|
TAX
|
||||||
|
LDA MINORFLT,X
|
||||||
|
STA KEYSIGP2
|
||||||
|
INX
|
||||||
|
LDA MINORFLT,X
|
||||||
|
STA KEYSIGP3
|
||||||
|
CLV
|
||||||
|
BVC PRNTKYSG
|
||||||
|
PRNTKYSG LDY #16
|
||||||
|
LDX #74
|
||||||
|
PRKYLP LDA KEYSIGP1-70,X
|
||||||
|
JSR POKE80
|
||||||
|
DEX
|
||||||
|
CPX #69
|
||||||
|
BNE PRKYLP
|
||||||
|
LDA #DELTA0
|
||||||
|
STA PHASE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
FLATKEY DFB $00
|
||||||
|
KEYNUMSF DFB $00
|
||||||
|
MAJORSHP ASC 'C G D A E B F#C#'
|
||||||
|
MAJORFLT ASC 'C F BbEbAbDbGbCb'
|
||||||
|
MINORSHP ASC 'A E B F#C#G#D#A#'
|
||||||
|
MINORFLT ASC 'A D G C F BbEbAb'
|
||||||
|
;
|
||||||
|
;--------
|
||||||
|
;MIDIPOKE - DISPLAYS NOTE ON/OFFS USING 1ST 16 LINES OF SCREEN
|
||||||
|
;--------
|
||||||
|
; A = STATUS BYTE (9X OR 8X)
|
||||||
|
; X = 1ST DATA BYTE (NOTE NUMBER 00-7F)
|
||||||
|
; Y = 2ND DATA BYTE (VELOCITY 00-7F)
|
||||||
|
;--------
|
||||||
|
MIDIPOKE STA STSBYTE ;SAVE INPUT DATA
|
||||||
|
AND #$0F
|
||||||
|
STA MIDICHNL ;EXTRACT CHANNEL
|
||||||
|
STX NOTENUM
|
||||||
|
STY VELOCITY
|
||||||
|
TXA ;CHECK IF NOTE IS IN RANGE OF DISPLAY
|
||||||
|
CMP #24
|
||||||
|
BCC MIDIEXIT
|
||||||
|
CMP #104
|
||||||
|
BCS MIDIEXIT
|
||||||
|
SEC ;SUBTRACT 24 TO GET OFFSET IN CHARACTER TABLE
|
||||||
|
SBC #24
|
||||||
|
STA XCOORD
|
||||||
|
LDA STSBYTE
|
||||||
|
AND #$F0
|
||||||
|
CMP #$80
|
||||||
|
BEQ NOTEOFF ;CHECK IF NOTE OFF
|
||||||
|
CMP #$90
|
||||||
|
BEQ NOTEON
|
||||||
|
MIDIEXIT RTS
|
||||||
|
NOTEON LDA VELOCITY
|
||||||
|
BEQ NOTEOFF ;IF 90 WITH VEL 0 IT IS A NOTEOFF
|
||||||
|
LDX XCOORD ;NEED TO PRESERVE X UNTIL POKENOTE
|
||||||
|
LDA MASKDRUM
|
||||||
|
BMI NOTDRUM ;MASKDRUM FF=DISPLAY AS NORMAL NOTES
|
||||||
|
LDA MIDICHNL
|
||||||
|
CMP #$09 ;CHECK IF THIS IS A DRUM NOTE
|
||||||
|
BNE NOTDRUM
|
||||||
|
LDA MASKDRUM
|
||||||
|
BEQ NOTEOFF ;MASKDRUM 00=DON'T DISPLAY DRUM PART
|
||||||
|
LDA #'*'
|
||||||
|
STA DISPNOTE ;MASKDRUM 01=PRINT * FOR DRUM PART
|
||||||
|
CLV
|
||||||
|
BVC POKENOTE
|
||||||
|
NOTDRUM LDA DISPMODE ;CHECK IF UPPER CASE SHARP/LOWER CASE FLAT
|
||||||
|
BNE LCFMODE
|
||||||
|
LDA UCSNOTES,X
|
||||||
|
STA DISPNOTE
|
||||||
|
CLV
|
||||||
|
BVC POKENOTE
|
||||||
|
LCFMODE LDA LCFNOTES,X
|
||||||
|
STA DISPNOTE
|
||||||
|
POKENOTE LDY MIDICHNL ;VERTICAL COORD
|
||||||
|
LDA USEINVRS ;PARM-WHETHER USER WANTS INVERSE DISPLAY
|
||||||
|
BNE INVERT
|
||||||
|
LDA DISPNOTE
|
||||||
|
JMP POKE80
|
||||||
|
INVERT LDA DISPNOTE
|
||||||
|
AND #$7F ;INVERT ALL KEYS
|
||||||
|
; AND WHITEKEY,X ;CREATE INVERSE IF IT IS A WHITE PIANO KEY
|
||||||
|
JMP POKE80
|
||||||
|
NOTEOFF LDA #' '
|
||||||
|
STA DISPNOTE
|
||||||
|
LDX XCOORD
|
||||||
|
JMP POKENOTE
|
||||||
|
;
|
||||||
|
DISPNOTE DFB $00
|
||||||
|
STSBYTE DFB $00
|
||||||
|
MIDICHNL DFB $00
|
||||||
|
NOTENUM DFB $00
|
||||||
|
VELOCITY DFB $00
|
||||||
|
XCOORD DFB $00
|
||||||
|
;
|
||||||
|
; UPPER CASE SHARPS: cCdDefFgGaAb
|
||||||
|
;
|
||||||
|
UCSNOTES DFB $E3,$83,$E4,$84,$E5,$E6,$86,$E7,$87,$E1,$81,$E2
|
||||||
|
DFB $E3,$83,$E4,$84,$E5,$E6,$86,$E7,$87,$E1,$81,$E2
|
||||||
|
DFB $E3,$83,$E4,$84,$E5,$E6,$86,$E7,$87,$E1,$81,$E2
|
||||||
|
DFB $E3,$83,$E4,$84,$E5,$E6,$86,$E7,$87,$E1,$81,$E2
|
||||||
|
DFB $E3,$83,$E4,$84,$E5,$E6,$86,$E7,$87,$E1,$81,$E2
|
||||||
|
DFB $E3,$83,$E4,$84,$E5,$E6,$86,$E7,$87,$E1,$81,$E2
|
||||||
|
DFB $E3,$83,$E4,$84,$E5,$E6,$86,$E7,$87,$E1,$81,$E2
|
||||||
|
;
|
||||||
|
; LOWER CASE FLATS: CdDeEFgGaAbB
|
||||||
|
;
|
||||||
|
LCFNOTES DFB $83,$E4,$84,$E5,$85,$86,$E7,$87,$E1,$81,$E2,$82
|
||||||
|
DFB $83,$E4,$84,$E5,$85,$86,$E7,$87,$E1,$81,$E2,$82
|
||||||
|
DFB $83,$E4,$84,$E5,$85,$86,$E7,$87,$E1,$81,$E2,$82
|
||||||
|
DFB $83,$E4,$84,$E5,$85,$86,$E7,$87,$E1,$81,$E2,$82
|
||||||
|
DFB $83,$E4,$84,$E5,$85,$86,$E7,$87,$E1,$81,$E2,$82
|
||||||
|
DFB $83,$E4,$84,$E5,$85,$86,$E7,$87,$E1,$81,$E2,$82
|
||||||
|
DFB $83,$E4,$84,$E5,$85,$86,$E7,$87,$E1,$81,$E2,$82
|
||||||
|
;
|
||||||
|
;12/30/95:TOOK OUT TO SAVE SPACE
|
||||||
|
; THE 7F IS ANDED WITH CHAR TO MAKE IT WHITE (INVERSE)
|
||||||
|
;
|
||||||
|
;WHITEKEY DFB $7F,$FF,$7F,$FF,$7F,$7F,$FF,$7F,$FF,$7F,$FF,$7F
|
||||||
|
; DFB $7F,$FF,$7F,$FF,$7F,$7F,$FF,$7F,$FF,$7F,$FF,$7F
|
||||||
|
; DFB $7F,$FF,$7F,$FF,$7F,$7F,$FF,$7F,$FF,$7F,$FF,$7F
|
||||||
|
; DFB $7F,$FF,$7F,$FF,$7F,$7F,$FF,$7F,$FF,$7F,$FF,$7F
|
||||||
|
; DFB $7F,$FF,$7F,$FF,$7F,$7F,$FF,$7F,$FF,$7F,$FF,$7F
|
||||||
|
; DFB $7F,$FF,$7F,$FF,$7F,$7F,$FF,$7F,$FF,$7F,$FF,$7F
|
||||||
|
; DFB $7F,$FF,$7F,$FF,$7F,$7F,$FF,$7F,$FF,$7F,$FF,$7F
|
||||||
|
;
|
||||||
|
CHN MFF0DRVR.SC3
|
79
LEGACY/MFF0DRVR.SC3.txt
Normal file
79
LEGACY/MFF0DRVR.SC3.txt
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
;*** POKE80
|
||||||
|
;*** STORES ANY BYTE DIRECTLY ON 80 COLUMN SCREEN
|
||||||
|
;*** USING PROTOCOL DESCRIBED IN "INSIDE THE APPLE //E"
|
||||||
|
;--------
|
||||||
|
; POKE80
|
||||||
|
;--------
|
||||||
|
; A = CHARACTER TO POKE ON SCREEN
|
||||||
|
; X = X COORDINATE (0-79)
|
||||||
|
; Y = Y COORDINATE (0-23)
|
||||||
|
;--------
|
||||||
|
POKE80 CPX #80 ;VALIDATE X,Y COORDINATES
|
||||||
|
BCC POKE80A
|
||||||
|
CPY #24
|
||||||
|
BCC POKE80A
|
||||||
|
RTS
|
||||||
|
POKE80A PHP ;SAVE INTERRUPT STATUS
|
||||||
|
PHA ;SAVE USER'S DATA BYTE
|
||||||
|
STA SAVEA
|
||||||
|
STX SAVEX
|
||||||
|
STY SAVEY
|
||||||
|
SEI ;DISABLE INTERRUPTS
|
||||||
|
LDA $C018
|
||||||
|
STA STAT80ST ;SAVE STATUS OF 80STORE AND PAGE2 FLAGS
|
||||||
|
LDA $C01C
|
||||||
|
STA STATPAG2
|
||||||
|
STA $C001 ;TURN 80STORE ON TO USE PAGE2 TO SWITCH MAIN->AUX
|
||||||
|
LDA $28
|
||||||
|
STA SAVEBASL ;SAVE CURRENT SCREEN BASE ADDRESS
|
||||||
|
LDA $29
|
||||||
|
STA SAVEBASH
|
||||||
|
TYA ;MULTIPLY Y BY 2 FOR LOOKUP IN BASE TABLE
|
||||||
|
ASL A
|
||||||
|
TAY
|
||||||
|
LDA BASTABLE,Y ;GET LINE ADDRESS AND STORE IT IN ZP VECTOR
|
||||||
|
STA $28
|
||||||
|
INY
|
||||||
|
LDA BASTABLE,Y
|
||||||
|
STA $29
|
||||||
|
TXA ;DIVIDE X BY 2 TO GET OFFSET FROM LINE BASE
|
||||||
|
LSR A
|
||||||
|
TAY ;PUT IT IN Y FOR THE INDIRECT ADDRESSING LATER
|
||||||
|
BCC EVENCOL ;CHECK CARRY TO DETERMINE IF X WAS ODD OR EVEN
|
||||||
|
STA $C054 ;ODD - TURN PAGE 2 OFF
|
||||||
|
BCS STORBYTE
|
||||||
|
EVENCOL STA $C055 ;EVEN - TURN PAGE 2 ON
|
||||||
|
STORBYTE PLA
|
||||||
|
STA ($28),Y ;POKE THE CHARACTER ON THE SCREEN
|
||||||
|
LDA STAT80ST
|
||||||
|
BPL OFF80ST
|
||||||
|
STA $C001 ;80STOREON
|
||||||
|
BMI RSTRPAG2
|
||||||
|
OFF80ST STA $C000 ;80STOREOFF
|
||||||
|
RSTRPAG2 LDA STATPAG2
|
||||||
|
BPL OFFPAG2
|
||||||
|
STA $C055 ;PAGE2ON
|
||||||
|
BMI RSTRBASE
|
||||||
|
OFFPAG2 STA $C054 ;PAGE2OFF
|
||||||
|
RSTRBASE LDA SAVEBASL ;RESTORE ZP BASE VECTOR
|
||||||
|
STA $28
|
||||||
|
LDA SAVEBASH
|
||||||
|
STA $29
|
||||||
|
LDX SAVEX
|
||||||
|
LDY SAVEY
|
||||||
|
LDA SAVEA
|
||||||
|
PLP ;RESTORE INTERRUPT STATUS
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
STAT80ST DFB $00
|
||||||
|
STATPAG2 DFB $00
|
||||||
|
SAVEBASL DFB $00
|
||||||
|
SAVEBASH DFB $00
|
||||||
|
SAVEA DFB $00
|
||||||
|
SAVEX DFB $00
|
||||||
|
SAVEY DFB $00
|
||||||
|
BASTABLE DFB $00,$04,$80,$04,$00,$05,$80,$05,$00,$06,$80,$06,$00,$07,$80,$07
|
||||||
|
DFB $28,$04,$A8,$04,$28,$05,$A8,$05,$28,$06,$A8,$06,$28,$07,$A8,$07
|
||||||
|
DFB $50,$04,$D0,$04,$50,$05,$D0,$05,$50,$06,$D0,$06,$50,$07,$D0,$07
|
||||||
|
;
|
||||||
|
CHN MFF0DRVR.SC4
|
93
LEGACY/MFF0DRVR.SC4.txt
Normal file
93
LEGACY/MFF0DRVR.SC4.txt
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
;------------
|
||||||
|
;MFF0DRVR.SC4 - KARAOKE SCAN AHEAD LOGIC
|
||||||
|
;------------
|
||||||
|
; THIS LOGIC IS CALLED WHENEVER A CARRIAGE RETURN ($0D) IS FOUND.
|
||||||
|
; IT WILL SCAN AHEAD IN THE BUFFER TO FIND THE NEXT CARRIAGE RETURN
|
||||||
|
; BY LOOKING FOR TEXT META EVENTS. IT WILL PRINT UP TO 79 CHARACTERS.
|
||||||
|
; IT WILL EXIT WHEN EITHER A NEW CARRIAGE RETURN IS FOUND, 79 CHARACTERS
|
||||||
|
; HAVE BEEN PRINTED, THE END OF TRACK MARKER (FF 2F) IS FOUND, OR THE
|
||||||
|
; POINTER REACHES THE END OF THE CURRENT BUFFER.
|
||||||
|
;
|
||||||
|
MYPTR EQU $08
|
||||||
|
MYXCOORD DFB $00
|
||||||
|
MYENDFLG DFB $00
|
||||||
|
MYBYTE DFB $00
|
||||||
|
MYLENGTH DFB $00
|
||||||
|
MYSTOP DFB $00
|
||||||
|
;
|
||||||
|
KARASCAN LDA PLAYPTR ;SET OUR POINTER TO CURRENT POSITION
|
||||||
|
STA MYPTR
|
||||||
|
LDA PLAYPTR+1
|
||||||
|
STA MYPTR+1
|
||||||
|
LDA #$00
|
||||||
|
STA MYXCOORD
|
||||||
|
STA MYENDFLG
|
||||||
|
LDA PLAYSTOP+1
|
||||||
|
STA MYSTOP
|
||||||
|
KARALOOP LDY #$00
|
||||||
|
LDA (MYPTR),Y
|
||||||
|
CMP #$FF
|
||||||
|
BEQ FOUNDFF
|
||||||
|
KARALOO1 JSR INCMYPT
|
||||||
|
LDA MYENDFLG
|
||||||
|
BEQ KARALOOP
|
||||||
|
KARADONE LDA #$8D ;PRINT CR
|
||||||
|
JSR COUT
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
FOUNDFF JSR INCMYPT
|
||||||
|
LDA MYENDFLG
|
||||||
|
BNE KARADONE
|
||||||
|
LDA MYBYTE
|
||||||
|
CMP #$2F
|
||||||
|
BEQ KARADONE
|
||||||
|
CMP #$10
|
||||||
|
BCS KARALOO1 ;NOT TEXT EVENT
|
||||||
|
JSR INCMYPT
|
||||||
|
LDA MYENDFLG
|
||||||
|
BNE KARADONE
|
||||||
|
LDA MYBYTE
|
||||||
|
BMI KARALOO1 ;DON'T SUPPORT META > 127 CHARS-LOOK FOR MORE
|
||||||
|
BEQ KARALOO1 ;TEXT LEN OF 0
|
||||||
|
STA MYLENGTH
|
||||||
|
PRLOOP JSR INCMYPT
|
||||||
|
LDA MYENDFLG
|
||||||
|
BNE KARADONE
|
||||||
|
JSR PRINT24 ;PRINT THE CHAR
|
||||||
|
LDA MYENDFLG
|
||||||
|
BNE KARADONE
|
||||||
|
DEC MYLENGTH
|
||||||
|
LDA MYLENGTH
|
||||||
|
BNE PRLOOP
|
||||||
|
BEQ KARALOO1
|
||||||
|
;
|
||||||
|
INCMYPT INC MYPTR
|
||||||
|
BNE INCMYP2
|
||||||
|
INC MYPTR+1
|
||||||
|
LDA MYPTR+1
|
||||||
|
CMP MYSTOP
|
||||||
|
BCC INCMYP2
|
||||||
|
INC MYENDFLG
|
||||||
|
RTS
|
||||||
|
INCMYP2 LDY #$00
|
||||||
|
LDA (MYPTR),Y
|
||||||
|
STA MYBYTE
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
PRINT24 LDY #23
|
||||||
|
LDX MYXCOORD
|
||||||
|
LDA MYBYTE
|
||||||
|
CMP #$0D
|
||||||
|
BEQ SETEND
|
||||||
|
CMP #$20 ;DON'T PRINT CONTROL CHARS
|
||||||
|
BCC PRINT24A
|
||||||
|
ORA #$80
|
||||||
|
JSR COUT
|
||||||
|
INX
|
||||||
|
STX MYXCOORD
|
||||||
|
CPX #79
|
||||||
|
BNE PRINT24A
|
||||||
|
SETEND INC MYENDFLG
|
||||||
|
PRINT24A RTS
|
||||||
|
;
|
||||||
|
CHN MFF0DRVR.SC5
|
157
LEGACY/MFF0DRVR.SC5.txt
Normal file
157
LEGACY/MFF0DRVR.SC5.txt
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
; TEMPOCHG.SRC
|
||||||
|
;
|
||||||
|
; THIS SUBROUTINE IS USED TO CALCULATE THE SPEED VALUE TO BE USED WHEN
|
||||||
|
; A TEMPO CHANGE META EVENT IS FOUND.
|
||||||
|
; INPUT:
|
||||||
|
; RESOLUTION (2 BYTES) = LAST 2 BYTES OF MIDI FILE HEADER
|
||||||
|
; NEWTEMPO (3 BYTES) = VALUES FROM THE FF 51 03 META EVENT
|
||||||
|
; OUTPUT:
|
||||||
|
; NEWSPEED (1 BYTE) = NEW SPEED VALUE. YOUR PROGRAM MAY WANT TO
|
||||||
|
; ADJUST THIS BASED ON USER'S PREFERENCES.
|
||||||
|
;
|
||||||
|
TEMPOCHG JSR TMPOSTRT
|
||||||
|
JMP LOOKUP
|
||||||
|
DIVISION JMP DIVIDE
|
||||||
|
;
|
||||||
|
; PUBLIC VARIABLES
|
||||||
|
RESHI DFB $00
|
||||||
|
RESLO DFB $00
|
||||||
|
TMPOHI DFB $00
|
||||||
|
TMPOMED DFB $00
|
||||||
|
TMPOLO DFB $00
|
||||||
|
NEWSPEED DFB $00
|
||||||
|
;
|
||||||
|
; PRIVATE VARIABLES
|
||||||
|
DIVIDEND DFB $00,$00,$00,$00
|
||||||
|
DIVISOR DFB $00,$00
|
||||||
|
QUOTIENT DFB $00,$00,$00,$00
|
||||||
|
REMAINDR DFB $00,$00
|
||||||
|
TEMPDIV DFB $00,$00,$00
|
||||||
|
TEMPDSR DFB $00,$00
|
||||||
|
;
|
||||||
|
TMPOSTRT LDA #$00
|
||||||
|
STA DIVIDEND
|
||||||
|
LDA TMPOHI
|
||||||
|
STA DIVIDEND+1
|
||||||
|
LDA TMPOMED
|
||||||
|
STA DIVIDEND+2
|
||||||
|
LDA TMPOLO
|
||||||
|
STA DIVIDEND+3
|
||||||
|
LDA RESHI
|
||||||
|
STA DIVISOR
|
||||||
|
LDA RESLO
|
||||||
|
STA DIVISOR+1
|
||||||
|
;
|
||||||
|
DIVIDE CLD
|
||||||
|
LDA #$00
|
||||||
|
STA QUOTIENT
|
||||||
|
STA QUOTIENT+1
|
||||||
|
STA QUOTIENT+2
|
||||||
|
STA QUOTIENT+3
|
||||||
|
STA REMAINDR
|
||||||
|
STA REMAINDR+1
|
||||||
|
STA TEMPDIV
|
||||||
|
STA TEMPDIV+1
|
||||||
|
STA TEMPDIV+2
|
||||||
|
LDA DIVISOR
|
||||||
|
STA TEMPDSR
|
||||||
|
LDA DIVISOR+1
|
||||||
|
STA TEMPDSR+1
|
||||||
|
LDA TEMPDSR
|
||||||
|
BNE NODIV0
|
||||||
|
LDA TEMPDSR+1
|
||||||
|
BNE NODIV0
|
||||||
|
BRK
|
||||||
|
;
|
||||||
|
NODIV0 LDY #32 ;DIVIDEND WILL BE SHIFTED 32 TIMES
|
||||||
|
DIVLOOP ASL DIVIDEND+3
|
||||||
|
ROL DIVIDEND+2
|
||||||
|
ROL DIVIDEND+1
|
||||||
|
ROL DIVIDEND ;MOVE 1 BIT TO TEMPORARY DIVIDEND
|
||||||
|
ROL TEMPDIV+2
|
||||||
|
ROL TEMPDIV+1
|
||||||
|
ROL TEMPDIV ;NOW CHECK IF TEMPDSR < TEMPDIV
|
||||||
|
LDA TEMPDIV
|
||||||
|
BNE NOTLESS
|
||||||
|
LDA TEMPDIV+1
|
||||||
|
CMP TEMPDSR
|
||||||
|
BCC LESS
|
||||||
|
BNE NOTLESS
|
||||||
|
LDA TEMPDIV+2
|
||||||
|
CMP TEMPDSR+1
|
||||||
|
BCS NOTLESS
|
||||||
|
LESS CLC ;STORE A 0 IN THE QUOTIENT
|
||||||
|
ROL QUOTIENT+3
|
||||||
|
ROL QUOTIENT+2
|
||||||
|
ROL QUOTIENT+1
|
||||||
|
ROL QUOTIENT
|
||||||
|
CLV
|
||||||
|
BVC NEXTBIT
|
||||||
|
NOTLESS SEC ;SUBTRACT TEMPDSR FROM TEMPDIV
|
||||||
|
LDA TEMPDIV+2
|
||||||
|
SBC TEMPDSR+1
|
||||||
|
STA TEMPDIV+2
|
||||||
|
LDA TEMPDIV+1
|
||||||
|
SBC TEMPDSR
|
||||||
|
STA TEMPDIV+1
|
||||||
|
LDA TEMPDIV
|
||||||
|
SBC #$00
|
||||||
|
STA TEMPDIV
|
||||||
|
SEC ;AND STORE A 1 IN THE QUOTIENT
|
||||||
|
ROL QUOTIENT+3
|
||||||
|
ROL QUOTIENT+2
|
||||||
|
ROL QUOTIENT+1
|
||||||
|
ROL QUOTIENT
|
||||||
|
NEXTBIT DEY
|
||||||
|
BNE DIVLOOP ;WHEN DONE, QUOTIENT HAS RESULT, TDIV HAS RMDR
|
||||||
|
LDA TEMPDIV+1
|
||||||
|
STA REMAINDR
|
||||||
|
LDA TEMPDIV+2
|
||||||
|
STA REMAINDR+1
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
LOOKUP LDY #2 ;LOOKUP QUOTIENT IN TEMPO TABLE-STARTING WITH 2
|
||||||
|
; ;BECAUSE IF LESS THAN VALUE OF 2 SHOULD USE 1
|
||||||
|
LDA QUOTIENT
|
||||||
|
BEQ Q3BYT
|
||||||
|
QBIG LDY #127
|
||||||
|
CLV
|
||||||
|
BVC STORSPED
|
||||||
|
Q3BYT LDA QUOTIENT+1
|
||||||
|
BNE QBIG
|
||||||
|
; ;WE HAVE A 2 BYTE QUOTIENT TO LOOK UP
|
||||||
|
Q2LOOP LDA QUOTIENT+2
|
||||||
|
CMP TEMPOHI,Y
|
||||||
|
BCC FOUNDSP
|
||||||
|
BNE NEXTSPED
|
||||||
|
LDA QUOTIENT+3
|
||||||
|
CMP TEMPOLO,Y
|
||||||
|
BCC FOUNDSP
|
||||||
|
NEXTSPED INY
|
||||||
|
CPY #128
|
||||||
|
BCC Q2LOOP
|
||||||
|
FOUNDSP DEY
|
||||||
|
STORSPED STY NEWSPEED
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
; THE FOLLOWING DATA WAS CREATED BY BASIC PROGRAM "TEMPOCALC"
|
||||||
|
; IT REPRESENTS THE EVALUATION OF FUNCTION .4889*(26+27*A+5*A*A) FROM 0-127
|
||||||
|
;
|
||||||
|
TEMPOHI DFB 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2
|
||||||
|
DFB 3,3,4,4,4,5,5,6,6,7,7,8,8,9,10,10
|
||||||
|
DFB 11,12,12,13,14,15,15,16,17,18,19,19,20,21,22,23
|
||||||
|
DFB 24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,41
|
||||||
|
DFB 42,43,45,46,47,49,50,51,53,54,56,57,59,60,62,63
|
||||||
|
DFB 65,66,68,70,71,73,75,76,78,80,82,83,85,87,89,91
|
||||||
|
DFB 93,94,96,98,100,102,104,106,108,110,112,114,116,119,121,123
|
||||||
|
DFB 125,127,130,132,134,136,139,141,143,146,148,150,153,155,158,160
|
||||||
|
TEMPOLO DFB 12,28,48,74,104,139,179,224,18,73,133,197,11,85,164,248
|
||||||
|
DFB 81,175,18,121,230,87,206,73,201,78,216,103,250,147,48,211
|
||||||
|
DFB 122,38,215,141,71,7,204,149,99,55,15,236,206,180,160,145
|
||||||
|
DFB 134,128,127,132,141,154,173,197,225,3,41,84,132,185,243,50
|
||||||
|
DFB 118,190,12,94,181,17,114,216,67,179,39,161,31,162,42,183
|
||||||
|
DFB 73,224,123,28,193,108,27,207,136,70,9,208,157,110,69,32
|
||||||
|
DFB 0,229,207,190,177,170,167,170,177,189,206,228,254,30,67,108
|
||||||
|
DFB 154,206,6,67,133,203,23,104,189,23,119,219,68,178,36,156
|
||||||
|
;
|
||||||
|
CHN MFF0DRVR.SC6
|
98
LEGACY/MFF0DRVR.SC6.txt
Normal file
98
LEGACY/MFF0DRVR.SC6.txt
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
; MFF0DRVR.SC6
|
||||||
|
;
|
||||||
|
; CALL THIS IMMEDIATELY AFTER CALLING TEMPOCHG
|
||||||
|
;
|
||||||
|
METRONOM LDA #$03 ;DIVIDEND=60MEG SECONDS
|
||||||
|
STA DIVIDEND
|
||||||
|
LDA #$20
|
||||||
|
STA DIVIDEND+1
|
||||||
|
LDA #$00
|
||||||
|
STA DIVIDEND+2
|
||||||
|
STA DIVIDEND+3
|
||||||
|
LDA QUOTIENT+2 ;DIVISOR = PREVIOUS QUOTIENT
|
||||||
|
STA DIVISOR
|
||||||
|
LDA QUOTIENT+3
|
||||||
|
STA DIVISOR+1
|
||||||
|
JSR DIVISION
|
||||||
|
LDA QUOTIENT ;DIVIDEND=PREV QUOTIENT
|
||||||
|
STA DIVIDEND
|
||||||
|
LDA QUOTIENT+1
|
||||||
|
STA DIVIDEND+1
|
||||||
|
LDA QUOTIENT+2
|
||||||
|
STA DIVIDEND+2
|
||||||
|
LDA QUOTIENT+3
|
||||||
|
STA DIVIDEND+3
|
||||||
|
LDA RESHI ;DIVISOR=RESOLUTION
|
||||||
|
STA DIVISOR
|
||||||
|
LDA RESLO
|
||||||
|
STA DIVISOR+1
|
||||||
|
JSR DIVISION
|
||||||
|
LDA QUOTIENT+3
|
||||||
|
STA $50
|
||||||
|
LDA QUOTIENT+2
|
||||||
|
STA $51
|
||||||
|
JSR HEXDEC
|
||||||
|
LDA DEC3
|
||||||
|
STA METRTMP1
|
||||||
|
LDA DEC4
|
||||||
|
STA METRTMP2
|
||||||
|
LDA DEC5
|
||||||
|
STA METRTMP3
|
||||||
|
RTS
|
||||||
|
SPEEDDEC LDA SPEED
|
||||||
|
STA $50
|
||||||
|
LDA #$00
|
||||||
|
STA $51
|
||||||
|
JSR HEXDEC
|
||||||
|
LDA DEC3
|
||||||
|
STA METRSPD1
|
||||||
|
LDA DEC4
|
||||||
|
STA METRSPD2
|
||||||
|
LDA DEC5
|
||||||
|
STA METRSPD3
|
||||||
|
RTS
|
||||||
|
METRPOKE LDY #23
|
||||||
|
LDX #0
|
||||||
|
METRPLOO LDA METRDISP,X
|
||||||
|
JSR POKE80
|
||||||
|
INX
|
||||||
|
CPX #11
|
||||||
|
BCC METRPLOO
|
||||||
|
RTS
|
||||||
|
;========================================================
|
||||||
|
; CONVERTS HEX IN ($50,$51) TO DECIMAL
|
||||||
|
; FROM APPLE PROGRAMMERS HANDBOOK P. 225
|
||||||
|
;========================================================
|
||||||
|
HEXDEC LDA #$0A
|
||||||
|
STA $53
|
||||||
|
LDY #$04
|
||||||
|
HEXDEC0 LDX #$10
|
||||||
|
LDA #$00
|
||||||
|
STA $52
|
||||||
|
CLC
|
||||||
|
HEXDEC1 ROL $50
|
||||||
|
ROL $51
|
||||||
|
ROL $52
|
||||||
|
DEX
|
||||||
|
BMI HEXDEC2
|
||||||
|
LDA $52
|
||||||
|
SEC
|
||||||
|
SBC $53
|
||||||
|
BCC HEXDEC1
|
||||||
|
STA $52
|
||||||
|
BCS HEXDEC1
|
||||||
|
HEXDEC2 CLC
|
||||||
|
ROR $52
|
||||||
|
LDA $52
|
||||||
|
ORA #$B0
|
||||||
|
STA DEC1,Y
|
||||||
|
DEY
|
||||||
|
BPL HEXDEC0
|
||||||
|
RTS
|
||||||
|
DEC1 DFB $B0
|
||||||
|
DEC2 DFB $B0
|
||||||
|
DEC3 DFB $B0
|
||||||
|
DEC4 DFB $B0
|
||||||
|
DEC5 DFB $B0
|
||||||
|
;
|
||||||
|
CHN MFF0DRVR.SC7
|
128
LEGACY/MFF0DRVR.SC7.txt
Normal file
128
LEGACY/MFF0DRVR.SC7.txt
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
;-------------------------------------------------------------------------
|
||||||
|
; APPLE MIDI DRIVER THROUGH ANNUNCIATOR 0
|
||||||
|
; COPYRIGHT 1998, ERIC RANGELL
|
||||||
|
;-------------------------------------------------------------------------
|
||||||
|
; THIS DRIVER IMPLEMENTS ASYNCHRONOUS SERIAL DATA TRANSMISSION
|
||||||
|
; THROUGH THE APPLE ANNUNCIATOR 0 OUTPUT PORT OF THE GAME CONNECTOR
|
||||||
|
; USING 32 CYCLES PER BIT TO ACHIEVE A 31.25K MIDI BAUD RATE.
|
||||||
|
;
|
||||||
|
; THE OUTPUT IS INITIALIZED TO A HIGH LOGIC VOLTAGE. WHEN IT GOES
|
||||||
|
; LOW FOR 32 MICROSECONDS, THAT INDICATES THE START BIT OF A MIDI BYTE.
|
||||||
|
; THEN 8 BYTES OF DATA ARE TRANSMITTED, FOLLOWED BY A HIGH STOP BIT.
|
||||||
|
; THE DATA BYTES REPRESENT MIDI MESSAGES WHICH CAN BE INTERPRETED BY
|
||||||
|
; ANY MUSICAL INSTRUMENT THAT IMPLEMENTS MIDI.
|
||||||
|
;
|
||||||
|
;-------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
AN0OFF EQU $C058 ;APPLE ADDRESSES THAT CONTROL ANNUNCIATOR OUTPUTS
|
||||||
|
AN0ON EQU $C059
|
||||||
|
AN1OFF EQU $C05A
|
||||||
|
AN1ON EQU $C05B
|
||||||
|
AN2OFF EQU $C05C
|
||||||
|
AN2ON EQU $C05D
|
||||||
|
AN3OFF EQU $C05E
|
||||||
|
AN3ON EQU $C05F
|
||||||
|
;
|
||||||
|
TEMPA DFB $00
|
||||||
|
TEMPX DFB $00
|
||||||
|
;---------------------------------------------------------------------------
|
||||||
|
XMITONE STA TEMPA ;SAVE A AND X REGISTERS
|
||||||
|
STX TEMPX
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT7+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT6+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT5+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT4+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT3+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT2+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT1+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT0+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
JSR XMITBITS ;SEND THE BYTE OUT
|
||||||
|
LDX TEMPX
|
||||||
|
LDA TEMPA ;RESTORE X AND A
|
||||||
|
RTS
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
XMITBITS BIT AN0OFF ;4 CYCLES - TRANSMIT START BIT - ALWAYS LOW
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT0 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT1 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT2 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT3 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT4 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT5 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT6 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT7 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT AN0ON ;4 ;TRANSMIT STOP BIT - ALWAYS HIGH
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
RTS
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
DELAY22 NOP ;WAIT 22 CYCLES
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
RTS
|
||||||
|
;----------------
|
||||||
|
; END OF PROGRAM
|
||||||
|
;----------------
|
||||||
|
;==================================================
|
||||||
|
EOF BRK
|
112
LEGACY/MFF0DRVR.SRC.txt
Normal file
112
LEGACY/MFF0DRVR.SRC.txt
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
;
|
||||||
|
; MFF0 PLAYER - PLAYS A SPECIFIC AREA OF AUX OR MAIN MEMORY
|
||||||
|
;
|
||||||
|
;
|
||||||
|
ORG $0800
|
||||||
|
;
|
||||||
|
ENTRYPTS JMP AUXSETUP ;COPY CODE TO AUX MEM
|
||||||
|
JMP PLAYMAIN ;PLAY FROM MAIN MEMORY
|
||||||
|
JMP PLAYAUX ;PLAY FROM AUX MEMORY
|
||||||
|
JMP DOAUXMV ;FOR USER - TO DO AUXMOVE
|
||||||
|
JMP DOXFER ;FOR USER - TO XFER
|
||||||
|
;----------------
|
||||||
|
; PARAMETERS
|
||||||
|
;----------------
|
||||||
|
PLAYSTRT DW $2000 ;STARTING ADDRESS OF PLAYBACK - SET BY CALLER
|
||||||
|
PLAYSTOP DW $7800 ;ENDING ADDRESS OF PLAYBACK+1 - SET BY CALLER
|
||||||
|
PHASE DFB $00 ;CURRENT PHASE OF PROCESSING
|
||||||
|
ENDOFTRK DFB $00 ;SIGNALS THAT END OF TRACK (00 FF 2F 00) REACHED
|
||||||
|
;----------------
|
||||||
|
; USER PARAMETERS FOR AUXMOVE
|
||||||
|
;----------------
|
||||||
|
SRCMAINL DFB $00
|
||||||
|
SRCMAINH DFB $00
|
||||||
|
ENDMAINL DFB $00
|
||||||
|
ENDMAINH DFB $00
|
||||||
|
TGTAUXL DFB $00
|
||||||
|
TGTAUXH DFB $00
|
||||||
|
TOAUX DFB $00
|
||||||
|
;----------------
|
||||||
|
; USER PARAMETERS FOR TRANSFER
|
||||||
|
;----------------
|
||||||
|
XFERADRL DFB $00
|
||||||
|
XFERADRH DFB $00
|
||||||
|
XFTOAUX DFB $00
|
||||||
|
USEAUXZP DFB $00
|
||||||
|
;--------
|
||||||
|
LYRICS DFB $01 ;PRINT LYRICS
|
||||||
|
PRNTSPED DFB $00 ;PRINT SPEED
|
||||||
|
PIANOSCR DFB $01 ;PIANO DISPLAY ON
|
||||||
|
DISPMODE DFB $01 ; 00 = UPPERCASE SHARPS, NONZERO = LOWERCASE FLATS
|
||||||
|
MASKDRUM DFB $01 ; DISPLAY CHANNEL 9 (DRUMS) WITH *
|
||||||
|
USEINVRS DFB $00 ; WHETHER TO USE INVERSE LETTERS - FOR PIANO DISPLAY
|
||||||
|
KARALOOK DFB $00 ; WHETHER TO USE KARAOKE LOOKAHEAD
|
||||||
|
RESOLUTN DFB $00,$F0 ; RESOLUTION FROM MIDI HEADER -USED FOR TEMPO CHGS
|
||||||
|
SPEEDINC DFB $00 ; USER'S AMOUNT TO ADD OR SUBTRACT FROM SPEED
|
||||||
|
DOTMPOCG DFB $01 ; PROCESS TEMPO CHANGES
|
||||||
|
METRDISP ASC 'MM' ;METRONOME DISPLAY
|
||||||
|
METRTMP1 ASC '1'
|
||||||
|
METRTMP2 ASC '2'
|
||||||
|
METRTMP3 ASC '0'
|
||||||
|
METRFILL ASC ' SP'
|
||||||
|
METRSPD1 ASC '0'
|
||||||
|
METRSPD2 ASC '2'
|
||||||
|
METRSPD3 ASC '7'
|
||||||
|
KEYSIGP1 ASC '('
|
||||||
|
KEYSIGP2 ASC 'C'
|
||||||
|
KEYSIGP3 ASC ' '
|
||||||
|
KEYSIGP4 ASC 'M'
|
||||||
|
KEYSIGP5 ASC ')'
|
||||||
|
;-------------------
|
||||||
|
; INTERNAL VARIABLES
|
||||||
|
;-------------------
|
||||||
|
INBYTE DFB $00 ;VALUE OF CURRENT BYTE
|
||||||
|
PAUSEFLG DFB $00
|
||||||
|
DELTATIM DFB $00,$00,$00,$00
|
||||||
|
DELTACTR DFB $00,$00
|
||||||
|
LASTSTAT DFB $00
|
||||||
|
DBYTES DFB $00
|
||||||
|
XMITMSG ASC 'X'
|
||||||
|
XMITSTS DFB $00
|
||||||
|
XMITBYT1 DFB $00
|
||||||
|
XMITBYT2 DFB $00
|
||||||
|
XMITBYT3 DFB $00
|
||||||
|
SYSXLEN DFB $00
|
||||||
|
TEXTEVT DFB $00
|
||||||
|
METALEN DFB $00
|
||||||
|
;---------------------
|
||||||
|
PLAYPTR EQU $06 ;POINTER TO CURRENT BYTE BEING READ
|
||||||
|
SPEED EQU $FF ;SPEED OF PLAYBACK - USED IN $FCA8 WAIT ROUTINE
|
||||||
|
;
|
||||||
|
COUT EQU $FDF0 ;USE MONITOR OUTPUT ROUTINE BECAUSE MAY PRINT FROM AUX MEM
|
||||||
|
MONWAIT EQU $FCA8 ;MONITOR DELAY ROUTINE
|
||||||
|
AUXMOVE EQU $C311 ;AUX MEM MOVE
|
||||||
|
AUXXFER EQU $C314 ;AUX MEM TRANSFER CONTROL
|
||||||
|
MONRTS EQU $FF58 ;ADDRESS OF RTS INSTRUCTION USED TO SET OVERFLOW FLAG
|
||||||
|
;------------
|
||||||
|
; PROGRAM PHASE NAMES:
|
||||||
|
;------------
|
||||||
|
DELTA0 EQU $00
|
||||||
|
DELTA1 EQU $01
|
||||||
|
DELTA2 EQU $02
|
||||||
|
DELTA3 EQU $03
|
||||||
|
GETINST EQU $04
|
||||||
|
DATA1 EQU $05
|
||||||
|
DATA2 EQU $06
|
||||||
|
DATA2B EQU $07
|
||||||
|
DATA3 EQU $08
|
||||||
|
SYSX0 EQU $09
|
||||||
|
SYSX1 EQU $0A
|
||||||
|
SYSX2 EQU $0B
|
||||||
|
META0 EQU $10
|
||||||
|
META1 EQU $11
|
||||||
|
META2 EQU $12
|
||||||
|
TEMPO1 EQU $13
|
||||||
|
TEMPO2 EQU $14
|
||||||
|
TEMPO3 EQU $15
|
||||||
|
TEMPO4 EQU $16
|
||||||
|
KEYSIG1 EQU $17
|
||||||
|
KEYSIG2 EQU $18
|
||||||
|
KEYSIG3 EQU $19
|
||||||
|
;-------------------
|
||||||
|
CHN MFF0DRVR.SC0
|
325
LEGACY/MFF0PLAY.SRC.txt
Normal file
325
LEGACY/MFF0PLAY.SRC.txt
Normal file
|
@ -0,0 +1,325 @@
|
||||||
|
; MFF0 PLAYER - ALSO DISPLAYS MIDI KARAOKE LYRICS
|
||||||
|
;
|
||||||
|
; T0 CONTAINS THE MIDI FILE DATA STRIPPED OF HEADER
|
||||||
|
;--------------
|
||||||
|
; MEMORY USAGE
|
||||||
|
;--------------
|
||||||
|
AUXMOVE EQU $C311
|
||||||
|
A1L EQU $3C ;AUXMOVE SOURCE START
|
||||||
|
A1H EQU $3D
|
||||||
|
A2L EQU $3E ;AUXMOVE SOURCE END
|
||||||
|
A2H EQU $3F
|
||||||
|
A4L EQU $42 ;AUXMOVE DESTINATION
|
||||||
|
A4H EQU $43
|
||||||
|
;
|
||||||
|
MAINBUFR EQU $2000 ; MAIN BUFFER
|
||||||
|
MAINEND EQU $757F
|
||||||
|
MAINLEN EQU $5580
|
||||||
|
AUX1BUFR EQU $1500 ; AUX1 BUFFER
|
||||||
|
AUX1END EQU $6A7F
|
||||||
|
AUX1LEN EQU $5580
|
||||||
|
AUX2BUFR EQU $6A80 ; AUX2 BUFFER
|
||||||
|
AUX2END EQU $BFFF
|
||||||
|
AUX2LEN EQU $5580
|
||||||
|
MTHDLEN EQU $0016 ; MFF0 HEADER LENGTH (22 BYTES)
|
||||||
|
;--------
|
||||||
|
; LINKAGE AREA TO MFF0DRVR.OBJ
|
||||||
|
;--------
|
||||||
|
DRVRSTRT EQU $80F
|
||||||
|
DRVREND EQU $811
|
||||||
|
DRVREOT EQU $814
|
||||||
|
DRVRINIT EQU $800
|
||||||
|
DRVRMAIN EQU $803
|
||||||
|
DRVRAUX EQU $806
|
||||||
|
;--------
|
||||||
|
ORG $75FD ; MLI BUFFER
|
||||||
|
JMP MAINLINE ; PROGRAM
|
||||||
|
FILEBUFR DS $400 ;MLI FILE BUFFER FOR OPEN FILE
|
||||||
|
EOFFLAG DFB $00 ;LOADMAIN WILL SET THIS TO 1 WHEN EOF REACHED
|
||||||
|
USERSTOP DFB $00 ;DETECTS IF STOPPED BEFORE END OF SEQUENCE
|
||||||
|
DEBUG DFB $00 ;DEBUG MODE - PRINTS LOAD & PLAY RESULTS
|
||||||
|
PATHNAME DFB 62 ;USER POKES LENGTH IN HERE ($7903)
|
||||||
|
ASC '/ ' ;USER POKES PATHNAME IN HERE, ENDING IN $00
|
||||||
|
ASC ' '
|
||||||
|
ASC ' '
|
||||||
|
ASC ' '
|
||||||
|
ASC ' '
|
||||||
|
ASC ' '
|
||||||
|
ASC ' '
|
||||||
|
DFB $00
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;ALGORITHM:
|
||||||
|
;==========
|
||||||
|
;WHILE NOT EOF
|
||||||
|
; LOAD MAIN,
|
||||||
|
; IF EOF
|
||||||
|
; MODE=PLAYMAIN
|
||||||
|
; ELSE
|
||||||
|
; TRANSFER MAIN TO AUX1
|
||||||
|
; LOAD MAIN,
|
||||||
|
; IF EOF
|
||||||
|
; MODE=AUX1MAIN
|
||||||
|
; ELSE
|
||||||
|
; TRANSFER MAIN TO AUX2
|
||||||
|
; LOAD MAIN
|
||||||
|
; MODE=AUX1AUX2MAIN
|
||||||
|
;
|
||||||
|
;MODE PLAYMAIN
|
||||||
|
; PLAY MAIN
|
||||||
|
;
|
||||||
|
;MODE AUX1MAIN
|
||||||
|
; PLAY AUX1
|
||||||
|
; PLAY MAIN
|
||||||
|
;
|
||||||
|
;MODE AUX1AUX2MAIN
|
||||||
|
; PLAY AUX1
|
||||||
|
; PLAY AUX2
|
||||||
|
; PLAY MAIN
|
||||||
|
;
|
||||||
|
;========
|
||||||
|
;MAINLINE
|
||||||
|
;========
|
||||||
|
MAINLINE JSR MIDIINIT
|
||||||
|
JSR DRVRINIT
|
||||||
|
JSR OPENFILE
|
||||||
|
JSR READHEAD
|
||||||
|
PLAYLOOP JSR LOADMAIN
|
||||||
|
LDA EOFFLAG
|
||||||
|
BNE MAINONLY
|
||||||
|
;
|
||||||
|
JSR XFERAUX1
|
||||||
|
JSR LOADMAIN
|
||||||
|
LDA EOFFLAG
|
||||||
|
BNE AUX1MAIN
|
||||||
|
;
|
||||||
|
JSR XFERAUX2
|
||||||
|
JSR LOADMAIN
|
||||||
|
JSR A1A2MAIN
|
||||||
|
LDA EOFFLAG
|
||||||
|
BEQ PLAYLOOP
|
||||||
|
JMP EXITPGM
|
||||||
|
;=======
|
||||||
|
MIDIINIT BIT $C059 ;AN0ON
|
||||||
|
LDA #$00
|
||||||
|
STA USERSTOP
|
||||||
|
STA $C001 ; 80STOREON
|
||||||
|
STA $C056 ; HIRES OFF
|
||||||
|
STA $C054 ; TEXT PAGE IN MAIN RAM
|
||||||
|
RTS
|
||||||
|
;-------
|
||||||
|
MAINONLY JSR PLAYMAIN
|
||||||
|
JMP EXITPGM
|
||||||
|
;-------
|
||||||
|
AUX1MAIN JSR PLAYAUX1
|
||||||
|
JSR PLAYMAIN
|
||||||
|
JMP EXITPGM
|
||||||
|
;-------
|
||||||
|
A1A2MAIN JSR PLAYAUX1
|
||||||
|
JSR PLAYAUX2
|
||||||
|
JSR PLAYMAIN
|
||||||
|
RTS
|
||||||
|
;-------
|
||||||
|
EXITPGM JSR CLOSEFIL
|
||||||
|
RTS
|
||||||
|
;-------------------
|
||||||
|
;==END OF MAINLINE==
|
||||||
|
;-------------------
|
||||||
|
;--------
|
||||||
|
;OPENFILE
|
||||||
|
;--------
|
||||||
|
MLI EQU $BF00
|
||||||
|
OPENCMD EQU $C8
|
||||||
|
READCMD EQU $CA
|
||||||
|
CLOSECMD EQU $CC
|
||||||
|
PRINTERR EQU $FDDA
|
||||||
|
;
|
||||||
|
OPENPARM DFB $03
|
||||||
|
DW PATHNAME
|
||||||
|
DW FILEBUFR
|
||||||
|
OPENREF DFB $00
|
||||||
|
;
|
||||||
|
RHEADPRM DFB $04
|
||||||
|
RHEADREF DFB $00
|
||||||
|
HDATADRS DW MAINBUFR
|
||||||
|
HREQLEN DW MTHDLEN
|
||||||
|
HACTLEN DW $0000
|
||||||
|
;
|
||||||
|
READPARM DFB $04
|
||||||
|
READREF DFB $00
|
||||||
|
DATAADRS DW MAINBUFR
|
||||||
|
REQLEN DW MAINLEN
|
||||||
|
ACTLEN DW $0000
|
||||||
|
;
|
||||||
|
CLOSEPRM DFB $01
|
||||||
|
CLOSEREF DFB $00
|
||||||
|
;
|
||||||
|
OPENFILE JSR MLI
|
||||||
|
DFB OPENCMD
|
||||||
|
DW OPENPARM
|
||||||
|
BCS MLIERROR
|
||||||
|
LDA OPENREF
|
||||||
|
STA READREF
|
||||||
|
STA RHEADREF
|
||||||
|
STA CLOSEREF
|
||||||
|
RTS
|
||||||
|
;
|
||||||
|
MLIERROR JSR PRINTERR
|
||||||
|
BRK
|
||||||
|
;--------
|
||||||
|
CLOSEFIL JSR MLI
|
||||||
|
DFB CLOSECMD
|
||||||
|
DW CLOSEPRM
|
||||||
|
BCS MLIERROR
|
||||||
|
RTS
|
||||||
|
;--------
|
||||||
|
LOADMAIN LDA USERSTOP
|
||||||
|
BEQ LOADMAI1
|
||||||
|
RTS
|
||||||
|
LOADMAI1 JSR MLI
|
||||||
|
DFB READCMD
|
||||||
|
DW READPARM
|
||||||
|
BCC GOODREAD ;NO MLI ERROR
|
||||||
|
CMP #$4C ; DID WE READ PAST EOF?
|
||||||
|
BEQ MARKEOF
|
||||||
|
BNE MLIERROR
|
||||||
|
GOODREAD LDA DEBUG
|
||||||
|
BEQ SKIP1
|
||||||
|
LDA #'R'
|
||||||
|
JSR $FDF0
|
||||||
|
LDA ACTLEN+1
|
||||||
|
JSR $FDDA
|
||||||
|
LDA ACTLEN
|
||||||
|
JSR $FDDA
|
||||||
|
SKIP1 LDA REQLEN ;COMPARE ACTUAL LEN TO REQUESTED LEN
|
||||||
|
CMP ACTLEN ;TO CHECK FOR EOF CONDITION
|
||||||
|
BNE MARKEOF
|
||||||
|
LDA REQLEN+1
|
||||||
|
CMP ACTLEN+1
|
||||||
|
BNE MARKEOF
|
||||||
|
RTS
|
||||||
|
MARKEOF LDA #$1
|
||||||
|
STA EOFFLAG
|
||||||
|
RTS
|
||||||
|
;--------
|
||||||
|
READHEAD JSR MLI
|
||||||
|
DFB READCMD
|
||||||
|
DW RHEADPRM
|
||||||
|
BCC GOODHEAD ;NO MLI ERROR
|
||||||
|
CMP #$4C ; DID WE READ PAST EOF?
|
||||||
|
BEQ MARKEOF
|
||||||
|
BNE MLIERROR
|
||||||
|
GOODHEAD RTS
|
||||||
|
;--------
|
||||||
|
XFERAUX1 LDA #>MAINBUFR
|
||||||
|
STA A1L
|
||||||
|
LDA #<MAINBUFR
|
||||||
|
STA A1H
|
||||||
|
LDA #>MAINEND
|
||||||
|
STA A2L
|
||||||
|
LDA #<MAINEND
|
||||||
|
STA A2H
|
||||||
|
LDA #>AUX1BUFR
|
||||||
|
STA A4L
|
||||||
|
LDA #<AUX1BUFR
|
||||||
|
STA A4H
|
||||||
|
SEC ;MAIN TO AUX
|
||||||
|
JSR AUXMOVE
|
||||||
|
RTS
|
||||||
|
;--------
|
||||||
|
XFERAUX2 LDA #>MAINBUFR
|
||||||
|
STA A1L
|
||||||
|
LDA #<MAINBUFR
|
||||||
|
STA A1H
|
||||||
|
LDA #>MAINEND
|
||||||
|
STA A2L
|
||||||
|
LDA #<MAINEND
|
||||||
|
STA A2H
|
||||||
|
LDA #>AUX2BUFR
|
||||||
|
STA A4L
|
||||||
|
LDA #<AUX2BUFR
|
||||||
|
STA A4H
|
||||||
|
SEC ;MAIN TO AUX
|
||||||
|
JSR AUXMOVE
|
||||||
|
RTS
|
||||||
|
;--------
|
||||||
|
PLAYAUX1 LDA DEBUG
|
||||||
|
BEQ SKIP2
|
||||||
|
LDA #'1'
|
||||||
|
JSR $FDF0
|
||||||
|
;
|
||||||
|
SKIP2 LDA USERSTOP
|
||||||
|
BEQ AUX1OK
|
||||||
|
RTS
|
||||||
|
AUX1OK LDA #>AUX1BUFR
|
||||||
|
STA DRVRSTRT
|
||||||
|
LDA #<AUX1BUFR
|
||||||
|
STA DRVRSTRT+1
|
||||||
|
LDA #>AUX1END
|
||||||
|
CLC
|
||||||
|
ADC #$01
|
||||||
|
STA DRVREND
|
||||||
|
LDA #<AUX1END
|
||||||
|
ADC #$00
|
||||||
|
STA DRVREND+1
|
||||||
|
JSR DRVRAUX
|
||||||
|
LDA DRVREOT
|
||||||
|
BEQ AUX1DONE
|
||||||
|
LDA #$01
|
||||||
|
STA EOFFLAG
|
||||||
|
STA USERSTOP
|
||||||
|
AUX1DONE RTS
|
||||||
|
;--------
|
||||||
|
PLAYAUX2 LDA DEBUG
|
||||||
|
BEQ SKIP3
|
||||||
|
LDA #'2'
|
||||||
|
JSR $FDF0
|
||||||
|
;
|
||||||
|
SKIP3 LDA USERSTOP
|
||||||
|
BEQ AUX2OK
|
||||||
|
RTS
|
||||||
|
AUX2OK LDA #>AUX2BUFR
|
||||||
|
STA DRVRSTRT
|
||||||
|
LDA #<AUX2BUFR
|
||||||
|
STA DRVRSTRT+1
|
||||||
|
LDA #>AUX2END
|
||||||
|
CLC
|
||||||
|
ADC #$01
|
||||||
|
STA DRVREND
|
||||||
|
LDA #<AUX2END
|
||||||
|
ADC #$00
|
||||||
|
STA DRVREND+1
|
||||||
|
JSR DRVRAUX
|
||||||
|
LDA DRVREOT
|
||||||
|
BEQ AUX2DONE
|
||||||
|
LDA #$01
|
||||||
|
STA EOFFLAG
|
||||||
|
STA USERSTOP
|
||||||
|
AUX2DONE RTS
|
||||||
|
;--------
|
||||||
|
PLAYMAIN LDA DEBUG
|
||||||
|
BEQ SKIP4
|
||||||
|
LDA #'M'
|
||||||
|
JSR $FDF0
|
||||||
|
;
|
||||||
|
SKIP4 LDA USERSTOP
|
||||||
|
BEQ MAINOK
|
||||||
|
RTS
|
||||||
|
MAINOK LDA #>MAINBUFR
|
||||||
|
STA DRVRSTRT
|
||||||
|
LDA #<MAINBUFR
|
||||||
|
STA DRVRSTRT+1
|
||||||
|
LDA #>MAINEND
|
||||||
|
CLC
|
||||||
|
ADC #$01
|
||||||
|
STA DRVREND
|
||||||
|
LDA #<MAINEND
|
||||||
|
ADC #$00
|
||||||
|
STA DRVREND+1
|
||||||
|
JSR DRVRMAIN
|
||||||
|
LDA DRVREOT
|
||||||
|
BEQ MAINDONE
|
||||||
|
LDA #$01
|
||||||
|
STA EOFFLAG
|
||||||
|
STA USERSTOP
|
||||||
|
MAINDONE RTS
|
23
LEGACY/MIDIDRVR.SC0.txt
Normal file
23
LEGACY/MIDIDRVR.SC0.txt
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
;MIDIDRVR.SC0
|
||||||
|
;
|
||||||
|
TESTDAT1 DFB $90,$3C,$40,$40,$40,$43,$40
|
||||||
|
TESTDAT2 DFB $90,$3C,$00,$40,$00,$43,$00
|
||||||
|
QUIETMSG DFB $B0,$78,$00,$B0,$79,$00,$B0,$7B,$00
|
||||||
|
DFB $B1,$78,$00,$B1,$79,$00,$B1,$7B,$00
|
||||||
|
DFB $B2,$78,$00,$B2,$79,$00,$B2,$7B,$00
|
||||||
|
DFB $B3,$78,$00,$B3,$79,$00,$B3,$7B,$00
|
||||||
|
DFB $B4,$78,$00,$B4,$79,$00,$B4,$7B,$00
|
||||||
|
DFB $B5,$78,$00,$B5,$79,$00,$B5,$7B,$00
|
||||||
|
DFB $B6,$78,$00,$B6,$79,$00,$B6,$7B,$00
|
||||||
|
DFB $B7,$78,$00,$B7,$79,$00,$B7,$7B,$00
|
||||||
|
DFB $B8,$78,$00,$B8,$79,$00,$B8,$7B,$00
|
||||||
|
DFB $B9,$78,$00,$B9,$79,$00,$B9,$7B,$00
|
||||||
|
DFB $BA,$78,$00,$BA,$79,$00,$BA,$7B,$00
|
||||||
|
DFB $BB,$78,$00,$BB,$79,$00,$BB,$7B,$00
|
||||||
|
DFB $BC,$78,$00,$BC,$79,$00,$BC,$7B,$00
|
||||||
|
DFB $BD,$78,$00,$BD,$79,$00,$BD,$7B,$00
|
||||||
|
DFB $BE,$78,$00,$BE,$79,$00,$BE,$7B,$00
|
||||||
|
DFB $BF,$78,$00,$BF,$79,$00,$BF,$7B,$00
|
||||||
|
;----------------
|
||||||
|
; END OF PROGRAM
|
||||||
|
;----------------
|
195
LEGACY/MIDIDRVR.SRC.txt
Normal file
195
LEGACY/MIDIDRVR.SRC.txt
Normal file
|
@ -0,0 +1,195 @@
|
||||||
|
;-------------------------------------------------------------------------
|
||||||
|
; APPLE MIDI DRIVER THROUGH ANNUNCIATOR 0
|
||||||
|
; COPYRIGHT 1998, ERIC RANGELL
|
||||||
|
;-------------------------------------------------------------------------
|
||||||
|
; THIS DRIVER IMPLEMENTS ASYNCHRONOUS SERIAL DATA TRANSMISSION
|
||||||
|
; THROUGH THE APPLE ANNUNCIATOR 0 OUTPUT PORT OF THE GAME CONNECTOR
|
||||||
|
; USING 32 CYCLES PER BIT TO ACHIEVE A 31.25K MIDI BAUD RATE.
|
||||||
|
;
|
||||||
|
; THE OUTPUT IS INITIALIZED TO A HIGH LOGIC VOLTAGE. WHEN IT GOES
|
||||||
|
; LOW FOR 32 MICROSECONDS, THAT INDICATES THE START BIT OF A MIDI BYTE.
|
||||||
|
; THEN 8 BYTES OF DATA ARE TRANSMITTED, FOLLOWED BY A HIGH STOP BIT.
|
||||||
|
; THE DATA BYTES REPRESENT MIDI MESSAGES WHICH CAN BE INTERPRETED BY
|
||||||
|
; ANY MUSICAL INSTRUMENT THAT IMPLEMENTS MIDI.
|
||||||
|
;
|
||||||
|
; ENTRY POINTS:
|
||||||
|
;
|
||||||
|
; $9000 = INITIALIZE - TURNS ON ANNUNCIATOR 0 - MUST BE CALLED ONCE
|
||||||
|
; $9003 = APPLESOFT CALL TO SEND ONE MIDI BYTE. POKE THE BYTE IN $9004.
|
||||||
|
; $9005 = ASSEMBLY CALL TO SEND ONE MIDI BYTE FROM ACCUMULATOR
|
||||||
|
; $9008 = APPLESOFT OR ASSEMBLY CALL TO SEND SEVERAL BYTES AT ONCE:
|
||||||
|
; THE CALLER POPULATES LOCATION $D7 WITH THE NUMBER OF BYTES TO BE
|
||||||
|
; TRANSMITTED, AND A POINTER IN $CE,CF (LO,HI) WITH THE ADDRESS OF
|
||||||
|
; THE DATA BYTES, THEN CALLS THE ENTRY POINT "SENDMSG" TO TRANSMIT
|
||||||
|
; THE MESSAGE.
|
||||||
|
; $900B = SEND A TEST MESSAGE - C MAJOR CHORD NOTE ONS
|
||||||
|
; $900E = SEND A TEST MESSAGE - C MAJOR CHORD NOTE OFFS
|
||||||
|
;-------------------------------------------------------------------------
|
||||||
|
ORG $9000
|
||||||
|
;
|
||||||
|
AN0OFF EQU $C058 ;APPLE ADDRESSES THAT CONTROL ANNUNCIATOR OUTPUTS
|
||||||
|
AN0ON EQU $C059
|
||||||
|
AN1OFF EQU $C05A
|
||||||
|
AN1ON EQU $C05B
|
||||||
|
AN2OFF EQU $C05C
|
||||||
|
AN2ON EQU $C05D
|
||||||
|
AN3OFF EQU $C05E
|
||||||
|
AN3ON EQU $C05F
|
||||||
|
;
|
||||||
|
; CALLER MUST POPULATE THE FOLLOWING TWO ZERO PAGE LOCATIONS FOR SENDMSG:
|
||||||
|
;
|
||||||
|
NUMBYTES EQU $D7 ;NUMBER OF BYTES TO BE TRANSMITTED NOW (1-256)
|
||||||
|
; ;THE VALUE 0 WILL TRANSMIT 256 BYTES.
|
||||||
|
DATAPTR EQU $CE ;POINTER TO THE BYTES TO BE TRANSMITTED NOW
|
||||||
|
;---------------------------------------------------------------------------
|
||||||
|
START JMP INIT ;MAIN ENTRY POINT - INITIALIZES ANNUNCIATORS
|
||||||
|
SENDFP LDA #$90 ;ENTRY POINT FOR APPLESOFT: POKE BYTE AND CALL
|
||||||
|
SENDONE JMP XMITONE ;ENTRY POINT FOR TRANSMITTING ONE BYTE FROM ACCUM
|
||||||
|
SENDMSG JMP XMITMSG ;ENTRY POINT FOR TRANSMITTING A MIDI MESSAGE
|
||||||
|
ALLNOFF JMP QUIET ;TURN ALL NOTES OFF
|
||||||
|
TEST1 JMP TESTMSG1 ;SEND TEST MESSAGE 1 - C MAJOR CHORD ON
|
||||||
|
TEST2 JMP TESTMSG2 ;SEND TEST MESSAGE 2 - C MAJOR CHORD OFF
|
||||||
|
SAVENBYT DFB $00 ;SAVE AREA FOR NUMBYTES
|
||||||
|
TEMPA DFB $00
|
||||||
|
TEMPX DFB $00
|
||||||
|
;---------------------------------------------------------------------------
|
||||||
|
INIT BIT AN0ON
|
||||||
|
RTS
|
||||||
|
;---------------------------------------------------------------------------
|
||||||
|
XMITMSG LDA NUMBYTES ;SAVE NUMBER OF BYTES
|
||||||
|
STA SAVENBYT ;BECAUSE WE WILL CLOBBER IT
|
||||||
|
LDY #$00 ;Y WILL BE AN INDEX INTO THE DATA AREA
|
||||||
|
XMITLOOP LDA (DATAPTR),Y ;GET A DATA BYTE
|
||||||
|
JSR XMITONE
|
||||||
|
INY ;POINT TO NEXT BYTE
|
||||||
|
DEC NUMBYTES ;DECREMENT COUNTER
|
||||||
|
LDA NUMBYTES ;CHECK IF ZERO
|
||||||
|
BNE XMITLOOP ;LOOP UNTIL DONE SENDING ALL BYTES
|
||||||
|
LDA SAVENBYT
|
||||||
|
STA NUMBYTES ;RESTORE ORIGINAL VALUE OF NUMBYTES
|
||||||
|
RTS
|
||||||
|
;---------------------------------------------------------------------------
|
||||||
|
XMITONE STA TEMPA ;SAVE A AND X REGISTERS
|
||||||
|
STX TEMPX
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT7+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT6+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT5+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT4+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT3+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT2+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT1+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
ASL A ;SHIFT BIT INTO CARRY
|
||||||
|
TAX ;SAVE CURRENT IMAGE OF DATA BYTE
|
||||||
|
LDA #$00 ;ZERO OUT ACCUMULATOR FOR ADD
|
||||||
|
ADC #>AN0OFF ;ADD CARRY TO ANNUNCIATOR ADDRESS
|
||||||
|
STA BIT0+1 ;MODIFY THE XMITBITS SUBROUTINE
|
||||||
|
TXA ;RESTORE ACCUMULATOR
|
||||||
|
;
|
||||||
|
JSR XMITBITS ;SEND THE BYTE OUT
|
||||||
|
LDX TEMPX
|
||||||
|
LDA TEMPA ;RESTORE X AND A
|
||||||
|
RTS
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
XMITBITS BIT AN0OFF ;4 CYCLES - TRANSMIT START BIT - ALWAYS LOW
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT0 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT1 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT2 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT3 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT4 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT5 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT6 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT7 BIT AN0OFF ;4
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
BIT AN0ON ;4 ;TRANSMIT STOP BIT - ALWAYS HIGH
|
||||||
|
JSR DELAY22 ;6+22
|
||||||
|
RTS
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
DELAY22 NOP ;WAIT 22 CYCLES
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
NOP
|
||||||
|
RTS
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
TESTMSG1 LDA #7
|
||||||
|
STA NUMBYTES
|
||||||
|
LDA #>TESTDAT1
|
||||||
|
STA DATAPTR
|
||||||
|
LDA #<TESTDAT1
|
||||||
|
STA DATAPTR+1
|
||||||
|
JSR SENDMSG
|
||||||
|
RTS
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
TESTMSG2 LDA #7
|
||||||
|
STA NUMBYTES
|
||||||
|
LDA #>TESTDAT2
|
||||||
|
STA DATAPTR
|
||||||
|
LDA #<TESTDAT2
|
||||||
|
STA DATAPTR+1
|
||||||
|
JSR SENDMSG
|
||||||
|
RTS
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
QUIET LDA #$90
|
||||||
|
STA NUMBYTES
|
||||||
|
LDA #>QUIETMSG
|
||||||
|
STA DATAPTR
|
||||||
|
LDA #<QUIETMSG
|
||||||
|
STA DATAPTR+1
|
||||||
|
JSR SENDMSG
|
||||||
|
RTS
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
CHN MIDIDRVR.SC0
|
9
LEGACY/README.md
Normal file
9
LEGACY/README.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# A2NoSlotMIDI - Legacy files
|
||||||
|
|
||||||
|
Older Videos:
|
||||||
|
|
||||||
|
https://www.youtube.com/watch?v=fdgd4MUtWYE
|
||||||
|
|
||||||
|
https://www.youtube.com/watch?v=tNYEfkiOkMA
|
||||||
|
|
||||||
|
Source code in this directory was originally assembled with EDASM
|
|
@ -7,7 +7,8 @@ See NoSlotMidi.pptx for Kansasfest 2018 Lightning Talk presentation about this p
|
||||||
|
|
||||||
DSK directory contains Apple 140K disk images of compiled code.
|
DSK directory contains Apple 140K disk images of compiled code.
|
||||||
|
|
||||||
SRC directory contains current source code
|
SRC directory contains current source code.
|
||||||
|
|
||||||
See LEGACY directory for previous versions of source code, disk images, and videos.
|
See LEGACY directory for previous versions of source code, disk images, and videos.
|
||||||
|
|
||||||
Submit your ideas for lesson plans as pull requests to the LESSONS directory.
|
Submit your ideas for lesson plans as pull requests to the LESSONS directory.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user