home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
pdoseric.hdv
/
SOURCE
/
DANCNOTE.SRC.txt
< prev
next >
Wrap
Text File
|
2020-08-13
|
32KB
|
1,267 lines
; 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
;