A2NoSlotMIDI/LEGACY/MFF0DRVR.SC3.txt

80 lines
2.5 KiB
Plaintext

;*** 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