INIT.S 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. * 1522 030784
  2. *
  3. *
  4. *
  5. ** INIT.S **
  6. ** ASTEROIDS FOR THE ATARI 3600 **
  7. ** THIS FILE CONTAINS VARIOUS INITIALIZATION ROUTINES. **
  8. * ROCK INITIALIZATION ROUTINE, SOFT PALETTES, RANDPOS AND VELOCITY TO ROCKS
  9. INITROCK:
  10. LDA #$FF ;FOR NEW RACK NULL OUT ROCKS.
  11. LDX #23
  12. NULLROCK: STA STATUS,X
  13. DEX
  14. BPL NULLROCK
  15. * ;PUT UP DIFFICULTY ICON.
  16. * LDA #10
  17. * CLC
  18. * ADC DIFF
  19. * TAY
  20. * LDX #33
  21. * JSR DOICON
  22. * LDA #16 ;REPOSITION ICON DURING GAMEPLAY
  23. * STA XPOSH,X
  24. LDY PLAYER
  25. LDX ROCKTOT,Y
  26. DEX
  27. NROKLOOP: LDA #LARGE ;INITIALIZE ROCKS
  28. STA STATUS,X
  29. LDA ASPIN,X
  30. AND #$7F
  31. TAY
  32. LDA LBOUND,Y
  33. STA ACYC,X ;STORE INITIAL ANIMATION
  34. JSR RANDPOS ;STORE A RANDOM BORDER POSITION
  35. JSR RANDVEL ; AND RANDOM VELOCITY.
  36. DEX
  37. BPL NROKLOOP
  38. COPYPALS: LDX #32
  39. ZOPYPALS: LDA PALTAB,X ;LOAD UP SOFT PALETTE/WIDTH TABLE
  40. STA PALS,X
  41. DEX
  42. BPL ZOPYPALS
  43. RTS
  44. ** ROUTINE TO INITIALIZE THE SCORE DISPLAY THE FIRST TIME. **
  45. INITSCOR:
  46. * FIRST ZERO SCORE FOR BOTH PLAYERS
  47. LDX #11
  48. LDA #0
  49. ZEROSCOR: STA SCORE,X
  50. DEX
  51. BPL ZEROSCOR
  52. RTS
  53. * ROUTINE TO ZERO OUT THE HIGH SCORE
  54. ZEROHS: LDA #0
  55. STA HISCORE ;ZAP THE HIGH SCORE
  56. STA HISCORE+1
  57. STA HISCORE+2
  58. STA HISCORE+3
  59. RTS
  60. INITPLAY:
  61. JSR CLEARTUN ;CLEAR OUT AUDIO CHANNELS
  62. ;SET UP STATUS FOR SHIP PARTS TO BE USED IN COLLIDE.
  63. LDA #7 ;SHIP'S PARTS = #7
  64. TAX ;THERE ARE EIGHT PARTS TO SET UP
  65. NXTPART: STA STATUS+36,X
  66. DEX
  67. BPL NXTPART
  68. ;SET UP TABLES FOR DIFF LEVELS.
  69. LDY DIFF
  70. LDA MAXLVLS,Y ;HIGHEST ATTAINABLE LEVEL FOR DIFF
  71. STA MAXLVL
  72. INY
  73. TYA
  74. LDX #3 ;FOUR TYPES OF INCREMENTS
  75. ZNXTDLVL: STA LVLINC,X ; THE INCREMENT IS BASED ON
  76. ASL ; DIFF+1, SHIFTED LEFT BY
  77. DEX ; THE TYPE. I.E:
  78. BPL ZNXTDLVL ; 8,4,2,1; 16,8,4,2; 24,12,6,3; ETC.
  79. LDA #3 ;3 SHIPS FOR EACH PLAYER
  80. STA MENLEFT
  81. STA MENLEFT+1
  82. LDA #6 ;6 FOR TEAM PLAY
  83. STA MENLEFT+2
  84. LDA #$FF ;INITIALIZE FOR BOTH PLAYERS
  85. STA RACKNUM
  86. STA RACKNUM+1
  87. STA RUBFLAG ;PRIME 'RUBBER SHIP' FLAG
  88. LDA #0
  89. STA ROCKTOT
  90. STA ROCKTOT+1
  91. STA PLAYER
  92. STA OFFPLAY2
  93. STA SHIPDIR
  94. STA SHIPDIR2
  95. STA RACKDLY
  96. STA COMPFLAG
  97. LDA #BIRTH ;START PLAYER 1 AS BIRTH
  98. STA STATE
  99. LDA #$20 ;EVERYBODY STARTS AT LEVEL $20
  100. STA LEVEL
  101. STA LEVEL+1
  102. LDA MODE
  103. BPL ZSETTWO
  104. LDA #DEAD ;IN ONE PLAYER GAME,
  105. STA STATE+1 ; OTHER PLAYER IS DEAD.
  106. LDA #RESINT+$10 ;START PLAYER 1 AT RESINT+10
  107. STA TIMER
  108. RTS
  109. ZSETTWO: LDA #BIRTH ;IN > 1 PLAYER GAME,
  110. STA STATE+1 ; SECOND PLAYER WILL BE BORN.
  111. LDA #PMSGT+1 ;TWO AND TEAM PLAY
  112. STA TIMER
  113. STA TIMER+1
  114. RTS
  115. MAXLVLS: .DC.B $40,$60,$80,$DF ;$DF = "AVOID WRAP" WHEN ADDING $20!
  116. ** ROUTINES THAT USED TO BE IN MAIN.S **
  117. * ZERO OUT RAM. *
  118. * ZERO OUT MEMORY PAGES 1F-18
  119. ZERORAM: LDA #0
  120. TAY
  121. STA TEMP ;LOADDR ALWAYS = 0 (Y IS LOADDR INDEX)
  122. LDX #$1F ;START WITH PAGE 1F
  123. NEXTX: STX TEMP+1
  124. ; ZAP ONE PAGE:
  125. NEXTY: STA (TEMP),Y
  126. DEY
  127. BNE NEXTY
  128. ; MOVE ON TO NEXT PAGE
  129. DEX
  130. CPX #$17 ;DON'T GO INTO PAGE 17
  131. BNE NEXTX
  132. * ZERO OUT THE ZEROPAGE (FF-86), BUT NOT THE RANDOMS (40-41)
  133. LDX #$BE
  134. ZPLOOP: STA $41,X
  135. DEX
  136. BNE ZPLOOP
  137. RTS
  138. * LOAD UP SOFTWARE COPY OF COLOR RAM FROM ROM COLORS
  139. INITPALS: LDX #$0F
  140. ZNITPALS: LDA COLORS,X
  141. STA SOFTCOLR,X
  142. DEX
  143. BPL ZNITPALS
  144. RTS
  145. * NULL OUT ALL THE OBJECTS. *
  146. NULLOBJS: LDX #35 ;NULL OUT OBJECTS
  147. LDA #$FF
  148. NEWNULL: STA STATUS,X
  149. STA STATUS2,X
  150. DEX
  151. BPL NEWNULL
  152. RTS
  153. * SET UP MARIA 2 LISTS, DUMMY DL HEADER FOR BLANK ZONES AT TOP AND BOTTOM,
  154. * SET UP DUMMY DL HEADER FOR TOP AND BOTTOM OF SCREEN:
  155. INITDMA:
  156. * BUILD DLL. ACTUALLLY, JUST COPY ROM TABLE INTO FASTER RAM.
  157. LDX #$33 ;TABLE IS $33 BYTES LONG
  158. ZDLLOP: LDA DLLTAB,X
  159. STA DLL,X
  160. DEX
  161. BPL ZDLLOP
  162. * WAIT 'TILL VBLANK BEFORE DOING DELICATE OPERATIONS
  163. ZDODMA: BIT MSTAT
  164. BPL ZDODMA
  165. LDA #DLL&255 ;POINT DPP TO DLL
  166. STA DPPL
  167. LDA #DLL>>8
  168. STA DPPH
  169. LDA #0
  170. STA BLANKDL+1 ;SECOND BYTE ZERO = END OF DMA
  171. STA NMICTRL ;TELL NMI HANDLER TO DO NORMAL DLI'S
  172. LDA #CHARS>>8 ;POINT CHARBASE TO OUR CHARACTERS
  173. STA CHARBASE
  174. LDA #$40 ;TURN ON DMA
  175. STA CTRL
  176. RTS