Address Description
6400
Block of redirects
6456
Trigger sound effect A (copy its parameter into slot A)
6469
Clear 7 bytes at $6433
6474
Sound-effect dispatcher, 7 channels
6495
Decay sound-effect counters at $6433
64AB
Play a two-stage sound stepped by counter $6434
64C7
Play beep tone (pitch $6437, duration loop)
64E9
Play a beep with pitch derived from $6438
64F9
Play a beep with pitch derived from $6439
6505
Play a beep with pitch derived from $6436
650F
Play a banded sound stepped by counter $6435
6533
Play a sound-effect tone (pitch from $6433)
6550
Unreferenced duplicate of the beeper loop at 6575
6575
Sound a square-wave beep
6593
Scan $6648 table, call $65A5 for active entries
65A5
Tick an object's timer; when it runs out, rebuild its work record
65F6
Menu key check, set carry/B=$12 (unconfirmed)
6600
Find free slot in $6648 table
6626
Prepare records and variables at $6648
6751
Set up scrolling string
676B
Scroll the message banner one pixel left
679D
Advance scroll-message pointer, copy next char's font row to $681E
6825
Update Score
6896
Convert (H,L) screen coords to screen address
68A6
Zero screen rows using SP as pointer (B rows)
68CA
Screen wipe/reveal transition, paced by $FDBC
6950
Compute row attribute address, call $69B4
6975
Fill status-bar columns down, calling $699A per column
699A
Compute attribute address for fixed tile row
69B4
Compute attribute address for tile (D,E)
69D2
Set up attract/menu mode, then fall into the main menu
69F3
Main menu: show score table, dispatch menu key
6A1E
Redefine Keys
6A8C
Check if a key code is already assigned (Redefine Keys)
6AE1
Prepare status bar screen: fill, set scroll handler
6B14
Wait key unpress, wait key press
6B21
Clear playfield and status screen/attribute areas
6B4C
Zero rectangle at HL (C rows x B bytes)
6B87
Draw menu box border/frame
6BAC
Scroll the Area in, up to $5C steps or until it arrives
6BBB
Start Game
6C7A
We've got A more grenades
6C80
Update grenades number on the screen
6C96
Print Area number
6C99
Print 2-digit number A
6CAE
Game Over
6E08
Name entry finished: wait for the key to lift, clear the screen and return to the menu
6E11
Print table row using $6E34
6E34
Print char with derived attribute
6E7B
Update the Top Score name-entry selectors
6ECD
Draw/move the Top Score name-entry cursor
6F1D
Name-entry outro: draw selectors, animate, clear
6F46
Prepare records at $6FE5
6F52
Look up record in $6FE5 table, mask low bits
6F79
Find free record in table at $6FD9
6FC7
Prepare records at $6FD9
6FF5
Advance strip position, scroll the $6711 tile buffer
706E
Unpack $66D1 record, scale coordinate x4
70BD
XOR attribute pattern onto screen, explosion effect
70EC
Copy 64 bytes $66D1 to $6711
70F8
Find a place in Top Score table
7143
Select joystick type
71A8
Print string HL
71B6
Print credits screen, scroll text into $5923 area
7251
Check menu keys
725D
Print immediate string checking menu keys
7274
Print Score Table
7357
Game main loop / frame handler
73B7
Read Keyboard
7405
Compute code checksum
7511
XOR AF and AF' with every byte in $F900-F9FF
7547
Read input: joystick or keyboard
7563
Read the Kempston joystick from port $1F
7569
Read Interface II: scan its port and mask list
757A
Read the Fuller joystick from port $7F
7587
Read the cursor keys: scan their port and mask list
75A8
Read keyboard in game mode
75BE
Fill screen rectangle with byte
75D2
Print key entered on Redefine Keys
7615
Print immediate string
7621
Print HL as 4-digit hex/BCD
7637
Print Char
7767
Char $02: set spacing/mode ($FDB1) from arg, range 0-3
777A
Char $00: clear screen (attributes + bitmap)
7795
Fill all screen attributes with D
77A4
Char $04: advance format counter by 2, store fill char
77A8
Char $0D: store the fill char at HL
77AC
Char $0A: increment format counter, abort if it reaches $31
77B8
Char $0B: decrement format counter, abort on underflow
77C2
Char $08: decrement format counter, abort if negative
77CB
Char $09: increment format counter, store fill char once $20 reached
77D5
Char $12: set/clear bit 6 of $FDA0 from arg (0/1)
77EB
Char $19: set/clear flag bit 0 ($FDAF) from arg
77FD
Char $10: set field bits 0-2 of $FDA0 from arg
7811
Char $11: set field bits 3-5 of $FDA0 from arg
7828
Char $16: set print position, 2 bounds-checked args
783E
Char $03: repeat character H, L times
784A
Char $13: set fill char ($FD9F) from arg
7852
Char $14: set tab stop, advance format counter
7866
Char $1A: set Font address ($FDA3) from arg word
786E
Char $0C: print padded field using $FDB0 width
787F
Char $18: set width/column counter ($FDB0) from arg
7887
Char $15: set/clear flag bit 1 ($FDAF) from arg
7896
Char $01: reset print format state
78BF
-> $7A10
78C2
Print opcode exit: drop two saved register pairs
78C4
Print opcode exit: drop the saved state and return
78C7
Print opcode exit: drop the saved registers and return
792C
Prepare at new Area
796A
Prepare New Game
79CA
System init: interrupt table, screen-line table, checksums
79E1
Init $FF00 buffer entries (32 slots, unconfirmed)
79FB
Build the $FA00 column-checksum table
7A10
Abort: restore stack and interrupts, return to frame loop
7A1E
Set up interrupt vector table at $FB00
7A42
Game main loop / frame handler (redirect)
7A45
Prepare $FE00 table - addresses for every even screen line
7A5C
Delay by BC HALTs
8000
Entry point: jump to the redirect block, and the base of the checksummed region
8003
Advance level scroll: walk $FF00 buffer, process sequence record (redirect)
8006
Clear the draw-mode flag (R bit 7), enter $9193 (redirect)
8009
Redirect: jump to the level-1 sequence table
800C
Multiply HL by 10, add DE (redirect)
800F
Mark map cells for object IX, direction-aware (redirect)
8062
End of the enemy run with rocket launchers
806B
Mark map cells for object IX, direction-aware
80E4
Mark 3 cells in $1600 map, B=1 (entry to $80ED)
80EA
Mark 3 cells in $1600 map, B=C (entry to $80ED)
80FB
Mark cells in $1600 map, B=1 (entry to $8104)
8101
Mark cells in $1600 map, B=C (entry to $8104)
8122
Set/test flag in $1600 map at tile (D,E)
8158
Turn the alarm on: sound it, then draw
8164
Draw a trench, right-hand side
8169
Draw a trench, left-hand side
8178
Draw a trench, middle
8187
Spawn point marker: the Area replays from here
818F
Draw the fortress gates
822B
Move and draw a prisoner of war
82C1
Set object state flags, call $806B
82E1
Advance/rotate object buffer pointer
8301
Draw a small hut
832F
Draw the cave body
833F
Draw a cave top edge
8344
Draw a cave bottom edge
834B
Draw sprite HL
83A4
Spawn the Jeep: seed its record at $FDCB
83B8
Update and draw the Jeep sprite
8458
Set the type of the next motorbike
8471
Run both motorbikes: prepare, animate and draw
8497
Animate and draw a motorbike
8500
Prepare the motorbike sprite: reload or shift one pixel
854A
Sprite draw dispatch: clip and compute screen address
8594
Draw the truck
85AB
Update and draw the Truck(s)
8618
Draw two-part sprite from record at HL
867C
Clip sprite rectangle against screen edge (vertical)
86B8
Get Truck sprite to $6300 buffer and shift it if needed
86F5
Draw a bunker
872F
Draw the road surface on a bridge
876E
Draw a wall
87F1
Draw a bridge section
88FD
Draw a barracks
8914
Draw a tunnel
896D
Get attributes address for the screen line
897F
Draw a log crossing
899E
Compute screen draw address for sprite, save state to buffer
89F3
Set attribute color for B cells at HL
8A03
Set attribute INK=1 for B cells at HL (variant of $89F3)
8A14
Sprite draw dispatch variant, C=4
8A7B
Sprite draw dispatch: clip and compute screen address, C=$08
8AC3
Sprite draw dispatch: clip and compute screen address, C=$0C
8B4B
Sprite draw dispatch: clip and compute screen address, C=$10
8BE7
Sprite draw dispatch: clip and compute screen address, C=$14
8CC9
Clip sprite, then AND/OR-mask blit rows via SP into screen
8D58
Draw water strip 1
8D5D
Draw water strip 2
8D8D
Draw the structure's extra segment when the sub-row index calls for it
8D9E
Draw one segment of the structure and colour the row beneath it
8DCC
Draw water
8E35
Fill a block of screen rows with the DE and BC patterns through the stack
8E51
Fold the screen address into the attribute area and colour the cells
8E74
Draw a left mortar
8E83
Draw a right mortar
8E92
Shift-add multiply: 8 bits of H, adding DE per set bit
8EB5
A single grenade pickup
8ECC
A triple grenade pickup
8EE3
A quintuple grenade pickup
8F17
Draw sandbags, left-hand side
8F26
Draw sandbags, middle
8F35
Draw sandbags, right-hand side
8F42
Draw the road bottom edging
8F49
Draw the road top edging
9005
Draw a road marking
9014
Draw a tree
903E
Draw a boulder
904D
Draw a cliff edge
90A1
Adjust and clip sprite draw, calls $8A14
90AC
Draw a mirrored cliff
9132
Decrement Land space or process next record in the sequence
9176
Level record: abort the sequence through the redirect block
917C
Walk $FF00 buffer chain (offset $FD88), increment field at +4
9193
Advance level scroll: walk $FF00 buffer, process sequence record
91E3
Link record entry into the $FF00 buffer chain, continue
9204
Process record codes $01-28, not $22
921F
Insert entry into $FF00 buffer chain
98D0
Update object IX position, clip to screen, dispatch sprite draw (redirect)
98D3
HL = HL + A (redirect)
98D6
(HL) -> HL (redirect)
98D9
Convert row number to screen line address (redirect)
98DC
DOWN HL (redirect)
98DF
UP HL (redirect)
98EA
HL = HL + A
98F0
(HL) -> HL
98F5
Convert row number to screen line address (via $FE00 table)
9904
DOWN HL - move HL to the next screen line
9913
UP HL
9922
Update object IX position, clip to screen, dispatch sprite draw
9A46
Blit continuation: draw remaining sprite width
9A6E
Clip sprite edge, dispatch to masked blit
9AE6
Clip wide sprite edge, dispatch to masked blit
9B05
Masked blit: four-column band, serpentine
9B61
Set up sprite erase, dispatch to erase-blit variant
9B97
Second pass: redraw sprite via unmasked-OR blit
9BCB
Set up sprite erase (positive path), dispatch to erase-blit
9BF5
Second pass (positive path): redraw via unmasked-OR blit
9C23
Compute screen address for sprite row via IX object
9C6B
Erase sprite: AND-mask bytes off screen, SP walks data as pointer
9CB1
Erase sprite: AND-mask bytes off screen, SP walks data as pointer
9CED
Erase sprite variant: AND-mask 2 bytes per column via SP
9D1F
Erase sprite: AND-mask bytes off screen, SP walks data as pointer
9D5B
Erase sprite variant: AND-mask row bytes via SP
9D8D
Unmasked-OR blit variant, draws opaque sprite row across screen thirds
9DCC
Unmasked-OR blit variant: 2 bytes per column via SP
9E03
Unmasked-OR blit variant: one column, 2 lines per pass
9E32
Unmasked-OR blit variant: two columns, serpentine
9E69
Unmasked-OR blit variant: alternating columns via SP
9E98
Masked-OR blit variant, draws sprite row across screen thirds
9EDF
Unmasked-OR blit, draws opaque sprite row across screen thirds
9F1D
Off-screen sprite draw: clip, compute address, dispatch blit
9FDE
Finish sprite off-screen: commit pending fields
9FF5
Blit finish: commit Y position, restore SP
DC83
Get random byte (redirect)
DC86
Entry E=0, dispatch bullet/collision handler via $DF39 (redirect)
DC89
Initialization and go to game main loop (redirect)
DC8C
Check IX flag and column bound, dispatch (redirect)
DC8F
Check screen brightness threshold, inside $DD8D (redirect)
DC92
Entry E=2, dispatch bullet/collision handler via $DF39 (redirect)
DC95
Scroll level and shift all objects down
DCAF
Periodically spawn a new enemy from the edge
DCDF
Initialization and go to game main loop
DD71
Process object records at $5B11
DD89
Process Player's object record
DD8D
Draw object IX: select sprite frame, clip, blit
DE91
Game's main loop, Part 1
DEDD
Wait for the pause key to be released, pressed and released again
DEEF
Game's main loop, Part 2
DF16
Random number generator: step the 32-bit register at $FD9B
DF33
Entry E=2, dispatch bullet/collision handler via $DF39
DF37
Entry E=0, dispatch bullet/collision handler via $DF39
DF67
Collision scan exit: restore SP and report no hit
DF6D
Collision scan: drop this entry and take the next
DF71
Collision hit on the player: flag them dead and mark the object
DF7B
Bullet collision check, carry set on hit
E01B
Check IX flag and column bound, dispatch
E0BF
Map-scan tails: step to the next row, or set the Area flag and return
E100
Set up player object pointers (IX=$5BDA) (redirect)
E103
Check fire button and joystick input (redirect)
E106
Check player shots against every enemy in $5B11 (redirect)
E109
Rebuild active-object list at $F900 from $FF00 buffer (redirect)
E10C
Decrement Enemy delay ($FDDD), spawn enemy by Area ($FDE5) when due (redirect)
E10F
Find free enemy slot in $5B11 table, inside $E01B (redirect)
E112
Draw a small random offset (-1, 0 or +1) (redirect)
E1A8
Tail of the AI table block: drop the return address and abort
E1AC
Draw a small random offset (-1, 0 or +1)
E1B5
Service the two bomb/explosion slots
E1D1
Check pickup/collision near object, award score
E224
Jeep hit check, kill/score, spawn next enemy (unconfirmed)
E2DD
Init enemy object (BC=$0806, type $07)
E2EA
Decrement Enemy delay ($FDDD), spawn enemy by Area ($FDE5) when due
E4FC
Set up player object pointers (IX=$5BDA)
E5B8
Convert direction code (masked 0-15) to E delta
E5DB
Move enemy toward target, clamp to bounds
E628
Dispatch by direction, clear draw-active if off-screen
E648
Move right: check keys/state, advance E and wrap
E679
Move left: check keys/state, advance E and wrap
E6A8
Move enemy up one row if states/flags allow
E6DB
Move up/down: check states, adjust row
E6FE
Check player shots against every enemy in $5B11
E77C
Scan object table for entry near position
E794
Enemy melee/contact check vs player, kill if close
E86B
Enemy AI pause: reload short action timer
E881
Enemy AI: re-aim at player, random fire
E8A0
Enemy wandering AI: timed re-aim, random fire and step
E90A
Enemy AI: check row range, transition to attack state
E972
Dispatch enemy AI by state (IX+$12)
E9C7
Enemy AI state: clear the turn flag, reset the state and wander
E9D2
Enemy AI state: clear the turn flag, wait $30 frames
E9DD
Enemy AI state: pick a heading by row band, or fire
EA8E
Enemy AI state: count the turn timer down, then steer
EB13
Set enemy AI delay/direction by Area number ($FDE5)
EB68
Enter enemy AI state $01 with heading $08
EB7B
Enemy patrol AI: walk N steps then reverse
EB96
Enemy AI: wander or chase player by aggressive flag
EBE1
Compute direction bits toward player position
EC1B
Check enemy position on-screen, trigger action
EC58
Set enemy sub-state (IX+$0C) by threshold, reset delay/target
ECC1
Check fire button and joystick input
ED31
Look up entry in table at $EC81
ED52
Rebuild active-object list at $F900 from $FF00 buffer
EDC8
Populate object record fields from A/B and a source byte
EDD6
Init object timer field via $EDC8
EE11
Read the scroll value from the record and store it
EE15
Seed the scroll position from the record when it is unset
EE24
Advance the record fields and stamp the object onto the map
EF37
Init object record via $EDC8, entry size $0E