TITLE.S 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. * TITLE.S ROUTINES TO CONTROL THE TITLE PAGE
  2. * THIS IS THE ENTRY ROUTINE. IT DOES ALL THE WORK.
  3. DOTITLE JSR TITLESET ;DO BASIC SETUP
  4. JSR INITSTMP ;INITIALIZE THE STAMPS
  5. LDX #$00
  6. DTLOOP JSR WRTNAME ;WRITE THE MONSTER'S NAME
  7. JSR TMOVEMON ;MOVE THE MONSTER
  8. INX ;GET THE NEXT ONE
  9. CPX #$04
  10. BMI DTLOOP
  11. JSR WRTPNAME ;WRITE MS PAC-MAN'S NAME
  12. JMP TMOVEPAC ;MOVE HER
  13. * THIS ROUTINE DOES BASIC SET UP FOR TITLE PAGE AND MENU
  14. TITLESET JSR ZERORAM ;GET RID OF THE MAZE (IF ANY)
  15. JSR CLEARTUN
  16. JSR LOADDLST ;RELOAD DISPLAY LISTS
  17. JSR SCREENON ;DISPLAY BACK ON
  18. JSR INITSCRN ;INITIALIZE THE SCREEN
  19. LDA #$00 ;LOOK AT PLAYER 1 JOYSTICK
  20. STA PLAYER
  21. RTS
  22. * INITIALIZE THE STAMPS - SET COLORS AND PUT OFF SCREEN
  23. INITSTMP LDX #$03 ;SET THE MONSTERS TO THE SAME PLACE
  24. ISLOOP LDA #RGHTWRAP
  25. STA M0HPOS,X
  26. STA PHPOS
  27. LDA #$8C
  28. STA M0VPOS,X
  29. STA PVPOS
  30. LDA #$00 ;AND MAKE SURE THEY AREN'T BLUE OR EYES
  31. STA M0BLUE,X
  32. STA M0DISP,X ;INITIALIZE DISP STATE
  33. LDA #DLEFT
  34. STA M0DIR,X ;FACING LEFT
  35. STA PDIR
  36. JSR DISPMON ;PUT IT ON SCREEN UNDER BAR
  37. JSR MONSTAMP ;SET MONSTER COLORS
  38. DEX
  39. BPL ISLOOP
  40. LDA #$01 ;INITIALIZE DISP STATE
  41. STA PDISP
  42. JSR PACVTOZO ;ADJUST ZONE AND COLUMN
  43. JSR WRITEPAC ;PUT IT ON SCREEN UNDER BAR
  44. JSR PACSTAMP ;SET MS PAC COLORS
  45. RTS
  46. * INITIALIZE THE SCREEN FOR THE TITLE PAGE
  47. INITSCRN LDA #WHITE ;FIRST - SET COLORS
  48. STA P0C3
  49. LDA #YELLOW
  50. STA P0C2
  51. LDA #PINK
  52. STA P0C1
  53. STA P7C2 ;SET COLOR FOR SECOND PLAYER
  54. JSR TITLEIND ;SET UP INDICATORS FOR TITLE PAGE
  55. LDY #$08 ;NOW, WRITE THE MS PAC-MAN LOGO
  56. JSR WRTMESG
  57. LDY #$09
  58. JSR WRTMESG
  59. LDY #$0A
  60. JSR WRTMESG
  61. LDY #$0B
  62. JSR WRTMESG
  63. LDY #$0C
  64. JSR WRTMESG
  65. LDY #$05 ;WRITE THE 'COPYRIGHT ATARI 1983'
  66. JSR WRTMESG
  67. LDA #$09 ;SET UP STATE FOR PUTTING MARQUIS DOTS
  68. STA TEMP0
  69. LDA #$06
  70. STA TEMP1
  71. LDX #MARQCHAR
  72. ISCLOOP0 JSR PLOPCHAR ;MOVE DOWN
  73. JSR NEXTMARQ
  74. INC TEMP0
  75. LDA TEMP0
  76. CMP #$12
  77. BNE ISCLOOP0
  78. ISCLOOP1 JSR PLOPCHAR ;MOVE RIGHT
  79. JSR NEXTMARQ
  80. INC TEMP1
  81. LDA TEMP1
  82. CMP #$15
  83. BNE ISCLOOP1
  84. ISCLOOP2 JSR PLOPCHAR ;MOVE UP
  85. JSR NEXTMARQ
  86. DEC TEMP0
  87. LDA TEMP0
  88. CMP #$09
  89. BNE ISCLOOP2
  90. ISCLOOP3 JSR PLOPCHAR ;MOVE LEFT
  91. JSR NEXTMARQ
  92. DEC TEMP1
  93. LDA TEMP1
  94. CMP #$06
  95. BNE ISCLOOP3
  96. RTS
  97. * THIS ROUTINE PUTS UP THE FRUIT INDICATOR AND SCORE FOR TITLE PAGE
  98. TITLEIND LDA STLEVEL ;GET READY FOR WRITING INDICATORS
  99. STA LEVEL
  100. LDA #$00
  101. STA LIVES
  102. JMP WRTINDS ;WRITE INDICATORS
  103. * WRITE THE NAME OF A MONSTER UP
  104. WRTNAME TXA ;NOW, WRITE MONSTERS NAME
  105. TAY
  106. JSR WRTMESG
  107. LDY #$06 ;WRITE THE 'WITH'
  108. JMP WRTMESG
  109. * WRITE MS PAC'S NAME UP
  110. WRTPNAME LDY #$07 ;FIRST - WRITE 'STARRING'
  111. JSR WRTMESG
  112. LDY #$04 ;NOW, WRITE "MS PAC-MAN"
  113. JMP WRTMESG
  114. * THIS ROUTINE MOVES A MONSTER.
  115. * INPUT: X = MONSTER
  116. TMOVEMON JSR ADJSTMON ;ADJUST THE MONSTER POSITION
  117. JSR TWRTMON ;WRITE IT
  118. LDA M0HPOS,X ;SEE IF LEFT YET
  119. CMP #LEFTEDGE+8
  120. BCS TMOVEMON
  121. LDA #DUP ;MAKE IT LOOK UP
  122. STA M0DIR,X
  123. TMLOOP JSR ADJSTMON
  124. JSR TWRTMON ;WRITE IT
  125. LDA M0ZONE,X ;SEE IF IN PLACE YET
  126. CMP TENDZONE,X
  127. BPL TMLOOP
  128. RTS
  129. * THIS ROUTINE WRITES THE MONSTER AND FLIPS IT'S STATE
  130. TWRTMON JSR DISPMON ;WRITE IT
  131. JMP TWAIT ;WAIT A BIT
  132. * THIS ROUTINE MOVES MS PAC ALONG THE BOTTOM
  133. TMOVEPAC LDA PHPOS ;ADJUST HPOS
  134. LDY PDIR
  135. JSR HPOSADJ
  136. STA PHPOS
  137. JSR PACCHOMP ;SWITCH DISPLAY STATE
  138. JSR WRITEPAC ;WRITE IT
  139. JSR TWAIT ;WAIT A BIT
  140. LDA PHPOS ;SEE IF LEFT YET
  141. CMP #INITHPOS+3
  142. BCS TMOVEPAC
  143. LDX #$17 ;WAIT A BIT BEFORE CONTINUING
  144. TMPLOOP JSR TWAIT
  145. DEX
  146. BPL TMPLOOP
  147. RTS
  148. * THIS IS THE WAIT ROUTINE FOR MONSTER AND PAC MOVEMENT
  149. * PRESERVES X
  150. TWAIT TXA ;STORE X
  151. PHA
  152. LDA RTLOCAL+1 ;FIND TIME TO LEAVE
  153. CLC
  154. ADC #$01
  155. STA TEMP16 ;STORE IT
  156. JSR ROTMARQ ;ROTATE MARQUIS
  157. TWLOOP JSR SEEBAUTO ;SEE IF TIME TO START
  158. LDA TEMP16
  159. CMP RTLOCAL+1 ;AND WAIT TILL OUR TIME IS OVER
  160. BPL TWLOOP
  161. PLA ;RESTORE X
  162. TAX
  163. RTS
  164. * THIS ROTATES THE MARQUIS
  165. ROTMARQ LDA #$08 ;START AT ZONE 8
  166. STA TEMP0
  167. RMLOOP0 LDA #$05 ;START EACH ZONE AT COLUMN 5
  168. STA TEMP1
  169. RMLOOP1 JSR GETCHAR ;GET EXISTING CHARACTER
  170. CMP #MARQCHAR ;SEE IF MARQUIS CHARACTER
  171. BMI RMNEXT
  172. TAX
  173. JSR NEXTMARQ ;ROTATE MARQUIS CHARACTER
  174. JSR PLOPCHAR ;PUT NEW CHARACTER
  175. RMNEXT INC TEMP1 ;NEXT COLUMN
  176. LDA TEMP1
  177. CMP #$16 ;UP TO COLUMN $16
  178. BMI RMLOOP1
  179. INC TEMP0 ;NEXT ZONE
  180. LDA TEMP0
  181. CMP #$14 ;UP TO ZONE $14
  182. BMI RMLOOP0
  183. RTS
  184. * THIS 'INCREMENTS' X WITH WRAP TO INCREMENT THROUGH MARQUIS DOTS
  185. * INPUT: X
  186. * OUTPUT: X
  187. NEXTMARQ INX
  188. CPX #MARQCHAR+8
  189. BMI NMOUT
  190. LDX #MARQCHAR
  191. NMOUT RTS
  192. * THIS DOES THE WORK FOR THE MENU PAGE
  193. MENU JSR TITLESET ;DO BASIC SET UP
  194. JSR MENUMSGS ;PUT UP NUMBER PLAYERS AND FRUIT
  195. LDY #$0D ;WRITE INSTRUCTIONS
  196. JSR WRTMESG
  197. LDY #$0E
  198. JSR WRTMESG
  199. JSR DTBOUNCE ;DEBOUNCE JOYSTICK
  200. JSR DTSELBNC ;DEBOUNCE SELECT SWITCH
  201. JSR DTSAVE ;WE DID SOMETHING, SAVE THE TIME
  202. DTBODY JSR SEEBMENU ;SEE IF TIME TO START
  203. LDA NEWDIR ;SEE IF CENTERED - ZERO TEMP17 IF SO
  204. CMP #DCENTER
  205. BMI DTBJMP1 ;IF NEGATIVE, JUST INTERPRET IT
  206. BNE DTBJMP1A ;IF POSITIVE, DROP IT TO A 'REAL' VALUE
  207. LDA #$00 ;NOT HIT, CLEAR JOYSTICK WAIT
  208. STA TEMP17
  209. JMP DTBSEL
  210. DTBJMP1A SEC ;TURN DIAGNALS INTO ADJACENT DIRECTIONS
  211. SBC #DDWRIGHT
  212. STA NEWDIR
  213. DTBJMP1 DEC TEMP17 ;SEE IF LOOK AT JOYSTICK
  214. BPL DTBSEL
  215. JSR DTBOUNCE ;DEBOUNCE THE JOYSTICK
  216. LDA NEWDIR
  217. CMP #DLEFT ;SEE WHAT TO DO
  218. BNE DTBRIGHT
  219. JMP DECDIFF
  220. DTBRIGHT CMP #DRIGHT
  221. BNE DTBUP
  222. JMP INCDIFF
  223. DTBUP CMP #DUP
  224. BNE DTBDOWN
  225. JMP INCPLYR
  226. DTBDOWN JMP DECPLYR
  227. DTBSEL LDA SWCHB ;SEE IF SELECT SWITCH HIT
  228. AND #$02
  229. BEQ DTBSJMP
  230. LDA #$00 ;NOT HIT, CLEAR SELECT WAIT
  231. STA TEMP18
  232. JMP DTBNEXT
  233. DTBSJMP DEC TEMP18 ;SEE IF LOOK AT SWITCH
  234. BPL DTBNEXT
  235. JSR DTSELBNC ;DEBOUNCE THE JOYSTICK
  236. JSR OADVANCE ;ADVANCE THE OPTION
  237. DTBDIDIT JSR DTSAVE ;SAVE THE TIME - WE DID SOMETHING
  238. JSR MENUMSGS ;UPDATE THE MESSAGES
  239. JSR TITLEIND ;UPDATE THE INDICATORS
  240. DTBNEXT LDA RTLOCAL ;SEE IF WE'VE WAITED TOO LONG
  241. CMP TEMP19
  242. BNE DTBNJMP
  243. JMP DOATRACT ;TIME OUT - GO TO TITLE PAGE
  244. DTBNJMP LDA RTLOCAL+1 ;WAIT A FRAME
  245. DTBNLOOP CMP RTLOCAL+1
  246. BEQ DTBNLOOP
  247. JSR ROTMARQ ;ROTATE MARQUIS
  248. JMP DTBODY
  249. * DEBOUNCE CODE FOR JOYSTICK
  250. DTBOUNCE LDA #$0C ;PUT A LITTLE DEBOUNCING INTO JOYSTICK
  251. STA TEMP17
  252. RTS
  253. * DEBOUNCE CODE FOR SELECT SWITCH
  254. DTSELBNC LDA #$0C ;PUT A LITTLE DEBOUNCING INTO SELECT
  255. STA TEMP18
  256. RTS
  257. * THIS ROUTINE SAVES THE CURRENT TIME AWAY
  258. DTSAVE LDX RTLOCAL
  259. DEX ;SUBTRACT 1 FOR EASY COMPARES
  260. STX TEMP19
  261. RTS
  262. * THIS ROUTINE INCREMENTS DIFFICULTY
  263. INCDIFF LDX STLEVEL
  264. CPX #$07
  265. BPL IDOUT
  266. INX
  267. STX STLEVEL
  268. JSR ZEROSCOR
  269. IDOUT JMP DTBDIDIT
  270. * THIS ROUTINE INCREMENTS DIFFICULTY
  271. DECDIFF LDX STLEVEL
  272. BEQ IDOUT
  273. DEX
  274. STX STLEVEL
  275. JSR ZEROSCOR
  276. DDOUT JMP DTBDIDIT
  277. * THIS ROUTINE INCREMENTS PLAYERS
  278. INCPLYR LDA #$01
  279. STA TWOPLAYR
  280. JMP DTBDIDIT
  281. * THIS ROUTINE DECREMENTS PLAYERS
  282. DECPLYR LDA #$00
  283. STA TWOPLAYR
  284. JMP DTBDIDIT
  285. * THIS ROUTINE ADVANCES THE OPTION
  286. OADVANCE INC STLEVEL ;GO TO NEXT STARTING LEVEL
  287. LDA STLEVEL ;SEE IF WE WENT OVER THE TOP
  288. CMP #$08
  289. BMI OAOUT
  290. LDA #$00 ;WRAP LEVEL TO 0
  291. STA STLEVEL
  292. LDA TWOPLAYR ;CHANGE NUMBER OF PLAYERS
  293. EOR #$01
  294. STA TWOPLAYR
  295. OAOUT JMP ZEROSCOR ;OPTION CHANGED, ZERO SCORE
  296. * THIS ROUTINE WRITES THE NUMBER OF PLAYERS AND FRUIT
  297. MENUMSGS LDX TWOPLAYR ;DO NUMBER OF PLAYERS
  298. LDY PLAYRMSG,X
  299. JSR WRTMESG
  300. LDX STLEVEL ;NOW DO FRUIT
  301. LDY FRUITMSG,X
  302. JMP WRTMESG
  303. * THIS TELLS HOW HI THE MONSTERS GO
  304. TENDZONE DB $09,$0C,$0F,$12
  305. * THESE TABLES CONTROL MESSAGES FOR NUM PLAYERS AND FRUIT
  306. PLAYRMSG DB $11,$12
  307. FRUITMSG DB $13,$14,$15,$16,$17,$18,$19,$1A