First commit
[baseball.git] / A34711.1A
1         .TITLE BSBALL\r
2         .RADIX 16\r
3         .ENABL AMA\r
4         .IIF NDF,NTB,NTB=1\r
5         .ASECT\r
6         .SBTTL ******************************\r
7         .SBTTL * PROGRAMMER: ED ROTBERG    *\r
8         .SBTTL *                            *\r
9         .SBTTL * CHECKER:                   *\r
10         .SBTTL *                            *\r
11         .SBTTL ******************************\r
12         .REPT 0\r
13 \r
14 DATE INITIATED: 23-JAN-79\r
15 PROJECT CHARGE #: \r
16 DISK #:         109\r
17 HARDWARE REQUIREMENTS:  MONSTER-MAN PCB, CONSISTING OF BASIC MOC16\r
18                         WITH ADDITIONS  \r
19                                         1) 4 ANODE MULTIPLEXED LED DISPLAYS\r
20                                         2) ALPHANUMERICS ON EDGES OF PLAYFIELD,\r
21                                            3 USABLE ROWS PER EDGE.\r
22 \r
23 MEMORY REQUIREMENTS:    768 BYTES WORKING RAM\r
24                         256 BYTES ALPHANUMERICS RAM\r
25                         960 BYTES SCROLL-FIELD RAM\r
26                          64 BYTES MOTION-OBJECT PARAMETERS\r
27 \r
28                          8K BYTES PROGRAM ROM\r
29 \r
30 INTERRUPT REQUIREMENTS: FOUR IRQ'S PER FRAME. THESE ARE IN GENERAL ON THE\r
31                         FALLING EDGE OF 32V, WITH THE EXCEPTION OF THE LAST,\r
32                         WHICH OCCURS AT LINE 240, RATHER THAN LINE 256, TO ALLOW\r
33                         MAXIMUM USE OF VERTICAL RETRACE TIME.TIMING OF THESE\r
34                         IRQ'S IS IMPORTANT, BECAUSE THE ANODE DRIVERS OF THE\r
35                         MULTIPLEXED LED DISPLAY ARE DRIVEN DIRECTLY BY\r
36                         V-FUNCTIONS, AND THE CATHODES ARE HELD OFF BY THE IRQ\r
37                         SIGNAL. IN PARTICULAR: A) THE IRQ MUST BE ACKNOWLEDGED\r
38                         (BY A STORE TO INTACK, LOCATION 3000 HEX) BEFORE NEW\r
39                         INFORMATION FOR THE CATHODES IS WRITTEN. B) THE IRQ MUST\r
40                         NOT (!) BE ACKNOWLEDGED BETWEEN LINES 240 AND 256, AS IT\r
41                         WILL BE RE-ASSERTED AT LINE 256 IN THAT CASE. FOR THIS\r
42                         REASON THE INPUT "VBLANK" (D7, LOCATION 4001) IS REALLY\r
43                         THE SIGNAL "ENDSCREEN" WHICH IS ASSERTED ONLY IN LINES\r
44                         240 THRU 256.\r
45 \r
46 ASSEMBLY COMMAND STRING:*BSBA1,BSBA1=BSBA1/C\r
47 \r
48 LINK COMMAND STRING:    PP:/L=BSBA1,BSCOIN,BSINT\r
49 \r
50 PROGRAM DESCRIPTION: MAIN PROGRAM FOR "MONSTER-MAN BASEBALL".\r
51                      USES STANDARD COIN ROUTINE, (CUSTOMIZED BY BSCOIN)\r
52                      ON FILE BSCOIN.OBJ FOR HANDLING COINS.\r
53                      BSINT IS INTERRUPT, TEST, AND VECTORS.  BSCOMN\r
54                      (INCLUDED) DEFINES STORAGE. GAME IS ON "EACH COIN\r
55                      ADDS TIME" BASIS\r
56         .ENDR\r
57 NPLAYS=4\r
58         .GLOBL $CNCT\r
59         .INCLUDE BSCOMN\r
60 \r
61 \f       .IIF NDF,AIM,AIM=0      ;DEFAULT TO NO AIM\r
62         .IF NE,AIM\r
63         .SBTTL AIM,DEBUG STUFF\r
64         .=PROG-100              ;HANG THIS UNDERNEATH\r
65 AIMENT: SEI\r
66         LDA I,0\r
67         .=.-1\r
68         .WORD IRQ               ;FORM "LDA I,IRQ&0FF"\r
69         .=.-1                   ;BACKSPACE OVER HIGH BYTE\r
70         STA A,0F7C8             ;STORE IN AIM'S "VECTOR"\r
71         LDA I,0\r
72         .=.-1\r
73         .ENABL M68              ;SWAB FOLLOWING WORD\r
74         .WORD IRQ               ;FORM "LDA I,IRQ/100"\r
75         .DSABL M68              ;BACK TO L,H\r
76         .=.-1                   ;BACKSPACE OVER LOW BYTE\r
77         STA A,0F7C9\r
78         LDA I,0\r
79         STA A,100\r
80         STA A,101               ;CORK TRACE LIST\r
81         STA A,APAT1             ;BREAK @ APAT1\r
82         LDA I,TRACE&0FF         ;PATCH "JSR FANS"\r
83         STA A,APAT0+1           ;TO BE "JSR TRACE"\r
84         LDA I,TRACE/100\r
85         STA A,APAT0+2\r
86         JMP RESET\r
87         .SBTTL TRACE UTILITY\r
88 ;BEGIN INTEGER J, WORD ARRAY TSRC, BYTE ARRAY TDST\r
89 ;J:=0\r
90 ;WHILE (TSRC(J).NE.0) DO\r
91 ;SCREEN (TDST(J))=MEMORY (TSRC(J))\r
92 ;J:=J+1\r
93 ;END\r
94 TRACE:  LDY I,0\r
95         STY J\r
96 1$:     LDY J\r
97         LDA AY,TSRC\r
98         STA ADL\r
99         LDA AY,TSRC+1\r
100         STA ADH                 ;BUILD PTR TO BYTE\r
101         ORA ADL\r
102         BEQ 2$                  ;TRCING 0000=END\r
103         LDX I,0\r
104         LDA NX,ADL              ;GET BYTE\r
105         JSR ASCAX               ;CONVERT TO ASCII IN A,X\r
106         PHA\r
107         LDA AY,TDST\r
108         INY\r
109         INY\r
110         INY\r
111         STY J                   ;SAVE LIST PTR\r
112         TAY                     ;POINT TO SCREEN\r
113         PLA                     ;GET HIGH NYBBLE\r
114         JSR WRTAN               ;WRITE ALPHANUMERICS\r
115         TXA                     ;LOW NYBBLE\r
116         JSR WRTAN\r
117         JMP 1$\r
118 2$:     JMP FANS                ;DO WHAT HE WANTED\r
119         .ENDC\r
120         .PAGE\r
121         .SBTTL INITIALIZE\r
122         .=PROG\r
123 START:  CLI\r
124         JSR STRTGM              ;"START GAME"\r
125         .SBTTL "MAIN-LOOP"\r
126 WAIT:\r
127         \r
128 1$:     LSR SYNC\r
129         BCC 1$          ;WAIT FOR V-BLANK\r
130         STA A,WTCHDG\r
131         JSR MOVLEG\r
132         JSR RAND\r
133         INC FRAME\r
134         JSR GAME\r
135 APAT0:  JSR FANS                ;AIM PATCHES HERE\r
136         BIT A,TEST\r
137         BVS WAIT                ;BRANCH IF TEST OFF\r
138 APAT1:  JMP RESET               ;FAKE RESET\r
139 CKS0:   .BYTE 3A\r
140         .PAGE\r
141         .SBTTL GAME MASTER CONTROL\r
142 \r
143 ;BLOCK NAME:    START GAME\r
144 ;BLOCK TYPE:    DIRECT\r
145 ;DESCRIPTION:   START GAME WRITES OUT THE PLAYFIELD, MOVES ALL PLAYERS TO\r
146 ;               THEIR DUGOUTS. INITIALIZES, RUNS, OFFENSE #, TIMERS, INNINGS\r
147 ;               AND WRITES OUT THE SCOREBOARD.\r
148 ;\r
149 ;INPUT PARAMS:  ATRACT\r
150 ;OUTPUT PARAMS: PLAYFIELD, SCOREBOARD, RUNS, INNINGS, STATE PLAYER POSITIONS,\r
151 ;               WHISTL, CRACK, THUD, PAUST\r
152 ;SUBS USED:     CAN,PLYFLD,BANNER,DSTAT\r
153 ;REGS USED:     A,X,Y\r
154 ;STACK USAGE:   NONE\r
155 ;\r
156 STRTGM: JSR CAN\r
157         LDA I,S.PAUS            ;SET INTO PAUSE\r
158         STA STATE\r
159         LDA I,10                ;INIT PAUSE TIMER\r
160         STA PAUST\r
161         LDA I,0                 ;INITIALIZE\r
162         STA RUNS                ;RUNS\r
163         STA RUNS+2\r
164         STA OFFENS              ;VISITORS OF FIRST\r
165         JSR PLYFLD              ;WRITE OUT PLAYFIELD\r
166         LDA I,1\r
167         STA INNING              ;1ST INNING\r
168         LDX I,PITCHER*2         ;START ALL PLAYERS IN DUGOUT\r
169 10$:    LDA I,HDUGD\r
170         STA AX,HPOSH\r
171         LDA I,VDUGD\r
172         STA AX,VPOS\r
173         INX\r
174         INX\r
175         CPX I,BATTER*2          ;OFFENSIVE PLAYERS IN OTHER DUGOUT\r
176         BNE 10$\r
177 20$:    LDA I,HDUGO\r
178         STA AX,HPOSH\r
179         LDA I,VDUGO\r
180         STA AX,VPOS\r
181         INX\r
182         INX\r
183         CPX I,<BATTER+4>*2\r
184         BNE 20$\r
185         JSR BANNER              ;WRITE OUT SCOREBOARD\r
186         BIT ATRACT\r
187         BPL 25$\r
188         INC SCBDLV              ;POINT TO FIRST INNING\r
189         DEC SCBDRV\r
190         LDA I,1C\r
191         STA RUNING\r
192 25$:    LDA I,0\r
193         STA WHISTL              ;KILL LEFT OVER SOUND\r
194         STA CRACK\r
195         STA THUD\r
196         JSR DSTAT               ;DISPLAY STATISTICS\r
197         .SBTTL GAME CONTROL\r
198 ;BLOCK NAME:    GAME\r
199 ;BLOCK TYPE:    SUBROUTINE\r
200 ;DESCRIPTION:   GAME HANDLES COIN MODES AND ONE OR TWO PLAYER START\r
201 ;               CONDITIONS.  IT PUTS GAME INTO GAME MODE AND INITIALIZES\r
202 ;               TPC LOCATIONS FOR PLAY SECTION.\r
203 ;\r
204 ;INPUT PARAMS:  $CNCT,ININGS,ATRACT,CLK8S,SCNDQT,PLYR1,CMPLYR\r
205 ;OUTPUT PARAMS: ININGS,ATRACT,SCNDQT,BEEP,LEDWD+1,PLYR1,CMPLYR\r
206 ;REGS USED:     A,X,Y\r
207 ;STACK USAGE:   NONE\r
208 ;SUBS USED:     UPING,DSTAT,BUTTON,WRITEB,REPLAC\r
209 ;\r
210 GAME:   BIT ATRACT\r
211         BPL 2$                  ;IF ATTRACT, BRK\r
212         LDA PLYR2\r
213         ORA PLYR1               ;NO ONE PUSHED YET\r
214         BEQ 2$\r
215         LDA I,1B                ;BLANK SCORE BOARD\r
216         BIT INTCNT\r
217         BVS 1$\r
218         LDA RUNING              ;BLINK SCORE BOARD\r
219 1$:     LDX OFFENS\r
220         STA NX,SCBDRV\r
221         ORA I,40\r
222         STA NX,SCBDLV\r
223 2$:     LDA $CNCT               ;ANY COINS\r
224         BEQ 10$                 ;NO!\r
225         DEC $CNCT               ;SUBTRACT 1\r
226         LDA ININGS              ;1 ST COIN DEPOSITED\r
227         BNE 5$                  ;YES, SKIP CRAP\r
228         LDA I,-1\r
229         STA ATRACT              ;GO TO GAME MODE\r
230 5$:     JSR UPING\r
231         JSR DSTAT\r
232 10$:    LDA PLYR2               ;2 PLAYER GAME?\r
233         BNE 37$                 ;YES SKIP THIS CRAP\r
234         LDA ININGS              ;ANY MONEY YET?\r
235         BEQ 37$                 ;NO\r
236         LDA PLYR1               ;NONE PLAYER\r
237         BEQ 15$                 ;NO\r
238         LDA INNING              ;YES FIRST INNING?\r
239         LSR\r
240         BNE 37$                 ;NO TOO LATE\r
241         LDA ININGS              ;MORE THAN 1 COIN?\r
242         LSR\r
243         BNE 30$                 ;YES\r
244         LDY I,0\r
245         LDX CMPLYR\r
246         LDA I,M.IC\r
247         BNE 35$\r
248 15$:    STA LEDWD+1             ;TURN OFF LICONS\r
249         LDX I,2\r
250 16$:    JSR BUTTON              ;BUTTON PRESSED?\r
251         BNE 20$                 ;YES\r
252         DEX\r
253         DEX\r
254         BPL 16$\r
255         LDA I,M.PS              ;NO, "PUSH START"\r
256         BIT INTCNT              ;FLASH IT\r
257         BMI 18$\r
258         LDY I,3                 ;TURN ON LICONS\r
259         STY LEDWD+1\r
260         ORA I,80\r
261 18$:    JMP WRITEB\r
262 30$:    LDY I,1                 ;LIGHT BUTTON LIGHTX\r
263         LDX CMPLYR\r
264         BEQ 31$\r
265         INY\r
266 31$:    STY LEDWD+1\r
267         LDY I,0\r
268         STY TEMP1\r
269         JSR BUTTON              ;LOOK FOR BUTTON PUSH\r
270         BNE 38$                 ;PUSHED IT\r
271         LDY TEMP1\r
272         LDA I,M.PS              ;"PUSH START"\r
273 35$:    BIT INTCNT              ;FLASH IT\r
274         BMI 36$\r
275         STY LEDWD+1\r
276         ORA I,80\r
277 36$:    JSR REPLAC\r
278 37$:    JMP DSPTCH\r
279 38$:    LDA I,0                 ;RESET ONE PLAER GAME\r
280         STA PLYR1\r
281         INC PLYR2\r
282         LDA ININGS              ;DECREMENT # OF INNINGS\r
283         SEC\r
284         SED\r
285         SBC I,1\r
286         CLD\r
287         STA ININGS\r
288         BNE DSPTCH              ;ALWAYS\r
289 20$:    INC PLYR1               ;INDICATE 1 PLAYER\r
290         TXA\r
291         EOR I,2                 ;COMPUTE PLAYER\r
292         STA CMPLYR\r
293         LDA I,M.RDY             ;TELL HIM "READY"\r
294         JSR REPLAC\r
295 40$:    LDA I,<PLAYIT&0FF>-1    ;INIT TPC FOR MOD. CASE 5 MT.\r
296         STA TPC\r
297         LDA I,<PLAYIT&0FF00>/100\r
298         STA TPC+1\r
299         JMP STRTGM              ;DO NECCESSARY INITIALIZATION\r
300 \r
301 DSPTCH: BIT STATE               ;WHAT STATE ARE WE IN\r
302         BMI PAUSE               ;S.PAUS=80\r
303         BVS 1$\r
304         JMP SELECT              ;S.SEL=1\r
305 1$:     JMP PLAY                ;MUST BE PLAY (S.PLAY=40)\r
306 \r
307         .PAGE\r
308         .SBTTL PAUSE STATE CONTROLLER\r
309 ;BLOCK NAME:    PAUSE\r
310 ;BLOCK TYPE:    SUBROUTINE\r
311 ;DESCRIPTION:   PAUSE WILL TIME THE PAUSE TRANSITION STATE BETWEEN PLAY\r
312 ;               STATE AND SELECT STATE, AND SET STATE SELECT AT TERMINATION\r
313 ;               IN ADDITION, PAUSE WILL INITIALIZE VARIOUS VARIABLES AND\r
314 ;               TIMERS, CHANGE FIELDS AT END OF EACH HALF INNING, INIT SCORE\r
315 ;               BOARD FOR EACH 1/2 INNING, MOVE PLAYERS TO STARTING POSITIONS,\r
316 ;               HANDLE LAST 1/2 INNING WARNING AND END THE GAME.\r
317 ;\r
318 ;INPUT PARAMS:  PAUST,OUTS,INNING,ININGS,SCBDL,SCBDRV,SCBDCH,SCBDRH,ATRACT\r
319 ;OUTPUT PARAMS: PSTIM,LEDWD,ATRACT,ININGS,SCNDQT,INNINGS,SCBDRV,SCBDLV,\r
320 ;               SCBDRH,SCBDLH,BEEP,PLAYNO,STATE,MPSTIM\r
321 ;REGS USED:     A,X,Y\r
322 ;STACK USAGE:   NONE\r
323 ;SUBS CALLED:   BANNER,WRITEB,PLYFLD,INIT,SETUP,RAND,SCORBD\r
324 ;\r
325 PAUSE:  LDA W30TIM              ;WARNING TIMER RUNNING?\r
326         BEQ 8$\r
327         JMP 10$                 ;YES\r
328 8$:     LDY PAUST               ;CHECK PAUSE TIMER\r
329         BNE 2$                  ;TIMED OUT\r
330 1$:     JMP 40$\r
331 2$:     DEC PAUST               ;RUN IT\r
332         BEQ 4$\r
333         RTS\r
334 4$:     LDA I,-1                ;INITIALIZE PLAY SELECT TIMERS\r
335         STA PSTIM\r
336         STA PSTIM+2\r
337         LDA I,0                 ;DOUSE LED'S\r
338         STA LEDWD\r
339         STA LEDWD+2\r
340         LDA I,2\r
341         CMP OUTS                ;3 OUTS?\r
342         BCC 5$                  ;YES\r
343         JMP 44$                 ;NO-NORMAL PROCESSING\r
344 5$:     LDA OFFENS              ;YES\r
345         EOR I,2\r
346         STA OFFENS              ;END OF INNING?\r
347         BNE 48$                 ;NO, -1/2 INNING\r
348         BIT ATRACT              ;GAME MODE?\r
349         BPL 49$                 ;NO\r
350         LDA INNING              ;YES\r
351         CMP ININGS\r
352         BNE 20$\r
353         LDA I,M.GO              ;GAME IS OVER\r
354         JSR WRITEB\r
355         LDX I,2\r
356         JSR SCORBD\r
357         LDA I,0                 ;SET TO ATTRACT MODE\r
358         STA ATRACT\r
359         STA ININGS              ;INITIALIZE\r
360         STA PLYR1\r
361         STA PLYR2\r
362         BEQ 42$\r
363 20$:    AND I,0F                ;INNING ROLLOVER?\r
364         BNE 25$                 ;NO\r
365         JSR BANNER              ;YES, START AT INING #1\r
366 25$:    LDA INNING              ;INCREMENT CURRENT INNING #\r
367         CLC\r
368         SED\r
369         ADC I,1\r
370         CLD\r
371         STA INNING\r
372         LDX I,2\r
373         JSR SCORBD\r
374         INC SCBDLV              ;UPDATE POINTERS\r
375         DEC SCBDRV\r
376         LDA I,1C\r
377         STA RUNING\r
378         BNE 42$                 ;ALWAYS\r
379 48$:    BIT ATRACT\r
380 49$:    BPL 42$\r
381         LDX I,0\r
382         JSR SCORBD\r
383         INC SCBDLH              ;UPDATE POINTERS\r
384         DEC SCBDRH\r
385         LDA I,1C\r
386         STA RUNING\r
387         LDA INNING\r
388         CMP ININGS              ;LAST 1/2 INNING?\r
389         BNE 42$\r
390         LDA I,90.\r
391         STA W30TIM              ;YES, START WARNING TIMER\r
392         LDA I,M.GAO             ;SUCK COINS!!!! (SHAME ON YOU!!!)\r
393         JMP WRITEB\r
394 10$:    LSR                     ;NOT TIMED OUT YET\r
395         BNE 12$\r
396         STA W30TIM              ;TIMED OUT!\r
397         STA BEEP                ;TURN OFF BEEP\r
398         BEQ 42$\r
399 12$:    DEC W30TIM              ;TIME\r
400         AND I,2\r
401         BEQ 15$\r
402         LSR\r
403 15$:    STA BEEP                ;BEEP EVERY OTHER DECREMENT\r
404         LDA W30TIM              ;1/2 WAY THROUGH TIME?\r
405         CMP I,45.\r
406 16$:    BNE 45$                 ;NO\r
407         LDA I,M.ECAT            ;YES, CHANGE MESSAGE\r
408         JMP WRITEB\r
409 42$:    JSR PLYFLD              ;CHANGE FIELDS\r
410 44$:    JSR INIT\r
411 40$:    BIT ATRACT\r
412         BPL 43$\r
413         LDX I,2\r
414         JSR BUTTON\r
415         BNE 47$\r
416         LDX I,0\r
417         JSR BUTTON\r
418         BEQ 43$\r
419 47$:    INC SETFLG\r
420 43$:    LDX I,BATTER*2          ;LAST PLAYER TO SETUP\r
421         JSR SETUP               ;MOVE PLAYERS\r
422         BNE 45$\r
423 46$:    LDX I,2\r
424 41$:    JSR RAND                ;START WITH RANDOM PLAY #\r
425         LSR\r
426         LSR\r
427         AND I,3\r
428         STA ZX,PLAYNO\r
429         DEX\r
430         DEX\r
431         BPL 41$\r
432         LDA I,S.SEL\r
433         STA STATE               ;STATE=SELECT\r
434         LDA I,-1\r
435         STA MPSTIM\r
436 45$:    RTS\r
437         .PAGE\r
438         .SBTTL SCOREBOARD UPDATE\r
439 ;BLOCK NAME:    SCORBD\r
440 ;BLOCK TYPE:    SUBROUTINE\r
441 ;DESCRIPTION:   UPDATE SCOREBOARD\r
442 ;INPUT PARAMS:  X=0 FOR VISITOR 1 FOR HOME, RUNING\r
443 ;OUTPUT PARAMS: SCOREBOARD UPDATED\r
444 SCORBD: LDA RUNING\r
445         STA NX,SCBDRV\r
446         ORA I,40\r
447         STA NX,SCBDLV\r
448         RTS\r
449         .PAGE\r
450         .SBTTL SELECT STATE CONTROLLER\r
451 ;BLOCK NAME:    SELECT\r
452 ;BLOCK TYPE:    SUBROUTINE\r
453 ;DESCRIPTION:   HANDLES THE PLAY SELECTION OR OUTPUTTING OF MESSAGES DURING\r
454 ;               ATTRACT.  SETS STATE=PLAY\r
455 ;INPUT PARAMS:  PSTIM,ATRACT,PLAYNO\r
456 ;OUTPUT PARAMS: PINFO,ANGLE,STATE\r
457 ;REGS USED:     A,X,Y\r
458 ;STACK USAGE:   NONE\r
459 ;SUBS USED:     FIELDR,PSEL,WRITEB,RAND,TELLEM\r
460 \r
461 SELECT: JSR FIELDR              ;RESET EVERYTHING\r
462         JSR PSEL                ;CHECK BUTTONS\r
463         LDA PSTIM\r
464         ORA PSTIM+2             ;"OR" OF INDIV TIMERS\r
465         BNE 20$                 ;BRANCH IF STILL WAITING\r
466         STA SETFLG              ;RESET SET FLAG\r
467 15$:    LDA I,S.PLAY            ;ELSE ENTER PLAY\r
468         STA STATE\r
469         BIT ATRACT\r
470         BMI 16$\r
471         LDA I,M.ECAT            ;MONEY REQUEST\r
472         JSR WRITEB\r
473         INC 24F                 ;2 COINS/INNING\r
474         INC 3AE\r
475         BNE 18$\r
476 16$:    LDA I,M.RDY             ;"READY"\r
477         JSR WRITEB\r
478 18$:    JSR RAND\r
479         LSR\r
480         LSR\r
481         AND I,0F                ;SET UP CURVE START\r
482         CLC\r
483         ADC I,STCRV1\r
484         STA PINFO\r
485         LDX OFFENS\r
486         LDA ZX,PLAYNO           ;SET CARRY IF LEFTY\r
487         LSR\r
488         LDA I,81\r
489         BCC 17$\r
490         LDA I,82                ;ADJUST INITIAL ANGLE SLIGHTLY FOR LEFTY\r
491 17$:    STA ANGLE\r
492         RTS\r
493 20$:    BIT ATRACT\r
494         BMI 25$\r
495         LDA I,M.IC              ;IN ATTRACT, ASK FOR MONEY\r
496         JSR WRITEB\r
497         RTS\r
498 25$:    JSR TELLEM              ;IN GAME, REMIND THEM TO SELECT\r
499         RTS\r
500 \f       .SBTTL GAME PLAY\r
501 ;\r
502 ;BLOCK NAME:    GAME PLAY\r
503 ;BLOCK TYPE:    SUBROUTINE\r
504 ;BLOCK DESCRIP: MAINLINE GAME PLAY ROUTINE\r
505 ;\r
506 PLAY:                           ;DISPLAY STATISTICS\r
507         LDA I,<EXIT&0FF00>/100  ;HIGH BYTE OF EXIT\r
508         LDX I,0\r
509         CMP NX,TPC\r
510         BEQ 1$                  ;EVERYTHING KOSHER\r
511         JMP RESET               ;BADO BADO (SKU-BA-DO-DO??)\r
512 1$:     LDA TPC+1               ;SET UP MODIFIED CASE CONSTRUCT\r
513         PHA\r
514         LDA TPC\r
515         PHA\r
516         RTS\r
517         .BYTE <EXIT&0FF00>/100\r
518 PLAYIT: JSR PITCH               ;PITCH BALL\r
519         JSR SWING               ;SWING BAT\r
520         JSR FLITE               ;MOVE BALL\r
521         JSR HITCHK              ;BALL HIT?\r
522         BCC 10$                 ;NO\r
523         LDA I,-1                ;YES\r
524         STA CLK32S\r
525         JMP HIT\r
526 10$:    JSR FIELDR              ;MOVE FIELDERS\r
527         JSR CATCH               ;BALL CAUGHT BY CATCHER?\r
528         BCS COUNT               ;YES\r
529         JSR EXIT                ;NO\r
530         JMP PLAYIT              ;CONTINUE\r
531 COUNT:  LDA CALL                ;CHECK CALL\r
532         BMI 10$                 ;HIT BATSMAN\r
533         BNE STRKBL              ;STRIKE\r
534         LDA I,M.BALL            ;BALL\r
535         JSR WRITEB              ;TELL THEM\r
536         LDA I,48                ;SAY BALL\r
537         STA FLASH\r
538         INC BALLS\r
539         LDA I,4                 ;WALK?\r
540         CMP BALLS\r
541         BEQ 1$\r
542         JMP ENDPLY              ;NO\r
543 1$:     LDX OFFENS              ;YES, CORRECT PICTURE ORIENTATION\r
544         LDA ZX,PLAYNO\r
545         LSR                     ;CARRY=LEFTY\r
546         LDA A,MOBJ+<BATTER*2>\r
547         BCC 5$\r
548         EOR I,80                ;CHANGE LEFTY TO RIGHTY\r
549 5$:     AND I,0C0\r
550         ORA I,08                ;MAKE RUNNER\r
551         STA A,MOBJ+<BATTER*2>\r
552         LDA I,1                 ;SET BATTER TO DRONE MODE\r
553         STA MOVE\r
554         STA FSTFLD              ;FOOL CKBASE TO STOP HIM AT 1ST\r
555         LDA A,BGOALH+2          ;MOVE BATTER TO FIRST\r
556         STA A,HGOAL+<BATTER*2>\r
557         LDA A,BGOALV+2\r
558         STA A,VGOAL+<BATTER*2>\r
559         JSR CKBASE              ;MOVE'EM ALONG\r
560         JSR FORCHK              ;ONLY MOVE OTHER RUNNERS IF FORCED\r
561         JMP WRAP\r
562 10$:    LDA I,M.HB              ;HIT BATTER\r
563         JSR WRITEB\r
564         LDA I,3C                ;LET THEM HEAR THE BALL HIT BATTER\r
565         STA THUD\r
566         LDA I,70                ;BUNCH OF SADISTS!!! YOU BETCHA!\r
567         STA CHEER\r
568         JMP 1$                  ;JUST LIKE WALK\r
569 STRKBL: LDA I,M.STRK            ;TELL'EM STRIKE\r
570         JSR WRITEB\r
571         LDA I,40                ;SAY STRIKE\r
572         STA FLASH\r
573 STRKB0: INC STRIKE\r
574         LDA I,3                 ;3 STRIKES?\r
575         CMP STRIKE\r
576         BEQ 10$                 ;YES, BATTER IS OUT!\r
577         JMP ENDPLY\r
578 10$:    INC OUTS\r
579         CMP OUTS                ;3 OUTS?\r
580         BNE 20$\r
581         JMP ENDING              ;YES\r
582 20$:    LDX I,0                 ;NO- PUT OUT BATTER\r
583         JSR PUTOUT\r
584         INC BATOUT\r
585         LDA I,0                 ;STOP OTHER RUNNERS\r
586         STA MOVE+1\r
587         STA MOVE+2\r
588         STA MOVE+3\r
589         JMP WRAP                ;WRAP UP PLAY\r
590 HIT:    LDA FRAME               ;MASTER PLAY TIME -32 SECONDS AFTER BALL HIT\r
591         AND I,3\r
592         BNE 40$\r
593         DEC CLK32S              ;DECREMENT EVERY FOURTH FRAME\r
594         BNE 40$                 ;NOT TIMED OUT\r
595         INC FSTFLD              ;TIMED OUT\r
596         BNE 41$\r
597 40$:    LDA FSTFLD              ;BALL BEEN FIELDED ONCE YET?\r
598         BEQ 3$                  ;NO\r
599         LDA BATOUT              ;YES, IS BATTER OUT?\r
600         BEQ 1$                  ;NO\r
601         LDA MOVE+1              ;YES, IS ANYBODY ELSE MOVING?\r
602         ORA MOVE+2\r
603         ORA MOVE+3\r
604         BEQ 6$                  ;NO!\r
605         BNE 3$                  ;YES\r
606 1$:     LDX I,BATTER*2          ;IS BATTER ON BASE (OTHER THAN HOME)\r
607         JSR BASCOL\r
608         AND I,0FB\r
609         BEQ 3$                  ;NO\r
610 6$:     DEC CLCK2S              ;YES, TIMEOUT PLAY IF HE STAYS THERE 2 SEC.\r
611         BNE 4$\r
612 41$:    LDX HASBAL              ;TIMED OUT, WHO HAS BALL\r
613         BEQ 7$                  ;NO ONE\r
614         LDA AX,MOBJ             ;TURN HIS PICTURE ON\r
615         ORA I,0A\r
616         STA AX,MOBJ\r
617 7$:     LDA I,0                 ;MAKE SURE NO ONE HAS THE BALL\r
618         STA HASBAL\r
619         LDA I,PITCHER*2         ;MOVE BALL TO PITCHER\r
620         STA TOBALX\r
621 2$:     JSR AUTOBL              ;MOVE BALL\r
622         BEQ 9$                  ;BRANCH IF DONE\r
623         JSR EXIT\r
624         JMP 2$                  ;LOOP\r
625 3$:     LDA I,55.               ;RESET TIMER\r
626         STA CLCK2S\r
627 4$:     JSR BATRUN              ;MOVE BATTER\r
628         JSR FIELDR              ;MOVE FIELDERS\r
629         JSR RUN                 ;MOVE RUNNERS\r
630         JSR INFLD               ;MOVE INFIELDERS\r
631         JSR CKBASE              ;CHECK THE BASES\r
632         JSR SWING               ;SWING BAT REST OF WAY AROUND\r
633         LDA I,FLDFLG            ;BALL FIELDED?\r
634         BIT BALFLG\r
635         BNE FLDPLY              ;YES\r
636         JSR COLCHK              ;NO- TRY TO FIELD IT\r
637         LDA I,3\r
638         CMP OUTS                ;3 OUTS\r
639         BNE 5$\r
640         JMP ENDING              ;YES!\r
641 5$:     LDA I,PLYEND            ;PLAY ENDED.\r
642         BIT BALFLG\r
643         BEQ 10$                 ;NO, CONTINUE.\r
644 9$:     JMP WRAPUP              ;END OF PLAY\r
645 10$:    LDA I,THROFL            ;IS THIS A THROWN BALL?\r
646         BIT BALFLG\r
647         BNE 20$                 ;YES\r
648         JSR FLITE               ;NO- A HIT BALL\r
649         BCC 15$                 ;NOTHING UNUSUAL\r
650         JSR CKBASE\r
651         JMP WRAP                ;HOMER OR TRIPLE\r
652 15$:    JSR BOUNCE\r
653         LDA I,FOUL              ;BALL FOUL\r
654         BIT BALFLG\r
655         BEQ 30$                 ;NO\r
656         JMP FOULBL              ;YES\r
657 20$:    JSR DEFENS              ;COMPUTER ON DEFENSE\r
658         BCS 22$                 ;YES\r
659         BIT ATRACT\r
660         BMI 25$                 ;GAME MODE\r
661 22$:    JSR AUTOBL              ;AUTOMATIC THROWS\r
662         BNE 30$\r
663 25$:    JSR BALMOV              ;TRACK BALL THROWS\r
664 30$:    JSR EXIT\r
665         JMP HIT\r
666 FLDPLY: LDX HASBAL              ;GET PLAYER WITH BALL\r
667         JSR BASCOL              ;TOUCHING A BASE\r
668         BEQ 42$                 ;NO- NO FORCE POSSIBLE\r
669         STA TEMP1               ;SAVE BASE #\r
670         TAY\r
671         DEY\r
672         BEQ 20$                 ;SPECIAL CASE. FORCE AT FIRST\r
673         LDA FORCE\r
674         LSR                     ;GET RID OF FORCE AT FIRST\r
675 5$:     LSR                     ;FORCE SET CARRY\r
676         BCC 40$                 ;NO MORE FORCES\r
677         DEY                     ;FIELDER AT FORCE BASE?\r
678         BNE 5$                  ;NOT YET\r
679         LDX I,3                 ;FORCE OUT POSSIBLE\r
680         LDA TEMP1\r
681         SBC I,1                 ;LOOK FOR PLAYER OUT ON FORCE\r
682 10$:    CMP ZX,BASE\r
683         BNE 15$                 ;DON'T HAVE HIM YET\r
684 11$:    LDA I,0FF               ;GOT HIM\r
685         LDY TEMP1               ;REMOVE FORCE\r
686 12$:    DEY\r
687         BEQ 13$\r
688         ASL\r
689         BNE 12$\r
690 13$:    EOR I,0FF\r
691         AND FORCE\r
692         STA FORCE\r
693         JMP 45$\r
694 15$:    DEX                     ;NEXT\r
695         BNE 10$                 ;NOT DONE YET\r
696         BEQ TAGCHK              ;DONE\r
697 20$:    LDA BATOUT              ;BATTER OUT?\r
698         BNE 40$                 ;YEP\r
699         LDA BASE                ;ON BASE?\r
700         BEQ 25$                 ;NO- HE'S OUT\r
701         BPL TAGCHK              ;YES\r
702 25$:    LDA I,1                 ;BATTER IS OUT\r
703         STA BATOUT\r
704         LDX I,0                 ;ZILCH HIM\r
705         BEQ 11$\r
706 40$:    LDA FLYOUT              ;FLY BALL OUT?\r
707         BEQ TAGCHK              ;NO\r
708         LDY I,3\r
709         LDA TEMP1\r
710 41$:    CMP AY,BASE             ;FORCE OUT?\r
711         BNE 43$                 ;NO\r
712         TYA                     ;GET PLAYER INDEX FOR BASE COLLISION ROUTINE\r
713         CLC\r
714         ADC I,BATTER\r
715         ASL\r
716         TAX\r
717         JSR BASCOL              ;POSSIBLE FORCE, IS HE ON BASE\r
718         BEQ 44$                 ;OUT!\r
719         CMP TEMP1\r
720         BNE 44$                 ;OUT!\r
721 42$:    JMP TAGCHK              ;SAFE, CHECK FOR TAG OUT\r
722 43$:    DEY\r
723         BNE 41$\r
724         BEQ TAGCHK              ;ALL DONE\r
725 44$:    TYA\r
726         TAX\r
727 45$:    INC OUTS                ;UPDATE OUTS\r
728         LDA I,3\r
729         CMP OUTS                ;3 OUTS\r
730         BNE 46$                 ;NO\r
731         JMP ENDING              ;YES\r
732 46$:    JSR PUTOUT\r
733 TAGCHK: JSR TAG                 ;A TAG POSSIBLE?\r
734         CPX I,0\r
735         BEQ 20$                 ;NO\r
736         JSR BASCOL              ;RUNNER ON BASE?\r
737         BNE 20$                 ;YES\r
738         CPX I,BATTER*2          ;IS IT BATTER?\r
739         BNE 15$                 ;NO\r
740         LDA BASE                ;YES- CHECK FOR OVERRUN\r
741         BEQ 10$                 ;NO, ON BASE- NO OVERRUN\r
742         LDA AX,HPOSH\r
743         CLC\r
744         ADC AX,VPOS\r
745         BCS 10$                 ;NO OVERRUN\r
746         CMP I,0AD\r
747         BCC 20$                 ;OVERRUN\r
748 10$:    LDA BATOUT              ;BATTER OUT YET?\r
749         BNE 20$                 ;YES\r
750         INC BATOUT              ;NO\r
751 15$:    TXA\r
752         SEC\r
753         SBC I,BATTER*2          ;GET RUNNER #\r
754         LSR\r
755         TAY\r
756         LDA AY,MOVE\r
757         BMI 20$                 ;PLAYER ALREADY OUT\r
758         INC OUTS                ;UPDATEOUT\r
759         LDA I,3\r
760         CMP OUTS\r
761         BNE 18$\r
762         JMP ENDING              ;SIDES RETIRED\r
763 18$:    TYA\r
764         TAX\r
765         JSR PUTOUT              ;SEND PLAYER TO DUGOUT & OUTPUT OUT MESSAGE\r
766 20$:    JSR THROW\r
767         JSR EXIT\r
768         JMP HIT\r
769 WRAPUP: JSR FORCHK              ;GET EVERYONE'S DIRECTION\r
770         BIT ATRACT\r
771         BPL 4$\r
772         JSR OFENSE              ;COMP ON OFFENSE?\r
773         BCS 4$                  ;YES\r
774         LDA BATOUT              ;BATTER OUT\r
775         BNE 19$         ;YEP, ALL SET UP\r
776         LDA BASE                ;BATTERS BASE\r
777         BEQ 40$                 ;ON WAY TO 1ST\r
778         AND I,03\r
779         BNE 5$\r
780 4$:     JMP WRAP                ;SCORED\r
781 5$:     STA MOVE                ;SET UP FOR RETURN TO BASE\r
782         TAY                     ;SAVE\r
783         LDX I,BATTER*2          ;BATTER ON A BASE\r
784         JSR BASCOL\r
785         BEQ 10$                 ;NO\r
786         STA MOVE                ;YES- HE STAYS THERE\r
787         BNE 45$\r
788 10$:    LDX I,3\r
789         TYA                     ;SOMEONE ELSE ON HIS BASE?\r
790 11$:    CMP ZX,BASE\r
791         BEQ 12$                 ;YES\r
792         DEX\r
793         BNE 11$                 ;NOT DONE\r
794         BEQ 15$                 ;NO ONE THERE\r
795 12$:    CMP ZX,MOVE             ;IS HE BACKING UP OR STAYING THERE\r
796         BEQ 14$                 ;STAYING, BACK HIM UP\r
797         LDA ZX,MOVE\r
798         BNE 15$                 ;HE'S HEADED SOMEWHERE\r
799 14$:    DEC MOVE                ;BACK HIM UP\r
800         JMP 45$\r
801 15$:    LSR\r
802         BEQ 20$                 ;ON 1ST\r
803         BCC 18$                 ;2ND OR SCORED\r
804         LDA A,VPOS+<BATTER*2>   ;3RD\r
805         SBC I,0A0               ;1/2 WAY?\r
806         BMI 35$                 ;YES\r
807         BPL 45$                 ;NO\r
808 18$:    LSR\r
809 19$:    BNE WRAP                ;HE SCORED\r
810         LDA A,VPOS+<BATTER*2>   ;1/2 WAY?\r
811         SBC I,0A2\r
812         BMI 45$                 ;NO\r
813         BPL 35$                 ;YES\r
814 20$:    LDA A,VPOS+<BATTER*2>   ;1/2 WAY?\r
815         SBC I,62\r
816         BMI 45$                 ;NO\r
817 35$:    INY                     ;WHAT BASE IS HE HEADED TO?\r
818         LDX I,3\r
819 36$:    TYA\r
820         CMP ZX,BASE\r
821         BEQ 37$                 ;SOMEONE THERE\r
822         DEX\r
823         BNE 36$\r
824         BEQ 40$                 ;NO ONE THERE\r
825 37$:    CMP ZX,MOVE\r
826         BEQ 45$                 ;BACKING UP TO IT\r
827         LDA ZX,MOVE\r
828         BEQ 45$                 ;STAYING THERE\r
829 40$:    INC MOVE\r
830 45$:    LDA MOVE                ;SET UP GOALS\r
831         AND I,0F\r
832         ASL\r
833         TAX\r
834         LDA AX,BGOALH\r
835         STA A,HGOAL+<BATTER*2>\r
836         LDA AX,BGOALV\r
837         STA A,VGOAL+<BATTER*2>\r
838         LDA MOVE                ;SET UP PICTURE\r
839         LSR\r
840         LSR                     ;CARRY SET FOR 2ND & 3RD\r
841         LDA I,0C8\r
842         BCC 50$\r
843         EOR I,80\r
844 50$:    LDY OFFENS\r
845         BEQ 51$\r
846         EOR I,0C0\r
847 51$:    STA A,MOBJ+<BATTER*2>\r
848 WRAP:   JSR RUN                 ;MOVE RUNNERS\r
849         JSR CKBASE              ;CHECK POSITIONS\r
850         LDA FSTFLD              ;BALL FIELDED ONE YET?\r
851         BNE 10$                 ;YES\r
852         LDA HOMRUN              ;NO, IS THIS HOMERUN OR TRIPLE?\r
853         BEQ 10$                 ;NEITHER, BRANCH\r
854 5$:     BIT MOVE\r
855         BMI 10$                 ;BATTER SCORED\r
856         BIT INTCNT              ;FLASH SCORE BOARD\r
857         BVS 7$\r
858         LDA I,80\r
859         BNE 8$                  ;ALWAYS\r
860 7$:     LDA I,0\r
861 8$:     STA FLASH\r
862 9$:     BIT HOMRUN\r
863         BPL 10$                 ;HOMERUN\r
864         LDA I,4                 ;TRIPLE, WAIT FOR BATTER TO GET TO 3RD\r
865         CMP MOVE\r
866         BNE 20$                 ;NOT THERE YET\r
867         LDA I,0                 ;GOT THERE, STOP HIM THERE\r
868         STA MOVE\r
869         INC FSTFLD              ;MAKE IT LOOK LIKE BALL FIELDED\r
870 10$:    LDA MOVE+1              ;HAVE ALL RUNNERS STOPPED MOVING?\r
871         ORA MOVE+2\r
872         ORA MOVE+3\r
873         ORA MOVE\r
874         BNE 20$                 ;NOT YET\r
875         LDA I,7F                ;THEY'VE ALL STOPPED\r
876         AND FLASH               ;TURN SCOREBOARD BACK TO NORMAL\r
877         STA FLASH\r
878         LDA I,0         ;RESET COUNTS\r
879         STA BALLS\r
880         STA STRIKE\r
881         BEQ BASES\r
882 20$:    JSR EXIT\r
883         JMP WRAP\r
884 FOULBL: LDA I,M.FOUL            ;INIDICATE FOUL\r
885         JSR WRITEB\r
886         LDA I,50                ;SAY FOUL\r
887         STA FLASH\r
888         LDX OFFENS\r
889         LDA ZX,PLAYNO           ;IF BUNT, TREAT AS STRIKE\r
890         LSR\r
891         LSR\r
892         BCC 10$                 ;NO BUNT\r
893 5$:     JMP STRKB0\r
894 10$:    LDA I,2\r
895         CMP STRIKE\r
896         BNE 5$                  ;LESS THAN 2 STRIKES\r
897 F.END:  JMP ENDPLY\r
898 BASES:  LDX I,0\r
899         LDY I,3\r
900         LDA BASE                ;CHECK FOR 2 RUNNERS ON A BASE\r
901         BEQ 30$\r
902 10$:    CMP AY,BASE\r
903         BNE 20$                 ;NO, GET NEXT\r
904         INC OUTS                ;UPDATE OUTS\r
905         JSR PUTOUT              ;SEND BATTER TO DUGOUT\r
906         LDA I,3\r
907         CMP OUTS\r
908         BEQ ENDING              ;3 OUTS!!\r
909         JMP WRAP                ;LESS THAN 3 OUTS\r
910 20$:    DEY\r
911         BNE 10$                 ;NOT DONE CHECKING\r
912 30$:    LDA I,3\r
913         CMP OUTS\r
914         BEQ ENDING              ;SIDE RETIRED\r
915         LDA BASE\r
916         AND I,3                 ;WHAT BASE IS BATTER ON?\r
917         BEQ F.END               ;DIDN'T MAKE A BASE\r
918         LDY I,3\r
919         LDX I,<BATTER+3>*2      ;LOOK FOR IDLE RUNNER\r
920 40$:    LDA AY,BASE\r
921         BNE 45$\r
922         LDA A,MOBJ+<BATTER*2>   ;CHANGE PLACES\r
923         STA AX,MOBJ\r
924         LDA A,HPOSH+<BATTER*2>\r
925         STA AX,HPOSH\r
926         LDA A,VPOS+<BATTER*2>\r
927         STA AX,VPOS\r
928         LDA I,HDUGO             ;PUT BATTER IN DUGOUT\r
929         STA A,HPOSH+<BATTER*2>\r
930         LDA I,VDUGO\r
931         STA A,VPOS+<BATTER*2>\r
932         LDA BASE\r
933         STA AY,BASE\r
934         BNE ENDPLY              ;*** ALWAYS\r
935 45$:    DEX\r
936         DEX\r
937         DEY\r
938         BNE 40$\r
939         JMP RESET               ;BADO-BADO\r
940 ENDING: LDA I,M.SR              ;SIDE RETIRED\r
941         BIT ATRACT              ; IN ATTRACT?\r
942         BMI 1$                  ; NO\r
943         LDA I,M.AB              ;YES, OUTPUT "ATARI BASEBALL"\r
944 1$:     JSR WRITEB\r
945         LDA I,58                ;SAY "YER OUT!!"\r
946         STA FLASH\r
947         LDA I,90                ;BIG CHEER\r
948         STA CHEER\r
949         LDX OFFENS              ;BACK OUT BAD RUNS              ;FROM TOTAL\r
950         LDA ZX,RUNS\r
951         SEC\r
952         SED\r
953         SBC RUNPLY\r
954         CLD\r
955         STA ZX,RUNS\r
956 5$:\r
957         LDA RUNING\r
958         SEC\r
959         SBC RUNPLY\r
960         STA RUNING\r
961 9$:     LDX I,PITCHER*2         ;MOVE PLAYERS OFF OF FIELD\r
962 10$:    LDA I,HDUGD\r
963         STA AX,HGOAL\r
964         LDA I,VDUGD\r
965         STA AX,VGOAL\r
966         INX\r
967         INX\r
968         CPX I,BATTER*2          ;NOW OFFENSE\r
969         BNE 10$\r
970 20$:    LDA I,HDUGO\r
971         STA AX,HGOAL\r
972         LDA I,VDUGO\r
973         STA AX,VGOAL\r
974         LDY OFFENS              ;MAKE SURE RUNNERS ARE FACING RIGHT WAY\r
975         BNE 23$\r
976         LDA I,48\r
977         BNE 25$\r
978 23$:    LDA I,88\r
979 25$:    STA AX,MOBJ\r
980         CPX I,<BATTER+3>*2\r
981         BEQ 30$\r
982         INX\r
983         INX\r
984         BNE 20$                 ;ALWAYS\r
985 30$:    LDX I,<BATTER+3>*2\r
986         JSR SETUP               ;MOVE PLAYERS AT FAST SPEED\r
987         BEQ ENDPLY              ;DONE\r
988         JSR EXIT\r
989         JMP 30$\r
990 ENDPLY: LDA I,S.PAUSE           ;CHANGE STATE\r
991         STA STATE\r
992         LDA I,18                ;SET PAUSE TIMER\r
993         STA PAUST\r
994         JSR EXIT\r
995         JMP PLAYIT\r
996 EXIT:   JSR DSTAT\r
997         PLA                     ;SET UP FOR MODIFIED CASE\r
998         STA TPC\r
999         PLA\r
1000         STA TPC+1\r
1001         RTS\r
1002 CKS1:   .BYTE 32\r
1003         .PAGE\r
1004         .SBTTL PITCH ROUTINE\r
1005 ;\r
1006 ;BLOCK NAME:    PITCH\r
1007 ;BLOCK TYPE:    SUBROUTINE\r
1008 ;DESCRIPTION:   PITCH WILL CONROL THE MOTION OF THE BALL TOWARDS THE PLATE\r
1009 ;               BASED ON THE VALUE PTYPE (PLAYNO)\r
1010 ;               WHERE PTYPE:\r
1011 ;                       0 = FAST BALL\r
1012 ;                       1 = CHANGE UP\r
1013 ;                       2 = CURVE BALL\r
1014 ;                       3 = KNUCKLE BALL\r
1015 ;\r
1016 ;INPUT PARAMS:  NONE (PTYPE IS GLOBAL)\r
1017 ;OUTPUT PARAMS: SPEED & ANGLE UPDATED\r
1018 ;REGISTER USED: A,X,Y\r
1019 ;STACK USAGE:   2 BYTES\r
1020 ;SUBROUTINES\r
1021 ;       CALLED: RAND\r
1022 ;\r
1023 PITCH:  LDA OFFENS              ;GET DEFENCE PITCH TYPE\r
1024         EOR I,2                 ;DEFENSE PLAYER\r
1025         TAX\r
1026         LDA ZX,PLAYNO\r
1027         ASL                     ;*2\r
1028         TAY\r
1029         LDA AY,PTAB+1           ;HI BYTE OF CASE STATEMENT\r
1030         PHA\r
1031         LDA AY,PTAB             ;LOW BYTE OF CASE STATEMENT\r
1032         PHA\r
1033         RTS\r
1034 PTAB:   .WORD P.FB-1,P.CU-1,P.CB-1,P.KB-1\r
1035 P.FB:   LDA I,FBSPD             ;SET FAST BALL SPEED\r
1036         STA SPEED\r
1037         RTS\r
1038 P.CU:   LDA A,BHPOSH\r
1039         CMP I,5D\r
1040         BNE 2$\r
1041         LDA I,FBSPD             ;SET CHANGE UP START SPEED\r
1042         STA SPEED\r
1043         BNE P.RET0\r
1044 2$:     LDA PINFO               ;SLOW BALL DOWN YET?\r
1045         CMP A,BHPOSH\r
1046         BCC P.RET0              ;NO\r
1047         LDA I,CHUSPD            ;YES\r
1048         STA SPEED\r
1049 P.RET0: RTS\r
1050 \r
1051 P.CB:   LDA I,CRVSPD            ;SET CURVE BALL SPEED\r
1052         STA SPEED\r
1053         LDA PINFO               ;START BALL CURVING?\r
1054         CMP A,BHPOSH\r
1055         BCC P.RET0              ;NO\r
1056         LDX OFFENS              ;YES, CURVE WHICH WAY?\r
1057         LDA ZX,PLAYNO\r
1058         LSR                     ;CARRY SET=LEFTY AT BAT\r
1059         BCS 10$                 ;LEFTY\r
1060         INC ANGLE               ;CURVE BALL AWAY FROM RIGHTY\r
1061         BNE P.RET0\r
1062 10$:    DEC ANGLE\r
1063         BNE P.RET0\r
1064 P.KB:   LDA I,KBSPD             ;SET KNUCKLE BALL SPEED\r
1065         STA SPEED\r
1066         JSR RAND                ;GET RANDOM NUMBER\r
1067         LSR\r
1068         LSR\r
1069         LSR\r
1070         LDY I,0                 ;COUNT # OF 1'S IN 2 LSB'S\r
1071         ROR\r
1072         BCC 1$\r
1073         INY\r
1074 1$:     ROR\r
1075         BCC 2$\r
1076         INY\r
1077 2$:     TYA                     ;HAVE WEIGHTED RANDOM # (0-2)\r
1078         ROR\r
1079         BCS 6$                  ;BALL GOES STRAIGHT\r
1080         ROR\r
1081         BCS 4$                  ;BALL GOES LEFT\r
1082         BIT BALFLG              ;BALL GOES RIGHT\r
1083         BMI P.RET               ;BALL ALREADY GOING RIGHT\r
1084         LDA I,ANGL45            ;45 DEGREES\r
1085         BVC 3$                  ;IF BALL GOING STRAIGHT\r
1086         ASL                     ;MAKE IT 90 DEG\r
1087 3$:     ADC ANGLE               ;CHANGE ANGLE TO GO RIGHT\r
1088         STA ANGLE\r
1089         LDA BALFLG              ;SET GOING RIGHT FLAG\r
1090         AND I,3F\r
1091         ORA I,KBRFLG\r
1092         STA BALFLG\r
1093         RTS\r
1094 4$:     BIT BALFLG\r
1095         BVS P.RET               ;BALL ALREADY GOING LEFT\r
1096         LDA ANGLE\r
1097         SBC I,ANGL45\r
1098         BIT BALFLG\r
1099         BPL 5$                  ;HAD BEEN GOING STR\r
1100         SEC\r
1101         SBC I,ANGL45\r
1102 5$:     STA ANGLE\r
1103         LDA BALFLG\r
1104         AND I,3F\r
1105         ORA I,KBLFLG\r
1106         STA BALFLG\r
1107         RTS\r
1108 \r
1109 6$:     LDA ANGLE               ;CORRECT ANGLE\r
1110         BIT BALFLG\r
1111         BMI 7$                  ;BALL GOING RIGHT\r
1112         BVC P.RET               ;BALL GOING STRAIGHT - RETURN\r
1113         CLC                     ;BALL GOING LEFT - STRAIGHTEN\r
1114         ADC I,ANGL45\r
1115         JMP 8$\r
1116 7$:     SBC I,ANGL45\r
1117 8$:     STA ANGLE\r
1118         LDA BALFLG              ;SET BALL GOING STRAIGHT\r
1119         AND I,3F\r
1120         STA BALFLG\r
1121 P.RET:  RTS\r
1122         .PAGE\r
1123         .SBTTL HIT CHECK\r
1124 ;\r
1125 ;BLOCK NAME:    HITCHK\r
1126 ;BLOCK TYPE:    SUBROUTINE\r
1127 ;DESCRIPTION:   HITCHK WILL DETERMINE COLLISION BETWEEN BALL AND BAT AND THEN\r
1128 ;               SET UP THE SPEED AND ANGLE FOR THE BALL BASED ON THE SPEED OF\r
1129 ;               THE PITCH, THE SPEED OF THE BAT AND THE BALL POSITION AT TIME\r
1130 ;               OF COLLISION.\r
1131 ;\r
1132 ;INPUT PARAMS:  THRESHOLD TABLE (THRSHD), BALL POSITION (BHPOS,BVPOS) AND BAT\r
1133 ;               STAMP #.\r
1134 ;OUTPUT PARAMS: NEW VALUES FOR SPEED AND ANGLE\r
1135 ;REGISTER USED: A,X,Y\r
1136 ;STACK USAGE:   NONE\r
1137 ;\r
1138 HITCHK: LDA BSTMP               ;GET CURRENT BAT STAMP #\r
1139         AND I,0F\r
1140         ASL                     ;*4\r
1141         ASL\r
1142         TAY                     ;USE AS INDEX TO THRESHOLD TBL\r
1143         LDX OFFENS\r
1144         LDA ZX,PLAYNO\r
1145         LSR\r
1146         LDA I,0\r
1147         BCC 50$                 ;IF RIGHTY BRANCH\r
1148         LDA AY,THRSHD+1\r
1149         SBC I,7E                ;LEFT JUSTIFY VERTICAL COLLISION TBL\r
1150 50$:    STA TEMP1\r
1151         LDA AY,THRSHD           ;CHECK BALL INSIDE OR OUTSIDE\r
1152         SEC\r
1153         SBC TEMP1\r
1154         CMP A,BVPOS\r
1155         BCC 3$                  ;BALL INSIDE OR OUTSIDE\r
1156         LDA AY,THRSHD+1\r
1157         SBC TEMP1\r
1158         CMP A,BVPOS\r
1159         BCS 3$                  ;BALL INSIDE OR OUTSIDE\r
1160         LDA A,BHPOSH            ;BALL HORIZ POS\r
1161         CMP AY,THRSHD+2         ;(RIGHT HAND HORIZ THRESHOLD)\r
1162         BCS 3$                  ;NOT THERE YET (OR TOO FAR)\r
1163         CMP AY,THRSHD+3         ;(LEFT HAND HORIZ THRESHOLD)\r
1164         BCS 5$\r
1165 3$:     CLC\r
1166         RTS\r
1167 5$:     LDA I,40                ;CRACK OF BAT\r
1168         STA CRACK\r
1169         LDA I,0C8\r
1170         LDX OFFENS\r
1171         BEQ 6$\r
1172         LDA I,08\r
1173 6$:     STA A,MOBJ+<BATTER*2>\r
1174 ;CALCULATE ANGLE OF BALL TRAVEL\r
1175         JSR RAND\r
1176         LSR\r
1177         AND I,7\r
1178         STA TEMP1\r
1179         LDA BSTMP\r
1180         AND I,0F\r
1181         TAY\r
1182         LDX OFFENS\r
1183         LDA ZX,PLAYNO\r
1184         LSR\r
1185         LDA AY,BATNGL\r
1186         BCC 7$                  ;IF RIGHT, BR\r
1187         EOR I,0FF               ;NEGATE ANGLE\r
1188         ADC I,0\r
1189 7$:     LDY OFFENS\r
1190         BEQ 1$\r
1191         EOR I,80                ;COMPLIMENT ANGLE\r
1192 1$:     SEC\r
1193         SBC TEMP1\r
1194         ASL                     ;DOUBLE\r
1195         SEC\r
1196         SBC ANGLE               ;ANGLE INC=ANGLE REFLECT\r
1197         STA ANGLE\r
1198         BMI 15$                 ;WHICH OUTFIELDER GETS BALL\r
1199         SEC\r
1200         SBC I,8\r
1201         BMI 18$\r
1202         LDA I,7*2               ;LEFT\r
1203         BNE 19$\r
1204 15$:    CLC\r
1205         ADC I,0B\r
1206         BPL 18$\r
1207         LDA I,9*2               ;RIGHT\r
1208         BNE 19$\r
1209 18$:    LDA I,8*2               ;CENTER\r
1210 19$:    STA FLDBAL\r
1211         LDA A,BGOALH+2          ;SET BATTER'S GOALS TO FIRST BASE\r
1212         STA A,HGOAL+<BATTER*2>\r
1213         LDA A,BGOALV+2\r
1214         STA A,VGOAL+<BATTER*2>\r
1215         LDX I,SSTOP*2           ;START WITH PITCHER\r
1216 21$:    LDA AX,IVGOAL           ;SET UP GOALS FOR INFIELDERS\r
1217         STA AX,VGOAL\r
1218         LDA AX,IHGOAL\r
1219         STA AX,HGOAL\r
1220         DEX\r
1221         DEX\r
1222         BNE 21$\r
1223 ;DETERMINE WHICH INFIELDER GETS BALL\r
1224         LDX OFFENS\r
1225         LDY I,1                 ;START WITH PITCHER\r
1226         LDA ZX,PLAYNO\r
1227         LSR\r
1228         LSR\r
1229         BCS 20$                 ;BRANCH IF BUNT - BALL GOES TO PITCHER\r
1230         INY\r
1231         INY                     ;SKIP CATCHER\r
1232         LDA ANGLE               ;DETERMINE QUADRANT\r
1233         BPL 10$                 ;LEFT SIDE\r
1234         ADC I,14\r
1235         BMI 20$                 ;1ST BASEMAN'S BALL\r
1236         INY\r
1237         BNE 20$                 ;SECOND BASEMAN'S BALL\r
1238 10$:    INY\r
1239         INY\r
1240         SBC I,13\r
1241         BPL 20$                 ;3RD BASEMAN\r
1242         INY                     ;SHORT STOP\r
1243 20$:    TYA\r
1244         ASL                     ;MAKE INDEX\r
1245         STA TOBALL\r
1246         .REPT 0\r
1247         CMP I,<FIRSTB*2>\r
1248         BNE 25$\r
1249         LDA A,IVGOAL+<FIRSTB*2> ;MOVE PITCHER TO COVER FIRST\r
1250         SBC I,4                 ;OFFSET A LITTLE\r
1251         STA A,VGOAL+<PITCHER*2>\r
1252         LDA A,IHGOAL+<FIRSTB*2>\r
1253         SBC I,4\r
1254         STA A,HGOAL+<PITCHER*2>\r
1255         BNE 30$\r
1256         .ENDR\r
1257 25$:    CMP I,<THIRDB*2>        ;THIRD BASEMAN'S BALL?\r
1258         BNE 30$                 ;NO\r
1259         LDA A,IVGOAL+<THIRDB*2> ;YES, SHORT STOP COVERS 3RD\r
1260         ADC I,4                 ;OFFSET A LITTLE\r
1261         STA A,VGOAL+<SSTOP*2>\r
1262         LDA A,IHGOAL+<THIRDB*2>\r
1263         ADC I,4\r
1264         STA A,HGOAL+<SSTOP*2>\r
1265 ;DETERMINE WHERE TO INTERCEPT BALL\r
1266 30$:    LDA TOBALL\r
1267         LSR\r
1268         LSR\r
1269         BEQ H.40                        ;IF PITCHER, DON'T DO ANYTHING\r
1270         BCC 32$                 ;2ND BASEMAN OR SHORT STOP\r
1271         LDA I,60                ;1ST OR  3RD BASEMAN\r
1272         BNE 33$\r
1273 32$:    LDA I,80\r
1274 33$:    STA IJ                  ;SAVE DISTANCE\r
1275         LDA ANGLE\r
1276         JSR COS                 ;COSINE OF ANGLE\r
1277         LDX IJ\r
1278         JSR MULT                ;GET HORIZONTAL GOAL\r
1279         LDX TOBALL              ;INDEX TO PLAYER\r
1280         TYA\r
1281         ASL\r
1282         ADC A,BHPOSH            ;NORMALIZE\r
1283         STA AX,HGOAL            ;SET UP HORIZ GOAL\r
1284         LDA ANGLE\r
1285         JSR SIN\r
1286         LDX IJ\r
1287         JSR MULT                ;GET VERTICAL GOAL\r
1288         LDX TOBALL              ;INDEX\r
1289         TYA\r
1290         ASL\r
1291         EOR I,80                ;OFFSET FROM CENTER\r
1292         STA TEMP1\r
1293         LDA BVPOS\r
1294         SEC\r
1295         SBC I,84\r
1296         ADC TEMP1\r
1297         STA AX,VGOAL            ;SET UP VERTICAL GOAL\r
1298 ;CALCULATE NEW BALL SPEED\r
1299         LDX OFFENS              ;REFRESH OFFENSE INDEX\r
1300 H.40:   LDY ZX,PLAYNO           ;GET SWING SPEED\r
1301         TXA\r
1302         EOR I,2                 ;DEFENSE\r
1303         TAX\r
1304         TYA                     ;SWING SPEED\r
1305         AND I,2\r
1306         ASL\r
1307         CLC\r
1308         ADC ZX,PLAYNO           ;ADD IN PITCH\r
1309         TAX\r
1310         LDA AX,SPDTBL           ;GET BALL SPEED\r
1311         STA SPEED\r
1312 H.RET:  LDA I,HITFLG\r
1313         ORA BALFLG\r
1314         STA BALFLG\r
1315         INC INSPDX              ;INCREASE INFIELDER CAPABILITY\r
1316         SEC                     ;INDICATE HIT\r
1317         RTS\r
1318         .PAGE\r
1319         .SBTTL SWING ROUTINE\r
1320 ;\r
1321 ;BLOCK NAME:    SWING\r
1322 ;BLOCK TYPE:    SUBROUTINE\r
1323 ;DESCRIPTION:   SWING WILL CONTROL THE MOTION OBJECT STAMP WHICH REPRESENTS\r
1324 ;               THE BAT BASED ON THE VALUE OF STYPE (PLAYNO).\r
1325 ;               WHERE STYPE:\r
1326 ;                       0 = FAST SWING\r
1327 ;                       1 = SLOW SWING\r
1328 ;                       2 = HIT & RUN\r
1329 ;                       3 = BUNT\r
1330 ;\r
1331 ;INPUT PARAMS:  NONE (STYPE IS GLOBAL)\r
1332 ;OUTPUT PARAMS: BAT STAMP MODIFIED (MAYBE)\r
1333 ;REGISTER USED: A,X,Y\r
1334 ;STACK USAGE:   2 BYTES\r
1335 ;SUBRT'S CALLED:BUTTON\r
1336 ;\r
1337 SWING:  LDA SSTART              ;SWING STARTED\r
1338         BMI 20$\r
1339         BNE S.DOIT              ;YES, SKIP THIS CRAP\r
1340         LDX OFFENS\r
1341         JSR OFENSE              ;COMPUTER AT BAT?\r
1342         BCS 10$                 ;YES\r
1343         BIT ATRACT              ;ATTRACT MODE\r
1344         BMI 30$                 ;NO\r
1345 10$:    JSR RAND                ;GET RANDOM VALUE\r
1346         AND I,0F\r
1347         STA IJ\r
1348         LDA I,STCRV1\r
1349         SBC IJ                  ;NOW HAVE RANDOM BALL POSITION TO START SWING\r
1350         CMP A,BHPOSH            ;START IT YET?\r
1351         BCC S.RET               ;NO\r
1352         TXA                     ;YES\r
1353         EOR I,2\r
1354         TAY\r
1355         LDA AY,PLAYNO           ;TAKE OCCASIONALLY ON K.B.\r
1356         EOR I,3\r
1357         BNE 12$\r
1358         LDA INTCNT\r
1359         BPL 12$\r
1360         STA SSTART\r
1361 20$:    BMI S.RET\r
1362 12$:    JSR RAND\r
1363         AND I,3\r
1364         BEQ 40$\r
1365         LDA ZX,PLAYNO\r
1366         AND I,0FD\r
1367         STA ZX,PLAYNO           ;DON'T BUNT SO MUCH\r
1368         JMP 40$\r
1369 30$:    JSR BUTTON\r
1370         BEQ S.RET               ;SWING BUTTON NOT PUSHED YET\r
1371 40$:    INC SSTART              ;START SWING\r
1372         LDA ZX,PLAYNO           ;BUNT OR SWING AWAY?\r
1373         AND I,2\r
1374         BNE S.BUNT\r
1375 \r
1376 S.FS:   LDA I,FSLAST            ;LAST STAMP\r
1377         STA TMASK\r
1378         BNE S.DOIT              ;***ALWAYS\r
1379 S.BUNT: LDA I,BLAST             ;LAST STAMP\r
1380         STA TMASK\r
1381 S.DOIT: LDA BSTMP               ;GET CURRENT BAT STAMP\r
1382         BEQ S.RET\r
1383         TAY\r
1384         AND TMASK               ;LAST STAMP?\r
1385         CMP TMASK\r
1386         BEQ 6$                  ;YES, JUST RETURN\r
1387         INY                     ;NEXT STAMP\r
1388         TYA\r
1389         AND I,0F                ;CHANGE STAMP POS YET?\r
1390         CMP I,7\r
1391         BNE 4$                  ;NO, SKIP CRAP\r
1392         LDA BTHPOS              ;GE CURRENT BAT POSITION\r
1393         STA TEMP1\r
1394         LDA I,0FF               ;MOWE BAT OFF SCREEN\r
1395         STA BTHPOS\r
1396         STY BSTMP               ;UPDATE STAMP #\r
1397         LDA TEMP1               ;INCREMENT BAT POSITION BY 8\r
1398         CLC\r
1399         ADC I,8\r
1400         STA BTHPOS\r
1401         BNE S.RET                       ;***ALWAYS\r
1402 4$:     STY BSTMP\r
1403         BNE S.RET               ;*** ALWAYS\r
1404 6$:     LDX I,0                 ;ZERO OUT BPOS\r
1405         LDA I,HITFLG\r
1406         BIT BALFLG              ;HE HASNT HIT IT YET\r
1407         BEQ S.RET\r
1408         STX BSTMP               ;GET RID OF BAT\r
1409 S.RET:  RTS\r
1410 CKS2:   .BYTE 95\r
1411 \f       .SBTTL FLITE ROUTINE\r
1412 ;\r
1413 ;BLOCK NAME:    FLITE\r
1414 ;BLOCK TYPE:    SUBROUTINE\r
1415 ;DESCRIPTION:   THIS SECTION OF CODE WILL CONTROL THE ACTUAL POSITION UPDATING\r
1416 ;               OF THE BALL USING SPEED, ANGLE AND UPDATE ANGLE ON A WALL\r
1417 ;               BOUNCE.\r
1418 ;INPUT PARAMS:  ANGLE, SPEED\r
1419 ;OUTPUT PARAMS: MOTION OBJECT 0'S POSITION IS UPDATED\r
1420 ;       CARRY IS SET FOR HOMERUN OR TRIPLE.  HOMRUN = POSITIVE FOR\r
1421 ;       TRIPLE ZERO OTHERWISE\r
1422 ;REGISTER USED:\r
1423 ;SUBROUTINES\r
1424 ;       CALLED: MULT, SINE, COS, SHIFT, LSHIFT\r
1425 ;STACK USAGE:   2 BYTES FOR SUBROUTINE CALLS\r
1426 ;\r
1427 FLITE:  LDA SPEED\r
1428         BEQ 1$\r
1429         AND I,0FC\r
1430         BNE 2$\r
1431 1$:     CLC             ;BALL STOPPED OR CAUGHT\r
1432         RTS\r
1433 2$:     LDA ANGLE               ;COSINE OF ANGLE\r
1434         JSR COS\r
1435         TAY                     ;SAVE COS\r
1436         LDA SPEED\r
1437         LSR\r
1438         LSR\r
1439         LSR\r
1440         LSR\r
1441         TAX                     ;SET UP FOR MULT\r
1442         TYA\r
1443         JSR MULT                ;GIVES HORIZ INCREMENT\r
1444         LDA A,BHPOSL            ;SHIFT CURRENT HORIZ POS RIGHT 1 BIT\r
1445         STA TEMP1\r
1446         LDA A,BHPOSH\r
1447         STA TEMP2\r
1448         JSR SHIFT1\r
1449         AND I,7F                ;GET RID OF ANY SIGN\r
1450         STA A,BHPOSH\r
1451         TXA                     ;GET LSB OF HORIZ INC\r
1452         CLC\r
1453         ADC TEMP1               ;INCREMENT\r
1454         STA TEMP1\r
1455         TYA\r
1456         ADC A,BHPOSH\r
1457         PHP                     ;SAVE MINUS FLAG TO SEE IF BOUNCED\r
1458         JSR LSHFT1\r
1459         STA A,BHPOSH            ;NEW HORIZ POS\r
1460         LDA TEMP1\r
1461         STA A,BHPOSL\r
1462         PLP\r
1463         BMI 5$                  ;BOUNCE\r
1464         LDA A,BHPOSH\r
1465         JSR BCHECK\r
1466         BCC 10$\r
1467 5$:     LDA TEMP2\r
1468         STA A,BHPOSH\r
1469         LDA I,NGL180            ;BOUNCE CHANGE ANGLE\r
1470         SEC\r
1471         SBC ANGLE\r
1472         STA ANGLE\r
1473         LDA I,1                 ;INDICATE BOUNCE\r
1474         BNE 11$\r
1475 10$:    LDA I,0                 ;NO BOUNCE\r
1476 11$:    STA IJ                  ;SAVE\r
1477         LDA ANGLE               ;SINE OF ANGLE\r
1478         JSR SIN\r
1479         TAY                     ;SAVE SW\r
1480         LDA SPEED\r
1481         LSR\r
1482         LSR\r
1483         LSR\r
1484         LSR\r
1485         TAX                     ;SET UP FOR MULT\r
1486         TYA\r
1487         JSR MULT\r
1488         LDA A,BVPOSL            ;SHIFT CURRENT VERT POS RIGHT\r
1489         STA TEMP1\r
1490         LDA A,BVPOS\r
1491         STA TEMP2\r
1492         JSR SHIFT1\r
1493         AND I,7F                ;GET RID OF PROPOGATED SIGN\r
1494         STA A,BVPOS\r
1495         TXA                     ;GET LSB OF SINE X SPEED\r
1496         CLC\r
1497         ADC TEMP1               ;ADD LSB OF SHIFTED VERT POS\r
1498         STA TEMP1\r
1499         TYA\r
1500         ADC A,BVPOS             ;ADD MSB'S\r
1501         PHP                     ;SAVE MINUS FLAG FOR BOUNCE\r
1502         JSR LSHFT1              ;NEW BALL VERT POS\r
1503         STA A,BVPOS\r
1504         LDA TEMP1\r
1505         STA A,BVPOSL\r
1506         PLP                     ;RETURN OLD STATUS\r
1507         BMI 15$                 ;BOUNCE\r
1508         LDA A,BVPOS\r
1509         JSR BVCHEK\r
1510         BCC 16$                 ;NO BOUNCE\r
1511 15$:    LDA TEMP2\r
1512         STA A,BVPOS\r
1513         LDA I,0                 ;TAKE NEGATIVE OF ANGLE\r
1514         SEC\r
1515         SBC ANGLE\r
1516         STA ANGLE\r
1517         LDA I,1                 ;INDICATE BOUNCE\r
1518         BNE 17$\r
1519 16$:    LDA I,0\r
1520 17$:    ORA IJ\r
1521         BEQ SP.RET              ;NO BOUNCE\r
1522         JSR FOULCK\r
1523         BCS SP.FOUL             ;FOUL BALL\r
1524         LDA FAIR\r
1525         BNE SP.RET\r
1526         INC FAIR\r
1527         LSR SPEED\r
1528         LDA A,BVPOS             ;GET BALL\r
1529         SBC I,84\r
1530         BPL 30$                 ;CENTER OF FIELD\r
1531         CLC                     ;ABS VALUE\r
1532         EOR I,0FF\r
1533         ADC I,1\r
1534 30$:    CMP I,17\r
1535         BCS 35$                 ;NOT HOMER\r
1536         INC HOMRUN              ;HOMER\r
1537         LDA I,240.\r
1538         STA CHEER\r
1539         LDA I,M.HR\r
1540         BNE SPECL\r
1541 35$:    SBC I,50\r
1542         CMP I,19\r
1543         BCS SP.RET\r
1544         LDA MISSED              ;MISSED A BASE\r
1545         BNE SP.RET\r
1546         LDA I,0F0               ;INDICATE TRIPLE\r
1547         STA HOMRUN\r
1548         LDA I,0A0\r
1549         STA CHEER\r
1550         LDA I,M.TRPL\r
1551 SPECL:  JSR WRITEB\r
1552         LDA I,0\r
1553         STA SPEED\r
1554         STA A,MOBJ+1C           ;ZILCH BALL OVER FENCE\r
1555         BIT ATRACT              ;GAME MODE?\r
1556         BPL 10$                 ;NO, ATRACT MODE\r
1557         LDX BASE                ;YES, TURN RUNNER TO DRONE\r
1558         INX\r
1559         STX MOVE\r
1560         TXA\r
1561         ASL\r
1562         TAX\r
1563         LDA AX,BGOALH\r
1564         STA A,HGOAL+<BATTER*2>\r
1565         LDA AX,BGOALV\r
1566         STA A,VGOAL+<BATTER*2>\r
1567 10$:    SEC\r
1568         RTS\r
1569 SP.FOUL:LDA I,FOUL\r
1570         ORA BALFLG              ;ELSE SET FOUL\r
1571         STA BALFLG\r
1572 SP.RET: CLC                     ;NOTHING UNTOWARD\r
1573         RTS                     ;ALL DONE\r
1574         .PAGE\r
1575         .SBTTL CATCH ROUTINE\r
1576 ;\r
1577 ;BLOCK NAME:    CATCH\r
1578 ;BLOCK TYPE:    SUBROUTINE\r
1579 ;DESCRIPTION:   CATCH WILL DETERMINE IF THE BALL HAS PASSED THE BATTER \r
1580 ;               SUFFICIENTLY TO BE CAUGHT BY THE CATCHER.  IN THE FUTURE\r
1581 ;               IT WILL ALSO DETERMINE A BALL, STRIKE, WP OR HB.  IN THE\r
1582 ;               THE CASE OF A CATCH, IT SETS THE CATCH FLAG.\r
1583 ;\r
1584 ;INPUT PARAMS:  CATCHER POSITION AND BALL POSITION\r
1585 ;OUTPUT PARAMS: CARRY SET AND SPEED IF CATCH\r
1586 ;REGISTER USED: A,X,Y\r
1587 ;STACK USAGE    NONE\r
1588 CATCH:  LDA A,HPOSH+<CATCHER*2>\r
1589         SEC\r
1590         SBC A,BHPOSH            ;HORIZONTAL POXIMITY TO CATCHER\r
1591         BMI 2$                  ;PAST CATER\r
1592         CMP I,-PROX             ;BALL CLOSE ENOUGH?\r
1593         BCS 6$                  ;NO - CHECK BALL OR STRIKE\r
1594         BCC 3$\r
1595 2$:     CMP I,PROX\r
1596         BCC 10$\r
1597 3$:     LDA A,VPOS+<CATCHER*2>\r
1598         SEC\r
1599         SBC A,BVPOS\r
1600         BCC 5$                  ;IF NEG, DON'T NEGATE\r
1601         EOR I,0FF\r
1602         ADC I,0\r
1603 5$:     CMP I,PROX\r
1604         BCC C.RET               ;NOT WILD PITCH TILL PAST CATCHER\r
1605 6$:     LDA I,0CC               ;CATCH SOUND\r
1606         STA THUD\r
1607         SEC\r
1608         RTS\r
1609 ;\r
1610 ;MOVE CATCHER, CHECK FOR BALLS & STRIKES\r
1611 ;\r
1612 10$:    LDA SSTART\r
1613         BEQ 20$\r
1614         BMI 20$\r
1615         LDA I,1                 ;ITS A STRIKE\r
1616         STA CALL                ;MOVE CATCHER\r
1617 20$:    LDA OFFENS              ;GET DEFENSE\r
1618         EOR I,2\r
1619         TAX\r
1620         LDA ZX,PLAYNO\r
1621         ASL\r
1622         TAY\r
1623         LDA AY,CTAB+1           ;DO CASE\r
1624         PHA\r
1625         LDA AY,CTAB\r
1626         PHA\r
1627         RTS\r
1628 CTAB:   .WORD C.STRK-1,C.STRK-1,C.CURV-1,C.KB-1\r
1629 C.KB:   LDA A,BHPOSH\r
1630         SBC I,22\r
1631         BPL C.CALL\r
1632 C.CURV: LDA A,BVPOS             ;MOVE CATCHER\r
1633         CMP A,VPOS+<CATCHER*2>\r
1634         BEQ C.CALL\r
1635         STA A,VPOS+<CATCHER*2>\r
1636         LDA I,4\r
1637         ORA BITMAP              ;MOVE LEGS\r
1638         STA BITMAP\r
1639 C.CALL: LDA CALL                ;DON'T CHANGE A STRIKE\r
1640         BNE C.RET\r
1641         LDA A,BHPOSH            ;BALL IN STRIKE ZONE?\r
1642         SEC\r
1643         SBC I,21\r
1644         BCS 10$\r
1645         EOR I,0FF               ;ABS VALUE\r
1646         ADC I,1\r
1647 10$:    CMP I,4\r
1648         BCS C.RET               ;NOT IN STRIKE ZONE YET\r
1649         LDA A,BVPOS\r
1650         SBC I,83\r
1651         BCS 20$\r
1652         EOR I,0FF               ;ABS VALUE\r
1653         ADC I,1\r
1654 20$:    CMP I,4\r
1655         BCS C.CHK               ;NOT IN STRIKE ZONE\r
1656 C.STRK: LDA I,1\r
1657         STA CALL\r
1658 C.RET:  CLC                     ;BALL NOT CAUGHT YET\r
1659         RTS\r
1660 C.CHK:  LDX OFFENS\r
1661         LDA ZX,PLAYNO\r
1662         LSR\r
1663         LDA I,80\r
1664         BCS 10$                 ;LEFTY\r
1665         LDA I,8E                ;RIGHTY\r
1666         SEC\r
1667 10$:    SBC A,BVPOS\r
1668         BMI C.RET\r
1669         CMP I,6\r
1670         BCS C.RET\r
1671         LDA I,-1                ;HIT BATSMAN\r
1672         STA CALL\r
1673         SEC\r
1674         RTS\r
1675         .PAGE\r
1676         .SBTTL BOUNCE\r
1677 ;\r
1678 ;BLOCK NAME:    BOUNCE\r
1679 ;BLOCK TYPE:    SUBROUTINE\r
1680 ;DESCRIPTION:   BOUNCE WILL SIMULATE # BOUNCING MOTION FOR THE BALL AS WELL\r
1681 ;               AS DECAYING THE SPEED TO ZERO\r
1682 ;INPUT PARAMS:  SPEED AND ANGLE\r
1683 ;OUTPUT PARAMS: SPEED AND ANGLE\r
1684 ;REGISTER USED: A,X,Y\r
1685 ;STACK USAGE:\r
1686 ;\r
1687 ;TEMPORARILY WILL JUST DECAY THE SPEED\r
1688 ;\r
1689 BOUNCE: LDA SPEED               ;GET SPEED\r
1690         CLC\r
1691         TAY\r
1692         ADC I,3F                ;ADD 3F\r
1693         LSR\r
1694         LSR\r
1695         LSR\r
1696         LSR\r
1697         LSR\r
1698         LSR\r
1699         STA TEMP1               ;SAVE\r
1700         TYA                     ;SPEED\r
1701         SEC\r
1702         SBC TEMP1               ;SPEED - ((SPEED+15)/16)\r
1703         STA SPEED\r
1704         AND I,0FC\r
1705         BNE 10$                 ;IF BALL HASNT STOPPED\r
1706         LDA BATOUT              ;DON'T CALL LINE OUT FOUL\r
1707         BNE 10$\r
1708         JSR FOULCK\r
1709         BCC 10$                 ;BALL NOT FOUL\r
1710         LDA I,FOUL              ;SET FOUL\r
1711         ORA BALFLG\r
1712         STA BALFLG\r
1713 10$:    RTS\r
1714         .PAGE\r
1715         .SBTTL MOVE OBJECT LEGS\r
1716         \r
1717 ;BLOCK NAME:    MOVLEG\r
1718 ;BLOCK TYPE:    SUBROUTINE\r
1719 ;BLOCK DESCRIPTION:     MOVLEG WILL FIRST LOCK OUT\r
1720 ;                       THE MOITION OBJECT UPDATE IN THE INTERRUPT\r
1721 ;                       ROUTINE AND THEN TOGGLE THE ONE BIT\r
1722 ;                       OF THE PICTURE STAMP # FOR EVERY MOTION\r
1723 ;                       OBJECT INDICATE IN THE 2 BYTE BIT MAP\r
1724 ;\r
1725 ;INPUT PARAMS:  BITMAP (2 BYTES)\r
1726 ;OUTPUT PARAMS: MOTION OBJECT STAMPS UPDATED\r
1727 ;REGISTER USED: A,X\r
1728 ;STACK USED:    NONE\r
1729 ;\r
1730 MOVLEG: LDA FRAME\r
1731         AND I,03                ;EVERY 4TH FRAME ONLY\r
1732         BNE 5$\r
1733         LDY I,8                 ;8 OBJ'S IN FIRST BYTE\r
1734         STA SLOCK               ;LOCK OUT INTERRUPT\r
1735         LDX I,0\r
1736 1$:     LDA I,1                 ;SET UP FOR EOR\r
1737         LSR BITMAP\r
1738         BCC 2$                  ;NO UPDATE\r
1739         EOR AX,MOBJ             ;UPDATE STAMP\r
1740         STA AX,MOBJ\r
1741 2$:     INX\r
1742         INX\r
1743         DEY\r
1744         BNE 1$\r
1745         LDY I,8                 ;8 OBJ'S IN 2ND BYTE\r
1746 3$:     LDA I,1                 ;SET UP FOR EOR\r
1747         LSR BITMAP+1\r
1748         BCC 4$                  ;NO UPDATE\r
1749         EOR AX,MOBJ             ;UPDATE STAMP\r
1750         STA AX,MOBJ\r
1751 4$:     INX\r
1752         INX\r
1753         DEY\r
1754         BNE 3$\r
1755         LDX HASBAL              ;FLASH MAN WITH BALL\r
1756         BEQ 6$\r
1757         LDA AX,MOBJ\r
1758         AND I,0C0               ;PRESERVE FLAGS\r
1759         STA AX,MOBJ\r
1760         LDA I,0                 ;UNLOCK INTERRUPT\r
1761         STA SLOCK\r
1762         RTS                     ;RETURN\r
1763 5$:     LDX HASBAL\r
1764         BEQ 6$\r
1765         LDA AX,MOBJ\r
1766         ORA I,0A\r
1767         STA AX,MOBJ\r
1768 6$:     RTS\r
1769         .PAGE\r
1770         .SBTTL TRACK BALL RUNNER\r
1771         \r
1772 ;BLOCK NAME:    BATRUN\r
1773 ;BLOCK TYPE:    SUBROUTINE\r
1774 ;BLOCK DESCRIPTION:     THIS ROUTINE WILL UPDATE THE POSITION\r
1775 ;                       OF THE BATTER AS A RUNNER BASED ON OFFENSIVE\r
1776 ;                       TRACK BALL INPUT AND SLIDE CONDITION\r
1777 ;\r
1778 ;INPUT PARAMS:  THINC,TVINC\r
1779 ;OUTPUT PARAMS: H & V POSITION OF RUNNER (BATTER)\r
1780 ;REGISTERS USED: A,X\r
1781 ;SUBROUTINE USED:       TBALL,BUTTON\r
1782 ;STACK USED     NONE ADDITIONAL\r
1783 ;\r
1784 BATRUN: BIT ATRACT\r
1785         BPL 50$                 ;IN ATRACT\r
1786         JSR OFENSE\r
1787         BCS 50$                 ;COMPUTER AT BAT\r
1788         LDA MOVE\r
1789         BNE 50$\r
1790         BIT SLIDE\r
1791         BMI 1$                  ;SLIDING!\r
1792         LDA I,SLDVAL\r
1793         CMP SLIDE\r
1794         BEQ 1$                  ;NORMAL MOVEMENT\r
1795         INC SLIDE\r
1796         CMP SLIDE\r
1797         BNE 50$                 ;STOPPED AFTER SLIDE\r
1798         LDA A,MOBJ+<BATTER*2>   ;CHANGE TO RUNNER\r
1799         AND I,0C0\r
1800         BIT SAVE1\r
1801         BPL 55$\r
1802         EOR I,40\r
1803 55$:    LDX OFFENS\r
1804         ORA I,08\r
1805         STA A,MOBJ+<BATTER*2>\r
1806         BNE 15$                 ;ALWAYS\r
1807 50$:    RTS\r
1808 1$:     LDX OFFENS      ;GET H & V INCREMENTS\r
1809         JSR TBALL\r
1810         BIT SLIDE\r
1811         BMI 20$\r
1812         LDA BASE                ;TO FIRST YET?\r
1813         BEQ 18$                 ;YES, DONT ALLOW SLIDE\r
1814 15$:    JSR BUTTON              ;BUTTON PUSHED?\r
1815         BNE 16$                 ;YES\r
1816 18$:    LDA THINC               ;NO\r
1817         ORA TVINC\r
1818         BEQ 25$                 ;DON'T MOVE LEGS\r
1819         LDA I,4                 ;MOVE LEGS\r
1820         ORA BITMAP+1\r
1821         STA BITMAP+1\r
1822         BNE 25$                 ;ALWAYS\r
1823 16$:    LDA I,-SLDVAL\r
1824         STA SLIDE\r
1825         LDA A,MOBJ+<BATTER*2>   ;CHANGE TO SLIDER PICTURE\r
1826         AND I,0C0\r
1827         BIT THINC+1             ;THIS ALL WORKED THRU TRIAL & ERROR\r
1828         BPL 17$\r
1829         EOR I,40\r
1830 17$:    ORA I,0E\r
1831         STA A,MOBJ+<BATTER*2>\r
1832         LDA THINC+1\r
1833         STA SAVE1               ;SAVE SIGN OF LAST HORIZ INCREMENT\r
1834         LDA BITMAP+1\r
1835         AND I,0FB\r
1836         STA BITMAP+1\r
1837 20$:    INC SLIDE\r
1838         LDA THINC               ;DOUBLE SPEED\r
1839         STA TEMP1\r
1840         LDA THINC+1\r
1841         JSR LSHFT1\r
1842         STA THINC+1\r
1843         LDA TEMP1\r
1844         STA THINC\r
1845         LDA TVINC\r
1846         STA TEMP1\r
1847         LDA TVINC+1\r
1848         JSR LSHFT1\r
1849         STA TVINC+1\r
1850         LDA TEMP1\r
1851         STA TVINC\r
1852 25$:    LDA A,HPOSL+<BATTER*2>          ;INCREMENT H POS\r
1853         CLC\r
1854         ADC THINC\r
1855         STA A,HPOSL+<BATTER*2>\r
1856         LDA A,HPOSH+<BATTER*2>\r
1857         ADC THINC+1\r
1858         JSR BCHECK\r
1859         BCS 26$\r
1860         STA A,HPOSH+<BATTER*2>\r
1861 26$:    LDA A,VPOSL+<BATTER*2>          ;INCREMENT V POS\r
1862         CLC\r
1863         ADC TVINC\r
1864         STA A,VPOSL+<BATTER*2>\r
1865         LDA A,VPOS+<BATTER*2>\r
1866         ADC TVINC+1\r
1867         JSR BVCHEK\r
1868         BCS 27$\r
1869         STA A,VPOS+<BATTER*2>\r
1870 27$:    LDA SLIDE\r
1871         BMI B.RET\r
1872         BEQ B.RET\r
1873         LDA TVINC+1             ;NOT SLIDING, ANY VERT CHANGE?\r
1874         BNE 30$                 ;YES\r
1875         LDA TVINC\r
1876         BNE 30$                 ;YES\r
1877         RTS\r
1878 30$:    TXA\r
1879         ROR\r
1880         ROR\r
1881         ROR\r
1882         EOR TVINC+1\r
1883         BMI 35$                 ;DID HE CHANGE VERT DIRECTIONS?\r
1884         LDA I,7F                ;ADJUST RUNNER DIRECTION\r
1885         AND A,MOBJ+<BATTER*2>\r
1886         BNE 40$                 ;ALWAYS\r
1887 35$:    LDA I,80                ;ADJUST RUNNER DIRECTION\r
1888         ORA A,MOBJ+<BATTER*2>\r
1889 40$:    STA A,MOBJ+<BATTER*2>\r
1890 B.RET:  RTS\r
1891 CKS3:   .BYTE 89\r
1892         .PAGE\r
1893         .SBTTL FIELDER MOTION (TRACK BALL)\r
1894         \r
1895 ;BLOCK NAME:    FIELD\r
1896 ;BLOCK TYPE:    SUBROUTINE\r
1897 ;BLOCK DESCRIPTION:     FIELD WILL DETERMINE WHICH\r
1898 ;                       FIELDER (IF ANY) ARE UNDER CONTROL OF THE\r
1899 ;                       TRACK BALL AND MOVE THEM ACCORDINALY\r
1900 ;\r
1901 ;INPUT PARAMS:  FLDCTL (3 BYTE ARRAY), THINC,TVINC\r
1902 ;OUTPUT PARAMS: H & V POSITIONS OF FIELDERS UPDATED\r
1903 ;REGISTERS USED: A,X,Y\r
1904 ;SUBROUTINE USED: TBALL\r
1905 ;STACK USED:    NONE ADDITIONAL\r
1906 ;\r
1907 FIELDR: JSR DEFENS              ;COMPUTE ON DEFENSE?\r
1908         BCS 8$                  ;YES, LIKE ATTRACT\r
1909         BIT ATRACT\r
1910         BMI 7$\r
1911 8$:     JMP F.ATRC\r
1912 7$:     LDA FLDCTL              ;ANY FIELDERS TO CONTROL?\r
1913         BEQ 2$                  ;NO\r
1914         LDA OFFENS              ;GET DEFENSE IN X\r
1915         EOR I,2\r
1916         TAX\r
1917         JSR TBALL               ;SET UP H & V INCREMENTS\r
1918         LDY I,0                 ;AT MOST 3 PLAYERS CONTROLLED\r
1919 1$:     LDX AY,FLDCTL           ;GET CONTROLLED PLAYER\r
1920         BNE 5$\r
1921 2$:     JMP F.RET\r
1922 5$:     LDA THINC\r
1923         BNE 3$\r
1924         LDA TVINC\r
1925         BEQ 10$                 ;NO\r
1926 3$:     JSR FLDLEG\r
1927 10$:    CLC\r
1928         LDA THINC               ;INCREMENT HPOS\r
1929         ADC AX,HPOSL\r
1930         STA AX,HPOSL\r
1931         LDA THINC+1\r
1932         ADC AX,HPOSH\r
1933         JSR BCHECK                      ;CHECK FOR OUT OF BOUNDS\r
1934         BCS 15$\r
1935         STA AX,HPOSH\r
1936 15$:    CLC\r
1937         LDA TVINC               ;INCREMENT VPOS\r
1938         ADC AX,VPOSL\r
1939         STA AX,VPOSL\r
1940         LDA TVINC+1\r
1941         ADC AX,VPOS\r
1942         JSR BVCHEK              ;CHECK FOR OUT OF BOUNDS\r
1943         BCS 20$\r
1944         STA AX,VPOS\r
1945 20$:    LDA THINC               ;FIELDERS MOVE AT 1 1/2 SPEED LIMIT\r
1946         STA TEMP1\r
1947         LDA THINC+1\r
1948         JSR SHIFT1\r
1949         STA TEMP2\r
1950         LDA AX,HPOSL            ;UPDATE HORIZ\r
1951         CLC\r
1952         ADC TEMP1\r
1953         STA AX,HPOSL\r
1954         LDA AX,HPOSH\r
1955         ADC TEMP2\r
1956         JSR BCHECK\r
1957         BCS 25$\r
1958         STA AX,HPOSH\r
1959 25$:    LDA TVINC\r
1960         STA TEMP1\r
1961         LDA TVINC+1\r
1962         JSR SHIFT1\r
1963         STA TEMP2\r
1964         LDA AX,VPOSL            ;UPDATE VERT\r
1965         CLC\r
1966         ADC TEMP1\r
1967         STA AX,VPOSL\r
1968         LDA AX,VPOS\r
1969         ADC TEMP2\r
1970         JSR BVCHEK\r
1971         BCS 40$\r
1972         STA AX,VPOS\r
1973 40$:    INY\r
1974         CPY I,3                 ;ALL DONE?\r
1975         BEQ F.RET\r
1976         JMP 1$                  ;NOPE!\r
1977 F.ATRC: LDA A,BHPOSH            ;BALL OUT OF INFIELD?\r
1978         CMP I,INMAX\r
1979         BCC F.RET               ;NO\r
1980         LDX FLDBAL              ;MOVE OUTFIELDER TO BALL\r
1981         LDA A,BHPOSH\r
1982         STA AX,HGOAL\r
1983         LDA A,BVPOS\r
1984         STA AX,VGOAL\r
1985         JSR DIRECT\r
1986         LDA I,0\r
1987         JSR SPDLIM\r
1988         JSR UPDTHV\r
1989         LDA TVINC+1\r
1990         ORA THINC+1\r
1991         BEQ F.RET\r
1992         JSR FLDLEG\r
1993 F.RET:  RTS\r
1994 ;ENTERED WITH X->PLAYER, A=TBVD(X), THINC=TBHD(X)\r
1995 X.LIM:  .BYTE 28\r
1996 X.TBLIM:TAY                     ;SAVE V\r
1997         BPL 1$                  ;TAKE ABS VAL\r
1998         EOR I,0FF\r
1999         CLC\r
2000         ADC I,1\r
2001 1$:     CMP A,X.LIM             ;!V! < X.LIM?\r
2002         BCC 2$                  ;YES, LEAVE IT\r
2003         LDA A,X.LIM             ;ELSE USE X.LIM\r
2004 2$:     CPY I,80                ;CHECK IF ORIG WAS +\r
2005         BCC 3$                  ;BRANCH IF SO\r
2006         EOR I,0FF               ;ELSE MAKE - X.LIM\r
2007         ADC I,0                 ;CARRY SET, ADDS 1\r
2008 3$:     STA TVINC\r
2009         LDA THINC               ;GET THINC AND REPEAT\r
2010         TAY                     ;THE PROCESS\r
2011         BPL 4$\r
2012         EOR I,0FF\r
2013         CLC\r
2014         ADC I,1\r
2015 4$:     CMP A,X.LIM\r
2016         BCC 5$\r
2017         LDA A,X.LIM\r
2018 5$:     CPY I,80\r
2019         BCC 6$\r
2020         EOR I,0FF\r
2021         ADC I,0\r
2022 6$:     STA THINC               ;SAVE H\r
2023         LDA TVINC               ;GET BACK V\r
2024         RTS                     ;AND REJOIN MAIN\r
2025 TBALL: LDY I,0\r
2026         LDA ZX,TBHD             ;WE HAVE A 4 CYCLE HAZARD HERE\r
2027         STY ZX,TBHD             ;WHICH I THINK WE WILL HAVE TO LIVE WITH\r
2028         LDY OFFENS              ;MUST PRE-INVERT FOR OFFENSE #2\r
2029         BEQ 5$\r
2030         EOR I,0FF\r
2031         CLC\r
2032         ADC I,1\r
2033 5$:     STA THINC               ;SAVE LSB'S OF TBHP(X)\r
2034         LDY I,0\r
2035         LDA ZX,TBVD\r
2036         STY ZX,TBVD             ;SAME HAZARD HERE\r
2037         LDY OFFENS\r
2038         BEQ 10$\r
2039         EOR I,0FF\r
2040         CLC\r
2041         ADC I,1\r
2042 10$:    JSR X.TBLIM\r
2043         ASL\r
2044         ROL\r
2045         ROL                     ;(TBVD(X))*8 IN ACC,C\r
2046         TAY                     ;SAVE 5 LSB FOR LS BYTE\r
2047         AND I,0F8               ;ISOLATE 5 LSB IN MSB'S OF LS BYTE\r
2048         STA TVINC\r
2049         TYA\r
2050         ROL                     ;FINISH "*8" FOR MS BYTE\r
2051         AND I,7                 ;ISOLATE 3 MSB IN LSB'S OF MS BYTE\r
2052         CMP I,4\r
2053         BCC 30$\r
2054         ORA I,0F8               ;SIGN EXTENDED\r
2055 30$:    STA TVINC+1\r
2056         LDA THINC               ;SAME FOR THINC\r
2057         ASL\r
2058         ROL\r
2059         ROL\r
2060         TAY\r
2061         AND I,0F8\r
2062         STA THINC\r
2063         TYA\r
2064         ROL\r
2065         AND I,7\r
2066         CMP I,4\r
2067         BCC 40$\r
2068         ORA I,0F8\r
2069 40$:    STA THINC+1\r
2070         RTS\r
2071         .PAGE\r
2072         .SBTTL FIELDER-BALL COLLISION CHECK\r
2073         \r
2074 ;BLOCK NAME:    COLCHK\r
2075 ;BLOCK TYPE:    SUBROUTINE\r
2076 ;BLOCK DESCRIPTION:     COLCHK WILL DETERMINE IF A COLLISION\r
2077 ;                       HAS OCCURED BETWEEN THE BALL & A FIELDER &\r
2078 ;                       WILL SET THE FIELD FLAG IN BALFLG IF SO.\r
2079 ;\r
2080 ;INPUT PARMS:   BALL & FIELDER POSITIONS\r
2081 ;OUTPUT PARMS:  UPDATE OF BALFLG\r
2082 ;REGISTERS USED:        A,X,Y\r
2083 ;STACK USED:    NONE\r
2084 ;SUBROUTINE USED: FORCHK\r
2085 COLCHK: LDX I,9*2               ;START W/RIGHT FIELDER\r
2086 1$:     LDA A,BHPOSH            ;BALL POSITION\r
2087         SEC                     ;HORIZ PROXIMITY\r
2088         SBC AX,HPOSH\r
2089         BCS 10$                 ;BR IF ?????\r
2090         EOR I,0FF               ;GET ABSOLUTE VALUE\r
2091         ADC I,1\r
2092 10$:    CMP I,FPROX\r
2093         BCS 20$                 ;OUTSIDE HORIZ RANGE\r
2094         LDA A,BVPOS\r
2095         SEC\r
2096         SBC AX,VPOS             ;GET PROXIMITY\r
2097         BCS 15$\r
2098         EOR I,0FF               ;ABS VALUE\r
2099         ADC I,1\r
2100 15$:    CMP I,FPROX\r
2101         BCC 25$                 ;WE GOT HIM\r
2102 20$:    DEX\r
2103         DEX\r
2104         BNE 1$                  ;NOT DONE YET\r
2105         LDX HASBAL\r
2106         BEQ 22$\r
2107         LDA AX,MOBJ\r
2108         ORA I,0A\r
2109         STA AX,MOBJ\r
2110         LDA I,0\r
2111         STA HASBAL\r
2112 22$:    RTS\r
2113 25$:    CPX HASBAL              ;SAME PLAYER CAN'T CATCH BALL HE THREW\r
2114         BEQ 22$\r
2115         LDY HASBAL\r
2116         BEQ 26$\r
2117         LDA AY,MOBJ\r
2118         ORA I,0A\r
2119         STA AY,MOBJ\r
2120 26$:    LDA AX,HPOSH\r
2121         CMP I,0A8\r
2122         BCS 30$                 ;OUTFIELDER BRANCH\r
2123         LDA SPEED               ;GET INFIELD MAX SPEED\r
2124         CMP INSPDX\r
2125         BCS 20$                 ;NO COLLISION BALL MOVING TOO FAST\r
2126         CMP I,50\r
2127         BCC 40$                 ;NO\r
2128         BCS 38$                 ;YES\r
2129 30$:    LDY FAIR                ;BALL BOUNCE YET?\r
2130         BNE 40$                 ;YES\r
2131         CMP I,44\r
2132         BCC 40$                 ;NO\r
2133 38$:    LDA FSTFLD              ;NOT FLYBALL\r
2134         BNE 40$\r
2135         STX TEMP1               ;YES, BATTER IS OUT\r
2136         INC BATOUT\r
2137         INC FLYOUT              ;INDICATE FLYOUT\r
2138         LDX I,0\r
2139         STX FORCE\r
2140         JSR PUTOUT              ;SEND BATTER BACK TO DUGOUT\r
2141         LDX TEMP1\r
2142         INC OUTS\r
2143 40$:    LDA I,0CC               ;CATCH SOUND\r
2144         STA THUD\r
2145         STA THRTMR              ;INIT THROW TIMER\r
2146         STX HASBAL              ;SHOW WHO HAS BALL\r
2147         STX FLDCTL              ;MAKE HIM CONTROLLED MAN\r
2148         LDA FLYOUT              ;DON'T SET FOUL ON OUT\r
2149         BNE 45$\r
2150         JSR FOULCK\r
2151         BCC 45$\r
2152         LDA I,FOUL              ;BALL FOUL WHEN CAUGHT, INDICATE FOUL\r
2153         ORA BALFLG\r
2154         STA BALFLG\r
2155 45$:    LDA AX,HPOSH            ;MOVE BALL TO CENTER OF GUY THAT HAS IT\r
2156         STA A,BHPOSH\r
2157         LDA AX,VPOS\r
2158         STA A,BVPOS\r
2159         LDA I,0\r
2160         STA SPEED               ;SET BALL SPEED TO 0\r
2161         STA FLDCTL+1            ;NO OTHERS UNDER TBALL CONTROL\r
2162         STA TOBALX\r
2163         LDY TOBALL              ;MOVE SELECTED INFIELDER BACK TO POSITION\r
2164         STA TOBALL\r
2165         LDA AY,IVGOAL\r
2166         STA AY,VGOAL\r
2167         LDA AY,IHGOAL\r
2168         STA AY,HGOAL\r
2169         LDA I,FLDFLG            ;INDICATE BALL FIELDED\r
2170         ORA BALFLG\r
2171         STA BALFLG\r
2172         LDA FSTFLD              ;IS THIS THE FIRST FIELDING?\r
2173         BEQ 31$                 ;YES\r
2174         CPX I,PITCHER*2\r
2175         BNE 49$\r
2176         LDA I,PLYEND            ;SET PLYEND (TEMP)\r
2177         ORA BALFLG\r
2178         STA BALFLG\r
2179 31$:    JSR FORCHK\r
2180 49$:    INC FSTFLD              ;INCREMENT FIELDED COUNT\r
2181 50$:    RTS\r
2182         .PAGE\r
2183         .SBTTL FORCE CHECK\r
2184 ;BLOCK NAME: FORCHK\r
2185 ;BLOCK TYPE: SUBROUTINE\r
2186 ;BLOCK DESCRIPTION: FORCHK WILL SET THE MOVE FLAG FOR EACH RUNNER\r
2187 ;                   (EXCEPT BATTER) ACCORDING TO THE FORCE CONDITIONS\r
2188 ;                   AND POSITION OF RUNNERS AT TIME OF CALL\r
2189 ;\r
2190 ;INPUT PARAMS: FORCE & H & V POSITIONS OF RUNNERS\r
2191 ;OUTPUT PARAMS: MOVE ARRAY\r
2192 ;STACK USED: NONE\r
2193 ;\r
2194 FORCHK:\r
2195         LDX I,3                 ;START WITH 3RD DRONE\r
2196 5$:     LDA ZX,MOVE\r
2197         BMI 50$                 ;OUT\r
2198         BEQ 50$                 ;HOLDING\r
2199         LDA ZX,BASE\r
2200         BEQ 50$                 ;NOT ON BASE\r
2201         TAY\r
2202         STA ZX,MOVE\r
2203         LDA FLYOUT\r
2204         BNE 35$\r
2205         LDA FORCE\r
2206         BEQ 21$                 ;HAVE RUNNERS TAG UP\r
2207         LSR                     ;GET RID OF FORCE AT 1ST\r
2208 10$:    LSR\r
2209         DEY\r
2210         BNE 10$\r
2211         BCC 21$                 ;NO FORCE ON THIS GUY\r
2212 13$:    TXA\r
2213         ASL\r
2214         TAY\r
2215 15$:    INC ZX,MOVE             ;MOVE THIS GUY ALONG\r
2216         BNE 45$                 ;NEXT GUY\r
2217 21$:    LDA HASBAL              ;WHO HAS THE BALL\r
2218         BNE 22$\r
2219         LDA HOMRUN\r
2220         BNE 13$                 ;HR OR TRIPLE\r
2221         TXA                     ;WALK OR HB\r
2222         ASL\r
2223         TAY\r
2224         JMP 45$\r
2225 22$:    TXA                     ;BATTER IN ATTRACT?\r
2226         BEQ 23$                 ;CONSERVATIVE!!!\r
2227         LDA HASBAL\r
2228         SBC I,<SSTOP*2>\r
2229         BPL 13$\r
2230 23$:    TXA                     ;GET INDEX\r
2231         ASL                     ;*2\r
2232         TAY\r
2233         LDA ZX,BASE\r
2234         LSR                     ;WHAT BASE\r
2235         BEQ 25$                 ;1ST\r
2236         BCC 30$                 ;2ND\r
2237         LDA AY,VPOS+<BATTER*2>  ;3RD\r
2238         SBC I,0A4               ;1/2 WAY?\r
2239         BMI 15$                 ;YES\r
2240         BPL 40$                 ;NO\r
2241 25$:    LDA AY,VPOS+<BATTER*2>  ;1/2 WAY?\r
2242         SEC\r
2243         SBC I,6A\r
2244         BMI 40$                 ;NO\r
2245         BPL 15$                 ;YES\r
2246 30$:    LDA AY,VPOS+<BATTER*2>\r
2247         SEC\r
2248         SBC I,0A2               ;1/2 WAY\r
2249         BMI 40$                 ;NO\r
2250         BPL 15$\r
2251 35$:    TXA\r
2252         ASL\r
2253         TAY\r
2254 40$:    LDA AY,MOBJ+<BATTER*2>  ;FLIP PICTURE\r
2255         EOR I,80\r
2256         STA AY,MOBJ+<BATTER*2>\r
2257 45$:    LDA ZX,MOVE             ;SET UP RUNNER'S GOALS\r
2258         STX TEMP1\r
2259         ASL\r
2260         TAX\r
2261         LDA AX,BGOALH\r
2262         STA AY,HGOAL+<BATTER*2>\r
2263         LDA AX,BGOALV\r
2264         STA AY,VGOAL+<BATTER*2>\r
2265         LDX TEMP1\r
2266 50$:    DEX\r
2267         JSR OFENSE\r
2268         TXA\r
2269         BCS 55$\r
2270         BIT ATRACT              ;ATTRACT?\r
2271         BMI 52$                 ;GAME\r
2272 55$:    TXA\r
2273         BPL 53$                 ;BATTER ALSO IN ATTRACT\r
2274 51$:    RTS\r
2275 52$:    BEQ 51$                 ;RUNNERS ONLY\r
2276 53$:    JMP 5$\r
2277         .PAGE\r
2278         .SBTTL PUTOUT\r
2279 ;BLOCK NAME:    PUTOUT\r
2280 ;BLOCK TYPE:    SUBROUTINE\r
2281 ;DESCRIPTION:   PUTOUT WILL MAKE RUNNER A DRONE AND SEND HIM TO THE DUGOUT\r
2282 ;INPUT PARAMS:  X=RUNNER #\r
2283 ;REGS USED:     A,X\r
2284 ;\r
2285 PUTOUT: LDA I,0\r
2286         STA ZX,BASE\r
2287         LDA I,0FF\r
2288         STA ZX,MOVE             ;MAKE RUNNER DRONE TO DUGOUT\r
2289         TXA\r
2290         ASL\r
2291         TAX\r
2292         LDA OFFENS\r
2293         BNE 10$\r
2294         LDA I,48                ;CHANGE PICTURE\r
2295         BNE 20$\r
2296 10$:    LDA I,88\r
2297 20$:    STA AX,MOBJ+<BATTER*2>\r
2298         LDA I,HDUGO             ;MOVE HIM TO DUGOUT\r
2299         STA AX,HGOAL+<BATTER*2>\r
2300         LDA I,VDUGO\r
2301         STA AX,VGOAL+<BATTER*2>\r
2302         LDX I,70                ;SMALL CHEER\r
2303         LDA MISSED\r
2304         BNE 28$\r
2305         LDA OMESL               ;WAS LAST MESSAGE AN OUT OF SOME KIND\r
2306         CMP I,M.OUT\r
2307         BEQ 21$                 ;YES\r
2308         CMP I,M.FOUT\r
2309         BEQ 21$                 ;YES\r
2310         CMP I,M.LOUT            ;NO\r
2311         BNE 22$\r
2312 21$:    LDX I,90                ;BIGGER CHEER\r
2313         LDA I,M.DP              ;DOUBLE PLAY\r
2314         BNE 30$                 ;ALWAYS\r
2315 22$:    LDA FLYOUT              ;FLY OUT?\r
2316         BEQ 29$                 ;NO\r
2317         LDA A,BHPOSH\r
2318         CMP I,0A0\r
2319         BCS 27$                 ;OUTFIELD\r
2320         LDA I,M.LOUT            ;INFIELD - LINE OUT\r
2321         BNE 30$\r
2322 27$:    LDA I,M.FOUT            ;FLY OUT\r
2323         BNE 30$\r
2324 28$:    LDA I,M.MB              ;MISSED BASE\r
2325         BNE 30$\r
2326 29$:    LDA I,M.OUT             ;OUT\r
2327 30$:    STX CHEER\r
2328         JSR WRITEB\r
2329         LDA I,58                ;SAY "YER OUT!"\r
2330         STA FLASH\r
2331         RTS\r
2332         .PAGE\r
2333         .SBTTL INFIELD MOTION ROUTINE\r
2334 ;\r
2335 ;BLOCK NAME:    INFLD\r
2336 ;BLOCK TYPE:    SUBROUTINE\r
2337 ;DESCRIPTION:   INFLD WILL CONROL INFIELDER MOTION MOVING EVERY PLAYER TO A\r
2338 ;               PRE-ASSIGNED LOCATION, OR TO THE BALL, DEPENDING ON VARIABLES\r
2339 ;               TOBALL AND HASBAL\r
2340 ;\r
2341 ;INPUT PARAMS:  TOBALL,HASBALL,VGOAL,HGOAL,VPOS,HPOS\r
2342 ;OUTPUT PARAMS: VPOS,HPOS FOR EACH INFIELDER\r
2343 ;REGS USED:     A\r
2344 ;STACK USAGE:   NONE (DIRECT USES SOME)\r
2345 ;SUBRTNS USED:  DIRECT,SPDLIM,FLDLEG,FORCHK\r
2346 \r
2347 INFLD:\r
2348 1$:     LDX I,SSTOP*2           ;START WITH SHORT STOP\r
2349 2$:     BIT ATRACT\r
2350         BPL 3$\r
2351         CPX HASBAL              ;PLAYER HAVE BALL?\r
2352         BEQ 50$                 ;YES, DON'T TRY TO MOVE HIM\r
2353 3$:     CPX TOBALL              ;MOVE THIS ONE TO BALL?\r
2354         BNE 10$                 ;NOPE!\r
2355         CPX I,PITCHER*2         ;PITCHER TO BALL?\r
2356         BEQ 7$                  ;YES - ZERO IN ON BALL\r
2357         LDA A,BHPOSH            ;YEP- GET HORIZ POS\r
2358         CMP I,INMAX             ;BALL OUT OF INFIELD?\r
2359         BCC 5$                  ;NO\r
2360         LDA AX,IVGOAL           ;YES,RESET GOALS\r
2361         STA AX,VGOAL\r
2362         LDA AX,IHGOAL\r
2363         STA AX,HGOAL\r
2364         BNE 10$\r
2365 5$:     LDA SPEED               ;BALL STOPPED?\r
2366         AND I,0E0\r
2367         BNE 10$                 ;NO\r
2368 7$:     LDA A,BHPOSH\r
2369         STA AX,HGOAL\r
2370         LDA A,BVPOS\r
2371         STA AX,VGOAL\r
2372 10$:    JSR DIRECT              ;GET H&V INCREMENT\r
2373         LDA I,0\r
2374         JSR SPDLIM              ;LIMIT SPEED\r
2375         JSR UPDTHV              ;UPDATE POSITIONS\r
2376         LDA TVINC+1\r
2377         ORA THINC+1\r
2378         BEQ 50$\r
2379         JSR FLDLEG              ;MOVE LEGS\r
2380 50$:    DEX\r
2381         DEX\r
2382         BNE 2$                  ;NOT DONE\r
2383         RTS\r
2384         .SBTTL DIRECTION\r
2385 ;SETS HINC & VINC TO DISPLACEMENT FROM (H/V) POS TO (H/V) GOAL\r
2386 DIRECT: LDA X,VGOAL\r
2387         SEC\r
2388         SBC X,VPOS\r
2389         PHA                     ;SAVE DIFFERENCE\r
2390         BCC 1$\r
2391         EOR I,80                ;EOR CARRY,D7\r
2392 1$:     ASL                     ;C=C.EOR.D7\r
2393         PLA                     ;GET DIFFERENCE BACK\r
2394         BCS 2$                  ;IF C.EOR.D7=1, SIGN IS OK\r
2395         ASL                     ;ELSE WAS O'FLO, GET ERRONEOUS SIGN\r
2396         LDA I,7F                ;SET MAX POS.\r
2397         ADC I,0                 ;CHANGE TO MAX NEG IF SIGN WAS MINUS\r
2398         EOR I,0FF               ;FLIP, CUZ SIGN WAS WRONG\r
2399 2$:     STA TVINC+1             ;VERT. DISPLACEMENT (TEMP, FOR MOVEMENTS)\r
2400         LDA I,0\r
2401         STA TVINC               ;KEEP LSB'S 0\r
2402         LDA X,HGOAL\r
2403         SEC\r
2404         SBC AX,HPOSH\r
2405         PHA\r
2406         BCC 5$\r
2407         EOR I,80\r
2408 5$:     ASL\r
2409         PLA\r
2410         BCS 10$\r
2411         ASL\r
2412         LDA I,7F\r
2413         ADC I,0\r
2414         EOR I,0FF\r
2415 10$:    STA THINC+1\r
2416         LDA I,0\r
2417         STA THINC\r
2418         RTS\r
2419         .SBTTL SPEED-LIMIT\r
2420 ;SPDLIM - SPEED LIMIT\r
2421 ;\r
2422 ;ENTRY  (THINC,THINC+1) = HPOS DIFFERENCE (SIGNED)\r
2423 ;       (TVINC,TVINC+1) = VPOS DIFFERENCE (SIGNED)\r
2424 ;       (A) = INDEX FOR WHICH SPEED (MULTIPLES OF 10)\r
2425 ;EXIT   (THINC,THINC+1) = HPOS DIFFERENCE IN RANGE\r
2426 ;       (TVINC,TVINC+1) = VPOS DIFFERENCE IN RANGE\r
2427 SPDLIM: STX K                   ;SAVE PLAYER NUMBER\r
2428         STA IJ\r
2429         LDA THINC+1\r
2430         BPL 25$                 ;HABS=ABS (THINC)\r
2431         EOR I,0FF\r
2432         CLC\r
2433         ADC I,01\r
2434 25$:    STA J\r
2435         LDA TVINC+1\r
2436         BPL 30$                 ;VABS=ABS (TVINC)\r
2437         EOR I,0FF\r
2438         CLC\r
2439         ADC I,01\r
2440 30$:    LDX I,0         ;X POINTS TO MAX\r
2441         LDY J\r
2442         CMP J\r
2443         BEQ 90$                 ;IF AT 45 DEGREE ANGLE\r
2444         BCC 35$                 ;PICK MAX (HABS,VABS)\r
2445         LDX I,2                 ;HABS IS MAX\r
2446         TAY\r
2447         LDA J\r
2448 35$:    ASL\r
2449         STA QUOT+1              ;QUOTIENT=MIN*2\r
2450         STY DIVSOR              ;DIVISOR=MAX\r
2451         LDA I,1\r
2452         LDY IJ\r
2453         BEQ 36$\r
2454         LDA I,4\r
2455 36$:    CMP DIVSOR\r
2456         BCS 80$                 ;VALUES ARE GOOD ALREADY\r
2457         LDY I,3                 ;3 DIGITS OF ACCURACY FOR MIN/MAX\r
2458 40$:    LDA QUOT+1\r
2459         SEC\r
2460         SBC DIVSOR\r
2461         BCC 45$                 ;NO SUBTRACT\r
2462         STA QUOT+1\r
2463 45$:    ROL QUOT\r
2464         ROL QUOT+1\r
2465         DEY\r
2466         BNE 40$                 ;LOOP 3 TIMES\r
2467         LDA QUOT\r
2468         AND I,07\r
2469         ASL                     ;*2 FOR 2 WORD ENTRIES\r
2470         ORA IJ\r
2471         TAY\r
2472         LDA AY,SPDLM1           ;GET MAX VALUES\r
2473         STA ZX,QUOT             ;SAVE MAX SPEED LIMIT (ASSUMES DIVISOR FOLLOWS QUOT)\r
2474         TXA\r
2475         EOR I,02                ;SWITCH TO MINIMUM\r
2476         TAX\r
2477         LDA AY,SPDLM1+1\r
2478         STA ZX,QUOT             ;SAVE MIN\r
2479 60$:    LDA I,0\r
2480         STA QUOT+1              ;SET MSB OF VABS AND HABS\r
2481         STA QUOT+3              ;ASSUMED TO BE DIVSOR-A SCRATCH CELL\r
2482         LDX I,2\r
2483 65$:    LDA ZX,THINC+1\r
2484         ASL\r
2485         LDY ZX,QUOT\r
2486         LDA ZX,QUOT+1\r
2487         BCC 70$                 ;WAS POSITIVE\r
2488         TYA\r
2489         EOR I,0FF\r
2490         ADC I,0                 ;COMPLEMENT VABS OR QUOT\r
2491         TAY\r
2492         LDA ZX,QUOT+1\r
2493         EOR I,0FF\r
2494         ADC I,0\r
2495 70$:    STY ZX,THINC            ;LSB/8\r
2496         ASL ZX,THINC\r
2497         ROL\r
2498         ASL ZX,THINC\r
2499         ROL\r
2500         ASL ZX,THINC\r
2501         ROL\r
2502         STA ZX,THINC+1          ;SCALED CORRECTLY NOW\r
2503         DEX\r
2504         DEX\r
2505         BPL 65$\r
2506 80$:    LDX K                   ;RESTORE X=PLAYER NUMBER\r
2507         RTS\r
2508 \r
2509 90$:    LDA I,1\r
2510         LDY IJ\r
2511         BEQ 95$                 ;IF SLOW OBJECT\r
2512         LDA I,04\r
2513 95$:    CMP J\r
2514         BCS 80$                 ;LESS THAN SPEED LIMIT RETURN\r
2515         LDA AY,SPDLM1\r
2516         STA QUOT\r
2517         STA QUOT+2\r
2518         BNE 60$                 ;ALWAYS\r
2519 \r
2520 SPDLM1: .BYTE 28,0,28,05,28,0A,28,0F    ;LIMIT=0 FOR SLOW PLAYERS\r
2521         .BYTE 28,14,28,19,28,1E,28,23   ;EACH ENTRY REPRESENTS XXXYYYY LINES\r
2522         .BYTE 68,0,68,0D,68,1A,68,27    ;LIMIT=10 FOR FACT PLAYERS\r
2523         .BYTE 68,34,68,41,68,4E,68,5E\r
2524 CKS4:   .BYTE 46\r
2525         .PAGE\r
2526         .SBTTL SETUP\r
2527         \r
2528 ;BLOCK NAME: SETUP\r
2529 ;BLOCK TYPE: SUBROUTINE\r
2530 ;BLOCK DESCRIPTION: SETUP WILL MOVE THE 9 FIELDERS\r
2531 ;       & THE BATTER TO THEIR INITIAL FIELD POSITIONS\r
2532 ;       FROM WHEREVER THEY ARE. WHEN ALL PLAYERS\r
2533 ;       ARE MOVED, IT WILL RETURN WITH Z FLAG SET,\r
2534 ;       OTHERWISE, Z FLAG CLEAR\r
2535 ;\r
2536 ;INPUT PARMS: CURRENT PLAYER POSITIONS & INITBL, X=STARTING M.O. INDEX\r
2537 ;OUTPUT PARMS: PLAYER POSITIONS & Z FLAG = SET WHEN DONE CLEAR OTHERWISE\r
2538 ;REGISTERS USED: A,X,Y\r
2539 ;SUBROUTINES USED: DIRELT,SPDLIM,FLDLEG,UPDTHV\r
2540 ;STACK USED: NONE\r
2541 ;\r
2542 SETUP:  LDA I,0                 ;SET UP TEMP3\r
2543         STA TEMP3\r
2544 10$:    JSR DIRECT              ;GET H & V INCREMENTS\r
2545         LDA SETFLG              ;HAS BUTTON BEEN PUSHED IN PAUSE?\r
2546         BNE 20$                 ;YES, SKIP SPEED LIMIT\r
2547         LDA I,10\r
2548         JSR SPDLIM\r
2549 20$:    JSR UPDTHV              ;UPDATE H & V POS\r
2550         LDA TVINC+1\r
2551         ORA THINC+1\r
2552         BEQ 30$                 ;HE'S THERE ALREADY\r
2553         STA TEMP3               ;INDICATE NOT DONE\r
2554         JSR FLDLEG              ;MOVE LEG'S\r
2555 30$:    DEX\r
2556         DEX\r
2557         BNE 10$                 ;NOT DONE\r
2558         LDA TEMP3               ;GET INDICATOR\r
2559         RTS\r
2560         .PAGE\r
2561         .SBTTL UPDATE H & V POSITIONS\r
2562 ;\r
2563 ;BLOCK NAME: UPDTHV\r
2564 ;BLOCK TYPE: SUBROUTINE\r
2565 ;BLOCK DESCRIPTION: UPDATES H & V POSITIONS OF\r
2566 ;       MOTION OBJECT BASED ON THINC & TVINC\r
2567 ;       \r
2568 ;INPUT PARMS: X=INDEX TO MOTION OBJECT,THINC,TVINC\r
2569 ;OUTPUT PARAMS: H & V POSITIONS UPDATED\r
2570 ;REGISTERS USED: A\r
2571 ;STACK USED: NONE\r
2572 ;\r
2573 UPDTHV: LDA AX,HPOSL            ;UPDATE H LSBS\r
2574         CLC\r
2575         ADC THINC\r
2576         STA AX,HPOSL\r
2577         LDA AX,HPOSH            ;UPDATE H MSB\r
2578         ADC THINC+1\r
2579         STA AX,HPOSH\r
2580         LDA AX,VPOSL            ;UPDATE V LSBS\r
2581         CLC\r
2582         ADC TVINC\r
2583         STA AX,VPOSL\r
2584         LDA AX,VPOS             ;UPDATE V MSBS\r
2585         ADC TVINC+1\r
2586         STA AX,VPOS\r
2587         RTS\r
2588         .PAGE\r
2589         .SBTTL FIELDERS LEG MOTION\r
2590 ;\r
2591 ;ENTRY  X=FIELDER # TIMES 2\r
2592 ;\r
2593 ;EXIT   BITMAP IS UPDATED\r
2594 ;       A IS CLOBBERED,TEMP1 AND TEMP2 CLOBBERED CALLS LSHFT1\r
2595 ;\r
2596 FLDLEG: STX TEMP2               ;SAVE PLAYER #\r
2597         TXA\r
2598         LSR                     ;REAL PLAYER #\r
2599         TAX\r
2600         LDA I,1                 ;FLAG\r
2601         STA TEMP1\r
2602         LSR                     ;ZERO ACCUM\r
2603 5$:     JSR LSHFT1              ;BAT NEVER TOGGLED\r
2604         DEX\r
2605         BNE 5$                  ;ALL DONE SHIFTING?\r
2606         ORA BITMAP+1            ;SET BITS\r
2607         STA BITMAP+1\r
2608         LDA TEMP1\r
2609         ORA BITMAP\r
2610         STA BITMAP\r
2611         LDX TEMP2               ;RESTORE INDEX\r
2612         RTS\r
2613         .PAGE\r
2614         .SBTTL ONE PLAYER OFFENSE & DEFENSE CHECKS\r
2615 ;BLOCK NAME: OFENSE\r
2616 ;BLOCK TYPE: SUBROUTINE\r
2617 ;BLOCK DESCRIPTION: WILL SET CARRY IF COMPUTER IS ON\r
2618 ;                   OFFENSE IN ONE PLAER GAME. ELSE, \r
2619 ;                   CARRY IS CLEAR\r
2620 ;\r
2621 ;INPUT PARM: PLYR1,OFFENSE,CMPLYR\r
2622 ;OUTPUT PARM: CARRY IS SET FOR COMPUTER ON OFFENSE\r
2623 ;             CLEAR OTHERWISE\r
2624 ;\r
2625 ;REGISTER USED: A\r
2626 ;\r
2627 OFENSE: LDA PLYR1               ;IN ONE PLAYER MODE?\r
2628         BEQ 10$                 ;NO\r
2629         LDA OFFENS              ;COMPUTER ON OFFENSE?\r
2630         CMP CMPLYR\r
2631         BEQ 20$                 ;CARRY IS SET\r
2632 10$:    CLC\r
2633 20$:    RTS\r
2634 DEFENS: LDA PLYR1               ;IN ONE PLAYER MODE?\r
2635         BEQ 20$                 ;NO\r
2636         LDA OFFENS              ;COMPUTER ON DEFENSE\r
2637         CMP CMPLYR\r
2638         BEQ 20$                 ;NO\r
2639         SEC                     ;YES\r
2640         RTS\r
2641 20$:    CLC\r
2642         RTS\r
2643 \f\r
2644         .SBTTL BOUNDARY CHECK\r
2645         \r
2646 ;BLOCK NAME:    BCHECK\r
2647 ;BLOCK TYPE:    SUBROUTINE\r
2648 ;BLOCK DESCRIPTION:     WILL DETERMINE IF VALUE IN A\r
2649 ;                       IS OUT OF BOUNDS AND SET CARRY\r
2650 ;                       IF SO. OTHERWISE CARRY IS RESET\r
2651 ;\r
2652 ;INPUT PARAMS:  H OR V POS IN A\r
2653 ;OUTPUT PARAMS: CARRY SET=OUT OF BOUNDS\r
2654 ;REGISTERS USED: A\r
2655 ;STACK USED:    NONE\r
2656 ;\r
2657 BCHECK: CMP I,08\r
2658         BCC 10$                 ;OUT OF BOUNDS\r
2659         CMP I,0F0\r
2660         RTS                     ;CARRY SET OR RESET PROPERLY\r
2661 10$:    SEC                     ;SET CARRY\r
2662         RTS\r
2663 BVCHEK: CMP I,10\r
2664         BCC 10$                 ;OUT OF BOUNDS\r
2665         CMP I,0F8\r
2666         RTS                     ;CARRY SET OR RESET PROPERLY\r
2667 10$:    SEC                     ;SET CARRY\r
2668         RTS\r
2669         .PAGE\r
2670         .SBTTL MOVE BALL WITH FIELDER & THROW\r
2671         \r
2672 ;BLOCK NAME:    THROW\r
2673 ;BLOCK TYPE:    SUBROUTINE\r
2674 ;BLOCK DESCRIPTION:     THROW WILL CHECK THE DEFENSIVE\r
2675 ;                       PLAYERS PUSH BUTTON TO SET IF IT HAS\r
2676 ;                       BEEN PUSHED YET. IF SO HE WILL RESET\r
2677 ;                       THE FLDFLG, SET THE THROFL, BALL SPEED\r
2678 ;                       & ANGLE, & RETURN. OTHER WISE HE WILL\r
2679 ;                       MOVE THE BALL WITH PLAYER HASBAL\r
2680 ;\r
2681 ;INPUT PARAMS:  PUSH BUTTONS & HASBALL\r
2682 ;OUTPUT PARAMS: BALFLG & BALL POSITION, SPEED & ANGLE\r
2683 ;REGISTERS USED:        A,X,Y\r
2684 ;STACK USED:    NONE\r
2685 ;SUBRT'S USED:  BUTTON\r
2686 ;\r
2687 THROW:  BIT ATRACT              ;GAME MODE?\r
2688         BPL 4$                  ;NO\r
2689         JSR DEFENS\r
2690         BCS 4$\r
2691         JMP 20$                 ;YES\r
2692 4$:     LDX HASBAL              \r
2693         TXA\r
2694         SEC\r
2695         SBC I,<SSTOP*2>+1       ;INFIELD OR OUTFIELD\r
2696         BPL 13$                 ;OUTFIELD\r
2697         LDA FSTFLD              ;INFIELD\r
2698         LSR                     ;FIRST FIELDING OF BALL?\r
2699         BEQ 10$                 ;YES-LOOK FOR FORCE\r
2700         TXA                     ;NO-ANYONE COMING THIS WAY? I DON'T KNOW!!\r
2701         LSR\r
2702         SEC\r
2703         SBC I,CATCHER\r
2704         BMI 18$                 ;PITCHER (SHOULDNT HAPPEN)\r
2705         BNE 1$                  ;IF NOT CATCHER\r
2706         LDA I,4                 ;CATCHER IS AT HOME\r
2707         BNE 2$                  ;ALWAYS\r
2708 1$:     CMP I,SSTOP-CATCHER     ;SHORTSTOP?\r
2709         BNE 2$                  ;NO\r
2710         LDA I,SCNDB-CATCHER     ;YES, 2ND BASE IS OK\r
2711 2$:     LDY I,3                 ;ANY ONE HEADING THIS WAY? \r
2712 3$:     CMP AY,MOVE\r
2713         BNE 5$                  ;NO\r
2714         TYA                     ;YES, WE HAVE A SUCKER\r
2715         ASL                     ;MOVE TOWARD HIM\r
2716         ADC I,BATTER*2\r
2717         TAY\r
2718         LDA AY,HPOSH\r
2719         STA AX,HGOAL\r
2720         LDA AY,VPOS\r
2721         STA AX,VGOAL\r
2722         BNE 30$\r
2723 5$:     DEY\r
2724         BPL 3$\r
2725 10$:    LDA FORCE               ;LOOK FOR FORCE BASE\r
2726         BEQ 18$                 ;NO FORCES\r
2727         LDY I,1                 ;PICK HIGHEST BASE\r
2728 11$:    LSR\r
2729         BEQ 12$\r
2730         INY\r
2731         BNE 11$\r
2732 12$:    TYA                     ;BASE OF FORCE\r
2733         AND I,3                 ;MAKE HOME LOOK LIKE BASE 0\r
2734         CLC\r
2735         ADC I,CATCHER           ;MAKE PLAYER INDEX\r
2736         ASL\r
2737         CMP I,SCNDB*2           ;SECOND BASEMAN?\r
2738         BNE 17$                 ;NO     \r
2739         CMP HASBAL              ;DOES HE HAVE BALL?\r
2740         BNE 17$                 ;NO\r
2741         LDA I,SSTOP*2           ;YES, THROW TO SHORTSTOP\r
2742 17$:    CMP HASBAL              ;DOES HE HAVE BALL?\r
2743         BNE 19$                 ;NO\r
2744         SBC I,<CATCHER*2>       ;YES, RACE HIM TO BAG\r
2745         TAY\r
2746         LDA AY,BGOALH\r
2747         STA AX,HGOAL\r
2748         LDA AY,BGOALV\r
2749         STA AX,VGOAL\r
2750         BNE 30$\r
2751 19$:    STA TOBALX\r
2752         BNE 25$                 ;ALWAYS\r
2753 13$:    LDY I,2                 ;LOOK FOR HIGHEST BASE OBTAINED\r
2754         LDA MOVE+3\r
2755         BPL 14$\r
2756         EOR I,0FF\r
2757 14$:    CMP AY,MOVE\r
2758         BCS 15$                 ;THIS ONE HIGHER\r
2759         LDX AY,MOVE\r
2760         BMI 15$\r
2761         TXA\r
2762 15$:    DEY\r
2763         BPL 14$\r
2764         TAY                     ;THIS IS HIGH BASE OBTAINED\r
2765         BNE 12$\r
2766 18$:    LDA I,PITCHER*2         ;RETURN BALL TO PITCHER\r
2767         STA TOBALX\r
2768         BNE 25$\r
2769 20$:    LDA OFFENS\r
2770         EOR I,2                 ;GET DEFENSE\r
2771         TAX\r
2772         JSR BUTTON\r
2773         BEQ 30$                 ;THROW BUTTON NOT PUSHED YET\r
2774 25$:    LDA I,FLDFLG?0FF        ;RESET FIELDED FLAG\r
2775         AND BALFLG\r
2776         ORA I,THROFL            ;SET THROW FLAG\r
2777         STA BALFLG\r
2778         LDA I,0                 ;SET UP THROW SPEED\r
2779         STA SPEED\r
2780         STA FLDCTL              ;RESET TBALL CONTROL\r
2781         STA RUNPLY              ;RESET RUNS/PLAY\r
2782 ;\r
2783 ;\r
2784         RTS\r
2785 30$:    LDX HASBAL              ;MOVE BALL WITH PLAYER\r
2786         LDA AX,HPOSH\r
2787         STA A,BHPOSH\r
2788         LDA AX,VPOS\r
2789         STA A,BVPOS\r
2790         DEC THRTMR              ;HAS BALL BEEN THROWN FOR 6 SECOND?\r
2791         BNE 35$                 ;YES!\r
2792         LDA I,1                 ;NO!\r
2793         STA CLK32S              ;CAUSE MASTER PLAY TIMER TO TIMEOUT\r
2794 35$:    RTS\r
2795 \f\r
2796         .SBTTL BALL THROWN MOTION\r
2797         \r
2798 ;BLOCK NAME:    BALMOV\r
2799 ;BLOCK TYPE:    SUBROUTINE\r
2800 ;BLOCK DESCRIPTION:     BALMOV WILL MOVE THE BALL UNDER\r
2801 ;                       TBALL CONTROL AT DOUBLE PLAYER MOTION\r
2802 ;                       SPEED LIMIT\r
2803 ;\r
2804 ;INPUT PARAMS:  THINC TVINC\r
2805 ;OUTPUT PARAMS: BHPOSH,BVPOS\r
2806 ;REGISTERS USED: A\r
2807 ;SUBROUTINES USED: TBALL\r
2808 ;STACK USED:    NONE\r
2809 ;\r
2810 BALMOV: LDA OFFENS\r
2811         EOR I,2                 ;GET DEFENSE NUMBER\r
2812         TAX\r
2813         JSR TBALL               ;MOVE BALL ACCORDING TO TBALL\r
2814         LDA THINC\r
2815         STA TEMP1\r
2816         LDA THINC+1\r
2817         JSR LSHFT2              ;4* H INCREMENTS\r
2818         STA TEMP2\r
2819         LDA A,BHPOSL            ;INCREMENT H POS OF BALL\r
2820         CLC\r
2821         ADC TEMP1\r
2822         STA A,BHPOSL\r
2823         LDA A,BHPOSH\r
2824         ADC TEMP2\r
2825         JSR BCHECK\r
2826         BCS 10$                 ;OUT OF BOUNDS\r
2827         STA A,BHPOSH\r
2828 10$:    LDA TVINC               ;4* V INCREMENT\r
2829         STA TEMP1\r
2830         LDA TVINC+1\r
2831         JSR LSHFT2\r
2832         STA TEMP2               ;INCREMENT V POS OF BALL\r
2833         LDA A,BVPOSL\r
2834         CLC\r
2835         ADC TEMP1\r
2836         STA A,BVPOSL\r
2837         LDA A,BVPOS\r
2838         ADC TEMP2\r
2839         JSR BVCHEK\r
2840         BCS 20$                 ;OUT OF BOUNDS\r
2841         STA A,BVPOS\r
2842 20$:    RTS\r
2843         .PAGE\r
2844         .SBTTL FOUL BALL CHECK\r
2845         \r
2846 ;BLOCK NAME:    FOULCK\r
2847 ;BLOCK TYPE:    SUBROUTINE\r
2848 ;BLOCK DESCRIPTION:     FOULCK WILL DETERMINE IF THE BALL IS\r
2849 ;                       IN FOUL TERRITORY AND SET FOULD IN BALFLG IF SO\r
2850 ;\r
2851 ;INPUT PARAMS:  BVPOS,BHPOSH\r
2852 ;OUTPUT PARAMS: CARY SET=FOUL\r
2853 ;REGISTERS USED: A,X\r
2854 ;STACK USED:    NONE\r
2855 ;\r
2856 FOULCK: LDA FAIR\r
2857         BNE 30$                 ;BALL HAS ALREADY BOUNCED FAIR\r
2858         LDA A,BHPOSH            ;GET HORIZONTAL BALL POSITION\r
2859         SEC\r
2860         SBC I,1C                ;SUBTRACT AREA BEHING PLATE\r
2861         BCC 20$                 ;IF NEGATIVE BALL IS FOUL\r
2862         STA TEMP1               ;SAVE IT\r
2863         LDA A,BVPOS             ;VERT POSITION\r
2864         SBC I,4\r
2865         BPL 10$\r
2866         CLC\r
2867         EOR I,0FF               ;FOLD FIELD OVER\r
2868         ADC I,1\r
2869 10$:    CLC\r
2870         ADC TEMP1               ;ADD HORIZONTAL\r
2871         BCS 30$\r
2872         BMI 30$\r
2873 20$:    SEC                     ;SET CARRY FOR FOUL\r
2874         RTS\r
2875 30$:    CLC                     ;CLEAR CARRY FOR FAIR\r
2876         RTS\r
2877         .PAGE\r
2878         .SBTTL CHECK BASES\r
2879         \r
2880 ;BLOCK NAME:    CKBASE\r
2881 ;BLOCK TYPE:    SUBROUTINE\r
2882 ;BLOCK DECRIPTION:      THIS ROUTINE WILL CHECK THE RUNNERS\r
2883 ;                       PROGRESS AND DETERMINE IF THEY HAVE\r
2884 ;                       REACHED A BASE. IF SO, THEY WILL\r
2885 ;                       INDICATE THE CURRENT BASE # IN\r
2886 ;                       THE 4 BYTE ARRAY BASE. IF IT IS DETERMINE\r
2887 ;                       THAT A BASE WAS REACHED WITHOUT\r
2888 ;                       THE PRIOR BASE BEING TOUCHED, THEN THE\r
2889 ;                       MINUS FLAG IS SET ALONG WITH THE BASE\r
2890 ;                       MISSED IN THE HIGH NIBBLE.\r
2891 ;                       WILL ALSO UPDATE FORCE CONDITION\r
2892 ;\r
2893 ;INPUT PARAMS:  POSITIONS OF RUNNERS BASE (4 BYTES)\r
2894 ;OUTPUT PARAMS: BASE,FORCE\r
2895 ;REGISTERS USED: A,X,Y\r
2896 ;STACK USED:    NONE\r
2897 ;SUBROUTINE USED: BASCOL\r
2898 ;\r
2899 CKBASE: LDA MOVE\r
2900         BMI 9$\r
2901 1$:     LDA BASE                ;GET OLD BASE #\r
2902         STA TEMP1               ;SAVE IT\r
2903         LDX I,BATTER*2\r
2904         JSR BASCOL              ;CHECK FOR COLLISION\r
2905         BEQ 4$                  ;NO COLLISION\r
2906         SEC\r
2907         STA TEMP2               ;SAVE IT\r
2908         SBC TEMP1               ;DIFFERENCE\r
2909         BEQ 4$\r
2910         LSR\r
2911         BEQ 10$                 ;IT'S ONE, SO EVERYTHING OK\r
2912         CMP I,2\r
2913         BNE 5$\r
2914         LDA TEMP1\r
2915 4$:     BEQ CKOTHR\r
2916 5$:     LDX I,0                 ;MISSED A BASED\r
2917         INC MISSED\r
2918         INC BATOUT              ;BATTER IS OUT\r
2919         JSR PUTOUT\r
2920         INC OUTS\r
2921 9$:     BNE CKOTHR\r
2922 10$:    LDA TEMP2\r
2923         STA BASE\r
2924         LDY I,0                 ;REMOVE FORCES\r
2925         STY FORCE\r
2926         CMP I,4                 ;DID HE SCORE\r
2927         BNE 15$                 ;NO\r
2928         JSR INCRUN              ;YES, UPDATE SCORE\r
2929         LDY OFFENS              ;CHANGE PICTURE TO RUN TO DUGOUT\r
2930         BNE 11$\r
2931         LDA I,48\r
2932         BNE 12$\r
2933 11$:    LDA I,88\r
2934 12$:    STA A,MOBJ+<BATTER*2>   ;MOVE HIM TO DUGOUT\r
2935         LDA I,HDUGO\r
2936         STA A,HGOAL+<BATTER*2>\r
2937         LDA I,VDUGO\r
2938         STA A,VGOAL+<BATTER*2>\r
2939         LDA I,PLYEND            ;END PLAY\r
2940         ORA BALFLG\r
2941         STA BALFLG\r
2942         LDA I,0FF               ;TURN HIM INTO DRONE\r
2943         STA MOVE\r
2944         BNE CKOTHR\r
2945 15$:    LDA FSTFLD              ;BALL FIELDED?\r
2946         BNE 20$                 ;YES\r
2947         LDA MOVE                ;DRONE?\r
2948         BEQ CKOTHR              ;NO\r
2949         INC MOVE                ;YES, MOVE HIM TO NEXT BASE\r
2950         LDA MOVE\r
2951         AND I,1\r
2952         BNE 16$\r
2953         LDA A,MOBJ+<BATTER*2>   ;CHANGE PICTURE OF DRONE AT 1ST & 3RD\r
2954         EOR I,80\r
2955         STA A,MOBJ+<BATTER*2>\r
2956 16$:    LDA MOVE\r
2957         ASL\r
2958         TAX\r
2959         LDA AX,BGOALH           ;SET UP NEW GOALS\r
2960         STA A,HGOAL+<BATTER*2>\r
2961         LDA AX,BGOALV\r
2962         STA A,VGOAL+<BATTER*2>\r
2963         BNE CKOTHR\r
2964 20$:    LDA I,0                 ;STOP DRONE BATTER\r
2965         STA MOVE\r
2966 CKOTHR: LDX I,<BATTER*2>+2      ;START WITH 1ST RUNNER\r
2967         LDY I,1\r
2968 1$:     LDA AY,MOVE\r
2969         BMI 50$\r
2970         BEQ 50$\r
2971         JSR BASCOL\r
2972         BEQ 50$                 ;NOT TOUCHING A BASE\r
2973         CMP AY,BASE             ;SAME BASE\r
2974         BEQ 50$\r
2975         STA AY,BASE\r
2976         CMP I,4\r
2977         BNE 20$\r
2978         LDA I,0FF               ;SCORED!\r
2979         STA AY,MOVE\r
2980         LDA I,0\r
2981         STA AY,BASE\r
2982         LDA AX,MOBJ             ;FLIP PICTURE\r
2983         EOR I,80\r
2984         STA AX,MOBJ\r
2985         LDA I,HDUGO             ;SEND HIM TO DUGOUT\r
2986         STA AX,HGOAL\r
2987         LDA I,VDUGO\r
2988         STA AX,VGOAL\r
2989         STX TEMP1\r
2990         JSR INCRUN\r
2991         LDX TEMP1\r
2992         JMP 50$\r
2993 20$:    CMP I,3                 ;3RD?\r
2994         BNE 30$                 ;NO\r
2995         LDA AX,MOBJ             ;YES, FLIP PICTURE\r
2996         EOR I,80\r
2997         STA AX,MOBJ\r
2998 30$:    LDA FSTFLD\r
2999         BNE 45$                 ;STOP RUNNERS\r
3000         LDA AY,BASE             ;MOVE'M ALONG\r
3001         CLC\r
3002         ADC I,1\r
3003         STA AY,MOVE\r
3004         STY TEMP1\r
3005         ASL\r
3006         TAY\r
3007         LDA AY,BGOALH           ;UPDATE GOALS\r
3008         STA AX,HGOAL\r
3009         LDA AY,BGOALV\r
3010         STA AX,VGOAL\r
3011         LDY TEMP1\r
3012         BNE 50$                 ;ALWAYS\r
3013 45$:    LDA I,0                 ;YES\r
3014         STA AY,MOVE             ;STOP RUNNER AT BASE\r
3015 50$:    INY\r
3016         INX\r
3017         INX\r
3018         CPY I,4                 ;DONE?\r
3019         BEQ 55$\r
3020         JMP 1$\r
3021 55$:    LDA FORCE\r
3022         BEQ CF.RET\r
3023         LDA BASE                ;BATTER ON?\r
3024         BNE CF.10               ;YEP - NO FORCES\r
3025         LDX I,1\r
3026         STX TEMP1               ;CONVENT\r
3027         LDY I,2\r
3028 C.FORCE:LDA ZX,BASE\r
3029         CMP TEMP1               ;NEXT BASE OCCUPIED\r
3030         BNE CF.15               ;NOT YET\r
3031         TYA                     ;YES\r
3032         ORA FORCE               ;UPDATE FORCE\r
3033         STA FORCE\r
3034         TYA\r
3035         ASL\r
3036         TAY\r
3037         LDA I,3                 ;DONE?\r
3038         CMP TEMP1\r
3039         BEQ CF.RET              ;YES\r
3040         INC TEMP1               ;NEXT BASE\r
3041         LDX I,1\r
3042         BNE C.FORCE             ;ALWAYS\r
3043 CF.10:  LDA I,0                 ;TURN OFF FORCES\r
3044         BEQ CF.20\r
3045 CF.15:  INX\r
3046         CPX I,4\r
3047         BNE C.FORCE\r
3048         LDX TEMP1\r
3049         LDA I,0FE\r
3050 10$:    DEX\r
3051         BEQ 15$\r
3052         ASL\r
3053         BNE 10$\r
3054 15$:    EOR I,0FF\r
3055         AND FORCE\r
3056 CF.20:  STA FORCE\r
3057 CF.RET: RTS\r
3058         .PAGE\r
3059         .SBTTL INCREMENT RUNS\r
3060 ;BLOCK NAME:    INCRUN\r
3061 ;BLOCK TYPE:    SUBROUTINE\r
3062 ;DESCRIPTION:   INCREMENTS RUNS\r
3063 ;\r
3064 ;REGS USED:     A,X\r
3065 ;\r
3066 INCRUN: BIT ATRACT              ;GAME MODE?\r
3067         BPL 10$                 ;NO, RETURN\r
3068         LDX OFFENS              ;INCREMENT RUNS\r
3069         LDA ZX,RUNS\r
3070         CLC\r
3071         SED\r
3072         ADC I,1\r
3073         CLD\r
3074         STA ZX,RUNS\r
3075         INC RUNPLY\r
3076         LDA I,0B0               ;A BIG CHEER\r
3077         STA CHEER\r
3078         INC RUNING\r
3079         LDA I,30                ;ROL OVER\r
3080         CMP RUNING\r
3081         BNE 10$\r
3082         LDA I,1C\r
3083         STA RUNING\r
3084 10$:    RTS\r
3085         .PAGE\r
3086         .SBTTL INCREMENT INNINGS PAID FOR\r
3087 ;BLOCK NAME: UPING\r
3088 ;BLOCK TYPE: SUBROUTINES\r
3089 ;DESCRIPTION: INCREMENT INNING PAID FOR\r
3090 ;REGS USED: A\r
3091 ;\r
3092 UPING:  LDA ININGS\r
3093         CMP I,99                ;MAX OUT INNINGS AT 99\r
3094         BEQ 10$\r
3095         CLC\r
3096         SED\r
3097         ADC I,1                 ;INCREMENT IN DECIMAL\r
3098         STA ININGS\r
3099         CLD\r
3100 10$:    RTS\r
3101         .PAGE\r
3102         .SBTTL BASE COLLISION\r
3103 ;BLOCK NAME: BASCOL\r
3104 ;BLOCK TYPE: SUBROUTINE\r
3105 ;BLOCK DESCRIPTION: BASCOL WILL DETERMINE IF A GIVEN\r
3106 ;       MOTION OBJECT IS IN CONTACT WITH A BASE\r
3107 ;       IF SO, THE NUMBER OF THE BASE (1 TO 4) IS\r
3108 ;       RETURNED IN THE ACCUMULATOR.\r
3109 ;       OTHERWISE 0 IS RETURNED\r\r
3110 ;INPUT PARAMS:  X=INDEX TO MOTION OBJECT\r
3111 ;OUTPUT PARAMS: A=BASE COLLIDED WITH, ELSEP A=0\r
3112 ;REGISTERS USED: A (X USED BY NOT MODIFIED)\r
3113 ;STACK USED: NONE\r
3114 ;\r
3115 BASCOL: LDA AX,HPOSH            ;BET HORIZONTAL POSITION\r
3116         SEC\r
3117         SBC I,54                ;CHECK FOR 1 ST OR 3 RD\r
3118         BCC 30$                 ;MIGHT BE AT HOME\r
3119         CMP I,BTPROX            ;CLOSE ENOUGH?\r
3120         BCS 40$                 ;NO-MIGHT BE SECOND BASE\r
3121         LDA AX,VPOS\r
3122         SBC I,41                ;CHECK FIRST BASE\r
3123         BCC B.NO                ;RIGHT OF FIRST BASE\r
3124         CMP I,BTPROX-4\r
3125         BCS 10$                 ;LEFT OF FIRST-CHECK SECOND\r
3126         LDA I,1                 ;HIT FIRST!\r
3127         BNE B.RTRN\r
3128 10$:    SBC I,7B\r
3129         CMP I,BTPROX-4\r
3130         BCS B.NO                ;NOT ON ANY BASE\r
3131         LDA I,3                 ;HIT 3 RD\r
3132         BNE B.RTRN\r
3133 30$:    LDA AX,HPOSH            ;CHECK HOME\r
3134         SBC I,17\r
3135         BMI B.NO                ;BEHIND HOME (WHAT IS HE, A CATCHER?)\r
3136         CMP I,BTPROX\r
3137         BCS B.NO                ;BETWEEN HOME & 3RD OR 1 ST\r
3138         LDA AX,VPOS             ;GET VERTICAL POSITION\r
3139         SBC I,7B\r
3140         BMI B.NO                ;OFF RIGHT OF HOME\r
3141         CMP I,BTPROX-4\r
3142         BCS B.NO                ;OFF LEFT OF HOME\r
3143         LDA I,4                 ;HIT HOME\r
3144         BNE B.RTRN\r
3145 40$:    SBC I,40                ;CHECK SECOND\r
3146         BMI B.NO                ;NOT THERE EITHER\r
3147         CMP I,BTPROX-4\r
3148         BCS B.NO                ;OVERAN SECOND!\r
3149         LDA AX,VPOS\r
3150         SBC I,7C\r
3151         BMI B.NO                ;OFF RIGHT OF SECOND\r
3152         CMP I,BTPROX\r
3153         BCS B.NO                ;OFF LEFT OF 2 ND\r
3154         LDA I,2\r
3155         BNE B.RTRN\r
3156 B.NO:   LDA I,0                 ;INDICATE NO COLLISION\r
3157 B.RTRN: RTS\r
3158         .PAGE\r
3159         .SBTTL TAG\r
3160 ;BLOCK NAME: TAG\r
3161 ;BLOCK TYPE: SUBROUTINE\r
3162 ;BLOCK DESCRIPTION: TAG WILL CHECK THE PLAYER\r
3163 ;       WHO HAS THE BALL AGAINST THE RUNNERS ON\r
3164 ;       BASE & THE BATTER. IF A COLLISION OCCURRS\r
3165 ;       THE X REGISTER WILL HAVE THE MOTION OBJECT\r
3166 ;       INDEX TO THE RUNNER TAGGED. OTHERWISE\r
3167 ;       X WILL BE ZERO\r
3168 ;INPUT PARAMS: POSITIONS OF HASBALL FIELDER & RUNNERS\r
3169 ;OUTPUT PARAMS: X=INDEX TO RUNNER TAGGED\r
3170 ;REGISTERS USED: A,X,Y\r
3171 ;STACK USED: NONE\r
3172 ;\r
3173 TAG:    LDY HASBAL              ;WHO HAS THE BALL?\r
3174         BEQ T.RET               ;NO ONE HAS THE BALL?\r
3175 1$:     LDX I,BATTER*2          ;START WITH BATTER\r
3176 10$:    LDA AX,HPOSH\r
3177         BEQ 40$                 ;NOT ON BASE\r
3178         SEC\r
3179         SBC AY,HPOSH            ;GET DIFFERENCE HORIZ\r
3180         BCS 11$                 ;IF POS, BR.\r
3181         EOR I,0FF               ;ABS VALUE\r
3182         ADC I,1\r
3183 11$:    CMP I,7                 ;CHECK PROXIMITY\r
3184         BCS 40$                 ;NO COLLISION\r
3185         LDA AX,VPOS             ;VERT POS OF RUNNER\r
3186         SEC\r
3187         SBC AY,VPOS             ;DIFFERENCE\r
3188         BCS 12$                 ;IF POS BR\r
3189         EOR I,0FF\r
3190         ADC I,1\r
3191 12$:    CMP I,7\r
3192         BCC T.RET               ;A COLLISION - RETURN W/NEWS\r
3193 40$:    INX\r
3194         INX\r
3195         CPX I,<<BATTER+3>*2>+1\r
3196         BCC 10$                 ;CHECK NEXT RUNNER\r
3197         LDX I,0                 ;NO COLLISIONS\r
3198 T.RET:  RTS\r
3199 \f\r
3200         .SBTTL RUN\r
3201         \r
3202 ;BLOCK NAME:    RUN\r
3203 ;BLOCK TYPE:    SUBROUTINE\r
3204 ;BLOCK DESCRITPION:     RUN WILL ADVANCE ALL RUNNERS\r
3205 ;\r
3206 ;INPUT PARMS:   ARRAY BASE (4 BYTES)\r
3207 ;OUTPUT PARMS:  H & V POS OF RUNNERS\r
3208 ;REGISTER USED: A,Y,X\r
3209 ;STACK USED:    NONE\r
3210 ;SUBS USED:     FOULCK,DIRECT,SPDLIM,UDTHV,FLDLEG\r
3211 ;\r
3212 RUN:    LDA FSTFLD\r
3213         BNE 1$\r
3214         LDA BATOUT              ;BATTER OUT?\r
3215         BNE 1$                  ;YES\r
3216         JSR FOULCK\r
3217         BCS 55$                 ;IF BALL NOT FOUL\r
3218 1$:     LDY I,3                 ;START WITH LAST RUNNER\r
3219         LDX I,<BATTER+3>*2\r
3220 5$:     LDA AY,MOVE\r
3221         BEQ 50$                 ;DON'T MOVE THIS GUY\r
3222         STY TEMP3\r
3223         JSR DIRECT\r
3224         LDA THINC\r
3225         ORA THINC+1\r
3226         ORA TVINC\r
3227         ORA TVINC+1\r
3228         BNE 30$\r
3229         STA AY,MOVE             ;STOP HIM\r
3230         BEQ 50$\r
3231 30$:    LDA I,0\r
3232         JSR SPDLIM              ;LIMIT SPEED\r
3233         JSR UPDTHV              ;UPDATE POSITION\r
3234         JSR FLDLEG              ;MOVE HIS LEGS\r
3235         LDY TEMP3\r
3236 50$:    DEX\r
3237         DEX\r
3238         DEY\r
3239         BPL 5$\r
3240 55$:    RTS\r
3241         .PAGE\r
3242         .SBTTL AUTOMATIC BALL MOVEMENT\r
3243 ;BLOCK NAME:    AUTOBL\r
3244 ;BLOCK TYPE:    SUBROUTINE\r
3245 ;DESCRIPTION:   WILL DIRECT THE BALL TO PLAYER SPECIFIED IN TOBALL.\r
3246 ;\r
3247 ;INPUT PARAMS:  TBALL INPUT, BALL POSITION, TOBALL\r
3248 ;OUTPUT PARAMS: BALL POSITION ACC=0 WHEN DONE\r
3249 ;SUBS USED:     DIRECT, SPDLIM, UPDTHV\r
3250 ;STACK USAGE:   NONE\r
3251 ;\r
3252 AUTOBL: LDX TOBALX              ;WHO DO WE MOVE BALL TO?\r
3253         LDA AX,HPOSH            ;SET UP GOAL\r
3254         STA A,HGOAL+1C\r
3255         LDA AX,VPOS\r
3256         STA A,VGOAL+1C\r
3257         LDX I,1C                ;BALL INDEX\r
3258         JSR DIRECT\r
3259         LDA I,10                ;BALL SPEED\r
3260         JSR SPDLIM\r
3261         LDA TVINC\r
3262         ORA TVINC+1\r
3263         ORA THINC\r
3264         ORA THINC+1\r
3265         BEQ 10$\r
3266         JSR UPDTHV\r
3267         LDA I,1\r
3268 10$:    RTS\r
3269 CKS5:   .BYTE 8E\r
3270         .PAGE\r
3271         .SBTTL PLAYFIELD\r
3272 ;\r
3273 ;BLOCK NAME:    PLYFLD\r
3274 ;BLOCK TYPE:    SUBROUTINE\r
3275 ;DESCRIPTION:   PLYFLD WILL FIRST BLANK THE SCREEN AND THEN WRITE OUT THE PLAYFIELD\r
3276 ;               BASED ON WHETHER PLAYER #1 OR #2 IS OFFENSE.\r
3277 ;INPUT PARAMS:  OFFENS\r
3278 ;OUTPUT PARAMS: PLAYFIELD (1000-13BF)\r
3279 ;REGISTER USED: A,X,Y\r
3280 ;STACK USAGE:   3 BYTES IN BASLIN LOCAL SUBROUTINE\r
3281 ;\r
3282 PLYFLD: LDA I,0                 ;SET UP TO CLEAR SCREEN\r
3283         STA OUTS\r
3284         STA BALLS\r
3285         STA STRIKE\r
3286         STA A,SFHPOS\r
3287         STA THPOS\r
3288         LDA OPTION              ;CHOOSE INFIELD SKILL\r
3289         AND I,3\r
3290         TAY\r
3291         LDA AY,SKILL\r
3292         STA INSPDX\r
3293         LDA I,10\r
3294         STA THPOS+1             ;INDIRECT ADDRESS\r
3295         LDA I,0\r
3296         LDX I,3\r
3297 1$:     LDY I,0FF\r
3298 2$:     STA NY,THPOS            ;START OF LOOP\r
3299         DEY\r
3300         BNE 2$\r
3301         STA NY,THPOS\r
3302         STA ZX,BASE             ;INIT BASE RUNNERS\r
3303         INC THPOS+1             ;NEXT 100 BYTES\r
3304         DEY\r
3305         DEX\r
3306         BMI 3$                  ;ALL DONE\r
3307         BNE 1$                  ;SECTORS 0,1,2\r
3308         LDY I,0BF               ;SECTOR 3\r
3309         BNE 2$                  ;***ALWAYS\r
3310 3$:     LDX OFFENS\r
3311         BNE 4$\r
3312         LDA I,12                ;STARTING LOCATION OFFENS #1\r
3313         STA THPOS\r
3314         LDA I,10\r
3315         STA THPOS+1\r
3316         BNE 5$                  ;***ALWAYS\r
3317 4$:     LDA I,1A                ;STARTING ADDRESS FOR OFFENSE #\r
3318         STA THPOS\r
3319         LDA I,12\r
3320         STA THPOS+1\r
3321 5$:     LDX I,14.               ;LOOP COUNT\r
3322         LDA I,1F                ;INCREMENT\r
3323         LDY I,03                ;STAMP # FOR BASELINE\r
3324         JSR BASLIN              ;SET UP LEFT FIELD FOUL LINE\r
3325         LDX OFFENS\r
3326         BNE 6$                  ;BRANCH FOR OFFENSE #2\r
3327         LDA I,12                ;STARTING ADDR FOR\r
3328         STA THPOS\r
3329         STA THPOS+1\r
3330         BNE 7$                  ;***ALWAYS\r
3331 6$:     LDA I,12                ;STARTING ADDR FOR OFFENSE #2\r
3332         STA THPOS\r
3333         LDA I,11\r
3334         STA THPOS+1\r
3335 7$:     LDX I,6                 ;LOOP COUNT\r
3336         LDA I,1F                ;INCREMENT\r
3337         LDY I,03                ;STAMP # FOR BASELINE\r
3338         JSR BASLIN              ;SET UP BASELINE 1ST-2ND\r
3339         LDX OFFENS\r
3340         BNE 8$                  ;OFFENSE #2 THEN BRANCH\r
3341         LDA I,05                ;STARTING ADDRESS OFFENSE #1\r
3342         STA THPOS\r
3343         LDA I,12\r
3344         STA THPOS+1\r
3345         BNE 9$                  ;***ALWAYS\r
3346 8$:     LDA I,0D                ;STARTING ADDRESS OFFENSE #2\r
3347         STA THPOS\r
3348         LDA I,10\r
3349         STA THPOS+1\r
3350 9$:     LDX I,14.               ;LOOP COUNT\r
3351         LDA I,21                ;INCREMENT\r
3352         LDY I,43                ;BASELINE STAMP #\r
3353         JSR BASLIN              ;SETUP RIGHT FIELD FOUL LINE\r
3354         LDA I,0D                ;LOW BYTE SAME FOR BOTH\r
3355         STA THPOS\r
3356         LDX I,11\r
3357         LDA OFFENS              ;BRANCH IF #1 OFFENSE\r
3358         BEQ 10$\r
3359         INX                     ;ELSE BUMP TO NEXT PAGE\r
3360 10$:    STX THPOS+1\r
3361         LDY I,43                ;STAMP #\r
3362         LDX I,06                ;LOOP COUNT\r
3363         LDA I,21                ;INCREMENT\r
3364         JSR BASLIN              ;SET UP BASELINE 2ND-3RD\r
3365         JSR DSTAT\r
3366 ;\r
3367 ;SET UP BASES\r
3368 ;\r
3369         LDX OFFENS              ;BASES FOR PLAYER #2\r
3370         BNE OFF2\r
3371         LDA I,04                ;3RD BASE\r
3372         STA 10EB\r
3373         LDA I,44\r
3374         STA 10EC\r
3375         LDA I,06                ;HOME PLATE\r
3376         STA 11C4\r
3377         LDA I,86\r
3378         STA 11E4\r
3379         LDA I,05                ;2ND BASE\r
3380         STA 11D3\r
3381         LDA I,85\r
3382         STA 11F3\r
3383         LDA I,84                ;1ST BASE\r
3384         STA 12CB\r
3385         LDA I,0C4\r
3386         STA 12CC\r
3387 ;\r
3388 ;SET UP TRIPLE-HR TARGETS\r
3389 ;\r
3390         LDA I,50                ;THERE HAS GOT TO BE A BETTER WAY\r
3391         STA 10BE\r
3392         STA 139E\r
3393         LDA I,0D0\r
3394         STA 103E\r
3395         STA 131E\r
3396         LDX I,60\r
3397         STX 105E\r
3398         STX 133E\r
3399         INX\r
3400         STX 107E\r
3401         STX 135E\r
3402         INX\r
3403         STX 109E\r
3404         STX 137E\r
3405         INX\r
3406         STX 119E\r
3407         INX\r
3408         STX 11BE\r
3409         INX\r
3410         STX 11DE\r
3411         INX     \r
3412         STX 11FE\r
3413         INX\r
3414         STX 121E\r
3415         INX\r
3416         STX 123E\r
3417         RTS\r
3418 OFF2:   LDA I,04                ;1ST BASE\r
3419         STA 10F3\r
3420         LDA I,44\r
3421         STA 10F4\r
3422         LDA I,45                ;2ND BASE\r
3423         STA 11CC\r
3424         LDA I,0C5\r
3425         STA 11EC\r
3426         LDA I,46                ;HOME PLATE\r
3427         STA 11DB\r
3428         LDA I,0C6\r
3429         STA 11FB\r
3430         LDA I,84                ;3RD BASE\r
3431         STA 12D3\r
3432         LDA I,0C4\r
3433         STA 12D4\r
3434 ;\r
3435 ;SET UP TARGETS\r
3436 ;\r
3437         LDA I,50\r
3438         STA 10A1\r
3439         STA 1381\r
3440         LDA I,0D0\r
3441         STA 1021\r
3442         STA 1301\r
3443         LDX I,0A0\r
3444         STX 1081\r
3445         STX 1361\r
3446         INX\r
3447         STX 1061\r
3448         STX 1341\r
3449         INX\r
3450         STX 1041\r
3451         STX 1321\r
3452         INX\r
3453         STX 1221\r
3454         INX\r
3455         STX 1201\r
3456         INX\r
3457         STX 11E1\r
3458         INX\r
3459         STX 11C1\r
3460         INX\r
3461         STX 11A1\r
3462         INX\r
3463         STX 1181\r
3464         RTS\r
3465 BASLIN: STA TEMP1                       ;SAVE INCREMENT\r
3466 1$:     TYA                             ;GET STAMP VALUE\r
3467         LDY I,0                         ;ZERO INDEX\r
3468         STA NY,THPOS\r
3469         DEX\r
3470         BEQ 5$                          ;IF DONE RETURN\r
3471         TAY                             ;SAVE STAMP #\r
3472         LDA TEMP1                       ;GET INCREMENT\r
3473         CLC\r
3474         ADC THPOS                       ;INC TO NEXT LOC\r
3475         STA THPOS\r
3476         BCC 1$\r
3477         INC THPOS+1\r
3478         BCS 1$                          ;***ALWAYS\r
3479 5$:     RTS\r
3480         .SBTTL INIT\r
3481 ;\r
3482 ;\r
3483 ;\r
3484 INIT:   LDA I,0\r
3485         STA MOVE\r
3486         STA BASE\r
3487         LDX I,MISSED-BALFLG\r
3488 12$:    STA ZX,BALFLG\r
3489         DEX\r
3490         BPL 12$\r
3491         JSR OFENSE              ;CARRY SET IF COMPUTER AT BAT\r
3492         LDA I,1\r
3493         STA FORCE               ;ALWAYS FORCE AT FIRST\r
3494         BCS 10$\r
3495         BIT ATRACT\r
3496         BMI 1$\r
3497 10$:    STA MOVE                ;DRONE BATTER IN A ATRACT\r
3498 1$:     LDA I,SLDVAL\r
3499         STA SLIDE\r
3500 ;\r
3501 ;TBALL CONTROL OF LEFT CENTER RIGHT\r
3502         LDA I,7*2\r
3503         STA FLDCTL\r
3504         LDA I,8*2\r
3505         STA FLDCTL+1\r
3506         LDA I,9*2\r
3507         STA FLDCTL+2\r
3508         LDA I,80                ;180 DEG FOR PLAYER #1 OFFENSE\r
3509         STA ANGLE\r
3510         LDY I,0D0               ;1ST BAT STAMP\r
3511         LDA OFFENS\r
3512         BNE 2$\r
3513         LDY I,10\r
3514 2$:     STY BSTMP\r
3515         LDX I,-1                ;ZAP CTLPTR\r
3516         STX CTLPTR\r
3517         STX CTLPTR+2\r
3518         STX SLOCK               ;LOCK OUT INTERRUPT ROUTINE\r
3519         LDY I,15                ;START AT END OF TABLE\r
3520         LDX I,15\r
3521 20$:    LDA AX,INITBL           ;SET UP POSITIONS\r
3522         STA AY,VGOAL-1\r
3523         DEX\r
3524         LDA AX,INITBL\r
3525         STA AY,HGOAL-1\r
3526         DEX\r
3527         DEY\r
3528         DEY\r
3529         BPL 20$\r
3530         LDA A,INITBL            ;BAT POSITION\r
3531         STA A,HPOSH\r
3532         LDA A,INITBL+1\r
3533         STA A,VPOS\r
3534         LDA A,INITBL+1C         ;BALL POS\r
3535         STA A,BHPOSH\r
3536         LDA A,INITBL+1D\r
3537         STA A,BVPOS\r
3538         LDX I,2                 ;SET UP PICTURE STAMPS\r
3539         LDA I,0CA               ;FIELDER 0\r
3540         LDY OFFENS\r
3541         BEQ 3$\r
3542         LDA I,0A\r
3543 3$:     LDY I,9                 ;9 FIELDERS\r
3544 5$:     STA AX,MOBJ\r
3545         INX\r
3546         INX\r
3547         DEY\r
3548         BNE 5$\r
3549         LDA I,0CC               ;BATTER IS MOBJ #10\r
3550         LDY OFFENS\r
3551         BEQ 7$\r
3552         LDA I,0C\r
3553 7$:     STA AX,MOBJ\r
3554         LDY I,1\r
3555 INIRUN: INX\r
3556         INX\r
3557         LDA AY,BASE             ;SET UP RUNNERS\r
3558         STA AY,MOVE             ;IN CASE ZERO, ZERO IT\r
3559         BEQ 14$\r
3560         AND I,0F                ;NO APPEALS AFTER PLAY OVER\r
3561         STA AY,BASE\r
3562         CLC\r
3563         ADC I,1\r
3564         STA AY,MOVE\r
3565         STY TEMP1\r
3566         ASL\r
3567         TAY\r
3568         LDA AY,BGOALH           ;SET UP RUNNERS GOALS\r
3569         STA AX,HGOAL\r
3570         LDA AY,BGOALV\r
3571         STA AX,VGOAL\r
3572         LDY TEMP1\r
3573         LDA AY,BASE\r
3574         SEC\r
3575         SBC I,1\r
3576         BNE 11$\r
3577         LDA I,48                ;1ST BASE\r
3578         STA AX,MOBJ\r
3579         LDA I,5C\r
3580         STA AX,HPOSH\r
3581         LDA I,45\r
3582         STA AX,VPOS\r
3583         BNE 13$                 ;NEXT\r
3584 11$:    SBC I,1\r
3585         BNE 12$\r
3586         LDA I,48                ;2ND BASE\r
3587         STA AX,MOBJ\r
3588         LDA I,9B\r
3589         STA AX,HPOSH\r
3590         LDA I,85\r
3591         STA AX,VPOS\r
3592         BNE 13$                 ;NEXT\r
3593 12$:    LDA I,0C8               ;3RD BASE\r
3594         STA AX,MOBJ\r
3595         LDA I,58\r
3596         STA AX,HPOSH\r
3597         LDA I,0BF\r
3598         STA AX,VPOS\r
3599 13$:    LDA OFFENS\r
3600         BEQ 14$\r
3601         LDA AX,MOBJ\r
3602         EOR I,0C0               ;FLIP FOR OFFENS=2\r
3603         STA AX,MOBJ\r
3604 14$:    INY\r
3605         CPY I,4\r
3606         BNE INIRUN\r
3607         INX\r
3608         INX\r
3609         LDA I,87                ;BALL IS MOTION OBJ #14\r
3610         LDY OFFENS\r
3611         BEQ 15$\r
3612         LDA I,47\r
3613 15$:    STA AX,MOBJ\r
3614         INX\r
3615         INX\r
3616         TYA\r
3617         STA AX,MOBJ             ;NO MOTION OBJECT #15\r
3618         LDA I,0\r
3619         STA SLOCK\r
3620         RTS\r
3621 ;LSHFT - LEFT SHIFT\r
3622 ;\r
3623 ;ENTRY  (A) = MSB\r
3624 ;       (TEMP1) = LSB\r
3625 ;EXIT   (A) = MSB\r
3626 ;       (TEMP1) = LSB\r
3627 LSHFT3: ASL TEMP1\r
3628         ROL\r
3629 LSHFT2: ASL TEMP1\r
3630         ROL\r
3631 LSHFT1: ASL TEMP1\r
3632         ROL\r
3633         RTS\r
3634 ;MULT - MULTIPLY INDEX BY A SIGNED NUMBER\r
3635 ;\r
3636 ;ENTRY  (A) = MULTIPLIER (SIGNED -128 TO 127)\r
3637 ;       (X) = MULTIPLICAND (0 TO 127)\r
3638 ;EXIT   (X) = LSB OF RESULT\r
3639 ;       (Y) = MSB OF RESULT\r
3640 ;USES   A,X,Y,TEMP1,(TEMP2,TEMP2+1)\r
3641 MULT:   LDY I,0\r
3642         STA TEMP2               ;SAVE OPERAND\r