home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64Demos / BOINK.SDA / BOINK.ASM next >
Assembly Source File  |  2019-04-13  |  4KB  |  203 lines

  1. ;=================================
  2. ;64 BOINK!
  3. ;(C) 1986 STEVE GOLDSMITH
  4. ;ALL RIGHTS RESERVED
  5. ;USE COMMODORE'S MACRO ASSEMBLER
  6. ;TO ASSEMBLE
  7. ;=================================
  8. ;
  9. IRQVEC = $0314 ;OS IRQ INTERRUPT VECTOR
  10. VIC2 = $D000 ;VIC2 CHIP
  11. SPRPTR = $07F8 ;SPRITE POINTER
  12. SID = $D400 ;SOUND CHIP
  13. PRINT = $FFD2 ;OUTPUT A CHARACTER
  14. * = $0900
  15. ;
  16. ;INITILIZE SPRITE, IRQ, AND PRINT MESSAGE
  17. ;
  18. LDA #$05
  19. STA TIMER ;INIT ROTATION TIMER
  20. LDA #$05
  21. STA STIMER ;INIT SOUND EFFECT TIMER
  22. LDA #$00
  23. STA XDIR ;INIT X DIR
  24. STA YDIR ;INIT Y DIR
  25. STA COLOR ;INIT REFLECTION COLOR
  26. STA SETOGL ;INIT SOUND EFFECT TOGGLE
  27. STA ROTDIR ;INIT ROTATION DIRECTION
  28. SEI
  29. LDA IRQVEC ;GET CURRENT IRQ VECTOR
  30. STA NORIRQ ;SET UP INDIRECT JUMP
  31. LDA IRQVEC+1
  32. STA NORIRQ+1
  33. LDA #<NEWIRQ ;CHANGE IRQ VECTOR
  34. STA IRQVEC
  35. LDA #>NEWIRQ
  36. STA IRQVEC+1
  37. CLI
  38. LDX #$00 ;PRINT MESSAGE
  39. LOOP17 LDA TEXT,X
  40. JSR PRINT
  41. INX
  42. CPX #$27
  43. BNE LOOP17
  44. LDA #$00 ;BLACK
  45. STA VIC2+$21 ;SCREEN COLOR
  46. LDA #$2C ;SPRITE #44
  47. STA SPRPTR ;TELL VIC2 WHERE SPRITE 0 IS
  48. LDA #$A0 ;X POSITION
  49. STA VIC2
  50. LDA #$81 ;Y POSITION
  51. STA VIC2+1
  52. LDA #$01
  53. STA VIC2+$1C ;SET MULTI-COLOR MODE
  54. LDA #$06 ;BLUE
  55. STA VIC2+$25 ;SET BIT PAIR 01
  56. LDA #$01 ;WHITE
  57. STA VIC2+$26 ;SET BIT PAIR 11
  58. LDA #$02 ;RED
  59. STA VIC2+$27 ;BIT PAIR 10
  60. LDA #$01
  61. STA VIC2+$17 ;EXPAND Y 2X
  62. STA VIC2+$1D ;EXPAND X 2X
  63. STA VIC2+$15 ;TURN SPRITE ON
  64. LDA #$0F
  65. STA SID+$18 ;TURN ON MASTER VOLUME
  66. RTS
  67. ;
  68. ;ROTATE AND MOVE SPRITE
  69. ;
  70. NEWIRQ LDA XDIR ;GET X DIRECTION 0=RIGHT ; 1=LEFT
  71. BNE LOOP1
  72. LDA VIC2+$10 ;GET MSB X POS
  73. BNE LOOP3 ;SET?
  74. LDA VIC2 ;GET LSB X POS
  75. CMP #$FF ;REACHED SPRITE SEEM?
  76. BNE LOOP2
  77. LDA #$01
  78. STA VIC2+$10 ;SET MSB X POS
  79. JMP LOOP2
  80. LOOP3 LDA VIC2
  81. CMP #$3C ;RIGHT EDGE OF SCREEN
  82. BNE LOOP2
  83. LDA #$01
  84. STA XDIR ;CHANGE DIRECTION
  85. STA ROTDIR ;CHANGE ROTATION DIR
  86. JSR SOUND ;SOUND EFFECT
  87. JMP LOOP4
  88. LOOP2 INC VIC2 ;MOVE RIGHT
  89. JMP LOOP4 ;MOVE Y DIR
  90. LOOP1 LDA VIC2+$10 ;GET MSB X POS
  91. BEQ LOOP6 ;SET?
  92. LDA VIC2 ;GET LSB X POS
  93. BNE LOOP5 ;REACHED SPRITE SEEM?
  94. LDA #$00
  95. STA VIC2+$10 ;SET MSB X POS
  96. JMP LOOP5
  97. LOOP6 LDA VIC2
  98. CMP #$08 ;LEFT EDGE OF SCREEN
  99. BNE LOOP5
  100. LDA #$00
  101. STA XDIR ;CHANGE DIRECTION
  102. STA ROTDIR ;CHANGE ROTATION DIR
  103. JSR SOUND ;SOUND EFFECT
  104. JMP LOOP4
  105. LOOP5 DEC VIC2 ;MOVE LEFT
  106. LOOP4 LDA YDIR ;GET Y DIRECTION 0=DOWN ; 1=UP
  107. BNE LOOP7
  108. LDA VIC2+1 ;GET Y POS
  109. CMP #$D6 ;BOTTOM OF SCREEN
  110. BNE LOOP8
  111. LDA #$01
  112. STA YDIR
  113. STA ROTDIR ;CHANGE ROTATION DIR
  114. JSR SOUND ;SOUND EFFECT
  115. JMP LOOP9
  116. LOOP8 INC VIC2+1 ;MOVE DOWN
  117. JMP LOOP9
  118. LOOP7 LDA VIC2+1 ;GET Y POS
  119. CMP #$2C ;TOP OF SCREEN
  120. BNE LOOP10
  121. LDA #$00
  122. STA YDIR
  123. STA ROTDIR ;CHANGE ROTATION DIR
  124. JSR SOUND ;SOUND EFFECT
  125. JMP LOOP9
  126. LOOP10 DEC VIC2+1 ;MOVE DOWN
  127. LOOP9 DEC TIMER
  128. BNE LOOP11 ;TIMER = 0?
  129. LDA #$05
  130. STA TIMER ;RESET TIMER
  131. LDA ROTDIR ;GET ROTATION DIRECTION
  132. BNE LOOP15 ;1= LEFT 0=RIGHT
  133. LDA SPRPTR
  134. CMP #$3F
  135. BNE LOOP12 ;HAS SPRITE MADE FULL ROTATION?
  136. LDA #$00
  137. STA COLOR ;RESET COLOR COUNTER
  138. LDA #$2C
  139. STA SPRPTR
  140. JMP LOOP11
  141. LOOP12 INC SPRPTR ;ROTATE 1 STEP RIGHT
  142. LDX COLOR
  143. INC COLOR
  144. LDA C1DATA,X
  145. STA VIC2+$26 ;COLOR REFLECTION
  146. JMP LOOP11
  147. LOOP15 LDA SPRPTR
  148. CMP #$2C
  149. BNE LOOP16 ;HAS SPRITE MADE FULL ROTATION?
  150. LDA #$13
  151. STA COLOR ;RESET COLOR COUNTER
  152. LDA #$3F
  153. STA SPRPTR
  154. JMP LOOP11
  155. LOOP16 DEC SPRPTR ;ROTATE 1 STEP LEFT
  156. LDX COLOR
  157. DEC COLOR
  158. LDA C1DATA,X
  159. STA VIC2+$26 ;COLOR REFLECTION
  160. LOOP11 LDA SETOGL
  161. BNE LOOP13
  162. JMP (NORIRQ) ;NORMAL IRQ PROCESSING
  163. LOOP13 DEC STIMER
  164. BNE LOOP14
  165. LDA #%10000000
  166. STA SID+$04 ;START RELEASE
  167. LDA #$00
  168. STA SETOGL ;RESET TOGGLE
  169. LOOP14 JMP (NORIRQ) ;NORMAL IRQ PROCESSING
  170. ;
  171. ;SOUND EFFECT
  172. ;
  173. SOUND LDA #$85
  174. STA SID+$05 ;SET ATTACK/DECAY
  175. LDA #$75
  176. STA SID+$06 ;SET SUSTAIN/RELEASE
  177. LDA #$88
  178. STA SID ;SET LO FREQ
  179. LDA #$03
  180. STA SID+1 ;SET HI FREQ
  181. LDA #%10000001
  182. STA SID+$04 ;SET RANDOM NOISE AND GATE BIT
  183. LDA #$05
  184. STA STIMER ;SET SUSTAIN TIMER
  185. STA SETOGL ;SET SOUND EFFECT TOGGLE
  186. RTS
  187. ;
  188. ;VARIABLES AND DATA
  189. ;
  190. TEXT .BYTE 13,05,'64 BOINK!'
  191. .BYTE 13,'BY STEVE GOLDSMITH'
  192. .BYTE 13,'10/06/86'
  193. C1DATA .BYTE 11,11,11,12,15,1,15,12,11,11,11,11,11,12,15,1,15,12,11,11
  194. TIMER .BYTE 0 ;ROTATION TIMER
  195. ROTDIR .BYTE 0 ;ROTATION DIRECTION
  196. XDIR .BYTE 0 ;SPRITE X DIRECTION
  197. YDIR .BYTE 0 ;SPRITE Y DIRECTION
  198. SETOGL .BYTE 0 ;SOUND EFFECT TOGGLE
  199. STIMER .BYTE 0 ;SUSTAIN TIMER
  200. COLOR .BYTE 0 ;CURRENT REFLECTION COLOR
  201. NORIRQ .BYTE 0,0 ;IRQ JUMP VECTOR
  202. .END
  203.