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