From 7f86facb2f1edb2fa68392c7626511ef0ca5b2cc Mon Sep 17 00:00:00 2001 From: Charles Mangin Date: Wed, 4 Jul 2018 09:04:45 -0400 Subject: [PATCH] Add files via upload --- RAIN.dsk | Bin 0 -> 143360 bytes RAIN.s | 779 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 779 insertions(+) create mode 100644 RAIN.dsk create mode 100644 RAIN.s diff --git a/RAIN.dsk b/RAIN.dsk new file mode 100644 index 0000000000000000000000000000000000000000..5936c3051e211b2b68ea926cc81c9a0b07f65a46 GIT binary patch literal 143360 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 z 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 hfFZyTU 20 + BCC PLOTZERO + LDA #$22 ; last 4 lines, #$22 + JMP PLOTLINE +PLOTZERO LDA #$0 ; set all pixels to 00 +PLOTLINE STA CHAR + JSR PLOTCHAR ; plot 00 + INC PROGRESS + JSR PLOTCHAR ; plot 00 to alt + INC PROGRESS + + LDA PLOTCOLUMN ; last COLUMN? + BNE COLUMNLOOP2 ; loop + +; /columnloop2 + + LDA PLOTROW ; last ROW? + BNE ROWLOOP2 ; loop + +; /rowloop2 + +; draw raindrop + +; DK blue = 2 +; MD blue = 6 +; LT blue = 7 +; white = F +; black = 0 +; grey = 5 + +; drop: +; == F7 76 02 +; fast drop: +; == 27 60 20 + +; F7 -> 76 -> 02 +; 27 -> 60 -> 20 + +************************************************** +* MAIN LOOP +* waits for keyboard input, moves cursor, etc +************************************************** + +MAIN +MAINLOOP LDA KEY ; check for keydown +; CMP #$A0 ; space bar pause? +; BEQ GOTSPACE + CMP #$D2 ; R + BEQ GOTRESET + + CMP #$9B ; ESC + BEQ END ; exit on ESC? + + + + CMP #$C9 ; I + BEQ GOTUP + CMP #$CB ; K + BEQ GOTDOWN +; CMP #$CA ; J shift the falling drops left/right to +; BEQ GOTLEFT ; simulate wind? +; CMP #$CC ; L +; BEQ GOTRIGHT + + JSR NEXTSCREEN ; animate one frame per loop + + BNE MAINLOOP ; loop until a key + + +GOTUP STA STROBE + DEC UPPERLIMIT + JMP MAINLOOP ; back to waiting for a key +GOTDOWN STA STROBE + INC UPPERLIMIT + JMP MAINLOOP ; back to waiting for a key +;GOTLEFT STA STROBE +; STA ALTTEXTOFF +; JMP MAINLOOP ; back to waiting for a key +; +;GOTRIGHT STA STROBE +; STA ALTTEXT +; JMP MAINLOOP ; back to waiting for a key +; +;GOTSPACE JSR SPACE +; JMP MAINLOOP ; back to waiting for a key + +GOTRESET STA STROBE + STA ALTTEXTOFF + JMP DRAWBOARD + +END STA STROBE + STA ALTTEXTOFF + STA TXTSET + JSR HOME + RTS ; END + +;SPACE STA STROBE ; +; JSR NEXTSCREEN ; animate +; RTS + +;/GOTSPACE + + + +************************************************** +* subroutines +* +************************************************** + +************************************************** +* main animation loop - checks each pixel for non-zero values +************************************************** + +NEXTSCREEN ; FOR EACH ROW/COLUMN + + LDA #$14 ; X = 20 + STA PLOTROW +ROWLOOP ; (ROW 20 to 0) + DEC PLOTROW + + ; start columnloop (COLUMN 0 to 40) + LDA #$28 + STA PLOTCOLUMN +COLUMNLOOP DEC PLOTCOLUMN + + JSR GETCHAR + BEQ ZEROFOUND + + JSR EXPAND ; do the thing + + +ZEROFOUND LDA PLOTCOLUMN ; last COLUMN? + BNE COLUMNLOOP ; loop +;/columnloop + + LDA PLOTROW ; last ROW? + BEQ ROWONE ; top of the screen, do some random raindrops + BNE ROWLOOP ; loop + +;/rowloop +ROWONE ; row == 0, if RND > upperlimit, draw start of a new drop + LDA #$28 + STA PLOTCOLUMN +COLUMNLOOP3 DEC PLOTCOLUMN ; next column + + +DODROPS JSR RND ; grab a random number + CMP UPPERLIMIT ; drop threshold + BCC NODROP ; less than limit, no drop + LDA PLOTCOLUMN + ROR ; on an odd/even column + BCS LGDROP ; small/fast drops on even, large slow on odd +SMALLDROP LDA #$27 + JMP STOREDROP +LGDROP LDA #$F7 ; draw a drop +STOREDROP STA CHAR + INC PROGRESS + JSR PLOTCHAR + INC PROGRESS + JMP NODROP + + JSR GETCHAR + BEQ NODROP + JSR EXPAND ; found a non-zero pixel, process it + +NODROP LDA PLOTCOLUMN ; last COLUMN? + BNE COLUMNLOOP3 ; loop on each column for top row +;/columnloop2 + + + + + INC PROGRESS ; every other refresh, show alt page, normal page + ROR PROGRESS ; lowest bit into carry + BCC ALTSCREEN ; carry set on odd, not on even + STA ALTTEXTOFF + JMP NORMSCREEN +ALTSCREEN STA ALTTEXT + +NORMSCREEN ROL PROGRESS + + RTS +;/NEXTSCREEN + + + + +************************************************** +* process raindrop animations. +************************************************** + +DOSPLASH JSR SPLASH ; made it to the bottom of the screen + RTS ; show the splash animation + +EXPAND + ; found CHAR in A +; drop: +; == F7 76 02 +; 27 -> 60 -> 20 +; bottom up + CMP #$F7 ; if it's F7, plot 76, inc row, plot F7, + BNE SMDROP0 ; not F7, skip + INC PROGRESS + STA CHAR ; puts found character (F7) into CHAR + INC PLOTROW ; down 1 + LDA PLOTROW + CMP #$15 ; lower than row 20? + JSR PLOTCHAR ; plot F7 +DROP1 DEC PLOTROW ; back up + LDA #$76 + STA CHAR + JSR PLOTCHAR ; plot 76 + INC PROGRESS + + LDA PLOTROW + CMP #$13 ; lower than row 20? + BEQ DOSPLASH + + JMP DROPDONE + +SMDROP0 CMP #$27 + BNE DROP2 + INC PROGRESS + STA CHAR ; puts found character (27) into CHAR + INC PLOTROW ; down 1 + INC PLOTROW ; down 1 + LDA PLOTROW + CMP #$14 ; lower than row 20? + BCS SMDROP1 ; if > 20 skip over + JSR PLOTCHAR ; plot 27 down 2 px +SMDROP1 DEC PLOTROW ; back up + DEC PLOTROW ; back up + LDA #$20 ; plot 20 down 0 px + STA CHAR + JSR PLOTCHAR ; plot 20 + INC PROGRESS + JMP DROPDONE + +DROP2 CMP #$76 ; if it's 76, plot 02 + BNE SMDROP2 ; not 76, skip + INC PROGRESS + LDA #$02 + STA CHAR + JSR PLOTCHAR + INC PROGRESS + + LDA PLOTROW ; if we're at row 20ish + CMP #$13 ; should have triggered the splash + BEQ UNDOSPLASH ; undo the first splash frame + + JMP DROPDONE + +UNDOSPLASH JSR UNSPLASH + RTS + + +SMDROP2 CMP #$60 ; if it's 60, plot 60 down 2 px + BNE DROP3 ; not 60, skip + INC PLOTROW ; down 1 + INC PLOTROW ; down 1 + INC PROGRESS + STA CHAR + JSR PLOTCHAR + INC PROGRESS + DEC PLOTROW + DEC PLOTROW + LDA #$0 ; erase behind + JSR PLOTCHAR + JMP DROPDONE + +DROP3 CMP #$02 ; if it's 02, erase behind it + BNE SMDROP3 + LDA #$0 + STA CHAR + JSR PLOTCHAR + INC PROGRESS + JSR PLOTCHAR + INC PROGRESS + + LDA PLOTROW ; if we're at row 20ish + CMP #$13 ; should have triggered the splash + BEQ UNDOSPLASH ; undo the second splash frame + + + JMP DROPDONE + +SMDROP3 CMP #$20 ; if it's 20, erase behind it + BNE DROPDONE + LDA #$0 + STA CHAR + JSR PLOTCHAR + INC PROGRESS + JSR PLOTCHAR + INC PROGRESS + + +DROPDONE RTS + + +************************************************** +* prints one CHAR at PLOTROW,PLOTCOLUMN - clobbers A,Y +************************************************** +PLOTCHAR + LDY PLOTROW + TYA + CMP #$18 + BCS OUTOFBOUNDS ; stop plotting if dimensions are outside screen + + + ;LDA PROGRESS ; even or odd frame + ROR PROGRESS + BCC PLOTCHARALT ; every other frame, write to alt text page + + LDA LoLineTableL,Y + STA $0 + LDA LoLineTableH,Y + STA $1 ; now word/pointer at $0+$1 points to line + JMP LOADCHAR + +PLOTCHARALT LDA AltLineTableL,Y + STA $0 + LDA AltLineTableH,Y + STA $1 ; now word/pointer at $0+$1 points to line + +LOADCHAR ROL PROGRESS ; return progress state for next ROR + + LDY PLOTCOLUMN + TYA + CMP #$28 + BCS OUTOFBOUNDS ; stop plotting if dimensions are outside screen + + LDA CHAR ; this would be a byte with two pixels + STA ($0),Y + + +OUTOFBOUNDS RTS +;/PLOTCHAR + + +************************************************** +* GETS one CHAR at PLOTROW,PLOTCOLUMN - value returns in Accumulator +************************************************** +GETCHAR + + LDY PLOTROW + ROR PROGRESS + BCC GETCHARALT ; every other frame, write to alt text page + + LDA LoLineTableL,Y + STA $0 + LDA LoLineTableH,Y + JMP STORECHAR + +GETCHARALT LDA AltLineTableL,Y + STA $0 + LDA AltLineTableH,Y + +STORECHAR STA $1 ; now word/pointer at $0+$1 points to line + LDY PLOTCOLUMN + ROL PROGRESS ; return progress state for next ROR + LDA ($0),Y ; byte at row,col is now in accumulator + RTS +;/GETCHAR + + + + + + +************************************************** +* CLICKS and BEEPS +************************************************** +CLICK LDX #$06 +CLICKLOOP LDA #$10 ; SLIGHT DELAY + JSR WAIT + LDA SPEAKER + DEX + BNE CLICKLOOP + RTS +;/CLICK + +BEEP LDX #$30 +BEEPLOOP LDA #$08 ; short DELAY + JSR WAIT + LDA SPEAKER + DEX + BNE BEEPLOOP + RTS +;/BEEP + + +BONK LDX #$50 +BONKLOOP LDA #$20 ; longer DELAY + JSR WAIT + LDA SPEAKER + DEX + BNE BONKLOOP + RTS +;/BONK + + + +************************************************** +* DATASOFT RND 6502 +* BY JAMES GARON +* 10/02/86 +* Thanks to John Brooks for this. I modified it slightly. +************************************************** + + +RNDINIT + LDA $C030 ; #$AB + STA RNDSEED + LDA $4E ; #$55 + STA RNDSEED+1 + LDA PROGRESS ; #$7E + STA RNDSEED+2 + RTS + +* RESULT IN ACC +RND LDA RNDSEED + ROL RNDSEED + EOR RNDSEED + ROR RNDSEED + INC RNDSEED+1 + BNE RND10 + LDA RNDSEED+2 + INC RNDSEED+2 +RND10 ADC RNDSEED+1 + BVC RND20 + INC RNDSEED+1 + BNE RND20 + LDA RNDSEED+2 + INC RNDSEED+2 +RND20 STA RNDSEED + RTS + + + + +************************************************** +* Draws the two frames of the splash animation when +* a drop reaches the bottom of the screen +************************************************** + +; TO DO: if progress is odd, splash further down? + +SPLASH LDA PLOTROW + STA ROW + LDA PLOTCOLUMN + STA COLUMN + + INC PLOTROW + +;DROPDOWN ROL PROGRESS + INC PROGRESS ; draw on next frame +DECCOL DEC PLOTCOLUMN ; decrement 3 columns + DEC PLOTCOLUMN ; decrement 3 columns + DEC PLOTCOLUMN ; decrement 3 columns + LDX #$06 ; for 6 to 0 in Y +SPLASHTOP LDA SPLASH1,X ; load SPLASH1,Y + STA CHAR ; store CHAR + JSR PLOTCHAR + INC PLOTCOLUMN ; INC PLOTCOLUMN + DEX ; next Y + BPL SPLASHTOP ; x!=0, return + + INC PLOTROW ; INC ROW + LDX #$06 ; for 6 to 0 in Y +SPLASHBOTTOM LDA SPLASH2,X ; load SPLASH2,Y + STA CHAR ; store CHAR + DEC PLOTCOLUMN ; DEC PLOTCOLUMN + JSR PLOTCHAR + DEX + BPL SPLASHBOTTOM ; next Y + + DEC PLOTROW + INC PROGRESS ; draw on current frame + +SPLASHF2 LDX #$06 ; for 6 to 0 in Y +SPLASHTOPF2 LDA SPLASH3,X ; load SPLASH1,Y + STA CHAR ; store CHAR + JSR PLOTCHAR + INC PLOTCOLUMN ; INC PLOTCOLUMN + DEX ; next Y + BPL SPLASHTOPF2 ; x!=0, return + + INC PLOTROW ; INC ROW + LDX #$06 ; for 6 to 0 in Y +SPLASHBOTTOMF2 LDA SPLASH4,X ; load SPLASH2,Y + STA CHAR ; store CHAR + DEC PLOTCOLUMN ; DEC PLOTCOLUMN + JSR PLOTCHAR + DEX + BPL SPLASHBOTTOMF2 ; next Y + + + LDA ROW ; reset to row/column for next pass + STA PLOTROW + LDA COLUMN + STA PLOTCOLUMN + + RTS + + + +UNSPLASH LDA PLOTROW + STA ROW + LDA PLOTCOLUMN + STA COLUMN + + INC PLOTROW + +;DROPDOWN2 ROL PROGRESS + INC PROGRESS + +; JSR CLICK +DECCOL2 DEC PLOTCOLUMN ; decrement 3 columns + DEC PLOTCOLUMN ; decrement 3 columns + DEC PLOTCOLUMN ; decrement 3 columns + LDX #$06 ; for 6 to 0 in Y +UNDOSPLASHTOP LDA #$22 ; load SPLASH1,Y + STA CHAR ; store CHAR + JSR PLOTCHAR + INC PLOTCOLUMN ; INC PLOTCOLUMN + DEX ; next Y + BPL UNDOSPLASHTOP ; x!=0, return + INC PLOTROW ; INC ROW + LDX #$06 ; for 6 to 0 in Y + INC PROGRESS +UNDOSPLASHBOTTOM + LDA #$22 ; load SPLASH2,Y + STA CHAR ; store CHAR + DEC PLOTCOLUMN ; DEC PLOTCOLUMN + JSR PLOTCHAR + DEX + BPL UNDOSPLASHBOTTOM ; next Y + + LDA ROW ; reset to row/column for next pass + STA PLOTROW + LDA COLUMN + STA PLOTCOLUMN + + RTS + + + + +************************************************** +* Data Tables +* +************************************************** + +SPLASH1 HEX 62,22,72,F2,72,22,62 +SPLASH2 HEX 26,62,67,67,67,62,26 + +SPLASH3 HEX 22,72,22,22,22,72,22 +SPLASH4 HEX 22,22,26,26,26,22,22 + +************************************************** +* Lores/Text lines +* Thanks to Dagen Brock for this. +************************************************** +Lo01 equ $400 +Lo02 equ $480 +Lo03 equ $500 +Lo04 equ $580 +Lo05 equ $600 +Lo06 equ $680 +Lo07 equ $700 +Lo08 equ $780 +Lo09 equ $428 +Lo10 equ $4a8 +Lo11 equ $528 +Lo12 equ $5a8 +Lo13 equ $628 +Lo14 equ $6a8 +Lo15 equ $728 +Lo16 equ $7a8 +Lo17 equ $450 +Lo18 equ $4d0 +Lo19 equ $550 +Lo20 equ $5d0 +* the "plus four" lines +Lo21 equ $650 +Lo22 equ $6d0 +Lo23 equ $750 +Lo24 equ $7d0 + + +Alt01 equ $800 +Alt02 equ $880 +Alt03 equ $900 +Alt04 equ $980 +Alt05 equ $A00 +Alt06 equ $A80 +Alt07 equ $B00 +Alt08 equ $B80 +Alt09 equ $828 +Alt10 equ $8a8 +Alt11 equ $928 +Alt12 equ $9a8 +Alt13 equ $A28 +Alt14 equ $Aa8 +Alt15 equ $B28 +Alt16 equ $Ba8 +Alt17 equ $850 +Alt18 equ $8d0 +Alt19 equ $950 +Alt20 equ $9d0 +* the "plus four" lines +Alt21 equ $A50 +Alt22 equ $Ad0 +Alt23 equ $B50 +Alt24 equ $Bd0 + + + + +LoLineTable da Lo01,Lo02,Lo03,Lo04 + da Lo05,Lo06,Lo07,Lo08 + da Lo09,Lo10,Lo11,Lo12 + da Lo13,Lo14,Lo15,Lo16 + da Lo17,Lo18,Lo19,Lo20 + da Lo21,Lo22,Lo23,Lo24 + +AltLineTable da Alt01,Alt02,Alt03,Alt04 + da Alt05,Alt06,Alt07,Alt08 + da Alt09,Alt10,Alt11,Alt12 + da Alt13,Alt14,Alt15,Alt16 + da Alt17,Alt18,Alt19,Alt20 + da Alt21,Alt22,Alt23,Alt24 + + +** Here we split the table for an optimization +** We can directly get our line numbers now +** Without using ASL +LoLineTableH db >Lo01,>Lo02,>Lo03 + db >Lo04,>Lo05,>Lo06 + db >Lo07,>Lo08,>Lo09 + db >Lo10,>Lo11,>Lo12 + db >Lo13,>Lo14,>Lo15 + db >Lo16,>Lo17,>Lo18 + db >Lo19,>Lo20,>Lo21 + db >Lo22,>Lo23,>Lo24 +LoLineTableL db Alt01,>Alt02,>Alt03 + db >Alt04,>Alt05,>Alt06 + db >Alt07,>Alt08,>Alt09 + db >Alt10,>Alt11,>Alt12 + db >Alt13,>Alt14,>Alt15 + db >Alt16,>Alt17,>Alt18 + db >Alt19,>Alt20,>Alt21 + db >Alt22,>Alt23,>Alt24 +AltLineTableL db