Page Byte Address Description
91 0 5B00
Data block at 5B00
91 17 5B11
Object records, 20 bytes wide
91 217 5BD9
Data block at 5BD9
100 0 6400
Block of redirects
100 51 6433
Sound channel counters (7 slots), decay rates follow at $6441
100 86 6456
Trigger sound effect A (copy its parameter into slot A)
100 105 6469
Clear 7 bytes at $6433
100 116 6474
Sound-effect dispatcher, 7 channels
100 149 6495
Decay sound-effect counters at $6433
100 171 64AB
Play a two-stage sound stepped by counter $6434
100 199 64C7
Play beep tone (pitch $6437, duration loop)
100 233 64E9
Play a beep with pitch derived from $6438
100 249 64F9
Play a beep with pitch derived from $6439
101 5 6505
Play a beep with pitch derived from $6436
101 15 650F
Play a banded sound stepped by counter $6435
101 51 6533
Play a sound-effect tone (pitch from $6433)
101 80 6550
Unreferenced duplicate of the beeper loop at 6575
101 117 6575
Sound a square-wave beep
101 147 6593
Scan $6648 table, call $65A5 for active entries
101 165 65A5
Tick an object's timer; when it runs out, rebuild its work record
101 246 65F6
Menu key check, set carry/B=$12 (unconfirmed)
102 0 6600
Find free slot in $6648 table
102 38 6626
Prepare records and variables at $6648
102 72 6648
Effect slot table, 5 records of 5 bytes
102 209 66D1
Packed tile records, unpacked into the $6711 buffer by 706E
103 81 6751
Set up scrolling string
103 107 676B
Scroll the message banner one pixel left
103 157 679D
Advance scroll-message pointer, copy next char's font row to $681E
103 206 67CE
Scrolling title message, $1F ends it
104 27 681B
Scroll state: message pointer, step timer and the font-row buffer
104 37 6825
Update Score
104 150 6896
Convert (H,L) screen coords to screen address
104 166 68A6
Zero screen rows using SP as pointer (B rows)
104 202 68CA
Screen wipe/reveal transition, paced by $FDBC
105 80 6950
Compute row attribute address, call $69B4
105 117 6975
Fill status-bar columns down, calling $699A per column
105 154 699A
Compute attribute address for fixed tile row
105 180 69B4
Compute attribute address for tile (D,E)
105 210 69D2
Set up attract/menu mode, then fall into the main menu
105 243 69F3
Main menu: show score table, dispatch menu key
106 30 6A1E
Redefine Keys
106 140 6A8C
Check if a key code is already assigned (Redefine Keys)
106 163 6AA3
Messages to use in Redefine Keys
106 225 6AE1
Prepare status bar screen: fill, set scroll handler
107 20 6B14
Wait key unpress, wait key press
107 33 6B21
Clear playfield and status screen/attribute areas
107 76 6B4C
Zero rectangle at HL (C rows x B bytes)
107 103 6B67
Letters to select from entering Top Score
107 135 6B87
Draw menu box border/frame
107 172 6BAC
Scroll the Area in, up to $5C steps or until it arrives
107 187 6BBB
Start Game
108 122 6C7A
We've got A more grenades
108 128 6C80
Update grenades number on the screen
108 150 6C96
Print Area number
108 153 6C99
Print 2-digit number A
108 174 6CAE
Game Over
110 8 6E08
Name entry finished: wait for the key to lift, clear the screen and return to the menu
110 17 6E11
Print table row using $6E34
110 52 6E34
Print char with derived attribute
110 123 6E7B
Update the Top Score name-entry selectors
110 205 6ECD
Draw/move the Top Score name-entry cursor
111 29 6F1D
Name-entry outro: draw selectors, animate, clear
111 70 6F46
Prepare records at $6FE5
111 82 6F52
Look up record in $6FE5 table, mask low bits
111 121 6F79
Find free record in table at $6FD9
111 199 6FC7
Prepare records at $6FD9
111 217 6FD9
Name-entry selector records, 4 of 3 bytes
111 229 6FE5
Name-entry letter records, 8 of 2 bytes
111 245 6FF5
Advance strip position, scroll the $6711 tile buffer
112 110 706E
Unpack $66D1 record, scale coordinate x4
112 154 709A
Feature codes for the name-entry strip, indexed by column
112 189 70BD
XOR attribute pattern onto screen, explosion effect
112 236 70EC
Copy 64 bytes $66D1 to $6711
112 248 70F8
Find a place in Top Score table
113 67 7143
Select joystick type
113 168 71A8
Print string HL
113 178 71B2
Screen attributes, 4 bytes
113 182 71B6
Print credits screen, scroll text into $5923 area
114 81 7251
Check menu keys
114 93 725D
Print immediate string checking menu keys
114 116 7274
Print Score Table
114 178 72B2
Score table
115 87 7357
Game main loop / frame handler
115 183 73B7
Read Keyboard
116 5 7405
Compute code checksum
117 17 7511
XOR AF and AF' with every byte in $F900-F9FF
117 71 7547
Read input: joystick or keyboard
117 99 7563
Read the Kempston joystick from port $1F
117 105 7569
Read Interface II: scan its port and mask list
117 122 757A
Read the Fuller joystick from port $7F
117 135 7587
Read the cursor keys: scan their port and mask list
117 152 7598
Keyboard ports and bit masks - keys to read in game mode
117 168 75A8
Read keyboard in game mode
117 190 75BE
Fill screen rectangle with byte
117 210 75D2
Print key entered on Redefine Keys
118 21 7615
Print immediate string
118 33 7621
Print HL as 4-digit hex/BCD
118 55 7637
Print Char
119 95 775F
Spacing-mode handler addresses, indexed by the mode in $FDB1
119 103 7767
Char $02: set spacing/mode ($FDB1) from arg, range 0-3
119 122 777A
Char $00: clear screen (attributes + bitmap)
119 149 7795
Fill all screen attributes with D
119 164 77A4
Char $04: advance format counter by 2, store fill char
119 168 77A8
Char $0D: store the fill char at HL
119 172 77AC
Char $0A: increment format counter, abort if it reaches $31
119 184 77B8
Char $0B: decrement format counter, abort on underflow
119 194 77C2
Char $08: decrement format counter, abort if negative
119 203 77CB
Char $09: increment format counter, store fill char once $20 reached
119 213 77D5
Char $12: set/clear bit 6 of $FDA0 from arg (0/1)
119 235 77EB
Char $19: set/clear flag bit 0 ($FDAF) from arg
119 253 77FD
Char $10: set field bits 0-2 of $FDA0 from arg
120 17 7811
Char $11: set field bits 3-5 of $FDA0 from arg
120 40 7828
Char $16: set print position, 2 bounds-checked args
120 62 783E
Char $03: repeat character H, L times
120 74 784A
Char $13: set fill char ($FD9F) from arg
120 82 7852
Char $14: set tab stop, advance format counter
120 102 7866
Char $1A: set Font address ($FDA3) from arg word
120 110 786E
Char $0C: print padded field using $FDB0 width
120 127 787F
Char $18: set width/column counter ($FDB0) from arg
120 135 7887
Char $15: set/clear flag bit 1 ($FDAF) from arg
120 150 7896
Char $01: reset print format state
120 191 78BF
-> $7A10
120 194 78C2
Print opcode exit: drop two saved register pairs
120 196 78C4
Print opcode exit: drop the saved state and return
120 199 78C7
Print opcode exit: drop the saved registers and return
120 204 78CC
Table to map special char $00..$1F to types $00..$02
120 236 78EC
Address map to print chars $00..$1F - 32 addresses
121 44 792C
Prepare at new Area
121 106 796A
Prepare New Game
121 202 79CA
System init: interrupt table, screen-line table, checksums
121 225 79E1
Init $FF00 buffer entries (32 slots, unconfirmed)
121 251 79FB
Build the $FA00 column-checksum table
122 16 7A10
Abort: restore stack and interrupts, return to frame loop
122 30 7A1E
Set up interrupt vector table at $FB00
122 66 7A42
Game main loop / frame handler (redirect)
122 69 7A45
Prepare $FE00 table - addresses for every even screen line
122 92 7A5C
Delay by BC HALTs
122 99 7A63
Data block at 7A63
126 160 7EA0
Font
128 0 8000
Entry point: jump to the redirect block, and the base of the checksummed region
128 3 8003
Advance level scroll: walk $FF00 buffer, process sequence record (redirect)
128 6 8006
Clear the draw-mode flag (R bit 7), enter $9193 (redirect)
128 9 8009
Redirect: jump to the level-1 sequence table
128 12 800C
Multiply HL by 10, add DE (redirect)
128 15 800F
Mark map cells for object IX, direction-aware (redirect)
128 18 8012
Scenery handler addresses, indexed by the level record code minus one (see 9193); the level data at $9236 names what each code places
128 98 8062
End of the enemy run with rocket launchers
128 107 806B
Mark map cells for object IX, direction-aware
128 228 80E4
Mark 3 cells in $1600 map, B=1 (entry to $80ED)
128 234 80EA
Mark 3 cells in $1600 map, B=C (entry to $80ED)
128 251 80FB
Mark cells in $1600 map, B=1 (entry to $8104)
129 1 8101
Mark cells in $1600 map, B=C (entry to $8104)
129 34 8122
Set/test flag in $1600 map at tile (D,E)
129 88 8158
Turn the alarm on: sound it, then draw
129 100 8164
Draw a trench, right-hand side
129 105 8169
Draw a trench, left-hand side
129 120 8178
Draw a trench, middle
129 135 8187
Spawn point marker: the Area replays from here
129 143 818F
Draw the fortress gates
130 43 822B
Move and draw a prisoner of war
130 180 82B4
Data 13 bytes to copy at $FDCF
130 193 82C1
Set object state flags, call $806B
130 225 82E1
Advance/rotate object buffer pointer
131 1 8301
Draw a small hut
131 47 832F
Draw the cave body
131 63 833F
Draw a cave top edge
131 68 8344
Draw a cave bottom edge
131 75 834B
Draw sprite HL
131 164 83A4
Spawn the Jeep: seed its record at $FDCB
131 184 83B8
Update and draw the Jeep sprite
132 88 8458
Set the type of the next motorbike
132 113 8471
Run both motorbikes: prepare, animate and draw
132 151 8497
Animate and draw a motorbike
133 0 8500
Prepare the motorbike sprite: reload or shift one pixel
133 74 854A
Sprite draw dispatch: clip and compute screen address
133 148 8594
Draw the truck
133 171 85AB
Update and draw the Truck(s)
134 24 8618
Draw two-part sprite from record at HL
134 124 867C
Clip sprite rectangle against screen edge (vertical)
134 184 86B8
Get Truck sprite to $6300 buffer and shift it if needed
134 245 86F5
Draw a bunker
135 47 872F
Draw the road surface on a bridge
135 110 876E
Draw a wall
135 241 87F1
Draw a bridge section
136 229 88E5
Two-tone structure graphic, drawn by 87F1
136 253 88FD
Draw a barracks
137 20 8914
Draw a tunnel
137 109 896D
Get attributes address for the screen line
137 127 897F
Draw a log crossing
137 158 899E
Compute screen draw address for sprite, save state to buffer
137 243 89F3
Set attribute color for B cells at HL
138 3 8A03
Set attribute INK=1 for B cells at HL (variant of $89F3)
138 20 8A14
Sprite draw dispatch variant, C=4
138 123 8A7B
Sprite draw dispatch: clip and compute screen address, C=$08
138 195 8AC3
Sprite draw dispatch: clip and compute screen address, C=$0C
139 75 8B4B
Sprite draw dispatch: clip and compute screen address, C=$10
139 231 8BE7
Sprite draw dispatch: clip and compute screen address, C=$14
140 201 8CC9
Clip sprite, then AND/OR-mask blit rows via SP into screen
141 88 8D58
Draw water strip 1
141 93 8D5D
Draw water strip 2
141 141 8D8D
Draw the structure's extra segment when the sub-row index calls for it
141 158 8D9E
Draw one segment of the structure and colour the row beneath it
141 204 8DCC
Draw water
142 53 8E35
Fill a block of screen rows with the DE and BC patterns through the stack
142 81 8E51
Fold the screen address into the attribute area and colour the cells
142 116 8E74
Draw a left mortar
142 131 8E83
Draw a right mortar
142 146 8E92
Shift-add multiply: 8 bits of H, adding DE per set bit
142 181 8EB5
A single grenade pickup
142 204 8ECC
A triple grenade pickup
142 227 8EE3
A quintuple grenade pickup
143 23 8F17
Draw sandbags, left-hand side
143 38 8F26
Draw sandbags, middle
143 53 8F35
Draw sandbags, right-hand side
143 66 8F42
Draw the road bottom edging
143 73 8F49
Draw the road top edging
144 5 9005
Draw a road marking
144 20 9014
Draw a tree
144 62 903E
Draw a boulder
144 77 904D
Draw a cliff edge
144 161 90A1
Adjust and clip sprite draw, calls $8A14
144 172 90AC
Draw a mirrored cliff
145 36 9124
Cliff attribute palette, indexed by column
145 50 9132
Decrement Land space or process next record in the sequence
145 118 9176
Level record: abort the sequence through the redirect block
145 124 917C
Walk $FF00 buffer chain (offset $FD88), increment field at +4
145 147 9193
Advance level scroll: walk $FF00 buffer, process sequence record
145 227 91E3
Link record entry into the $FF00 buffer chain, continue
146 4 9204
Process record codes $01-28, not $22
146 31 921F
Insert entry into $FF00 buffer chain
146 54 9236
Level 1
147 64 9340
Level 2
148 24 9418
Level 3
148 232 94E8
Level 4
149 152 9598
Level 5
150 148 9694
Level 6
151 142 978E
Level 7
152 24 9818
Level 8
152 208 98D0
Update object IX position, clip to screen, dispatch sprite draw (redirect)
152 211 98D3
HL = HL + A (redirect)
152 214 98D6
(HL) -> HL (redirect)
152 217 98D9
Convert row number to screen line address (redirect)
152 220 98DC
DOWN HL (redirect)
152 223 98DF
UP HL (redirect)
152 226 98E2
Offsets in $A000 sprites block, lo byte
152 234 98EA
HL = HL + A
152 240 98F0
(HL) -> HL
152 245 98F5
Convert row number to screen line address (via $FE00 table)
153 4 9904
DOWN HL - move HL to the next screen line
153 19 9913
UP HL
153 34 9922
Update object IX position, clip to screen, dispatch sprite draw
154 70 9A46
Blit continuation: draw remaining sprite width
154 110 9A6E
Clip sprite edge, dispatch to masked blit
154 230 9AE6
Clip wide sprite edge, dispatch to masked blit
155 5 9B05
Masked blit: four-column band, serpentine
155 97 9B61
Set up sprite erase, dispatch to erase-blit variant
155 151 9B97
Second pass: redraw sprite via unmasked-OR blit
155 203 9BCB
Set up sprite erase (positive path), dispatch to erase-blit
155 245 9BF5
Second pass (positive path): redraw via unmasked-OR blit
156 35 9C23
Compute screen address for sprite row via IX object
156 107 9C6B
Erase sprite: AND-mask bytes off screen, SP walks data as pointer
156 177 9CB1
Erase sprite: AND-mask bytes off screen, SP walks data as pointer
156 237 9CED
Erase sprite variant: AND-mask 2 bytes per column via SP
157 31 9D1F
Erase sprite: AND-mask bytes off screen, SP walks data as pointer
157 91 9D5B
Erase sprite variant: AND-mask row bytes via SP
157 141 9D8D
Unmasked-OR blit variant, draws opaque sprite row across screen thirds
157 204 9DCC
Unmasked-OR blit variant: 2 bytes per column via SP
158 3 9E03
Unmasked-OR blit variant: one column, 2 lines per pass
158 50 9E32
Unmasked-OR blit variant: two columns, serpentine
158 105 9E69
Unmasked-OR blit variant: alternating columns via SP
158 152 9E98
Masked-OR blit variant, draws sprite row across screen thirds
158 223 9EDF
Unmasked-OR blit, draws opaque sprite row across screen thirds
159 29 9F1D
Off-screen sprite draw: clip, compute address, dispatch blit
159 222 9FDE
Finish sprite off-screen: commit pending fields
159 245 9FF5
Blit finish: commit Y position, restore SP
160 0 A000
Sprites of Player and troopers; width 3 height 21
192 0 C000
Sprite addresses
192 80 C050
Sprite ???; width 2
192 160 C0A0
Sprite ???; width 2
192 240 C0F0
Sprite Cliff bottom left; width 6
193 224 C1E0
Sprite Cliff top left; width 6
194 112 C270
Sprite ???; width 2
194 196 C2C4
Sprite ???; width 2
195 24 C318
Sprite Cliff edge left; width 2
195 80 C350
Sprite Cliff edge right; width 2
195 136 C388
Sprite Cliff bottom right; width 6
196 120 C478
Sprite Cliff top right; width 6
197 8 C508
Sprite Cave, exit to the right; width 6
197 248 C5F8
Sprite Cave, exit to the left; width 6
198 232 C6E8
Sprite Cave top edge; width 6
199 24 C718
Sprite Cave bottom edge; width 6
199 72 C748
Sprite Truck; width 8
200 72 C848
Sprite ???; width 2?
200 144 C890
Sprite Hut; width 6
201 128 C980
Sprite Jeep; width 4
202 0 CA00
Sprite Motorbike; width 6
202 144 CA90
Sprite ???; width ?
202 192 CAC0
Sprite ???; width ?
203 32 CB20
Sprite ???; width ?
203 80 CB50
Sprite Wall; width 4
204 24 CC18
???
207 56 CF38
Sprite ???
207 120 CF78
Sprite for the scenery drawn by 8ECC
207 252 CFFC
Sprite for the grenade crate (8EE3)
208 128 D080
Sprite for the scenery drawn by 8E74
208 192 D0C0
Sprite for the scenery drawn by 8E83
209 0 D100
Sprite for the tall scenery drawn by 897F
209 160 D1A0
Sprite for the scenery drawn by 903E
210 36 D224
Sprite for the scenery drawn by 8F17
210 108 D26C
Sprite for the scenery drawn by 8F26
210 216 D2D8
Sprite for the scenery drawn by 8F35
211 32 D320
Lower half of the two-part scenery object (9014)
211 128 D380
Sprite for the scenery drawn by 88FD
214 20 D614
Upper half of the two-part scenery object (9014)
214 68 D644
Truck sprite variant used by 86F5
217 68 D944
Truck sprite variant used by 86F5
220 131 DC83
Get random byte (redirect)
220 134 DC86
Entry E=0, dispatch bullet/collision handler via $DF39 (redirect)
220 137 DC89
Initialization and go to game main loop (redirect)
220 140 DC8C
Check IX flag and column bound, dispatch (redirect)
220 143 DC8F
Check screen brightness threshold, inside $DD8D (redirect)
220 146 DC92
Entry E=2, dispatch bullet/collision handler via $DF39 (redirect)
220 149 DC95
Scroll level and shift all objects down
220 175 DCAF
Periodically spawn a new enemy from the edge
220 223 DCDF
Initialization and go to game main loop
221 63 DD3F
Sprite frame table, indexed by object state and direction
221 113 DD71
Process object records at $5B11
221 137 DD89
Process Player's object record
221 141 DD8D
Draw object IX: select sprite frame, clip, blit
222 145 DE91
Game's main loop, Part 1
222 221 DEDD
Wait for the pause key to be released, pressed and released again
222 239 DEEF
Game's main loop, Part 2
223 22 DF16
Random number generator: step the 32-bit register at $FD9B
223 51 DF33
Entry E=2, dispatch bullet/collision handler via $DF39
223 55 DF37
Entry E=0, dispatch bullet/collision handler via $DF39
223 103 DF67
Collision scan exit: restore SP and report no hit
223 109 DF6D
Collision scan: drop this entry and take the next
223 113 DF71
Collision hit on the player: flag them dead and mark the object
223 123 DF7B
Bullet collision check, carry set on hit
224 27 E01B
Check IX flag and column bound, dispatch
224 191 E0BF
Map-scan tails: step to the next row, or set the Area flag and return
225 0 E100
Set up player object pointers (IX=$5BDA) (redirect)
225 3 E103
Check fire button and joystick input (redirect)
225 6 E106
Check player shots against every enemy in $5B11 (redirect)
225 9 E109
Rebuild active-object list at $F900 from $FF00 buffer (redirect)
225 12 E10C
Decrement Enemy delay ($FDDD), spawn enemy by Area ($FDE5) when due (redirect)
225 15 E10F
Find free enemy slot in $5B11 table, inside $E01B (redirect)
225 18 E112
Draw a small random offset (-1, 0 or +1) (redirect)
225 21 E115
Data block at E115
225 136 E188
Enemy AI state handler addresses, indexed by the state byte (+$12) from E972
225 168 E1A8
Tail of the AI table block: drop the return address and abort
225 172 E1AC
Draw a small random offset (-1, 0 or +1)
225 181 E1B5
Service the two bomb/explosion slots
225 209 E1D1
Check pickup/collision near object, award score
226 36 E224
Jeep hit check, kill/score, spawn next enemy (unconfirmed)
226 221 E2DD
Init enemy object (BC=$0806, type $07)
226 234 E2EA
Decrement Enemy delay ($FDDD), spawn enemy by Area ($FDE5) when due
228 242 E4F2
Direction codes read by EBE1 as $E4F1 + the direction bits; index 0 is never used, so the base byte is the RET above
228 252 E4FC
Set up player object pointers (IX=$5BDA)
229 184 E5B8
Convert direction code (masked 0-15) to E delta
229 219 E5DB
Move enemy toward target, clamp to bounds
230 40 E628
Dispatch by direction, clear draw-active if off-screen
230 72 E648
Move right: check keys/state, advance E and wrap
230 121 E679
Move left: check keys/state, advance E and wrap
230 168 E6A8
Move enemy up one row if states/flags allow
230 219 E6DB
Move up/down: check states, adjust row
230 254 E6FE
Check player shots against every enemy in $5B11
231 124 E77C
Scan object table for entry near position
231 148 E794
Enemy melee/contact check vs player, kill if close
232 107 E86B
Enemy AI pause: reload short action timer
232 129 E881
Enemy AI: re-aim at player, random fire
232 160 E8A0
Enemy wandering AI: timed re-aim, random fire and step
233 10 E90A
Enemy AI: check row range, transition to attack state
233 114 E972
Dispatch enemy AI by state (IX+$12)
233 199 E9C7
Enemy AI state: clear the turn flag, reset the state and wander
233 210 E9D2
Enemy AI state: clear the turn flag, wait $30 frames
233 221 E9DD
Enemy AI state: pick a heading by row band, or fire
234 142 EA8E
Enemy AI state: count the turn timer down, then steer
235 19 EB13
Set enemy AI delay/direction by Area number ($FDE5)
235 104 EB68
Enter enemy AI state $01 with heading $08
235 123 EB7B
Enemy patrol AI: walk N steps then reverse
235 150 EB96
Enemy AI: wander or chase player by aggressive flag
235 225 EBE1
Compute direction bits toward player position
236 27 EC1B
Check enemy position on-screen, trigger action
236 88 EC58
Set enemy sub-state (IX+$0C) by threshold, reset delay/target
236 129 EC81
Per-direction shot offsets and sizes, read by ED31
236 193 ECC1
Check fire button and joystick input
237 49 ED31
Look up entry in table at $EC81
237 82 ED52
Rebuild active-object list at $F900 from $FF00 buffer
237 200 EDC8
Populate object record fields from A/B and a source byte
237 214 EDD6
Init object timer field via $EDC8
238 17 EE11
Read the scroll value from the record and store it
238 21 EE15
Seed the scroll position from the record when it is unset
238 36 EE24
Advance the record fields and stamp the object onto the map
239 55 EF37
Init object record via $EDC8, entry size $0E