MAIN.S 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. * MAIN ROUTINE FOR MS PAC MAN
  2. MAIN LDA #$17 ;LOCK IN MARIA MODE
  3. STA INPTCTRL
  4. SEI
  5. CLD
  6. LDX #STACKPTR
  7. TXS ;SET STACK POINTER
  8. JSR SCREENOF ;TURN GRAPHICS OFF
  9. LDA #$00
  10. STA OFFSET ;FOR FUTURE EXPANSION
  11. STA INPTCTRL ;TO MAKE JOYSTICKS NOT FREEZE
  12. JSR STRTINIT ;ENTRY TO MS PAC MAN
  13. ATTRACT JSR DOTITLE ;START ATTRACT MODE
  14. JSR HOLDSCOR ;SHOW HI SCORE TABLES
  15. LDA #$01
  16. STA AUTOPLAY
  17. JSR GAMEINIT
  18. JMP AGAIN
  19. START LDA #$00 ;START GAME PLAY
  20. STA AUTOPLAY
  21. JSR GAMEINIT
  22. JSR READY ;PUT PLAYER READY UP
  23. LDA #$00 ;SET UP STARTING TUNE
  24. JSR DOTUNE
  25. LDA #$01
  26. JSR DOTUNE
  27. STLOOP JSR SEEBNORM
  28. LDA TUNON ;WAIT TILL TUNE OVER
  29. BNE STLOOP
  30. JSR WCLEAR ;GET RID OF PLAYER READY
  31. AGAIN LDA GAMEOVER ;SEE IF GAME OVER
  32. BEQ AGSKP0
  33. JMP ENDGAME
  34. AGSKP0 JSR SEEBNORM ;SEE IF SELECT OR START HIT
  35. LDA RTLOCAL+1 ;CHECK EVENTS AGAINST TIMERS
  36. CMP PACWAIT
  37. BMI AGSKP1
  38. JSR MOVEPAC
  39. LDA RTLOCAL+1
  40. AGSKP1 CMP FRTWAIT
  41. BMI AGSKP2
  42. JSR MOVEFRT
  43. LDA RTLOCAL+1
  44. AGSKP2 CMP FLSHWAIT
  45. BMI AGSKP3
  46. JSR FLASHDOT
  47. LDA RTLOCAL+1
  48. AGSKP3 CMP MONWAIT
  49. BMI AGOUT
  50. JSR MONSTER
  51. AGOUT
  52. JMP AGAIN
  53. * END OF GAME HANDLER
  54. ENDGAME LDA #$00 ;SET CONTROL TO JOYSTICK 0
  55. STA PLAYER
  56. LDA HSCHERE ;IF HSC HERE, DON'T WASTE TIME WITH MSG
  57. BNE EGOUT
  58. JSR ALLOVER ;WRITE GAME OVER
  59. LDA RTLOCAL ;WAIT A BIT BEFORE TITLE PAGE
  60. CLC
  61. ADC #$01
  62. STA TEMP16
  63. EGJMP0 JSR SEEBENDG ;GAME OVER - WAIT FOR SOMETHING
  64. LDA TEMP16
  65. CMP RTLOCAL
  66. BPL EGJMP0
  67. EGOUT JSR HNEWSCOR ;SEE IF ANY SCORES QUALIFY FOR HI SCORE
  68. JMP DOATRACT ;AND GO BACK TO ATTRACT MODE
  69. * PAUSE BUTTON HAS BEEN HIT, WAIT TILL BUTTON HIT AGAIN
  70. PAUSE LDA RTLOCAL ;STACK CLOCK
  71. PHA
  72. LDA RTLOCAL+1
  73. PHA
  74. TXA ;STORE X
  75. PHA
  76. JSR STOPTUN ;TURN SOUNDS OFF
  77. LDX RTLOCAL ;SET UP TIMER FOR GRAPHICS OFF
  78. DEX
  79. PLOOPA JSR SEEBALL ;SEE IF RESET OR SELECT HIT
  80. CPX RTLOCAL
  81. BNE PLJMP0
  82. JSR SCREENNO ;TOO LONG A WAIT, TURN GRAPHICS OFF
  83. PLJMP0 JSR GETJOY ;SEE IF USER WANTS GRAPHICS BACK ON
  84. LDA BUTSTATE ;IS BUTTON PUSHED?
  85. BNE PLGRAFON
  86. LDA NEWDIR ;IS JOYSTICK MOVED?
  87. CMP #DCENTER
  88. BEQ PLJMP1
  89. PLGRAFON JSR SCREENON ;TURN GRAPHICS ON IF NEEDED
  90. LDX RTLOCAL ;RESET TIMER
  91. DEX
  92. PLJMP1 LDA DBPAUSE ;SEE IF WE ARE DEBOUNCING PAUSE
  93. BEQ PLNORM
  94. LDA SWCHB ;SEE IF IT HAS BEEN RELEASED
  95. AND #$08
  96. EOR #$08
  97. STA DBPAUSE ;FALL THROUGH TO SEEBALL
  98. JMP PLOOPA
  99. PLNORM LDA SWCHB ;SEE IF PAUSE BUTTON HIT
  100. AND #$08
  101. BNE PLOOPA ;IF NOT, TRY AGAIN
  102. JSR STARTTUN ;TURN TUNES ON
  103. JSR SCREENON ;TURN GRAPHICS ON IF NEEDED
  104. PLA ;UNSTACK X
  105. TAX
  106. PLA ;UNSTACK CLOCK
  107. STA RTLOCAL+1
  108. PLA
  109. STA RTLOCAL
  110. LDA #$01
  111. STA DBPAUSE ;AND, OF COURSE, DEBOUNCE PAUSE SWITCH
  112. RTS
  113. * THIS ROUTINE CHECKS TO SEE IF TIME TO START OUT END GAME
  114. SEEBENDG JSR GETJOY ;SEE IF BUTTON PUSHED
  115. LDA BUTSTATE
  116. BNE DOSTART
  117. JMP SEEBALL ;CHECK FOR SELECT AND RESET
  118. * THIS ROUTINE CHECKS TO SEE IF TIME TO START OUT OF ATTRACT
  119. SEEBAUTO JSR GETJOY ;SEE IF BUTTON PUSHED
  120. LDA BUTSTATE
  121. BNE DOSTART
  122. LDA NEWDIR ;SEE IF JOYSTICK MOVED
  123. CMP #DCENTER
  124. BNE DOMENU
  125. JMP SEEBALL ;CHECK FOR SELECT AND RESET
  126. * THIS ROUTINE CHECKS TO SEE IF SELECT OR RESET HIT
  127. SEEBNORM LDA AUTOPLAY ;SEE IF AUTOPLAY
  128. BNE SEEBAUTO
  129. LDA DBPAUSE ;SEE IF WE ARE DEBOUNCING PAUSE
  130. BNE SBNDBPSE
  131. LDA SWCHB ;SEE IF PAUSE BUTTON HIT
  132. AND #$08
  133. BNE SEEBALL ;IF NOT, FALL THROUGH TO SEEBALL CODE
  134. LDA #$01
  135. STA DBPAUSE
  136. JMP PAUSE ;WAIT TILL WE'RE UN-PAUSED
  137. SBNDBPSE LDA SWCHB ;SEE IF IT HAS BEEN RELEASED
  138. AND #$08
  139. EOR #$08
  140. STA DBPAUSE ;FALL THROUGH TO SEEBALL
  141. * THIS LOOKS FOR SELECT AND RESET - USED BY ALL
  142. SEEBALL LDA DBSELECT ;SEE IF WE ARE DEBOUNCING SELECT
  143. BNE SBADBSEL
  144. LDA SWCHB ;SEE IF SELECT SWITCH HIT
  145. AND #$02 ;SEE IF BIT 1 OFF
  146. BNE SBRESET
  147. LDA #$01 ;SET DEBOUNCE VAR
  148. STA DBSELECT
  149. JMP DOMENU ;SELECT
  150. SBADBSEL LDA SWCHB ;SEE IF IT HAS BEEN RELEASED
  151. AND #$02
  152. EOR #$02
  153. STA DBSELECT
  154. SBRESET LDA DBRESET ;SEE IF WE ARE DEBOUNCING RESET
  155. BNE SBADBRES
  156. LDA SWCHB ;SEE IF RESET SWITCH HIT
  157. AND #$01 ;SEE IF BIT 0 OFF
  158. BNE SBAOUT
  159. LDA #$01 ;SET DEBOUNCE VAR
  160. STA DBRESET
  161. JMP DOSTART ;START
  162. SBADBRES LDA SWCHB ;SEE IF IT HAS BEEN RELEASED
  163. AND #$01
  164. EOR #$01
  165. STA DBRESET
  166. SBAOUT RTS
  167. * THIS ROUTINE CHECKS TO SEE IF TIME TO START OUT OF THE MENU
  168. SEEBMENU JSR GETJOY ;SEE IF BUTTON PUSHED
  169. LDA BUTSTATE
  170. BEQ SBRESET
  171. JMP DOSTART
  172. * START A GAME
  173. DOSTART LDX #STACKPTR ;START THE GAME
  174. TXS
  175. JMP START
  176. * GO TO THE MENU
  177. DOMENU LDX #STACKPTR ;DO THE MENU
  178. TXS
  179. JMP MENU
  180. * GO TO THE TITLE PAGE
  181. DOATRACT LDX #STACKPTR ;GO TO ATTRACT MODE
  182. TXS
  183. JMP ATTRACT