From 9063f45faed4e234223ab7f9868dcf25759ce199 Mon Sep 17 00:00:00 2001 From: Charles Mangin Date: Wed, 15 Aug 2018 16:13:25 -0400 Subject: [PATCH] added FASTSCAN --- FASTSCAN.dsk | Bin 0 -> 143360 bytes fastscan.s | 209 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 FASTSCAN.dsk create mode 100644 fastscan.s diff --git a/FASTSCAN.dsk b/FASTSCAN.dsk new file mode 100644 index 0000000000000000000000000000000000000000..3b1e3c24f0627c8269806dbe0a37649b5c167fde GIT binary patch literal 143360 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 J<3QpZ_+JzpmCyhH literal 0 HcmV?d00001 diff --git a/fastscan.s b/fastscan.s new file mode 100644 index 0000000..eb9634a --- /dev/null +++ b/fastscan.s @@ -0,0 +1,209 @@ + DSK FASTSCAN + +************************************************** +* To Do: +* +************************************************** +* Variables +************************************************** + +CHAR EQU $FC ; char/pixel to plot +DELAY EQU $03 +DIRECTION EQU $02 + +************************************************** +* Apple Standard Memory Locations +************************************************** +CLRLORES EQU $F832 +LORES EQU $C050 +TXTSET EQU $C051 +MIXCLR EQU $C052 +MIXSET EQU $C053 +TXTPAGE1 EQU $C054 +TXTPAGE2 EQU $C055 +KEY EQU $C000 +C80STOREOFF EQU $C000 +C80STOREON EQU $C001 +STROBE EQU $C010 +SPEAKER EQU $C030 +VBL EQU $C02E +RDVBLBAR EQU $C019 ;not VBL (VBL signal low +WAIT EQU $FCA8 +RAMWRTAUX EQU $C005 +RAMWRTMAIN EQU $C004 +SETAN3 EQU $C05E ;Set annunciator-3 output to 0 +SET80VID EQU $C00D ;enable 80-column display mode (WR-only) +HOME EQU $FC58 ; clear the text screen +CH EQU $24 ; cursor Horiz +CV EQU $25 ; cursor Vert +VTAB EQU $FC22 ; Sets the cursor vertical position (from CV) +COUT EQU $FDED ; Calls the output routine whose address is stored in CSW, + ; normally COUTI +STROUT EQU $DB3A ;Y=String ptr high, A=String ptr low + +ALTTEXT EQU $C055 +ALTTEXTOFF EQU $C054 + +ROMINIT EQU $FB2F +ROMSETKBD EQU $FE89 +ROMSETVID EQU $FE93 + +ALTCHAR EQU $C00F ; enables alternative character set - mousetext + +BLINK EQU $F3 +SPEED EQU $F1 + + +************************************************** +* START - sets up various fiddly zero page bits +************************************************** + ORG $2000 ; PROGRAM DATA STARTS AT $2000 + + +DRAWBOARD JSR HOME + JSR MESSAGE ; 8677 cycles. + LDA #$11 + STA CHAR + STA DIRECTION + STA DELAY + LDA #$01 + STA SPEED + JSR FILLSCREENFAST ; 6023 cycles. + +* read the VBL +READVBL BIT RDVBLBAR ; 4 +* if bit7 = 0, then VBL active + BMI READVBL ; 2 wait until refresh interval + +* set TEXT during VBL + + STA TXTSET ; 4 + STA TXTPAGE1 + +* read the VBL again +READVBL2 BIT RDVBLBAR ; 4 +* if bit7 = 1, then VBL active + BPL READVBL2 ; 2 loop while VBL is happening + +* VBL is over +* do something while the screen draws a bit +* Screen draws in 12480 instructions + + LDA DIRECTION ; incrementing or decrementing? + ROR ; bit 0 into Carry + BCC INCREMENT ; even = increment, odd = decrement + +DECREMENT DEC DELAY ; scan line going up + + STA TXTPAGE1 ; show page 1 ( message ) + + JMP XLOOP ; wait + +INCREMENT INC DELAY ; scan line going down + +XLOOP LDX DELAY + BEQ NOLOOP + CPX #$FF + BEQ NOLOOP +XLOOP2 NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + NOP ; 2 + DEX ; 2 + BNE XLOOP2 ; 2 + +* set GR at bottom of screen +NOLOOP STA LORES ; 4 + STA TXTPAGE2 + + LDA DELAY + CMP #$C0 + BCS GOFILL ; == C0 change directions + +* loop until the next blank +GOLOOP JMP READVBL + + +GOFILL INC DIRECTION ; equal or greater than c0, change colors + LDA CHAR + CLC + ADC #$11 + STA CHAR + JSR FILLSCREENFAST ; change colors when loop length is >C0 + JMP READVBL + +************************************************** +* writes message +************************************************** +HELLOWORLD ASC "Check out what I learned at Kansasfest!",00 ; set to ascii for message + + +MESSAGE + LDA #$0B + STA CV ; jump down + JSR VTAB + LDA #$00 + STA CH + LDY #>HELLOWORLD + LDA #