home *** CD-ROM | disk | FTP | other *** search
- ;
- ; ╙MOOTH SCROLLER, ├OPYRIGHT ┴.═ILLETT
- ;
- *=$9C00
- ;
- VIC = 53248 ; ╓IC CHIP
- SPRPTRS = 33784
- HIBITS = VIC + 16 ; ═╙┬ OF SPRITE POSNS
- ZPTR = $FB
- ZPTR2= $FD
- ZMSGPTR = $FB
- KBHIT = 198 ; ╙ET IF CHAR TYPED.
- VDU = 32768 ; ╠OC OF SCREEN
- COLRAM = $D800 ; ╠OC OF COLOR RAM
- ;
- ; ╩UMP VECTOR TABLE..
- DOSMOOTH.
- JMP MAIN
- RESETSMOOTH.
- JMP INIT
- JSPECIALFX.
- JMP SPECIALFX
- JDOROTATE.
- JSR DOROTATECHAR
- JWAIT1SCR.
- JMP WAIT1SCR
- JFILLVDU.
- JMP FILLVDU
- JDO1DOT.
- JMP DO1DOT
- ;
- .BYTE 0,0,0
- .BYTE 0,0,0,0,0,0,0,0
- .BYTE 0,0,0,0,0,0,0,0
- .BYTE 0,0,0,0,0,0,0,0
- ; ╧K, FLAGS START AT $9C28
- ;
- MSGPTR. ; ╔F ANY SCROLL OF EDGE, THIS IS PTR TO NEW SPR
- .WORD $9000
- MSGLOC.
- .WORD $9000
- CHRSETLOC. ; ╠OC OF USER DEF CHAR SET
- .WORD $8800
- INDEX.
- .BYTE 0
- RMARG. ; ╥ESET POS FOR NEW SPR
- .BYTE 112
- LMARG.
- .BYTE 24
- HSPACING. ; ╚ORIZONTAL SPACING OF SPRITES.
- .BYTE 46
- SCOLOR. ; ╙PRITE COLOR
- .BYTE 1
- WIDEMODE. ; ─OUBLE WIDTH SPRITES
- .BYTE 255
- WIGGLEFLAG. ; ╙ET FOR JUMPING SCROLL
- .BYTE 0
- SPEED. ; ╙CROLL SPEED IN X/50 SEC/DOT
- .BYTE 0
- SPROFFSET. ; ╙TART OF SPRITES
- .BYTE 127
- HLINE. ; ╙CREEN LINE FOR SCROLL
- .BYTE 224
- MOVEBY2FLAG. ; ═OVE SCROLL BY 2 IF BIT 7 SET
- .BYTE 0
- FILLCHAR. ; ├HAR FOR SCREEN FILL
- .BYTE 87
- TICKCHAR. ; ├HAR USED FOR 'TICK' FX
- .BYTE 209
- ROTCHAR. ; ├HAR ROTATED FOR MOVING BACKGROUND
- .BYTE 87
- ROTLEN. ; ╬O OF PIXELS TO ROTATE
- .BYTE 7
- FILLCOLOR. ; ├OLOR FOR SCREEN FILL
- .BYTE 0
- MASK.
- .BYTE 1,2,4,8,16,32,64,128
- WIGGLE. ; ╓ERT WIGGLE FACTOR
- .BYTE 7,5,4,3,2,1,1,0,0,0,1,1,2,3,4,5
- ;
- ;
- MAIN.
- MAINLOOP.
- JSR DOROTATECHAR ; ╥OTATE SCROLLING BACKGROUND
- LDX SPEED ; ╞IRST WAIT FOR A TIME & SYNC TO SCREEN
- WLOOP.
- JSR WAIT1SCR
- DEX
- BPL WLOOP
- JSR DO1DOT ; ╙CROLL MESSAGE 1 DOT..
- BIT MOVEBY2FLAG ; 2 DOT MOVE ?
- BPL NO2MOVE ; ╬O..
- JSR DO1DOT ; ╙CROLL MESSAGE 1 MORE DOT..
- NO2MOVE.
- LDA KBHIT
- BEQ MAINLOOP ; ╬O KEY HIT, RELOOP..
- RTS ; ╧K, DONE!
- ;
- DO1DOT. ; ╙CROLL 1 DOT LEFT,
- LDX #$00 ; ╔NDEX INTO SPRITES
- LDY #$00
- STY INDEX
- MORE.
- LDA VIC,X
- BNE NOHI ; ╬O OVERFLOW..
- LDA MASK,Y ; ╟ET HI BIT
- AND HIBITS
- BNE NONEW ; ╙ET, SO CLEAR..
- JSR NEWSPRITE ; ╙TART A NEW SPRITE
- CLC
- BCC NOHI
- NONEW. ; ╠O BYTE OVERFLOW, CLR HI BIT
- LDA MASK,Y
- EOR # $FF ; ├ALC MASK FOR HI BIT
- AND HIBITS
- STA HIBITS
- NOHI. ; ╧K, NOW SET VERT POS
- DEC VIC,X ; ═OVE SPR LEFT
- LDY INDEX
- LDA #0
- BIT WIGGLEFLAG ; ─O WE WIGGLE ?
- BPL NOWIGGLE
- LDA VIC,X ; USE HPOS AS INDEX TO WIGGLE
- AND # $0F
- TAY
- LDA WIGGLE,Y
- NOWIGGLE.
- CLC ; ╬OW ADD IN NORM VERT LINE
- ADC HLINE
- STA VIC+1,X ; ╙TORE VERT POS FOR SPRITE.
- INC INDEX ; ╧K, NEXT SPRITE..
- LDY INDEX
- INX
- INX
- CPY # 8
- BNE MORE ; NEXT SPRITE..
- RTS ; ╧K, DONE!
- ;
- NEWSPRITE. ; ╙TART A NEW SPRITE
- LDA RMARG ; ╙TART NEW SPRITE FAR RIGHT
- STA VIC,X
- LDA MASK,Y
- ORA HIBITS ; ╙ET HI BIT
- STA HIBITS
- NEXTMSG. ; ┴DVANCE MESSAGE POINTER
- INC MSGPTR
- BNE GETMSG
- INC MSGPTR+1
- GETMSG. ; ╟ET CHAR FROM MSG STRING
- LDA MSGPTR ; ═OV PTR TO ZERO PAGE
- STA ZMSGPTR
- LDA MSGPTR+1
- STA ZMSGPTR+1
- LDY #0
- LDA (ZMSGPTR),Y ; ╟ET MSG CHAR
- BNE NEW2 ; ╬OT NULL YET, SO PRINT..
- LDA MSGLOC ; ┼ND OF MESSAGE, SO RESET MSG TO START
- STA MSGPTR
- LDA MSGLOC+1
- STA MSGPTR+1
- CLC
- BCC GETMSG
- NEW2.
- BPL NORMLET ; ╬O SPECIAL EFFECTS
- CMP #128 ; ╘OGGLE WIGGLE ?
- BNE NEW3
- LDA #$80
- EOR WIGGLEFLAG
- STA WIGGLEFLAG
- CLC
- BCC NEXTMSG ; ┴NOTHER MSG CHAR..
- NEW3.
- CMP #129 ; ╘OGGLE 2 DOT SPEED?
- BNE NEW4
- LDA #$80
- EOR MOVEBY2FLAG
- STA MOVEBY2FLAG
- CLC
- BCC NEXTMSG ; ┴NOTHER MSG CHAR..
- NEW4.
- AND #$1F
- STA SPEED
- CLC
- BCC NEXTMSG ; ┴NOTHER MSG CHAR..
- NORMLET. ; ╧K NORM LETTER IN ACC, STORE IN SPRITE PTR
- LDY INDEX
- CLC
- ADC SPROFFSET
- STA SPRPTRS,Y
- JSR SPECIALFX ; ═OVE LINE IN BALL CHR
- RTS
- ;
- SPECIALFX. ; ═OVE LINE IN BALL CHR
- TYA
- PHA ; STASH Y REG
- LDA TICKCHAR ; ├HARACTER TO TICK
- JSR SETCHRPTR ; ╙ET UP (ZPTR) TO CHAR
- LDY #3
- LDA (ZPTR),Y
- PHA
- INY
- LDA (ZPTR),Y
- DEY
- STA (ZPTR),Y
- PLA
- INY
- STA (ZPTR),Y
- PLA
- TAY
- RTS
- ;
- DOROTATECHAR. ; ╥OTATE SPECIAL CHAR VERTICALLY FOR EFFECT
- TYA
- PHA ; STASH Y REG
- LDA ROTCHAR ; ├HARACTER TO ROTATE
- JSR SETCHRPTR ; ╙ET UP (ZPTR) TO CHAR
- LDY ROTLEN ; ╬O TO ROTATE
- LDA (ZPTR),Y ; ╙TASH TOP ONE
- PHA
- SPEC1.
- DEY ; ╥IPPLE BYTES DOWN..
- LDA (ZPTR),Y
- INY
- STA (ZPTR),Y
- DEY
- BNE SPEC1
- PLA
- STA (ZPTR),Y ; ╥EGET TOP VAL AND PUT AT BOTTOM
- PLA ; ╥EGET Y REG
- TAY
- RTS
- ;
- SETCHRPTR. ; ╙ET UP (ZPTR) TO POINT TO LOC OF CHAR IN ┴CC
- LDY #0 ; ├LR HI BYTE ZPTR
- STY ZPTR+1
- ASL A ; ═ULT CHAR BY 8
- ROL ZPTR+1
- ASL A
- ROL ZPTR+1
- ASL A
- ROL ZPTR+1
- CLC ; ┴DD IN CHR ADDRESS TO CHRSET LOCATION
- ADC CHRSETLOC
- STA ZPTR
- LDA ZPTR+1
- ADC CHRSETLOC+1
- STA ZPTR+1
- RTS
- ;
- FILLVDU. ; ╞ILL VDU WITH (FILLCHAR)
- JSR SETCOLOR ; ╞ILL COLOR RAM
- LDA FILLCHAR
- LDY #0
- FILL1.
- STA VDU,Y
- STA VDU+256,Y
- STA VDU+512,Y
- STA VDU+768,Y
- INY
- BNE FILL1
- RTS
- ;
- SETCOLOR. ; ╞ILL COLOR RAM WITH (FILLCOLOR)
- LDA FILLCOLOR
- LDY #0
- FILL2.
- STA COLRAM,Y
- STA COLRAM+256,Y
- STA COLRAM+512,Y
- STA COLRAM+768,Y
- INY
- BNE FILL2
- RTS
- ;
- WAIT1SCR. ; ╫AIT FOR SCREEN TO FINISH
- LDA VIC+18 ; ├URRENT RASTER VAL
- CMP #250
- BCC WAIT1SCR
- WAIT2.
- LDA VIC+18 ; ├URRENT RASTER VAL
- CMP #250
- BCS WAIT2
- RTS
- ;
- INIT. ; ╔NITIALISE SPRITE POSITIONS AND SWITCH THEM ON
- LDA #0
- STA HIBITS
- STA WIGGLEFLAG ; ╬O WIGGLE TO START
- STA MOVEBY2FLAG ; ╙LOW TO START
- LDA MSGLOC ; ╥ESET MESSAGE POINTER
- STA MSGPTR
- LDA MSGLOC+1
- STA MSGPTR+1
- LDX #0
- LDY #0
- LDA LMARG ; ╪POS INDEX LO
- STA ZPTR
- STX ZPTR+1 ; ╪POS HI
- INIT1.
- LDA HLINE
- STA VIC+1,X ; ╙ET ┘ POS OF SPRITE
- LDA ZPTR
- STA VIC,X ; ╙ET SPRITE ╪ POS LO BYTE
- LDA ZPTR+1 ; ┴NY HI BIT FOR SPRITE?
- BEQ INIT2 ; ╠EAVE HI BIT CLR
- LDA MASK,Y ; ╙ET SPRITE(Y) HI BIT
- ORA HIBITS
- STA HIBITS
- INIT2.
- LDA SCOLOR ; ╧K, ╙ET COLOR FOR SPRITE
- STA VIC+39,Y
- LDA SPROFFSET
- CLC
- ADC #1 ; ALL SPRITE START SPC
- STA SPRPTRS,Y
- LDA ZPTR
- CLC
- ADC HSPACING
- STA ZPTR
- BCC INIT3
- INC ZPTR+1
- INIT3.
- INX
- INX
- INY
- CPY #8
- BNE INIT1
- LDA WIDEMODE
- STA VIC+29
- LDA #255
- STA VIC+21 ; ╙WITCH ON SPRITES
- RTS
- ;
-