From 96665e343773e38d81ef0d06b95d6efa2668ecab Mon Sep 17 00:00:00 2001 From: Charles Mangin Date: Wed, 8 Aug 2018 14:27:01 -0400 Subject: [PATCH] Add files via upload --- ROLLING.dsk | Bin 0 -> 143360 bytes rollingscan.s | 525 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 525 insertions(+) create mode 100644 ROLLING.dsk create mode 100644 rollingscan.s diff --git a/ROLLING.dsk b/ROLLING.dsk new file mode 100644 index 0000000000000000000000000000000000000000..18bf2725e062957120bc16449e7e1545bcf485a4 GIT binary patch literal 143360 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 literal 0 HcmV?d00001 diff --git a/rollingscan.s b/rollingscan.s new file mode 100644 index 0000000..9bda73d --- /dev/null +++ b/rollingscan.s @@ -0,0 +1,525 @@ + DSK ROLLING + +************************************************** +* To Do: +* +************************************************** +* Variables +************************************************** + +CHAR EQU $FC ; char/pixel to plot +SONGOFFSET EQU $06 ; which note to play +NOTEDURATION EQU $04 ; duration of note +NOTETONE EQU $05 ; frequency/interclick delay +WAVECHAR EQU $03 ; ASCII "wave" progress/offset +STRINGCHAR EQU $02 ; "instructions" string offset +EVENODD EQU $00 +SPEED EQU $01 +TEXTSCROLL EQU $07 ; scrolling text offset pixels +TEXTSCROLLEND EQU $08 ; textscroll + #$28 +TEXTSCROLLSPEED EQU $09 ; how often to scroll the text + +************************************************** +* 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 + + + + + ORG $2000 ; PROGRAM DATA STARTS AT $2000 + + +************************************************** +* START - sets up various fiddly zero page bits +************************************************** + + LDA #$00 ; reset the string and wave offsets for drawing text + STA STRINGCHAR + STA CHAR + STA SONGOFFSET + STA NOTEDURATION + STA NOTETONE + STA STRINGCHAR + STA EVENODD + STA $F1 + STA TEXTSCROLL + LDA #$26 + STA WAVECHAR + STA SPEED + LDA #$33 + STA TEXTSCROLLEND + LDA #$04 + STA TEXTSCROLLSPEED + +************************************************** +DRAWBOARD JSR HOME ; clears the main text screen + JSR FILLSCREENFAST + +* I'm reading in $C019, which, if I'm understanding what I've seen, bit 7 will go high when the VBL is active. +* If I want to split the screen, I can wait for the VBL to happen, set text mode. Wait again until the VBL is done, +* twiddle a little bit, then set GR mode. Depending on how long i twiddle, there will be some text at the top of the screen +* and low res on the bottom. + +************************************************** +* SET UP MUSIC + LDY #$00 + STY SONGOFFSET ; current position in the score + LDA DURATIONS,Y ; *60ths of a second duration + STA NOTEDURATION ; $04 sound duration + LDA TONES,Y + STA NOTETONE ; $05 tone value + +************************************************** +* MAIN LOOP +************************************************** + + +* WAITING FOR VBL +READVBL LDX NOTETONE ; 2 +TONELOOP2 DEX ; 2 WAITS BETWEEN CLICKS + BNE TONELOOP2 ; 4 not taken, 2 taken + STA SPEAKER ; 4 CLICKS +BITVBL BIT RDVBLBAR ; 4 + * if bit7 = 0, then VBL active + BMI READVBL ; 2 wait until refresh interval + + +* VBL STARTED - BLANK SCREEN + + LDA NOTEDURATION ; if duration has counted down to zero, + BEQ NEXTNOTE ; skip to next note + DEC NOTEDURATION ; otherwise, decrement sound duration + JMP SOUNDDONE +NEXTNOTE +* LDY the current note's position + LDA NOTETONE +* if note == 0, start over + BNE LOADNOTE + LDA #$FF + STA SONGOFFSET ; set $06 to 0, JMP NEXTNOTE +LOADNOTE LDA SONGOFFSET + TAY + INY + STY SONGOFFSET +* LDA the next note in the "Score" +* store it at $05 + LDA TONES,Y + STA NOTETONE +* LDA the next note's duration +* store it at $04 + LDA DURATIONS,Y + STA NOTEDURATION + + +SOUNDDONE +* roll through colors 2 6 A F, fills top third of screen + LDY SPEED + LDA BLUES,Y + STA CHAR + JSR FILLTOP ; 1804 instructions + + JSR INSTRUCTIONSFAST ; way faster than STROUT or COUT. + JSR WAVETEXT ; plot one character of ASCII "wave" animation. + + + +WHITEBARS +; bottom 4 lines +; 650 +; 6d0 +; 750 +; 7d0 + LDA SPEED + TAY + LDA #$20 ; inverse space + STA $650,Y + INY + LDA #$A0 + STA $650,Y + + LDA SPEED + LSR + TAY + LDA #$20 ; inverse space + STA $6D0,Y + INY + LDA #$A0 + STA $6D0,Y + + LDA SPEED + LSR + LSR + TAY + LDA #$20 ; inverse space + STA $750,Y + INY + LDA #$A0 + STA $750,Y + + LDA SPEED + LSR + LSR + LSR + TAY + LDA #$20 ; inverse space + STA $7D0,Y + INY + LDA #$A0 + STA $7D0,Y + + +SETTEXTMODE + +* set TEXTMODE *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 + +* Vertical blank is 4550 cycles. +* I'm using ~ 4396 + +************************************************** +* VBL DONE - DRAWING SCREEN NOW +************************************************** + +* VBL is over +* do something while the screen draws a bit +* Screen draws in 12480 instructions = 192 lines * 65 instructions/lines + + STA ALTTEXTOFF +* show the main text page, with instructions + + +* varying delay gives us a rolling effect + JSR WAITABIT +* show color bars + STA LORES + STA ALTTEXT + +* wait a bit while screen draws small slice of color bars + LDY #$10 + JSR SCROLLINGTEXT ; Y = $10 == 1081 / 65 ~ 16.5 scanlines between LORES and TXTSET + +* back to text page + STA TXTSET ; 4 + STA TXTPAGE1 ; 1269 - 3868 cycles to this point. Varies with WAITABIT + +* < 4000 cycles to here. I have 8000 or so to play around with. Let there be sound! +* sound processing and beeps all happen at the READVBL stage, while waiting for the screen to finish drawing. + + LDA #$1F + SEC + SBC SPEED + TAY + JSR ROLLINGDELAY ; 65 instructions per scanline? + STA LORES + LDY #$1F + JSR ROLLINGDELAY ; 65 instructions per scanline? + STA TXTSET + +* loop until the next blank +GOLOOP JMP READVBL +************************************************** + + + + + +************************************************** +* The actual fun part: +* delay loop that increases, then decreases +************************************************** + +WAITABIT DEC WAVECHAR + BMI RELOAD ; shouldn't ever get below zero + + LDA WAVECHAR ; move ascii wave in from right + CMP STRINGCHAR + BEQ RELOAD ; roll offset until same as character being added + BCC RELOAD ; roll too far? quit that. + JMP LOADSPEED +* decrement WAVECHAR until it reaches STRINGCHAR, then set it back to #$27 + +RELOAD LDA #$27 + STA WAVECHAR +LOADSPEED LDA SPEED ; if speed is zero + CMP #$01 + BEQ SETODD ; set even/odd to odd (1) + + CMP #$1E ; otherwise if speed is >20, set even + BCC EVENORODD ; if less than 20 continue doing what you've been doing + +SETEVEN LDA #$00 + STA EVENODD ; set to even (0) + + LDA STRINGCHAR + CMP #$26 + BEQ EVENORODD + INC STRINGCHAR ; characters of the text to display + JMP EVENORODD + +SETODD LDA #$01 + STA EVENODD ; set even/odd to odd (1) + + LDA STRINGCHAR + CMP #$26 + BEQ EVENORODD + INC STRINGCHAR ; characters of the text to display + +EVENORODD LDA EVENODD ; load even/odd + BNE INCSPEED ; if odd (not zero) then start increasing delay + +DECSPEED DEC SPEED ; otherwise, decrease the delay + LDY SPEED + JSR ROLLINGDELAY + RTS + +INCSPEED INC SPEED + LDY SPEED + JSR ROLLINGDELAY + RTS + + + +************************************************** +* writes message directly to $600 +* much faster than using ROM routines for strout. +************************************************** + +INSTRUCTIONSFAST ; 547 cycles. + LDY STRINGCHAR ; characters of string, increments up to #$26 +CHAROUT LDA HELLOWORLD,Y +CHARFILL STA $600,Y + RTS + +;/INSTRUCTIONSFAST + + +************************************************** +* scroll "wave" character in from right. +************************************************** + + +WAVETEXT LDY WAVECHAR ; where is the wave? decrements from #$27 to STRINGCHAR + +* start at #$27 +* $600,Y = DINGBATS,Y +LOADWAVE LDA DINGBATS,Y + STA $600,Y + INY +* $600,Y = SPACES,Y - to erase previous DINGBAT + LDA #$A0 + STA $600,Y + RTS +;/WAVETEXT + + +************************************************** +* short delay - gets loop counts from Y +************************************************** +ROLLINGDELAY + +YLOOP TYA ; + TAX ; + ; +XLOOP DEX ; + BNE XLOOP ; + + NOP ; + NOP ; + NOP ; + NOP ; + NOP ; + NOP ; + NOP ; + NOP ; + + DEY ; + BNE YLOOP ; + + RTS ; + + +************************************************** +* put scrolling text at $528,$5a8 40 pixels at a time, offset by TEXTSCROLL +************************************************** +SCROLLINGTEXT + LDY TEXTSCROLL + LDX #$04 +SCROLLTEXT LDA SCROLLING,Y + STA $4a8,X + LDA SCROLLING2,Y + STA $528,X + INY + INX + CPX #$24 + BCC SCROLLTEXT ; do this 32 times + + + DEC TEXTSCROLLSPEED + BEQ INCSCROLL + + LDA TEXTSCROLL + CMP TEXTSCROLLEND + BNE DONESCROLL + + LDA #$00 + STA TEXTSCROLL +DONESCROLL RTS + +INCSCROLL INC TEXTSCROLL + LDA #$04 + STA TEXTSCROLLSPEED + RTS + + + +************************************************** +* blanks the top third of the alttext screen quickly. +* fill color from CHAR +************************************************** +FILLTOP + + LDA CHAR ; Get selected color byte + LDY #$28 ; #$78 Prepare to fill 120 bytes + +FILLTOP1 DEY + STA $800, Y + STA $880, Y + STA $900, Y + STA $980, Y + STA $a00, Y + STA $a80, Y + STA $b00, Y + STA $b80, Y + BNE FILLTOP1 + RTS ; Done. Return. + + +************************************************** +* blanks the screen quickly. +* https://www.atarimagazines.com/compute/issue10/032_1_THE_APPLE_GAZETTE.php +************************************************** +FILLSCREENFAST ; 6023 instructions + +FLASH LDA CHAR ; Get selected color byte + LDY #$78 ; #$78 Prepare to fill 120 bytes + JSR FILL1 ; Fill four sets of 120 bytes each + LDY #$78 ; Prepare to fill 80 bytes + JSR FILL2 ; Fill four sets of 80 bytes each + RTS ; Done. Return. + ; Subroutine FILL1 puts the selected color byte into + ; each of four sets of 120 consecutive screen-memory + ; bytes, being careful to avoid the scratchpad bytes at + ; the end of each set. +FILL1 DEY + STA $800, Y + STA $880, Y + STA $900, Y + STA $980, Y + BNE FILL1 + RTS + ; Subroutine FILL2 puts the selected color byte into each + ; of four sets of 80 consecutive screen-memory bytes. + ; These are the "short lines", leaving out at the end of + ; each one of the four text lines at the bottom of the + ; mixed screen. +FILL2 DEY + STA $a00, Y + STA $a80, Y + STA $b00, Y + STA $b80, Y + BNE FILL2 + RTS + +************************************************** + +HELLOWORLD ASC "Check out what I learned at Kansasfest! ",00 ; set to ascii for message +DINGBATS ASC "!/-\!/-\!/-\!/-\!/-\!/-\!/-\!/-\!/-\!/- ",00 ; ascii wave + +* rolling color bars +BLUES HEX 11,11,11,11,b1,1b,b1,1b,b1,1b,b1,1b,eb,be,eb,be,ec,ce,ec,ce,ec,ce,cc,cc,cc,cc,c4,4c,c4,4c,44,44 + + +* test tones +;TONES HEX F0,80,40,20,10,08,04,00 +;DURATIONS HEX 4B,4B,4B,4B,4B,4B,4B,00 + +* DAISY BELL +;TONES HEX 71,86,A9,e1,C9,B3,A9,C9,A9,e1,96,71,86,A9,C9,B3,A9,96,86,96,01,86,77,86,96,71,86,96,A9,96,86,A9,C9,A9,C9,e1,E1,A9,86,96,01,A9,86,96,01,86,77,71,86,A9,96,e1,A9,01,00 +;DURATIONS HEX 30,30,30,30,10,10,10,20,10,60,30,30,30,30,10,10,10,20,10,40,10,10,10,10,10,20,10,10,40,10,20,10,20,10,10,40,10,20,10,10,20,20,10,10,10,05,05,10,10,10,20,10,40,FF,00 + +*Bb SCALE +;TONES HEX A9,96,86,7E,71,64,59,54,59,64,71,7E,86,96,A9,A9,86,71,54,71,86,A9,00 +;DURATIONS HEX 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,00 + +*OOM-PAH +;TONES HEX A9,54,A9,54,71,A9,86,71,A9,54,A9,54,71,71,86,96,A9,54,A9,54,A9,A9,86,71,A9,54,A9,54,A9,00 +;DURATIONS HEX 10,10,10,10,10,05,05,05,10,10,10,10,10,05,05,05,10,10,10,10,10,05,05,05,10,10,10,10,40,00 + +TONES HEX EF,77,64,C9,FF,C9,FF,C9 + HEX 59,64,EF,C9,FF,C9,FF,B3 + HEX EF,77,64,C9,FF,C9,FF,C9 + HEX 59,64,EF,C9,FF,C9,FF,B3 + HEX EF,77,64,C9,FF,C9,FF,C9 + HEX 59,64,EF,C9,FF,C9,FF,B3 + HEX EF,77,64,C9,FF,C9,FF,C9 + HEX 59,64,EF,C9,FF,C9,FF,B3,00 + +DURATIONS HEX 05,05,05,05,05,05,05,15 + HEX 05,05,05,05,05,05,05,15 + HEX 05,05,05,05,05,05,05,15 + HEX 05,05,05,05,05,05,05,15 + HEX 05,05,05,05,05,05,05,15 + HEX 05,05,05,05,05,05,05,15 + HEX 05,05,05,05,05,05,05,15 + HEX 05,05,05,05,05,05,05,15,00 + +SCROLLING HEX FF,0F,00,FF,0F,0F,00,FF,0F,FF,00,FF,0F,FF,00,FF,00,00,00,FF,00,00,00,FF,00,FF,0F,FF,00,FF,0F,0F,00,00,0F,FF,0F,00,FF,0F,0F,00,0F,F0,0F,00,0F,FF,0F,00,00,FF,0F,00,FF,0F,0F,00,FF,0F,FF,00,FF,0F,FF,00,FF,00,00,00,FF,00,00,00,FF,00,FF,0F,FF,00,FF,0F,0F,00,00,0F,FF,0F,00,FF,0F,0F,00,0F,F0,0F,00,0F,FF,0F,00,00 +SCROLLING2 HEX F0,FF,00,FF,F0,F0,00,FF,0F,F0,00,FF,F0,FF,00,FF,F0,F0,00,FF,F0,F0,00,FF,00,FF,00,FF,00,FF,F0,FF,00,00,00,FF,00,00,FF,FF,F0,00,F0,0F,F0,00,00,FF,00,00,00,F0,FF,00,FF,F0,F0,00,FF,0F,F0,00,FF,F0,FF,00,FF,F0,F0,00,FF,F0,F0,00,FF,00,FF,00,FF,00,FF,F0,FF,00,00,00,FF,00,00,FF,FF,F0,00,F0,0F,F0,00,00,FF,00,00,00 + \ No newline at end of file