home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / commodore-scene-files / Coverdisks / CDU / V4D01.D64 / smooth24.asm < prev    next >
Encoding:
Assembly Source File  |  2019-04-13  |  6.8 KB  |  334 lines

  1. ;
  2. ; ╙MOOTH SCROLLER, ├OPYRIGHT ┴.═ILLETT
  3. ;
  4. *=$9C00
  5. ;
  6. VIC = 53248                ; ╓IC CHIP
  7. SPRPTRS = 33784
  8. HIBITS = VIC + 16          ; ═╙┬ OF SPRITE POSNS
  9. ZPTR = $FB
  10. ZPTR2= $FD
  11. ZMSGPTR = $FB
  12. KBHIT = 198                ; ╙ET IF CHAR TYPED.
  13. VDU = 32768                ; ╠OC OF SCREEN
  14. COLRAM = $D800             ; ╠OC OF COLOR RAM
  15. ;
  16. ;                  ╩UMP VECTOR TABLE..
  17. DOSMOOTH.
  18.   JMP MAIN
  19. RESETSMOOTH.
  20.   JMP INIT
  21. JSPECIALFX.
  22.   JMP SPECIALFX
  23. JDOROTATE.
  24.   JSR DOROTATECHAR
  25. JWAIT1SCR.
  26.   JMP WAIT1SCR
  27. JFILLVDU.
  28.   JMP FILLVDU
  29. JDO1DOT.
  30.   JMP DO1DOT
  31. ;
  32.   .BYTE 0,0,0
  33.   .BYTE 0,0,0,0,0,0,0,0
  34.   .BYTE 0,0,0,0,0,0,0,0
  35.   .BYTE 0,0,0,0,0,0,0,0
  36. ;    ╧K, FLAGS START AT $9C28
  37. ;
  38. MSGPTR.             ; ╔F ANY SCROLL OF EDGE, THIS IS PTR TO NEW SPR
  39.   .WORD $9000
  40. MSGLOC.
  41.   .WORD $9000
  42. CHRSETLOC.         ; ╠OC OF USER DEF CHAR SET
  43.   .WORD $8800
  44. INDEX.
  45.   .BYTE 0
  46. RMARG.              ; ╥ESET POS FOR NEW SPR
  47.   .BYTE 112
  48. LMARG.
  49.   .BYTE 24
  50. HSPACING.          ; ╚ORIZONTAL SPACING OF SPRITES.
  51.   .BYTE 46
  52. SCOLOR.            ; ╙PRITE COLOR
  53.   .BYTE 1
  54. WIDEMODE.          ; ─OUBLE WIDTH SPRITES
  55.   .BYTE 255
  56. WIGGLEFLAG.        ; ╙ET FOR JUMPING SCROLL
  57.   .BYTE 0
  58. SPEED.             ; ╙CROLL SPEED IN X/50 SEC/DOT
  59.   .BYTE 0
  60. SPROFFSET.         ; ╙TART OF SPRITES
  61.   .BYTE 127
  62. HLINE.             ; ╙CREEN LINE FOR SCROLL
  63.   .BYTE 224
  64. MOVEBY2FLAG.       ; ═OVE SCROLL BY 2 IF BIT 7 SET
  65.   .BYTE 0
  66. FILLCHAR.          ; ├HAR FOR SCREEN FILL
  67.   .BYTE 87
  68. TICKCHAR.          ; ├HAR USED FOR 'TICK' FX
  69.   .BYTE 209
  70. ROTCHAR.           ; ├HAR ROTATED FOR MOVING BACKGROUND
  71.   .BYTE 87
  72. ROTLEN.            ; ╬O OF PIXELS TO ROTATE
  73.   .BYTE 7
  74. FILLCOLOR.         ; ├OLOR FOR SCREEN FILL
  75.   .BYTE 0
  76. MASK.
  77.   .BYTE 1,2,4,8,16,32,64,128
  78. WIGGLE.             ; ╓ERT WIGGLE FACTOR
  79.   .BYTE 7,5,4,3,2,1,1,0,0,0,1,1,2,3,4,5
  80. ;
  81. ;
  82. MAIN.
  83. MAINLOOP.
  84.   JSR DOROTATECHAR ; ╥OTATE SCROLLING BACKGROUND
  85.   LDX SPEED        ; ╞IRST WAIT FOR A TIME & SYNC TO SCREEN
  86. WLOOP.
  87.    JSR WAIT1SCR
  88.    DEX
  89.   BPL WLOOP
  90.   JSR DO1DOT       ; ╙CROLL MESSAGE 1 DOT..
  91.   BIT MOVEBY2FLAG  ; 2 DOT MOVE ?
  92.   BPL NO2MOVE      ; ╬O..
  93.   JSR DO1DOT       ; ╙CROLL MESSAGE 1 MORE DOT..
  94. NO2MOVE.
  95.   LDA KBHIT
  96.   BEQ MAINLOOP     ; ╬O KEY HIT, RELOOP..
  97.   RTS              ; ╧K, DONE!
  98. ;
  99. DO1DOT.             ; ╙CROLL 1 DOT LEFT,
  100.   LDX #$00          ; ╔NDEX INTO SPRITES
  101.   LDY #$00
  102.   STY INDEX
  103. MORE.
  104.   LDA VIC,X
  105.   BNE NOHI          ; ╬O OVERFLOW..
  106.    LDA MASK,Y       ; ╟ET HI BIT
  107.    AND HIBITS
  108.    BNE NONEW        ; ╙ET, SO CLEAR..
  109.     JSR NEWSPRITE   ; ╙TART A NEW SPRITE
  110.     CLC
  111.     BCC NOHI
  112. NONEW.              ; ╠O BYTE OVERFLOW, CLR HI BIT
  113.    LDA MASK,Y
  114.    EOR # $FF        ; ├ALC MASK FOR HI BIT
  115.    AND HIBITS
  116.    STA HIBITS
  117. NOHI.               ; ╧K, NOW SET VERT POS
  118.   DEC VIC,X         ; ═OVE SPR LEFT
  119.   LDY INDEX
  120.   LDA #0
  121.   BIT WIGGLEFLAG   ; ─O WE WIGGLE ?
  122.   BPL NOWIGGLE
  123.   LDA VIC,X        ; USE HPOS AS INDEX TO WIGGLE
  124.   AND # $0F
  125.   TAY
  126.   LDA WIGGLE,Y
  127. NOWIGGLE.
  128.   CLC              ; ╬OW ADD IN NORM VERT LINE
  129.   ADC HLINE
  130.   STA VIC+1,X      ; ╙TORE VERT POS FOR SPRITE.
  131.   INC INDEX        ; ╧K, NEXT SPRITE..
  132.   LDY INDEX
  133.   INX
  134.   INX
  135.   CPY # 8
  136.   BNE MORE         ; NEXT SPRITE..
  137.   RTS              ; ╧K, DONE!
  138. ;
  139. NEWSPRITE.         ; ╙TART A NEW SPRITE
  140.    LDA RMARG       ; ╙TART NEW SPRITE FAR RIGHT
  141.    STA VIC,X
  142.    LDA MASK,Y
  143.    ORA HIBITS      ; ╙ET HI BIT
  144.    STA HIBITS
  145. NEXTMSG.           ; ┴DVANCE MESSAGE POINTER
  146.    INC MSGPTR
  147.    BNE GETMSG
  148.    INC MSGPTR+1
  149. GETMSG.            ; ╟ET CHAR FROM MSG STRING
  150.    LDA MSGPTR      ; ═OV PTR TO ZERO PAGE
  151.    STA ZMSGPTR
  152.    LDA MSGPTR+1
  153.    STA ZMSGPTR+1
  154.    LDY #0
  155.    LDA (ZMSGPTR),Y    ; ╟ET MSG CHAR
  156.    BNE NEW2        ; ╬OT NULL YET, SO PRINT..
  157.     LDA MSGLOC     ; ┼ND OF MESSAGE, SO RESET MSG TO START
  158.     STA MSGPTR
  159.     LDA MSGLOC+1
  160.     STA MSGPTR+1
  161.     CLC
  162.     BCC GETMSG
  163. NEW2.
  164.    BPL NORMLET     ; ╬O SPECIAL EFFECTS
  165.    CMP #128       ; ╘OGGLE WIGGLE ?
  166.    BNE NEW3
  167.     LDA #$80
  168.     EOR WIGGLEFLAG
  169.     STA WIGGLEFLAG
  170.     CLC
  171.     BCC NEXTMSG    ; ┴NOTHER MSG CHAR..
  172. NEW3.
  173.    CMP #129       ; ╘OGGLE 2 DOT SPEED?
  174.    BNE NEW4
  175.     LDA #$80
  176.     EOR MOVEBY2FLAG
  177.     STA MOVEBY2FLAG
  178.     CLC
  179.     BCC NEXTMSG    ; ┴NOTHER MSG CHAR..
  180. NEW4.
  181.     AND #$1F
  182.     STA SPEED
  183.     CLC
  184.     BCC NEXTMSG    ; ┴NOTHER MSG CHAR..
  185. NORMLET.           ; ╧K NORM LETTER IN ACC, STORE IN SPRITE PTR
  186.    LDY INDEX
  187.    CLC
  188.    ADC SPROFFSET
  189.    STA SPRPTRS,Y
  190.    JSR SPECIALFX   ; ═OVE LINE IN BALL CHR
  191.    RTS
  192. ;
  193. SPECIALFX.         ; ═OVE LINE IN BALL CHR
  194.    TYA
  195.    PHA             ; STASH Y REG
  196.    LDA TICKCHAR    ; ├HARACTER TO TICK
  197.    JSR SETCHRPTR   ; ╙ET UP (ZPTR) TO CHAR
  198.    LDY #3
  199.    LDA (ZPTR),Y
  200.    PHA
  201.    INY
  202.    LDA (ZPTR),Y
  203.    DEY
  204.    STA (ZPTR),Y
  205.    PLA
  206.    INY
  207.    STA (ZPTR),Y
  208.    PLA
  209.    TAY
  210.    RTS
  211. ;
  212. DOROTATECHAR.      ; ╥OTATE SPECIAL CHAR VERTICALLY FOR EFFECT
  213.    TYA
  214.    PHA             ; STASH Y REG
  215.    LDA ROTCHAR     ; ├HARACTER TO ROTATE
  216.    JSR SETCHRPTR   ; ╙ET UP (ZPTR) TO CHAR
  217.    LDY ROTLEN      ; ╬O TO ROTATE
  218.    LDA (ZPTR),Y    ; ╙TASH TOP ONE
  219.    PHA
  220. SPEC1.
  221.     DEY             ; ╥IPPLE BYTES DOWN..
  222.     LDA (ZPTR),Y
  223.     INY
  224.     STA (ZPTR),Y
  225.     DEY
  226.    BNE SPEC1
  227.    PLA
  228.    STA (ZPTR),Y    ; ╥EGET TOP VAL AND PUT AT BOTTOM
  229.    PLA             ; ╥EGET Y REG
  230.    TAY
  231.    RTS
  232. ;
  233. SETCHRPTR.         ; ╙ET UP (ZPTR) TO POINT TO LOC OF CHAR IN ┴CC
  234.   LDY #0           ; ├LR HI BYTE ZPTR
  235.   STY ZPTR+1
  236.   ASL A            ; ═ULT CHAR BY 8
  237.   ROL ZPTR+1
  238.   ASL A
  239.   ROL ZPTR+1
  240.   ASL A
  241.   ROL ZPTR+1
  242.   CLC              ; ┴DD IN CHR ADDRESS TO CHRSET LOCATION
  243.   ADC CHRSETLOC
  244.   STA ZPTR
  245.   LDA ZPTR+1
  246.   ADC CHRSETLOC+1
  247.   STA ZPTR+1
  248.   RTS
  249. ;
  250. FILLVDU.           ; ╞ILL VDU WITH (FILLCHAR)
  251.   JSR SETCOLOR     ; ╞ILL COLOR RAM
  252.   LDA FILLCHAR
  253.   LDY #0
  254. FILL1.
  255.   STA VDU,Y
  256.   STA VDU+256,Y
  257.   STA VDU+512,Y
  258.   STA VDU+768,Y
  259.   INY
  260.   BNE FILL1
  261.   RTS
  262. ;
  263. SETCOLOR.          ; ╞ILL COLOR RAM WITH (FILLCOLOR)
  264.   LDA FILLCOLOR
  265.   LDY #0
  266. FILL2.
  267.   STA COLRAM,Y
  268.   STA COLRAM+256,Y
  269.   STA COLRAM+512,Y
  270.   STA COLRAM+768,Y
  271.   INY
  272.   BNE FILL2
  273.   RTS
  274. ;
  275. WAIT1SCR.          ; ╫AIT FOR SCREEN TO FINISH
  276.    LDA VIC+18      ; ├URRENT RASTER VAL
  277.    CMP #250
  278.    BCC WAIT1SCR
  279. WAIT2.
  280.    LDA VIC+18      ; ├URRENT RASTER VAL
  281.    CMP #250
  282.    BCS WAIT2
  283.    RTS
  284. ;
  285. INIT.              ; ╔NITIALISE SPRITE POSITIONS AND SWITCH THEM ON
  286.   LDA #0
  287.   STA HIBITS
  288.   STA WIGGLEFLAG   ; ╬O WIGGLE TO START
  289.   STA MOVEBY2FLAG  ; ╙LOW TO START
  290.   LDA MSGLOC       ; ╥ESET MESSAGE POINTER
  291.   STA MSGPTR
  292.   LDA MSGLOC+1
  293.   STA MSGPTR+1
  294.   LDX #0
  295.   LDY #0
  296.   LDA LMARG        ; ╪POS INDEX LO
  297.   STA ZPTR
  298.   STX ZPTR+1       ; ╪POS HI
  299. INIT1.
  300.   LDA HLINE
  301.   STA VIC+1,X      ; ╙ET ┘ POS OF SPRITE
  302.   LDA ZPTR
  303.   STA VIC,X        ; ╙ET SPRITE ╪ POS LO BYTE
  304.   LDA ZPTR+1       ; ┴NY HI BIT FOR SPRITE?
  305.   BEQ INIT2        ; ╠EAVE HI BIT CLR
  306.    LDA MASK,Y      ; ╙ET SPRITE(Y) HI BIT
  307.    ORA HIBITS
  308.    STA HIBITS
  309. INIT2.
  310.   LDA SCOLOR       ; ╧K, ╙ET COLOR FOR SPRITE
  311.   STA VIC+39,Y
  312.   LDA SPROFFSET
  313.   CLC
  314.   ADC #1           ; ALL SPRITE START SPC
  315.   STA SPRPTRS,Y
  316.   LDA ZPTR
  317.   CLC
  318.   ADC HSPACING
  319.   STA ZPTR
  320.   BCC INIT3
  321.   INC ZPTR+1
  322. INIT3.
  323.   INX
  324.   INX
  325.   INY
  326.   CPY #8
  327.   BNE INIT1
  328.   LDA WIDEMODE
  329.   STA VIC+29
  330.   LDA #255
  331.   STA VIC+21       ; ╙WITCH ON SPRITES
  332.   RTS
  333. ;
  334.