-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFBCOMN.XX
253 lines (235 loc) · 9 KB
/
FBCOMN.XX
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
.SBTTL EQUATES
.GLOBL PTBL,PLTAB,FTAB,HTAB
.GLOBL MOOLAH,IRQ,RESET,START
RAM =0 ;0-FFF, 1K QUAD MAPPED
ALPHR =200 ;30 CHARS/ROW 200-27D
ALPHL =380 ;4 ROWS, 3 USEABLE
SCRFLD =1000 ;30 "COLUMNS" X 30 CHARS
MOBJ =13C0 ;DMA LOC FOR MOTION OBJ
HPICT =MOBJ
HVPOS =MOBJ+1
HHPOS =MOBJ+32.
BHPICT =HPICT+28. ;BALL
SFHPOS =2000 ;SCROLL FIELD H-OFFSET
OUT1 =2001 ;D7-D3 SPARE, D2-KICKER,D1-HIT,D0-WHISTLE
OUT2 =2002 ;D7,D6-UNUSED,D5-ATTRACT (BAR),D4-COIN CTR,D3-0-CROWD
OUT3 =2003 ;D7,D6-UNUSED,D5,D4-SPARE,D3-0 LED CATHODES
INTACK =3000 ;INTERUPT ACKNOWLEDGE
INPORT =4000 ;INPUT PORT FOR SWITCHES & COUNTERS
WTCHDG =5000 ;WATCHDOG TIMER RESET
PROG =6800 ;6K OF PROGRAM, ENDING AT 7FFF
SIDELN =3 ;SIDELINE AT BOTTOM
YARDNO =4 ;YARDLINE WITH "0" ON LEFT, NO ARROW
YARDAR =5 ;YARDLINE WITH "0" ON LEFT, ARROW TO LEFT
;6,7 ARE "1", 8,9 ARE "2", ETC. DOWN TO E,F ARE "5"
YARDSD =2 ;YARDLINE WITH SIDELINE
PTRT =40 ;"OR" IN 40 TO POINT RIGHT
ONTOP =80 ;"OR" IN 80 FOR TOP OF SCREEN
BLANK =0
YARDLN =10 ;YARDLINE, NO SIDELINE, IN RIGHT OF STAMP
FL =120. ;FIELD LENGTH IN YARDS, INCLUDING ENDZONES
BALLNO =14. ;BALL IS OBJECT #14.
PSPAUS =10. ;PAUSE BETWEEN BUTTON PUSHES (SECONDS)
S.SEL =0 ;STATE OF ZERO IS "SELECT"
S.PLAY =40 ;STATE OF 40 IS "PLAY"
S.PAUS =80 ;STATE OF 80 IS "PAUSE" BETWEEN PLAYS
M.BAN1 =0 ;FIRST BANNER
M.BAN2 =M.BAN1+1 ;SECOND BANNER
M.GO =M.BAN2+1 ;MESSAGE "GAME OVER"
M.OFF =M.GO+1 ; " "YOU ARE OFFENSE"
M.DEF =M.OFF+1 ; " "YOU ARE DEFENSE"
M.TKL =M.DEF+1 ; " "TACKLED"
M.TD =M.TKL+1 ; " "TOUCHDOWN"
M.INC =M.TD+1 ; " "INCOMPLETE"
M.INT =M.INC+1 ; " "INTERCEPTED"
M.TB =M.INT+1 ; " "TOUCHBACK"
M.SAF =M.TB+1 ; " "SAFETY"
M.OOB =M.SAF+1 ; " "OUT OF BOUNDS"
M.OS =M.OOB+1 ; " "OFF SIDES"
M.DOG =M.OS+1 ; " "DELAY OF GAME"
M.RDY =M.DOG+1 ; " "READY"
M.IC =M.RDY+1 ; " "INSERT COINS"
M.ECAT =M.IC+1 ; " "EACH COIN ADDS TIME"
M.SP =M.ECAT+1 ; " "SELECT PLAY"
M.GAO =M.SP+1 ; " "GAME ALMOST OVER"
M.ICTP =M.GAO+1 ; " "INSERT COINS TO KEEP PLAYING"
.SBTTL ZERO PAGE
INTCNT: .BLKB 1 ;COUNT OF INTERRUPTS
SYNC: .BLKB 1 ;SET TO 1 ONCE PER FRAME (3 FIELDS)
MOTDON: .BLKB 1 ;FLAG FOR IRQ 0=MOTUP SKIPPED, 1=MOTUP DONE
TOUT1: .BLKB 1 ;HOLDING CELL FOR OUT1 (SEE SOUND,TBALL)
INPUT: .BLKB 4 ;SWITCHES 0, COUNTERS 0, SWITCHES 2, COUNTERS 2
OTB: .BLKB 1 ;OLD VALUE OF TRACK-BALL COUNTERS
NEWTB: .BLKB 1 ;NEW VALUE OF TRACK-BALL CTR
.BLKB 2 ;OTB, NEWTB FOR #2
TBDIR: .BLKB 1 ;DIRECTION H0,V0,H2,V2 (D3-D0)
TBCTR =INPUT+1 ;TRACK BALL COUNTERS @ 1,3
;D7-D4 = VERTICAL COUNTER, D3-D0 = HORIZ COUNTER
$COINA =INPUT ;COINS IN D7
$LAM =INPUT ;SLAM @ SAME WORD
$LMBIT =20 ;IN BIT D5
OPTION =INPUT+2 ;OPTIONS IN 4 LSB
;FOR DEBUG: SW. BIT MEANING
;@OPTION 4 D3 ON-LOGO @ 50 YD. LINE, OFF-NO LOGO
; 3 D2 ON-CONSECUTIVE DELAY PENALITIES, OFF-ONE MAX
; 2 D1 ON-TACKLE TEST, OFF-REGULAR GAME
; 1 D0 ON-1:30/COIN,OFF-2 MINUTES
;ALL SWITCHES ASSERTED LOW
TEST =INPUT+2 ;ON D6
VBLANK =INPUT ;ON D6
SFDL: .BLKB 1 ;LOW BYTE OF SCROLL FIELD DISPLACEMENT (YARDS/8)
SFDH: .BLKB 1 ;HIGH BYTE OF SCROLL FIELD DISPLACEMENT (YARDS)
ADL: .BLKB 1 ;ADDRESS PTR (TO SCROLL FIELD)
ADH: .BLKB 1
WHISTL: .BLKB 1 ;WHISTLE SOUND TIMER (WARBLED BEEP)
THUD: .BLKB 1 ;HIT SOUND TIMER
CROWD: .BLKB 1 ;CROWD " VOLUME
BEEP: .BLKB 1 ;STEADY BEEP FOR 30-SEC WARNING
CHEER: .BLKB 2 ;USED IN CROWD-SOUND GENERATION
;FOLLOWING LOCATIONS USED BY COIN ROUTINE
$CCTIM: .BLKB 1 ;COIN CTR PULSE TIMER
$CNCT: .BLKB 1 ;COIN COUNT
$PSTSL: .BLKB 1 ;POST-COIN SLAM TIMER
$CNSTT: .BLKB 1 ;COIN SW STATUS
.BLKB 2 ;$PSTSL,$CNSTT FOR OTHER MECH.
$LMTIM: .BLKB 1 ;PRE-COIN SLAM TIMER
$INTCT =INTCNT ;USE EXISTING INTERRUPT COUNTER
SLOCK: .BLKB 1 ;SET TO LOCK OUT MOTION UPDATE IN VBLANK
FIELD: .BLKB 1 ;COUNTS FIELD IN A FRAME
DBSW: .BLKB 1 ;DE-BOUNCE SAVE WORD
SWSTAT: .BLKB 1 ;SWITCH STATUS PLAYER1
.BLKB 2 ;DBSW,SWSTAT FOR PLAYER2
LEDWD: .BLKB 3 ;LED'S FOR PLAYER1,BUTTONS,PLAYER2
CTLPTR: .BLKB 1 ;POINT TO CONTROLLED MAN (- IF NONE)
PSTIM: .BLKB 1 ;PLAY-SELECT TIMER
.BLKB 2 ;CTLPTR, PSTIM FOR #2
TBHD: .BLKB 1 ;TRACK-BALL H. DISPLACEMENT (1)
TBVD: .BLKB 1 ;TRACK-BALL V. DISPLACEMENT (1)
.BLKB 2 ;TBHP, TBVP FOR 2
IJ: .BLKB 1 ;BUCKET FOR INT.
J: .BLKB 1 ;BUCKET FOR MAINLINE
K: .BLKB 1 ; "
L: .BLKB 1 ; "
LIMIT: .BLKB 2 ;SPEED LIMIT
HABS: .BLKB 2 ;!HORIZ!
VABS: .BLKB 2 ;!VERT!
STPCLK: .BLKB 1 ;IF NON-ZERO, KEEP CLOCK STOPPED IN HUDDLE
ANMSK: .BLKB 1 ;3F OR 0, USED IN MESSAGE ROUTINE
ARDIR: .BLKB 1 ;ARROW DIRECTION BITS
Y10: .BLKB 1 ;YARDS/10
EZFLG: .BLKB 1 ;FLAG FOR ENDZONE
SCRSPD: .BLKB 1 ;SCROLL SPEED
SCRDIR: .BLKB 1 ;SCROLL DIRECTION
SCRYDS: .BLKB 1 ;YD LINE BEING DRAWN, USED BY REWRT
HASBAL: .BLKB 1 ;POINTS TO PLAYER WHO HAS BALL (- IF NONE)
ATRACT: .BLKB 1 ;+=ATTRACT, -= PLAY
STATE: .BLKB 1 ;STATE OF GAME; SELECT, PLAY, OR PAUSE
PAUST: .BLKB 1 ;PAUSE TIMER, 1 OR 6.4 SECONDS
MPSTIM: .BLKB 1 ;MASTER PLAY-SELECT TIMER, 10 SECONDS
INPLCE: .BLKB 1 ;# OF PLAYERS IN PLACE
OFFENS: .BLKB 1 ;POINTS TO BASE OF OFFENSE PLAYER
PLAYER: .BLKB 1 ;SAVE X -> PLAYER
OBJECT: .BLKB 1 ;SAVE X -> OBJECT
WPLAYR: .BLKB 1 ;"PLAYER" FOR WRTMES
SCRIMH: .BLKB 2 ;SCRIMMAGE LINE HORIZ POSN
SCRIMV: .BLKB 1 ;"VERT" POSN
REC1: .BLKB 1 ;ELIGIBLE RECEIVER (-=NONE)
OFSPDT: .BLKB 1 ;TIMER FOR OFFENSE SPEED ADVANTAGE
DOWN: .BLKB 1 ;DOWN #
DTG: .BLKB 2 ;DECIMAL # OF YARDS "TO GO"
WHYEND: .BLKB 1 ;CODE FOR END OF PLAY
;CODE SET BY MEANING
EC.NUL =0 ;EP.COM REST STATE, NOT ENDED
EC.SG =EC.NUL+1 ;GAME END ATT RACT, START GAME
EC.TKL =EC.SG+1 ;COLCHK BALL CARRIER TACKLED
EC.INC =EC.TKL+1 ;EXEC (BALL) PASS INCOMPLETE
EC.INT =EC.INC+1 ;COLCHK PASS INTERCEPTED
EC.OOB =EC.INT+1 ;EXEC BALL CARRIER OUT OF BOUNDS
EC.TDD =EC.OOB+1 ;CKGOAL TOUCH DOWN BY DEFENSE
EC.TDO =EC.TDD+1 ; " TOUCHDOWN BY OFFENSE
EC.SAF =EC.TDO+1 ; " SAFETY
EC.TB =EC.SAF+1 ; " TOUCHBACK
EC.OS =EC.TB+1 ;GAME OFF SIDES
EC.DOG =EC.OS+1 ;SELECT DELAY OF GAME
TARDY: .BLKB 1 ;PLAYER WHO LAST CAUSED "DELAY OF GAME"
POINTS: .BLKB 1 ;POINTS FOR THIS RESULTS, SET BY CKGOAL
WFLAG: .BLKB 1 ;GLOBAL FLAGS FOR "WAIT"
.REPT 0
BIT SET BY MEANING
--- ------ -------
D4 PASSQ* START PASS (*ALSO EXEC, IN ATTRACT)
D3 BALCOL PASS COMPLETE
D2 EXEC(BALL) SPECIAL OFFENSE SYNC FOR SNEAK
D1 EXEC(BALL) BALL SNAPPED,ENABLE DEFENSE,ALSO OFFENSE QB
D0 GAME SNAP BALL,ENABLE OFFENSE (EXCEPT QB)
.ENDR
ALT: .BLKB 1
MEN: .BLKB 1
FRAME: .BLKB 1 ;COUNT FRAMES (20 HZ)
RUNTIM: .BLKB 1 ;RUN CLOCK IF A 1, STOP IF 0
SECOND: .BLKB 1
MINUTE: .BLKB 1
SFTIM: .BLKB 1 ;SKIP-FRAME TIME, FOR DEBUG
AVVD: .BLKB 1 ;!VERT. DIFF!
AVHDL: .BLKB 1 ;!HORIZ. DIFF! LOW
AVHDH: .BLKB 1 ;! " " ! HI
;PLAYER CONTROL BLOCKS
PLAYNO: .BLKB 1 ;PLAY # FOR PLAYER1
.BLKB 2 ;DUMMY***, PLAYNO FOR 2
OMESL: .BLKB 1 ;OLD MESSAGE, LEFT
OSSTAT: .BLKB 1 ;OLD SWITCH STATUS, FOR PLAY-SELECT
OMESR: .BLKB 1 ;OLD MESSAGE, RIGHT
.BLKB 1 ;OSSTAT FOR #2
SCORE: .BLKB 4 ;2 BYTES EACH
;BELOW ARE OBJECT CONTROL BLOCKS
MCC: .BLKB 2 ;MAN-CONTROL-COUNTER (PSUEDO-PC)
.BLKB 28. ;OTHER 13 MEN, + BALL
OP: .BLKB 1 ;PRESENT OP-CODE IF < 16.
PARAM: .BLKB 1 ;PRESENT PARAMETER
.BLKB 28. ;OBJECT CONTROLS FOR OTHERS
THPOS: .BLKB 2 ;TEMP HPOS
TVPOS: .BLKB 1
THGOAL: .BLKB 1
TVGOAL: .BLKB 2
THINC: .BLKB 2
TVINC: .BLKB 2
VDISP: .BLKB 1
HDISP: .BLKB 2
W30TIM: .BLKB 1 ;0=NO WARNING,1=WARNING GIVEN,OTHERWISE IS TIMER
OLDOFF: .BLKB 1 ;OLD OFFENSE, USED BY PAUSE,CHANGE
LEDTMP: .BLKB 1 ;USED BY PSEL
PSFLAG: .BLKB 1 ;0=QB PAST SCRIMMAGE
QUOT: .BLKB 3 ;"M.Q." REGISTER
DIVSOR: .BLKB 2 ;"L" REGISTER
EOZP: ;END-OF-ZERO-PAGE
.SBTTL TRACE POINTERS
;BELOW ARE INPUT TO TRACE ROUTINE
.=100
TSRC: .BLKB 2 ;POINTS TO WORD TO BE TRACED
TDST: .BLKB 1 ;POINT TO SCREEN LOCATION
.SBTTL MISC.(NON-ZERO-PAGE) RAM
.=280
HPOSL: .BLKB 1 ;FRACTIONAL YDS OF H-POSN
HPOSH: .BLKB 1 ;INTEGRAL YDS OF H-POSN
.BLKB 28.
BHPOSL =HPOSL+<BALLNO*2>
BHPOSH =HPOSH+<BALLNO*2>
FDHPOS: .BLKB 2 ;FIRST-DOWN MARKER H-POS
VPOSL: .BLKB 1 ;VPOS LOW BITS (< 1/8 YD)
VPOS: .BLKB 1 ;VPOS IN YDS/8
.BLKB 28. ;OTHER MEN
BVPOSL =VPOSL+<BALLNO*2>
BVPOS =VPOS+<BALLNO*2>
FDVPOS: .BLKB 2 ;FIRST-DOWN MARKER V-POS
HINC: .BLKB 2 ;HORIZONTAL INCREMENT (SET BY MOVEMENT INSTR.)
.BLKB 28.
VINC: .BLKB 2 ;VERTICAL INCREMENT (SET BY MOVEMENT INSTR.)
.BLKB 28.
HGOAL: .BLKB 2 ;HORIZONTAL GOAL POSN
.BLKB 28.
VGOAL: .BLKB 1 ;VERTICAL GOAL POSITION
FLAGS: .BLKB 1 ;D7=HAS BEEN AT HGOAL, VGOAL, D1 (ON BALL) IN PASS
;D0=IN COLLISION, D2=IN COLLISION WITH OPPONENT
.BLKB 28.
EFLAG: .BLKB 15. ;ENABLE FLAGS FOR MOTION DEBUG