; DANCNOTE.SC0 - NON-INTERRUPT DRIVEN ; ORG $6000 ; JMP START ; GRPHMODE DFB $01 ; 01=USE GRAPHICS MODE,$00=USE TEXT MODE,$02=DOUBLE HIRES DISPMODE DFB $01 MASKDRUM DFB $01 USEINVRS DFB $00 INBYTE DFB $00 PHASE DFB $00 LASTSTAT DFB $00 XMITSTS DFB $00 XMITBYT1 DFB $00 XMITBYT2 DFB $00 XMITBYT3 DFB $00 DBYTES DFB $00 MIDISLOT DFB $20 ; JMP INITDHR JMP DONEDHR ; GETINST EQU $00 DATA1 EQU $01 DATA2 EQU $02 DATA3 EQU $03 SYSX0 EQU $04 DATA2B EQU $05 ; START LDA #$13 LDX MIDISLOT STA $C088,X LDA #$11 STA $C088,X WAITMIDI LDA $C000 BMI ADIOS LDX MIDISLOT LDA $C088,X AND #$01 BEQ WAITMIDI LDX MIDISLOT LDA $C089,X CMP #$F0 BEQ SKIPSYSX BCS WAITMIDI SYSXRET STA INBYTE JSR PRCSBYTE LDA $C000 BPL WAITMIDI ADIOS LDA $C010 RTS ; SKIPSYSX LDX MIDISLOT LDA $C088,X AND #$01 BEQ SKIPSYSX LDA $C089,X BPL SKIPSYSX BMI SYSXRET ; PRCSBYTE LDA PHASE PHINST CMP #GETINST BEQ PHINST0 JMP PHDATA3 PHINST0 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 ; RTS ; ;CHKF7 CMP #$F7 ; BNE INVAL ; LDA #GETINST ; STA PHASE ; RTS ; ;INVAL RTS ; 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 LDA GRPHMODE BNE DRAWGRPH LDA XMITSTS LDX XMITBYT1 LDY XMITBYT2 JSR MIDIPOKE SENDEXIT LDA #GETINST STA PHASE RTS ; PHSYSX RTS ; DRAWGRPH CMP #$01 BNE DOUBLEHI LDA XMITSTS LDX XMITBYT1 LDY XMITBYT2 JSR MIDIGRPH JMP SENDEXIT DOUBLEHI LDA XMITSTS LDX XMITBYT1 LDY XMITBYT2 JSR DBLGRPH JMP SENDEXIT ; ;-------- ;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 #102 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 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 ; CHN DANCNOTE.SC1 ; DANCNOTE.SC1 ; ;*** 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 DANCNOTE.SC2 ; DANCNOTE.SC2 ;------------------------- ; MIDIGRPH ROUTINE ; A=STATUS BYTE (9X OR 8X) ; X=NOTE ; Y=VELOCITY ;-------------------------- ; HGRPTRL EQU $EE HGRPTRH EQU $EF ; MIDIGRPH CMP #$80 BCC DRAWEXIT CMP #$90 BCC DRAWNOFF CMP #$A0 BCC DRAWNON CMP #$E0 BCC DRAWEXIT CMP #$F0 BCC PITCHBND DRAWEXIT RTS ; DRAWNOFF LDY #$00 DRAWNON AND #$0F ASL A STA DRAWCHNL STX DRAWNOTE STY DRAWVEL LDA #$80 SEC SBC DRAWNOTE TAX LDA HGRLINEL,X CLC ADC DRAWCHNL STA HGRPTRL LDA HGRLINEH,X ADC #$00 STA HGRPTRH LDY #$00 LDX DRAWVEL LDA VELBYTEL,X STA (HGRPTRL),Y INY LDA VELBYTER,X STA (HGRPTRL),Y RTS ; PITCHBND AND #$0F ASL A STA DRAWCHNL STX DRAWNOTE STY DRAWVEL LDX #140 LDA HGRLINEL,X CLC ADC DRAWCHNL STA HGRPTRL LDA HGRLINEH,X ADC #$00 STA HGRPTRH LDY #$00 LDX DRAWVEL CPX #$40 BCC PBLEFT BNE PBRIGHT LDA #$00 STA (HGRPTRL),Y INY LDA #$00 STA (HGRPTRL),Y RTS PBRIGHT TXA SEC SBC #$40 ASL A TAX LDA #$00 STA (HGRPTRL),Y INY LDA VELBYTER,X STA (HGRPTRL),Y RTS PBLEFT TXA ASL A TAX LDA VELBYTER,X EOR #$7F STA (HGRPTRL),Y INY LDA #$00 STA (HGRPTRL),Y RTS ; DRAWCHNL DFB $00 DRAWNOTE DFB $00 DRAWVEL DFB $00 ; VELBYTEL DFB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01 DFB $41,$41,$41,$41,$41,$41,$41,$41,$41,$41 DFB $41,$41,$41,$41,$41,$41,$41,$41,$41,$41 DFB $61,$61,$61,$61,$61,$61,$61,$61,$61,$61 DFB $61,$61,$61,$61,$61,$61,$61,$61,$61,$61 DFB $71,$71,$71,$71,$71,$71,$71,$71,$71,$71 DFB $71,$71,$71,$71,$71,$71,$71,$71,$71,$71 DFB $79,$79,$79,$79,$79,$79,$79,$79,$79,$79 DFB $79,$79,$79,$79,$79,$79,$79,$79,$79,$79 DFB $7D,$7D,$7D,$7D,$7D,$7D,$7D,$7D,$7D,$7D DFB $7D,$7D,$7D,$7D,$7D,$7D,$7D,$7D,$7D,$7D DFB $7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F DFB $7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F VELBYTER DFB $00,$01,$01,$01,$01,$01,$01,$01,$01,$01 DFB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01 DFB $03,$03,$03,$03,$03,$03,$03,$03,$03,$03 DFB $03,$03,$03,$03,$03,$03,$03,$03,$03,$03 DFB $07,$07,$07,$07,$07,$07,$07,$07,$07,$07 DFB $07,$07,$07,$07,$07,$07,$07,$07,$07,$07 DFB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F DFB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F DFB $1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F DFB $1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F DFB $3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F DFB $3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F DFB $7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F ; CHN DANCNOTE.SC3 ; DANCNOTE.SC3 - DOUBLE HIRES ;------------------------- ; DBLGRPH ROUTINE ; A=STATUS BYTE (9X,8X,EX) ; X=NOTE ; Y=VELOCITY ;-------------------------- ; DBLGRPH CMP #$80 BCC DBLEXIT CMP #$90 BCC DBLNOFF CMP #$A0 BCC DBLNON CMP #$E0 BCC DBLEXIT CMP #$F0 BCC DBLPBJMP DBLEXIT RTS DBLPBJMP RTS ;DBLPBJMP JMP DBLPBEND ; DBLHPOS DFB $00 DBLVPOS DFB $00 DBLNCHR DFB $00 DOFFSET DFB $00 DBLCPOS DFB $00 ; DBLNOFF LDY #$00 DBLNON AND #$0F STA DBLCHNL STX DBLNOTE STY DBLVEL LDA DBLNOTE CMP #36 BCC DBLEXIT CMP #96 BCS DBLEXIT SEC SBC #36 STA DOFFSET ASL A CLC ADC DOFFSET TAX LDA DISPMODE BEQ DBLUCS LDA LCFPOS,X STA DBLHPOS INX LDA LCFPOS,X STA DBLVPOS INX LDA LCFPOS,X STA DBLNCHR LDA DBLVEL BNE VELOK1 LDA DBLHPOS ROR A ROR A ORA #$7F STA DBLNCHR VELOK1 CLV BVC DBL1 DBLUCS LDA UCSPOS,X STA DBLHPOS INX LDA UCSPOS,X STA DBLVPOS INX LDA UCSPOS,X STA DBLNCHR LDA DBLVEL BNE DBL1 LDA DBLHPOS ROR A ROR A ORA #$7F STA DBLNCHR DBL1 LDA DBLCHNL ASL A ASL A CLC ADC DBLCHNL STA DBLCPOS CLC ADC DBLHPOS STA DBLHPOS TAX LDY DBLVPOS LDA DBLNCHR CPX #79 ;DRAWCHAR BCS DCHREX CPY #188 BCS DCHREX BCC DCONT DCHREX RTS DCONT STA DCHRA STX DCHRX STY DCHRY LDA DHRXMAP,X ;LOOK UP X COORDINATE TO GET OFFSET PHA AND #$7F STA XOFFSET PLA BPL DCONT2 ; STA $C054 LDA XOFFSET TAX CLC ADC LEFTADD,X TAY LDX DBLVEL LDA VELBYTEL,X AND #$FE STA (HGRPTRL),Y LDA XOFFSET TAX CLC ADC RIGHTADD,X TAY LDX DBLVEL LDA VELBYTER,X STA (HGRPTRL),Y STA $C055 CLV BVC SETX1D ; DCONT2 STA $C055 LDA XOFFSET TAX CLC ADC LEFTADD,X TAY LDX DBLVEL LDA VELBYTEL,X AND #$FE STA (HGRPTRL),Y LDA XOFFSET TAX CLC ADC RIGHTADD,X TAY LDX DBLVEL LDA VELBYTER,X STA (HGRPTRL),Y STA $C054 ; SETX1D LDA #$04 STA CHEIGHT LDX DCHRA LDA NOTEMAP,X TAX DCHRLOO LDY DCHRY LDA HGRLINEL,Y STA HGRPTRL LDA HGRLINEH,Y STA HGRPTRH LDA LETTERA,X LDY XOFFSET STA (HGRPTRL),Y INX INC DCHRY DEC CHEIGHT LDA CHEIGHT BNE DCHRLOO ; RTS ; LEFTADD DFB $0,$0,$FF,$0,$0,$0,$FF,$0,$FF,$0 DFB $0,$0,$FF,$0,$0,$0,$FF,$0,$FF,$0 DFB $0,$0,$FF,$0,$0,$0,$FF,$0,$FF,$0 DFB $0,$0,$FF,$0,$0,$0,$FF,$0,$FF,$0 DFB $0,$0,$FF,$0,$0,$0,$FF,$0,$FF,$0 DFB $0,$0,$FF,$0,$0,$0,$FF,$0,$FF,$0 DFB $0,$0,$FF,$0,$0,$0,$FF,$0,$FF,$0 DFB $0,$0,$FF,$0,$0,$0,$FF,$0,$FF,$0 ; RIGHTADD DFB $0,$01,$0,$01,$0,$0,$0,$01,$0,$0 DFB $0,$01,$0,$01,$0,$0,$0,$01,$0,$0 DFB $0,$01,$0,$01,$0,$0,$0,$01,$0,$0 DFB $0,$01,$0,$01,$0,$0,$0,$01,$0,$0 DFB $0,$01,$0,$01,$0,$0,$0,$01,$0,$0 DFB $0,$01,$0,$01,$0,$0,$0,$01,$0,$0 DFB $0,$01,$0,$01,$0,$0,$0,$01,$0,$0 DFB $0,$01,$0,$01,$0,$0,$0,$01,$0,$0 ; ; ; ; LDX DBLCPOS ; INX ; INX ; LDA DHRXMAP,X ;LOOK UP X COORDINATE TO GET OFFSET ; STA $C054 ; BPL SETX1B ; STA $C055 ;SETX1B AND #$7F ; STA XOFFSET ; TAY ; LDX DBLVEL ; LDA VELBYTEL,X ; AND #$FE ; STA (HGRPTRL),Y ; INY ; LDA VELBYTER,X ; STA (HGRPTRL),Y ; RTS ; ; LDX DBLCPOS ; INX ; INX ; INX ; LDA DHRXMAP,X ;LOOK UP X COORDINATE TO GET OFFSET ; STA $C054 ; BPL SETX1C ; STA $C055 ;SETX1C AND #$7F ; STA XOFFSET ; TAY ; LDX DBLVEL ; LDA VELBYTER,X ; STA (HGRPTRL),Y ; RTS ; ;DBLPBEND AND #$0F ; ASL A ; STA DBLCHNL ; STX DBLNOTE ; STY DBLVEL ; LDX #191 ; LDA HGRLINEL,X ; CLC ; ADC DBLCHNL ; STA HGRPTRL ; LDA HGRLINEH,X ; ADC #$00 ; STA HGRPTRH ; LDY #$00 ; LDX DBLVEL ; CPX #$40 ; BCC DPBLEFT ; BNE DPBRIGHT ; LDA #$00 ; STA (HGRPTRL),Y ; INY ; LDA #$00 ; STA (HGRPTRL),Y ; RTS ;DPBRIGHT TXA ; SEC ; SBC #$40 ; ASL A ; TAX ; LDA #$00 ; STA (HGRPTRL),Y ; INY ; LDA VELBYTER,X ; STA (HGRPTRL),Y ; RTS ;DPBLEFT TXA ; ASL A ; TAX ; LDA VELBYTER,X ; EOR #$7F ; STA (HGRPTRL),Y ; INY ; LDA #$00 ; STA (HGRPTRL),Y ; RTS ; DBLCHNL DFB $00 DBLNOTE DFB $00 DBLVEL DFB $00 ; CHN DANCNOTE.SC4 ; DOUBLE HIRES ROUTINES - DRAW BOARD FOR DANCING NOTES ; ZPTR EQU $EE ; INITDHR STA $C050 ;TEXT OFF STA $C057 ;HI RES ON STA $C052 ;FULL SCREEN STA $C00D ;80 COLUMNS ON STA $C05E ;ANNUNCIATOR 3 ON STA $C001 ;80 STORE ON - ALLOWS PAGE2 TO SWITCH MAIN/AUX STA $C055 ;ACCESS AUX MEMORY JSR CLEARSCR STA $C054 ;ACCESS MAIN MEMORY JSR CLEARSCR JSR DRAWGRID RTS ; DONEDHR STA $C051 ;TEXT ON STA $C056 ;HIRES OFF STA $C00C ;80COL OFF STA $C054 ;PAGE 1 STA $C05E ;TURN OFF AN3 RTS ; CLEARSCR LDA #$20 STA ZPTR+1 LDA #$00 STA ZPTR CLEARSC1 LDA #$00 LDY #$00 CLEARSC2 STA (ZPTR),Y INY BNE CLEARSC2 INC ZPTR+1 LDA ZPTR+1 CMP #$40 BCC CLEARSC1 RTS ; DRAWGRID LDY #$00 JSR HORIZLN LDY #177 JSR HORIZLN JSR VERTLNS JSR DRAWNUMS ;;; JSR CHARTEST RTS ; DRAWNUMS LDA #$00 STA NUMPTR NUMLOOP LDA NUMPTR TAX LDA NUMDATA+1,X TAY LDA NUMDATA+2,X PHA LDA NUMDATA,X TAX PLA JSR DRAWNUM INC NUMPTR INC NUMPTR INC NUMPTR LDA NUMPTR CMP NUMCOUNT BNE NUMLOOP RTS ; ;CHARTEST LDA #$00 ; STA CHRPTR ;CHRLOOP LDA CHRPTR ; TAX ; LDA UCSPOS+1,X ; TAY ; LDA UCSPOS+2,X ; PHA ; LDA UCSPOS,X ; TAX ; PLA ; JSR DRAWCHAR ; INC CHRPTR ; INC CHRPTR ; INC CHRPTR ; LDA CHRPTR ; CMP CHRCOUNT ; BNE CHRLOOP ; RTS ; ; DATA FOR ROW OF NUMBERS TO BE DRAWN ACROSS SCREEN ; EVERY 3 BYTES INDICATES XCOORD, YCOORD, AND CHARACTER ; NUMPTR DFB 00 NUMCOUNT DFB 69 NUMDATA DFB 2,179,1,7,179,2,12,179,3,17,179,4,22,179,5 DFB 27,179,6,32,179,7,37,179,8,42,179,9 DFB 46,179,1,47,179,0,51,179,1,52,179,1 DFB 56,179,1,57,179,2,61,179,1,62,179,3 DFB 66,179,1,67,179,4,71,179,1,72,179,5 DFB 76,179,1,77,179,6 ; ;CHRPTR DFB 00 ;CHRCOUNT DFB 255 UCSPOS DFB 2,172,0,3,170,1,2,167,2,3,165,3 DFB 2,162,4,2,157,5,3,155,6,2,152,7 DFB 3,150,8,2,147,9,3,145,10,2,142,11 ; DFB 2,137,0,3,135,1,2,132,2,3,130,3 DFB 2,127,4,2,122,5,3,120,6,2,117,7 DFB 3,115,8,2,112,9,3,110,10,2,107,11 ; DFB 2,102,0,3,100,1,2,97,2,3,95,3 DFB 2,92,4,2,87,5,3,85,6,2,82,7 DFB 3,80,8,2,77,9,3,75,10,2,72,11 ; DFB 2,67,0,3,65,1,2,62,2,3,60,3 DFB 2,57,4,2,52,5,3,50,6,2,47,7 DFB 3,45,8,2,42,9,3,40,10,2,37,11 ; DFB 2,32,0,3,30,1,2,27,2,3,25,3 DFB 2,22,4,2,17,5,3,15,6,2,12,7 DFB 3,10,8,2,7,9,3,5,10,2,2,11 ; LCFPOS DFB 2,172,128,1,170,129,2,167,130,1,165,131 DFB 2,162,132,2,157,133,1,155,134,2,152,135 DFB 1,150,136,2,147,137,1,145,138,2,142,139 ; DFB 2,137,128,1,135,129,2,132,130,1,130,131 DFB 2,127,132,2,122,133,1,120,134,2,117,135 DFB 1,115,136,2,112,137,1,110,138,2,107,139 ; DFB 2,102,128,1,100,129,2,97,130,1,95,131 DFB 2,92,132,2,87,133,1,85,134,2,82,135 DFB 1,80,136,2,77,137,1,75,138,2,72,139 ; DFB 2,67,128,1,65,129,2,62,130,1,60,131 DFB 2,57,132,2,52,133,1,50,134,2,47,135 DFB 1,45,136,2,42,137,1,40,138,2,37,139 ; DFB 2,32,128,1,30,129,2,27,130,1,25,131 DFB 2,22,132,2,17,133,1,15,134,2,12,135 DFB 1,10,136,2,7,137,1,5,138,2,2,139 ; ; ; HORIZLN - DRAWS HORIZ LINE ACROSS SCREEN. SET Y=VERTICAL COORDINATE ; HORIZLN JSR SETY STA $C055 JSR HORIZLN1 STA $C054 JSR HORIZLN1 RTS HORIZLN1 LDA #$7F LDY #39 HORIZLN2 STA (ZPTR),Y DEY BPL HORIZLN2 RTS ; ; VERTLNS - DRAW VERTICAL LINES FOR DANCING NOTE DISPLAY ; VERTLNS LDY #176 STY VERTY VYLOOP LDY VERTY JSR SETY LDX #79 JSR SETX LDA #$40 LDY XOFFSET STA (ZPTR),Y LDX #75 VXLOOP JSR SETX LDA #$01 LDY XOFFSET STA (ZPTR),Y DEX DEX DEX DEX DEX BPL VXLOOP DEC VERTY LDA VERTY BNE VYLOOP RTS ; VERTY DFB $00 ; ; SETX - GIVEN X COORD OF A CHARACTER, SET APPROPRIATE MODE AND CALC OFFSET ; SETX LDA DHRXMAP,X ;LOOK UP X COORDINATE TO GET OFFSET STA $C054 BPL SETX1 STA $C055 SETX1 AND #$7F STA XOFFSET RTS XOFFSET DFB $00 ; ; SETY - GIVEN Y COORD, SET BASE ADDRESS FOR POKING BYTES ON THAT LINE ; SETY LDA HGRLINEL,Y STA ZPTR LDA HGRLINEH,Y STA ZPTR+1 RTS ; ; DRAWNUM - DRAWS NUMBER. X=HORIZ PSN 0-79 Y=VERT COORD A=NUMBER 0-9 ; DRAWNUM CMP #10 BCS DRAWNUMX CPX #79 BCS DRAWNUMX CPY #187 BCS DRAWNUMX STA DNUMA STX DNUMX STY DNUMY ; JSR SETX ; LDA #$05 STA DHEIGHT LDA DNUMA ASL A ASL A CLC ADC DNUMA TAX DNUMLOOP LDY DNUMY JSR SETY LDA NUMBER0,X LDY XOFFSET STA (ZPTR),Y INX INC DNUMY DEC DHEIGHT LDA DHEIGHT BNE DNUMLOOP DRAWNUMX RTS DNUMA DFB $00 DNUMX DFB $00 DNUMY DFB $00 DHEIGHT DFB $00 ; ; DRAWCHAR - X=HORIZ CHAR POSN (0-79) Y=VERT COORD ; A=CHARACTER: 0=c 1=C 2=d 3=D 4=e 5=f 6=F 7=g 8=G 9=a 10=A 11=b ; 12=c 13=C,etc, same for 24,36,48,etc. ; 128=C d D e E F g G a A b B ; 140=C 141=d,etc, same for 152,etc. ;DRAWCHAR CPX #79 ; BCS DRAWCHRX ; CPY #188 ; BCS DRAWCHRX ; STA DCHRA ; STX DCHRX ; STY DCHRY ; LDA DHRXMAP,X ;LOOK UP X COORDINATE TO GET OFFSET ; STA $C054 ; BPL SETX1A ; STA $C055 ;SETX1A AND #$7F ; STA XOFFSET ; LDA #$04 ; STA CHEIGHT ; LDX DCHRA ; LDA NOTEMAP,X ; TAX ;DCHRLOOP LDY DCHRY ; LDA HGRLINEL,Y ; STA ZPTR ; LDA HGRLINEH,Y ; STA ZPTR+1 ; LDA LETTERA,X ; LDY XOFFSET ; STA (ZPTR),Y ; INX ; INC DCHRY ; DEC CHEIGHT ; LDA CHEIGHT ; BNE DCHRLOOP ;DRAWCHRX RTS DCHRA DFB $00 DCHRX DFB $00 DCHRY DFB $00 CHEIGHT DFB $00 ; CHN CHARSET.SRC ; ; CHARSET.SRC - CHARACTER SET FOR DANCING NOTES ; NUMBER0 DFB $1C ;0011100 DFB $22 ;0100010 DFB $22 ;0100010 DFB $22 ;0100010 DFB $1C ;0011100 NUMBER1 DFB $08 ;0001000 DFB $08 ;0001000 DFB $08 ;0001000 DFB $08 ;0001000 DFB $08 ;0001000 NUMBER2 DFB $1E ;0111100 DFB $20 ;0000010 DFB $1C ;0011100 DFB $02 ;0100000 DFB $3E ;0111110 NUMBER3 DFB $1E ;0111100 DFB $20 ;0000010 DFB $1C ;0011100 DFB $20 ;0000010 DFB $1E ;0111100 NUMBER4 DFB $12 ;0100100 DFB $12 ;0100100 DFB $3E ;0111110 DFB $10 ;0000100 DFB $10 ;0000100 NUMBER5 DFB $3E ;0111110 DFB $02 ;0100000 DFB $1E ;0111100 DFB $20 ;0000010 DFB $1E ;0111100 NUMBER6 DFB $1C ;0011100 DFB $02 ;0100000 DFB $1E ;0111100 DFB $22 ;0100010 DFB $1C ;0011100 NUMBER7 DFB $3E ;0111110 DFB $20 ;0000010 DFB $10 ;0000100 DFB $08 ;0001000 DFB $04 ;0010000 NUMBER8 DFB $1C ;0011100 DFB $22 ;0100010 DFB $1C ;0011100 DFB $22 ;0100010 DFB $1C ;0011100 NUMBER9 DFB $1C ;0011100 DFB $22 ;0100010 DFB $3C ;0011110 DFB $20 ;0000010 DFB $1C ;0011100 ; LETTERA DFB $18 ;1001100 DFB $24 ;1010010 DFB $24 ;1010010 DFB $58 ;1001101 ; LETTERB DFB $04 ;1010000 DFB $34 ;1010110 DFB $4C ;1011001 DFB $3C ;1011110 ; LETTERC DFB $00 ;1000000 DFB $78 ;1001111 DFB $0C ;1011000 DFB $78 ;1001111 ; LETTERD DFB $40 ;1000001 DFB $58 ;1001101 DFB $64 ;1010011 DFB $78 ;1001111 ; LETTERE DFB $38 ;1001110 DFB $7C ;1011111 DFB $04 ;1010000 DFB $38 ;1001110 ; LETTERF DFB $38 ;1001110 DFB $04 ;1010000 DFB $1C ;1011100 DFB $04 ;1010000 ; LETTERG DFB $38 ;1001110 DFB $7C ;1011111 DFB $40 ;1000001 DFB $3C ;1011110 ; CAPITALA DFB $3E ;0111110 DFB $22 ;0100010 DFB $3E ;0111110 DFB $22 ;0100010 ; CAPITALB DFB $3E ;0111110 DFB $1A ;0101100 DFB $26 ;0110010 DFB $1E ;0111100 ; CAPITALC DFB $3E ;0111110 DFB $02 ;0100000 DFB $02 ;0100000 DFB $3E ;0111110 ; CAPITALD DFB $1E ;0111100 DFB $22 ;0100010 DFB $22 ;0100010 DFB $1E ;0111100 ; CAPITALE DFB $3E ;0111110 DFB $02 ;0100000 DFB $0E ;0111000 DFB $3E ;0111110 ; CAPITALF DFB $3E ;0111110 DFB $02 ;0100000 DFB $0E ;0111000 DFB $02 ;0100000 ; CAPITALG DFB $3E ;0111110 DFB $02 ;0100000 DFB $3A ;0101110 DFB $3E ;0111110 ; NOFF1 DFB $00 DFB $00 DFB $00 DFB $00 ; NOFF2 DFB $00 DFB $00 DFB $00 DFB $00 ; ; NOTEMAP TRANSLATES NOTE NUMBER INTO OFFSET FROM 'LETTERA' ; ; A=CHARACTER: 0=c 1=C 2=d 3=D 4=e 5=f 6=F 7=g 8=G 9=a 10=A 11=b ; 12=c 13=C,etc, same for 24,36,48,etc. ; 128=C d D e E F g G a A b B ; 140=C 141=d,etc, same for 152,etc. ; NOTEMAP DFB 8,36,12,40,16,20,48,24,52,0,28,4 ;UPPER CASE SHARPS 0-11 DFB 8,36,12,40,16,20,48,24,52,0,28,4 ;12-23 DFB 8,36,12,40,16,20,48,24,52,0,28,4 ;24-35 DFB 8,36,12,40,16,20,48,24,52,0,28,4 ;36-47 DFB 8,36,12,40,16,20,48,24,52,0,28,4 ;48-59 DFB 8,36,12,40,16,20,48,24,52,0,28,4 ;60-71 DFB 8,36,12,40,16,20,48,24,52,0,28,4 ;72-83 DFB 8,36,12,40,16,20,48,24,52,0,28,4 ;84-95 DFB 8,36,12,40,16,20,48,24,52,0,28,4 ;96-107 DFB 8,36,12,40,16,20,48,24,52,0,28,4 ;108-119 DFB 8,36,12,40,16,20,48,56 ;120-127 (127=NOTE OFF) ; DFB 36,12,40,16,44,48,24,52,0,28,4,32 ;LOWER CASE FLATS 128- DFB 36,12,40,16,44,48,24,52,0,28,4,32 DFB 36,12,40,16,44,48,24,52,0,28,4,32 DFB 36,12,40,16,44,48,24,52,0,28,4,32 DFB 36,12,40,16,44,48,24,52,0,28,4,32 DFB 36,12,40,16,44,48,24,52,0,28,4,32 DFB 36,12,40,16,44,48,24,52,0,28,4,32 DFB 36,12,40,16,44,48,24,52,0,28,4,32 DFB 36,12,40,16,44,48,24,52,0,28,4,32 DFB 36,12,40,16,44,48,24,52,0,28,4,32 DFB 36,12,40,16,44,48,24,60 ;255=NOTE OFF ; CHN HGRMAP.SRC ; ; HIGH RES VERTICAL COORDINATE ADDRESSES ; HGRLINEH DFB $20,$24,$28,$2C,$30,$34,$38,$3C DFB $20,$24,$28,$2C,$30,$34,$38,$3C DFB $21,$25,$29,$2D,$31,$35,$39,$3D DFB $21,$25,$29,$2D,$31,$35,$39,$3D DFB $22,$26,$2A,$2E,$32,$36,$3A,$3E DFB $22,$26,$2A,$2E,$32,$36,$3A,$3E DFB $23,$27,$2B,$2F,$33,$37,$3B,$3F DFB $23,$27,$2B,$2F,$33,$37,$3B,$3F DFB $20,$24,$28,$2C,$30,$34,$38,$3C DFB $20,$24,$28,$2C,$30,$34,$38,$3C DFB $21,$25,$29,$2D,$31,$35,$39,$3D DFB $21,$25,$29,$2D,$31,$35,$39,$3D DFB $22,$26,$2A,$2E,$32,$36,$3A,$3E DFB $22,$26,$2A,$2E,$32,$36,$3A,$3E DFB $23,$27,$2B,$2F,$33,$37,$3B,$3F DFB $23,$27,$2B,$2F,$33,$37,$3B,$3F DFB $20,$24,$28,$2C,$30,$34,$38,$3C DFB $20,$24,$28,$2C,$30,$34,$38,$3C DFB $21,$25,$29,$2D,$31,$35,$39,$3D DFB $21,$25,$29,$2D,$31,$35,$39,$3D DFB $22,$26,$2A,$2E,$32,$36,$3A,$3E DFB $22,$26,$2A,$2E,$32,$36,$3A,$3E DFB $23,$27,$2B,$2F,$33,$37,$3B,$3F DFB $23,$27,$2B,$2F,$33,$37,$3B,$3F HGRLINEL DFB $00,$00,$00,$00,$00,$00,$00,$00 DFB $80,$80,$80,$80,$80,$80,$80,$80 DFB $00,$00,$00,$00,$00,$00,$00,$00 DFB $80,$80,$80,$80,$80,$80,$80,$80 DFB $00,$00,$00,$00,$00,$00,$00,$00 DFB $80,$80,$80,$80,$80,$80,$80,$80 DFB $00,$00,$00,$00,$00,$00,$00,$00 DFB $80,$80,$80,$80,$80,$80,$80,$80 DFB $28,$28,$28,$28,$28,$28,$28,$28 DFB $A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8 DFB $28,$28,$28,$28,$28,$28,$28,$28 DFB $A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8 DFB $28,$28,$28,$28,$28,$28,$28,$28 DFB $A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8 DFB $28,$28,$28,$28,$28,$28,$28,$28 DFB $A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8 DFB $50,$50,$50,$50,$50,$50,$50,$50 DFB $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0 DFB $50,$50,$50,$50,$50,$50,$50,$50 DFB $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0 DFB $50,$50,$50,$50,$50,$50,$50,$50 DFB $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0 DFB $50,$50,$50,$50,$50,$50,$50,$50 DFB $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0 ; ; DOUBLE HIGH RES X COORDINATE MAP ; DIVIDE X BY 7 AND LOOKUP BYTE ; IF >=$80, USE AUX MEM, ELSE USE MAIN MEM ; LOW 7 BITS = OFFSET TO ADD TO ADDRESS OF VERTICAL COORDINATE ; DHRXMAP DFB $80,$00,$81,$01,$82,$02,$83,$03,$84,$04 DFB $85,$05,$86,$06,$87,$07,$88,$08,$89,$09 DFB $8A,$0A,$8B,$0B,$8C,$0C,$8D,$0D,$8E,$0E,$8F,$0F DFB $90,$10,$91,$11,$92,$12,$93,$13,$94,$14 DFB $95,$15,$96,$16,$97,$17,$98,$18,$99,$19 DFB $9A,$1A,$9B,$1B,$9C,$1C,$9D,$1D,$9E,$1E,$9F,$1F DFB $A0,$20,$A1,$21,$A2,$22,$A3,$23,$A4,$24 DFB $A5,$25,$A6,$26,$A7,$27 ;