Page Byte Address Description
64 0 4000
Screen pixels.
88 0 5800
Screen attributes.
88 32 5820
Screen attributes row 1.
90 32 5A20
Screen attributes row 16 (boundary for visible sprite area).
90 64 5A40
Screen attributes row 17 (start of lower screen area).
91 0 5B00
Screen row address lookup table (64 entries × 2 bytes = 128 bytes).
91 128 5B80
Unused area.
92 120 5C78
Interrupt counter. Incremented by the interrupt handler.
92 121 5C79
Unused
92 210 5CD2
Game initialization and interrupt setup
93 6 5D06
Return to control selection dialog
93 16 5D10
Start gameplay or overview mode based on user selection
93 43 5D2B
Start overview mode
93 53 5D35
Start gameplay mode
93 63 5D3F
Array of possible starting bridge values.
93 67 5D43
Game status buffer entry at 5D43
93 68 5D44
Initialize game state for overview/demo mode.
93 159 5D9F
Decrease player 2 lives
93 166 5DA6
Initialize and start gameplay mode
94 238 5EEE
Terrain fragment render counter (0-7). Tracks which of the 8 terrain fragments to render next. Incremented after each fragment, wraps at 8.
94 239 5EEF
Frame tick (0-255). Incremented each game frame for animation timing. Bit 0 alternates every frame, bits 0-1 cycle every 4 frames, etc.
94 240 5EF0
Current bridge number (0-47).
94 241 5EF1
Raw input port value from last keyboard/joystick read. Format depends on input interface type.
94 242 5EF2
Road tank center flag ($00 = inactive, $01 = road tank is at center X=$80).
94 243 5EF3
Player missile Y coordinate in pixels (0-255). $00 when no missile active.
94 244 5EF4
Player missile X coordinate in pixels (0-255).
94 245 5EF5
Collision detection mode for current render pass. Determines which collision handler to invoke on pixel overlap.
94 246 5EF6
Y coordinate where collision was detected, in pixels.
94 247 5EF7
Pointer to current plane sprite data. Points into all_ff sprite bank, offset by speed for animation frame selection.
94 249 5EF9
Island rendering line counter. Tracks current scanline during island terrain rendering (0-23).
94 250 5EFA
Island terrain profile index (0-7). Selects which of 8 island shapes from data_terrain_profiles to render.
94 251 5EFB
Island definition byte 2. Second byte from island data at data_islands, controls island width/shape.
94 252 5EFC
Island definition byte 3. Third byte from island data at data_islands, controls island rendering parameters.
94 253 5EFD
Island starting line index. Screen line (0-23) where island rendering begins. Initialized to $10 (16).
94 254 5EFE
Unused
95 0 5F00
Viewport slots array (15 slots for active game objects).
95 46 5F2E
Explosion animation fragments array.
95 95 5F5F
Object activation interval bitmask
95 96 5F60
Current slot pointer. Iterator for traversing viewport_slots during object processing.
95 98 5F62
Pointer to a slot from exploding_fragments
95 100 5F64
Current scroll speed in pixels per frame.
95 101 5F65
Low fuel warning sound period (0-127). Used as delay loop iteration count for speaker ON/OFF phases. Lower values = higher pitch. Decremented each frame, creating a rising-then-resetting warble effect.
95 102 5F66
Fuel level (0-255). $FF=full tank, $00=empty.
95 103 5F67
Input interface type ($00=Keyboard, $01=Sinclair, $02=Kempston, $03=Cursor).
95 104 5F68
Current gameplay mode
95 105 5F69
Plane sprite bank offset. $00=centered, $04=banked left/right. Reset to $00 at the start of each frame, then set to $04 by restore_plane_state_after_render after the banked sprite is rendered. Read by add_fuel, but always $00 at that call site — the check is dead code.
95 106 5F6A
Player 1's current bridge number (0-47). Saved when switching players in 2-player mode.
95 107 5F6B
Player 2's current bridge number (0-47). Saved when switching players in 2-player mode.
95 108 5F6C
Bridge section indicator. $00=normal terrain, $02=bridge terrain section. Set when plane enters bridge area.
95 109 5F6D
Bridge destruction flag ($00 = intact, $01 = destroyed).
95 110 5F6E
Y-position of destroyed bridge in pixels. Updated during scroll to track bridge debris position on screen.
95 111 5F6F
Unused.
95 112 5F70
Vertical scroll offset (16-bit, little-endian). Accumulated distance traveled in pixels. Used to calculate level slot index and bridge position.
95 114 5F72
Player plane X coordinate in pixels (0-255). $78 (120) is horizontal center. Changes by 2 pixels per left/right input.
95 115 5F73
Pointer to helicopter missile coordinates in viewport_slots array. Updated when advanced helicopter fires.
95 117 5F75
Helicopter missile state. Bit 7 set when missile active. Lower bits track missile animation/position.
95 118 5F76
Current level terrain array index (1-255). Points to current element in level definition at level_terrains. Incremented as terrain scrolls.
95 119 5F77
Current terrain profile number (0-7). Index into terrain sprite table at data_terrain_profiles. Loaded from first byte of level element at level_terrains.
95 120 5F78
Cached terrain element data (2 bytes). Stores bytes 2-3 of current level element for object spawning.
95 122 5F7A
Terrain extras byte. Additional terrain rendering flags from level data.
95 123 5F7B
Current screen memory pointer. Points to pixel address being rendered during terrain drawing.
95 125 5F7D
Terrain sub-position (0-3). Index within current terrain element. Incremented every 4 scroll units, triggers new terrain load at 0.
95 126 5F7E
Pointer to the text to be displayed in the scroller.
95 128 5F80
Unused
95 129 5F81
Overview mode frame counter. Counts scroll iterations during attract mode. Game starts after 5 increments or key press.
95 130 5F82
Unused
95 131 5F83
Saved stack pointer. Captured at init, restored when starting new life to unwind any nested calls.
95 133 5F85
Saved HL register during collision detection. Preserved across collision handler calls.
95 135 5F87
Saved DE register during collision detection. Preserved across collision handler calls.
95 137 5F89
Saved BC register during collision detection. Preserved across collision handler calls.
95 139 5F8B
Collision coordinates (Y in high byte, X in low byte). Set by collision detection when overlap found.
95 141 5F8D
Saved object coordinates during rendering. Backup of object position for multi-pass rendering.
95 143 5F8F
Backup of plane missile coordinates. Saved before movement, used for collision detection and erasure.
95 145 5F91
Main gameplay loop
95 218 5FDA
Scan cursor keys
96 10 600A
Scan Kempston joystick
96 57 6039
Scan Sinclair joystick
96 104 6068
Scan keyboard
96 165 60A5
Render player plane and terrain fragments
97 36 6124
Calculate fuel gauge sprite offset
97 54 6136
Collision detection dispatcher
97 94 615E
Handle COLLISION_MODE_FIGHTER collision detection
97 187 61BB
Check collision against bridges and viewport objects
98 73 6249
Increment player 2's bridge counter
98 83 6253
Unused
98 86 6256
Handle COLLISION_MODE_FUEL_DEPOT (initiate refueling)
98 104 6268
Check collision with explosion fragments
98 206 62CE
End of fragment list - no collision found
98 212 62D4
Get Y offset for balloon collision
98 215 62D7
Get Y offset for fuel depot collision
98 218 62DA
Increase vertical coordinate of the object by the value of state_speed.
98 224 62E0
Decrease vertical coordinate of the object by the value of state_speed.
98 232 62E8
Check missile collision against viewport objects
99 252 63FC
Reset gameplay mode to normal and exit collision system
100 20 6414
Handle missile hit on regular helicopter
100 35 6423
Handle missile hit on ship
100 68 6444
Handle missile hit on advanced helicopter
100 83 6453
Handle missile hit on fighter
100 98 6462
Handle missile hit on balloon
100 120 6478
Handle collision with fuel depot
100 158 649E
Jump to collision finalization
100 161 64A1
Handle refueling from fuel depot
100 180 64B4
Unused
100 188 64BC
Print current bridge number on status line
100 229 64E5
Print bridge number for Player 2
100 241 64F1
Common bridge printing for Player 2
101 6 6506
Print a space character
101 10 650A
Handle player death
101 104 6568
Restart gameplay for current player
101 111 656F
Check if Player 2 has lives remaining when Player 1 is out
101 119 6577
Game Over
101 135 6587
Setup Player 2 status line during overview mode
101 171 65AB
Switch to Player 2 after Player 1 death
101 187 65BB
Switch to Player 2 when Player 1 dies in two-player mode
101 203 65CB
Handle Player 2 death and determine next game state
101 222 65DE
Switch to Player 1 after Player 2 death
101 243 65F3
Move player plane right by 2 pixels
102 48 6630
Restore plane state after rendering
102 66 6642
Move player plane left by 2 pixels
102 130 6682
Render player plane sprite
102 204 66CC
Load banked plane sprite address
102 208 66D0
Advance game scroll and update bridge position
102 238 66EE
Update bridge Y position during scroll
103 4 6704
Clear bridge when scrolled off screen
103 10 670A
Handle up/accelerate input
103 23 6717
Handle down/decelerate input
103 36 6724
Handle fire button input
103 60 673C
Missile animation pass selector. $01=first pass (erase at old position), $00=second pass (draw at new position). Two-pass rendering prevents flicker.
103 61 673D
Animate and render player missile
103 142 678E
Clear CONTROLS_BIT_FIRE_SOUND flag
103 148 6794
Finalize collision and erase missile sprite
104 49 6831
Add $0800 offset to screen pointer
104 54 6836
Add $1000 offset to screen pointer
104 59 683B
Scroll screen pixels vertically
104 161 68A1
Clear top screen rows after scrolling
104 183 68B7
Scroll screen attributes up by one row
104 197 68C5
Copy bottom attribute row to row 1 and refill bottom
104 233 68E9
Initialize bridge state for current player
105 39 6927
Render bridge attributes to bottom row
105 59 693B
Terrain edge rendering counter
105 60 693C
Initialize bridge approach state
105 71 6947
Clear bridge destroyed flag
105 77 694D
Advance to next bridge/level
105 99 6963
Wrap bridge index from 49 to 1
105 107 696B
Initialize island state from terrain data
105 144 6990
Render one line of island terrain
106 63 6A3F
Calculate mirrored right edge position
106 69 6A45
Calculate offset right edge position
106 74 6A4A
Get player 2's bridge progress
106 79 6A4F
Load next terrain fragment and initialize rendering state
106 163 6AA3
Render one pixel line of terrain
107 88 6B58
Calculate mirrored right edge (terrain extras mode 1)
107 94 6B5E
Calculate offset right edge (terrain extras mode 2)
107 99 6B63
Load canal sprite (river-adjacent side)
107 107 6B6B
Load canal sprite (road-adjacent side)
107 115 6B73
Load road/bridge sprite
107 123 6B7B
Render special terrain fragment (bridge/road area)
107 176 6BB0
Control state bitmask. Bit 0=FIRE, 1=SPEED_DECREASED, 2=SPEED_ALTERED, 3=LOW_FUEL, 4=BONUS_LIFE, 5=EXPLODING.
107 177 6BB1
Keep the game paused
107 191 6BBF
Handle the Enter key pressed
107 210 6BD2
Reset to control selection screen.
107 219 6BDB
Maskable interrupt handler (IM 2)
107 237 6BED
Process control state flags and trigger sound effects
108 36 6C24
Return from interrupt handler
108 43 6C2B
Unused
108 48 6C30
Bonus life sound progress counter (0-64). Incremented each interrupt during jingle. Sound completes when reaching $40 (64).
108 49 6C31
Play bonus life sound effect
108 82 6C52
Complete bonus life sound sequence
108 93 6C5D
Play normal speed engine sound
108 122 6C7A
Explosion sound tick counter. Counts down from $18 (24) to 0. Value also controls pitch - higher values = lower frequency.
108 123 6C7B
Play explosion sound effect
108 173 6CAD
Complete explosion sound sequence
108 184 6CB8
Play fast speed engine sound
108 214 6CD6
Play slow speed engine sound
108 244 6CF4
Play low fuel warning sound
109 23 6D17
Level overview screen
109 221 6DDD
Reset scrolling title text
109 235 6DEB
Initializes the starting bridge based on the value of state_game_mode using starting_bridges for the lookup.
109 255 6DFF
Consume fuel and update gauge display
110 64 6E40
Add fuel during refueling
110 134 6E86
Set low fuel warning flag
110 140 6E8C
Clear low fuel warning flag
110 146 6E92
Play tank full sound
110 156 6E9C
Create explosion fragment at coordinates
110 171 6EAB
Add object entry to a set
110 188 6EBC
Write object entry to set
110 200 6EC8
Process and render all active explosions
111 99 6F63
Load frame 1/5 explosion sprite
111 103 6F67
Load frame 2/4 explosion sprite
111 107 6F6B
Load frame 3 explosion sprite
111 111 6F6F
Load explosion erasure sprite
111 115 6F73
Reset explosions set pointer
111 122 6F7A
Remove completed explosion from set
111 128 6F80
Spawn objects from level data slot
111 187 6FBB
Render rock sprite
111 230 6FE6
Load pointer to right-facing enemy sprites
111 234 6FEA
Set up object screen position for rendering
111 246 6FF6
Spawn and render enemy on screen
112 56 7038
Load ship screen attributes
112 59 703B
Load fighter screen attributes
112 62 703E
Load tank screen attributes
112 70 7046
Set XOR blending mode for sprite rendering
112 81 7051
Render fuel station
112 108 706C
Render balloon
112 142 708E
Main viewport slot processing loop.
113 4 7104
Ship or helicopter operation routine
113 19 7113
Advance left-facing ship or helicopter
113 40 7128
Continue ship/helicopter rendering
113 85 7155
Reset left-moving fighter position
113 88 7158
Fighter operation routine
113 107 716B
Continue fighter operation
113 146 7192
Advance right-facing fighter
113 159 719F
Reset right-moving fighter position
113 162 71A2
Animate tank shell explosion
114 14 720E
Finish tank shell explosion animation
114 36 7224
Handle non-activated object
114 72 7248
Load right-facing helicopter rotor sprite
114 76 724C
Animate object (helicopter rotor)
114 89 7259
Animate helicopter rotor
114 139 728B
Advance tank right by 4 pixels
114 144 7290
Signal road tank at center
114 150 7296
Tank operation routine
114 230 72E6
Set XOR/XOR blending mode
114 239 72EF
Set OR/OR blending mode
114 248 72F8
Adjust tank position for left orientation
114 253 72FD
Adjust tank position for right orientation
115 2 7302
Operate tank on river bank
115 67 7343
Initialize tank shell state
115 88 7358
Cancel and remove tank shell
115 94 735E
Check shell initialization condition
115 128 7380
Invert coordinate for position calculation
115 131 7383
Tank shell state flags and speed
115 132 7384
Tank shell trajectory step (0-7)
115 133 7385
Tank shell position (BC format: C=X, B=Y)
115 135 7387
Invert shell coordinate delta
115 142 738E
Invert helicopter missile offset
115 147 7393
Operate helicopter missile
115 208 73D0
Remove helicopter missile
115 216 73D8
Add X offset for right-facing missile spawn
115 221 73DD
Render helicopter missile (spawn new)
116 21 7415
Handle helicopter missile collision
116 65 7441
Operate tank shell
116 160 74A0
Erase off-screen tank shell
116 198 74C6
Trigger tank shell explosion
116 228 74E4
Remove tank shell from game
116 238 74EE
Handle tank after bridge destruction
117 70 7546
Get bridge number for player 1
117 76 754C
Operate fuel station
117 138 758A
Clip fuel station height to viewport
117 162 75A2
Advance right-facing ship or helicopter
117 186 75BA
Load enemy sprite pointer
117 208 75D0
Reverse enemy direction at river bank
118 39 7627
Reset current_slot_ptr to the start of viewport_slots.
118 46 762E
Remove an object from the viewport array.
118 73 7649
Operate balloon movement and rendering.
118 172 76AC
A useless procedure that unconditionally jumps to operate_viewport_slots.
118 175 76AF
Right-facing balloon movement.
118 218 76DA
Handle balloon terrain collision.
119 39 7727
Unused
120 0 7800
Control type chosen from the dialog before the validation
120 1 7801
Overview mode flag ($00 - No, $01 - Yes)
120 2 7802
Stores the number of remaining iterations before the control choice dialog switches to overview mode
120 4 7804
Clear screen and enter setup menu.
120 16 7810
Temporary stack pointer used by the control choice dialog
120 18 7812
Keyboard configuration;
122 185 7AB9
Initial game setup
122 205 7ACD
Wait until the user chooses a valid control type or switch to the overview mode on timeout.
123 7 7B07
Wait until the user chooses a valid game mode.
123 87 7B57
Switch to overview/demo mode on timeout.
123 97 7B61
Unused
128 0 8000
Status line 1: fuel gauge and lives display.
128 49 8031
Status line 2: player scores header.
128 79 804F
Status line 3: bridge number position.
128 82 8052
Status line 3 text: "BRIDGE" label.
128 90 805A
Status line 4: "FUEL" label.
128 95 805F
End marker for status_line_4 length calculation
128 99 8063
River bank shape profiles (15 profiles × 16 bytes = 240 bytes).
129 83 8153
Game Over message.
129 130 8182
Credits message with copyright and Activision logo.
129 229 81E5
Unused
130 93 825D
User-defined graphics data (13 characters).
130 197 82C5
Solid fill pattern (48 bytes of $FF).
130 245 82F5
Sprite erasure pattern (60 bytes of $00).
131 49 8331
Terrain pixels for pre/post bridge sections (2×16 bytes).
131 81 8351
Road and bridge pixel patterns (2×16 bytes).
131 113 8371
Road and bridge color attributes (2×16 bytes).
131 145 8391
Unused alternate road attributes.
131 177 83B1
Player plane sprite (4 frames × 16 bytes).
131 241 83F1
Player plane banked sprite (4 frames × 16 bytes).
132 49 8431
Player missile sprite (4 frames × 8 bytes).
132 81 8451
Missile trail sprite (4 frames × 8 bytes).
132 113 8471
Explosion sprite frame 1 (2×1 tiles).
132 129 8481
Explosion sprite frame 2 (2×1 tiles).
132 145 8491
Explosion sprite frame 3 (2×1 tiles).
132 161 84A1
Array [4] of rock sprites (3×2 tiles, 48 bytes).
133 97 8561
Control selection menu text.
133 179 85B3
Array [5] arrays of enemy headed left sprites (each element is 3×1 tiles × 4 frames = 96 bytes).
135 147 8793
Array [5] arrays of enemy headed right sprites (each element is 3×1 tiles × 4 frames = 96 bytes).
137 114 8972
Array [4] of balloon sprites (2×2 tiles, 32 bytes).
137 242 89F2
Left terrain edge masks (4 widths: 10, 12, 14, 16 pixels).
137 250 89FA
Right terrain edge masks (4 widths: 16, 14, 12, 10 pixels).
138 2 8A02
Generate firing sound effect.
138 27 8A1B
Scroll the text crawl row left by 1 pixel.
138 51 8A33
Initialize UDG and screen attributes.
138 78 8A4E
Calculate screen address from pixel coordinates.
138 134 8A86
Fuel sprite
138 184 8AB8
Helicopter rotor sprite (left-facing, 4 frames × 4 bytes).
138 200 8AC8
Helicopter rotor sprite (right-facing, 4 frames × 4 bytes).
138 216 8AD8
Unused explosion animation sprite (6 frames × 8 bytes).
139 8 8B08
Pointer to collision handler routine at collision_dispatcher. Called when sprite rendering detects pixel overlap.
139 10 8B0A
Previous object coordinates (Y high, X low). Position before movement, used for sprite erasure.
139 12 8B0C
Current object coordinates (Y high, X low). Position after movement, used for sprite drawing.
139 14 8B0E
Pointer to current sprite frame data. Set before calling render routines.
139 16 8B10
Pointer to sprite data for erasure. Points to previous frame or erase pattern.
139 18 8B12
Screen memory address for drawing new sprite position. Calculated from object_coordinates.
139 20 8B14
Screen memory address for erasing old sprite position. Calculated from previous_object_coordinates.
139 22 8B16
Output sprite pointer after rendering. Advanced by frame size during render loop.
139 24 8B18
Unused
139 26 8B1A
Sprite width in tiles (1-3). Used by render loop to process correct number of bytes per row.
139 27 8B1B
Unused
139 30 8B1E
Render a sprite at position from previous_object_coordinates.
139 60 8B3C
Render an object with collision detection.
139 112 8B70
Process one row of sprite rendering.
139 148 8B94
Adjust screen address for third-of-screen crossing.
139 163 8BA3
Process old position screen address adjustment.
139 198 8BC6
Adjust old position for third-of-screen crossing.
140 11 8C0B
Render one row of sprite data to screen.
140 27 8C1B
Self-modifying blending operation (erasure).
140 60 8C3C
Self-modifying blending operation (drawing).
140 69 8C45
Jump to collision dispatcher
140 74 8C4A
Unused
143 252 8FFC
Tank shell explosion sprite (6 frames × 32 bytes).
144 188 90BC
Player 1 score ones and tens digits (2 ASCII chars)
144 190 90BE
Player 1 score hundreds and thousands digits
144 192 90C0
Player 1 score ten-thousands and hundred-thousands digits
144 194 90C2
Player 2 score ones and tens digits (2 ASCII chars)
144 196 90C4
Player 2 score hundreds and thousands digits
144 198 90C6
Player 2 score ten-thousands and hundred-thousands digits
144 200 90C8
High score storage for bridge 1 (6 ASCII digits).
144 206 90CE
High score storage for bridges 2-4 (18 ASCII digits, 6 per bridge).
144 224 90E0
Add score points for a hit target
145 9 9109
Add a life to the current player.
145 34 9122
Update and print score for current player.
145 59 913B
Increase a digit in the player 1's score.
145 75 914B
Print a digit from player 1's score.
145 105 9169
Increase a digit in the player 2's score.
145 121 9179
Print a digit from player 2's score.
145 145 9191
Handle carry for player 1's score digit.
145 169 91A9
Handle carry for player 2's score digit.
145 193 91C1
Print player 2's score on the status line.
145 232 91E8
Print player 2 score area or high score on status line.
146 58 923A
Game mode configuration byte
146 59 923B
Player 1 lives remaining (0-3). Initialized to LIVES_INITIAL (4) at new game, then immediately decremented to 3 at the end of the first scroll-in (play). Decremented again at the end of each subsequent scroll-in after a death. Game over is triggered when 0 at the time of the player's next death.
146 60 923C
Player 2 lives remaining (0-3). Initialized to LIVES_INITIAL (4) at new game, then immediately decremented to 3 at the end of the first scroll-in (play). Decremented again at the end of each subsequent scroll-in after a death. Game over is triggered when 0 at the time of the player's next death.
146 61 923D
Current active player ($01=PLAYER_1, $02=PLAYER_2).
146 62 923E
Print lives for current player.
146 79 924F
Continue printing lives after count has been loaded.
146 100 9264
Print six spaces to clear old lives display.
146 119 9277
Player 2 branch of print_lives.
146 131 9283
Pointer to state_controls at state_controls. Allows indirect access to control state bitmask.
146 133 9285
Saved BC register during attribute setting. Preserved across attribute routine calls.
146 135 9287
Saved DE register during attribute setting. Preserved across attribute routine calls.
146 137 9289
Saved HL register during attribute setting. Preserved across attribute routine calls.
146 139 928B
Sprite width in tiles for attribute routine. Determines how many attribute cells to update.
146 141 928D
Set screen attributes for sprite area.
147 93 935D
Return point when attribute color is zero.
147 103 9367
Early exit from old position attribute loop.
147 107 936B
Early exit from new position attribute loop.
147 111 936F
Handle old position attributes when sprite is at screen top (row 0).
147 136 9388
Handle new position attributes when sprite is at screen top (row 0).
147 161 93A1
Compare two 6-digit scores.
147 184 93B8
Return 1 (first score less than second).
147 187 93BB
Return $FF (first score greater than second).
147 190 93BE
Update high score table from current player score.
147 242 93F2
Check if player 2 score beats player 1 score.
148 10 940A
Clear the screen by setting all pixel bytes to $00 and all attributes to the value set in D.
148 35 9423
Load pointer to current player's lives counter.
148 48 9430
Unused
149 0 9500
Level terrain data (48 levels × 256 bytes = 12,288 bytes).
198 0 C600
Island shape definitions (35 islands × 3 bytes = 105 bytes).
198 105 C669
Unused
200 0 C800
Level object spawn data (48 levels × 256 bytes = 12,288 bytes total).