Address Label Description
5B80 LOADER
The loader's routine: unscramble the game and start it
5CB0 NMIADD
The dispatcher's jump
5E00 ENTRY
Where the loader enters the game
BDFE START
The start: the first protection check, and every variable cleared
BE0F NEW_GAME
Set up a new game, then run the main loop
BEDF PERCENTAGE
Work out the percentage of the game done
BF36 PRINT_PERCENTAGE
Print the percentage
BF48 VISIT_CELL
Mark the knight's cell visited, and sound a new one with a building
BF95 SPAWN_CREATURE
Every 256 turns, bring the creature into the knight's cell
BFF1 CREATURE_UPDATE
The update routine for the creature (graphics 136-139)
C02C STEER_AT_KNIGHT
Step the thing at IX two units towards the knight along each axis
C057 CLEAR_MONSTERS
Empty the six monster records
C069 NEAR_KNIGHT
Is the thing at IX less than C cells from the knight?
C083 MONSTER112_UPDATE
The update routine for a monster of graphics 112-127
C0D9 MONSTER_TOO_FAR
Forget a monster that is too far from the knight
C0DE HIT_DESTROYS
An antibody's strike that destroys the monster: 2500 points
C0ED HIT_CHANGES
An antibody's strike that changes the monster into the next kind: 2000 points
C101 HIT_SPLITS
An antibody's strike that splits the monster in two: 1500 points
C152 HIT_DEMOTES
An antibody's strike that turns the monster into one of graphics 64-79: 1000 points
C164 APPEARING_UPDATE
The update routine for a monster appearing (graphics 128-131)
C19C NEAREST_VILLAIN
Which villain is nearest the thing at IX?
C1B9 VILLAIN_DISTANCE
How far is the villain at IY from the thing at IX?
C1DB STOCK_BUILDINGS
Stock the buildings with finds, then the third protection check
C1FD DRAW_VILLAINS
Draw the four villains on the panel
C28A SCREEN_LINE_UP
Move a screen address up one pixel line
C29A PRINT_HEADING
Print the heading on the panel: north, or south with the town turned round
C2C8 PRINT_COMPASS
Draw the compass on the panel
C2ED ADD_SCORE
Add BC to the score, and print it
C314 PRINT_BCD
Print B bytes of BCD from DE, two digits a byte
C332 BLIP_BY_TURN
The creature's blip: a note chosen by the turn counter
C39D ENDING_BEEP
A note for the ending, a little lower each time
C3AA BUMP_SOUND
The bump: a warble as something walks into a wall
C3BD EFFECT_NOTE
Play this turn's note of the sound effect under way
C3F4 FIRE_SOUND
The sound of a throw
C400 FOOTSTEP
A footstep
C435 PUFF_SOUND
The sound of a puff
C455 APPEAR_SOUND
A monster appearing: a note pitched by its graphic
C463 ARRIVE_SOUND
The knight appearing: a note that rises
C471 CLICK
One wave
C481 PICK_UP_FIND
Taking up a find: which kind of antibody it gives
C489 PICK_UP_THING
Take up a thing the knight touches, if he has room
C4DC COLOUR_CARRIED
Colour the carried things on the panel, flashing an object near its villain
C538 ANTIBODY_STRIKE
Is the thing at IX struck by an antibody?
C54A ANTIBODY_TOUCHING
Does the antibody at IY touch the thing at IX?
C554 OBJECT_STRIKE
Does a thrown object touch its villain?
C55F TOUCHING_KNIGHT
Does the thing at IX touch the knight?
C5B4 NEXT_TURN
Count a turn, and stir the random number
C5CE SPAWN_FIND
Every sixteen turns, a find in the knight's cell if its type has any left
C63D PLAY_TUNE_ONCE
Play the menu's tune at DE, once, until a key is pressed
C656 PLAY_TUNE
Play the tune at DE
C661 PLAY_NOTE
Play one note
C83F DRAW_PANEL_FRAME
Draw the frame round the carried things
C889 COLOUR_STRIP
Colour a strip two cells wide in the play area's attributes
C898 COLOUR_KNIGHT
Colour the knight by the hits he has left
C8B2 FILL_ATTR_RECT
Fill a rectangle of the play area's attributes
C8CA MENU
The menu
C949 FLASH_MENU
Flash the chosen lines on the menu
C9EF PRINT_TEXT_SINGLE_COLOUR
Print a string in one colour
C9FC PRINT_TEXT
Print a string whose first byte is its colour
CA1B TOGGLE_SELECTED
Flash one of B attributes, and steady the rest
CA22 FLASH_NEXT_ONE
The rest of TOGGLE_SELECTED
CA2B DISPLAY_MENU
Draw the menu
CA55 DRAW_PLAY_FRAME
Draw the frame round the play area
CA9D PRINT_BORDER
Draw the border round the screen
CAFD PRINT_BLOCK_ROW
Print a piece several times along a row
CB09 PRINT_BLOCK_COLUMN
Print a piece several times down a column
CB19 PRINT_CHAR
Print a character on the screen
CB3E PRINT_BLOCK
Print four characters as a piece two characters square
CB5B PRINT_CHAR_COLOURED
Print a character and colour its cell
CB71 NEXT_CHAR_ROW
Move a screen address down a character row
CB7B RANDOM_START_CELL
Choose the cell a new game starts in
CBAC NEW_LIFE
Start a new life when the knight's record is empty
CC1D PRINT_LIFE_ICON
Print a life's picture on the panel
CC56 GAME_OVER
Game over: the percentage and the score, then the menu, or the ending if the villains are gone
CD02 CLEAR_OBJECTS
Empty all 23 object records
CD10 ENDING_PIT_FRONT
The ending: the front of the pit (graphic 152), and the end of the ending
CD58 ENDING_VILLAIN
The ending: a villain carried over the pit and sunk into it (graphics 144-151)
CD9E STEP_TOWARDS_X
How far an ending picture should move across this turn
CDDF GAME_OVER_PAUSE
Wait about half a second
CDE8 SPAWN_MONSTER
Bring a monster into a cell next to the knight's
CE89 WANDERING_MONSTER
The monsters of graphics 64-79: wander, and hurt the knight
CEF8 NEXT_FRAME_MOD4
Step an object through four frames
CF08 DRAW_CELLS
Draw the cells round the knight, back to front
CFAF LIST_THINGS_IN_CELL
List the things in a cell
CFF2 SORT_AND_DRAW_THINGS
Draw the listed things, furthest back first
D0C4 DEPTH_KEEP
The candidate stays
D0C5 DEPTH_SWAP
The other thing becomes the candidate
D0D0 DEPTH_BY_CORNERS
Order two things whose boxes overlap on both axes
D17D TURN_CELL
Turn a cell round with the town
D18E TURN_POSITION
Turn a position round with the town
D19D DRAW_OUTLINE
Draw a building's outline on the ground
D1FA OUTLINE_NEAR_FACES
Draw the edges of a building definition's two faces
D22D STEP_RIGHT_UP
Move the drawing position a column right and up
D232 EDGE_RIGHT_UP
Move the drawing position a column right and up, past the column's tiles
D24B EDGE_RIGHT_DOWN
Move the drawing position a column right and down, past the column's tiles
D250 STEP_RIGHT_DOWN
Move the drawing position a column right and down
D255 EDGE_LEFT_UP
Move the drawing position a column left and up, past the column's tiles
D26E EDGE_LEFT_DOWN
Move the drawing position a column left and down, past the column's tiles
D273 DRAW_EDGE
Draw the edge picture under one column of a building
D2A2 CLIP_EDGE
Draw an edge picture that starts below the play area
D2B2 PUT_EDGE
OR a 16-pixel picture into the buffer
D356 COLOUR_WALL
Colour a column of wall up to the top of the play area
D372 DRAW_WALLS
Draw a building's walls
D3C2 DRAW_WALL_COLUMN
Draw one column of a wall, unless a nearer wall has it
D415 CLIP_TILE
Draw a tile that starts below the play area
D425 PUT_TILE
Draw a tile of wall
D4F3 PROJECT_THING
Where a thing is on the screen
D508 PROJECT_CELL
Where a cell's corner is on the screen
D564 LOOK_UP_CELL
The type of a cell of the town
D589 TABLE_WORD
Look up a word in a table
D593 DISPATCH
Jump to the routine a table gives for A
D6D5 NO_UPDATE
An update routine that does nothing
D6D6 VILLAIN_SPARKLES
Send four sparkles out from a villain destroyed
D70A SPARKLE_FLY
The update routine for a sparkle from a destroyed villain (graphics 140-143)
D727 SPEED_BONUS
The update routine for the bonus of graphic 2: a faster walk
D74C HITS_BONUS
The update routine for the bonus of graphic 3: all three hits back
D76C PLACE_BONUS
Put a bonus near the knight when there is none
D7D8 VANISHING
The update routine for something vanishing (graphics 12-15)
D7ED ANTIBODY_FLIGHT
The update routine for an antibody in flight (graphics 80-95)
D80C OBJECT_FLIGHT
The update routine for a thrown object (graphics 8-11)
D847 VILLAIN_DYING
The update routine for a dying villain (graphics 132-135)
D865 CHECK_QUEST_DONE
End the game when the four villains are gone and their sparkles have left the screen
D88E PLACE_OBJECTS
Put the four objects in random cells at a new game
D8E7 PLACE_VILLAINS
Put the four villains in random cells at a new game
D942 OBJECT_LYING
The update routine for an object lying in the town (graphics 4-7)
D94F VILLAIN_WANDER
The update routine for a villain (graphics 96-111)
D978 FACING_PICTURE
Set a villain's or a monster's picture for its facing
D9A3 FIND_WANDER
The update routine for a find in a building (graphics 48-63)
D9EB UPDATE_TOP
The update routine for the knight's top (graphics 22, 30, 32-47)
DA7A UPDATE_KNIGHT
The update routine for the knight's legs (graphics 16-21, 24-29)
DAB7 KNIGHT_THROWS
Throw the last thing taken up
DB68 TURN_TOWN
Turn the town round when its key is let go
DB89 TURN_KNIGHT
Turn the knight, by the controls
DC43 SWAP_STICK
Turn a stick's directions round with the town
DC60 KNIGHT_WALKS
Walk, or come to a stop on the grid
DC79 COAST_PLUS_V
Come to a stop facing +V
DC92 COAST_PLUS_U
Come to a stop facing +U
DC97 COAST_MINUS_V
Come to a stop facing -V
DC9E COAST_MINUS_U
Come to a stop facing -U
DCA3 STAND_ON_GRID
Stand still, on the grid
DCA8 WALK_ON
Walk on, speeding up
DCE0 SET_STEP
Set a record's step from its speed and facing
DD01 APPLY_STEP
Move a record by its step
DD28 STEER
Decide whether a walker turns: at a wall, when its count runs out, or towards the knight
DD72 STEER_EITHER
Turn a chaser towards the knight
DD99 KNIGHT_DIRECTION
Which way is the knight from a record?
DDCF WANDER_STEP
Now and then give a wanderer a new random step
DDFC RANDOM_STEP
A random step from the bits of a byte
DE0D MOVE_SPLIT
Trim a two-way step at the walls, one axis at a time
DE59 MOVE_CLIPPED
Trim a record's step at the town's walls
DE72 CLIP_PLUS_V
Trim a step along +V at the walls
DED3 CLIP_PLUS_U
Trim a step along +U at the walls
DF34 CLIP_MINUS_V
Trim a step along -V at the walls
DF97 CLIP_MINUS_U
Cut a step in -U short at the boxes of the cells ahead
DFFA CUT_STEP_PLUS_V
Cut a step in +V short at a box of a cell
E00B CUT_STEP_MINUS_V
Cut a step in -V short at a box of a cell
E013 CUT_STEP_PLUS_U
Cut a step in +U short at a box of a cell
E020 CUT_STEP_MINUS_U
Cut a step in -U short at a box of a cell
E028 PLACE_IN_CELL
Look up a cell of the town, and where the object is in it
E063 HIT_BOXES_U
Does the moved object run into a box of a cell? Give the overlap in U
E087 OVERLAP_U
Do the moved object and a box overlap in U?
E0A0 HIT_BOXES_V
Does the moved object run into a box of a cell? Give the overlap in V
E0C4 OVERLAP_V
Do the moved object and a box overlap in V?
E0DD NEGATE_HL
HL = -HL
E0E5 SIGN_EXTEND_A
HL = A, read as a signed number
E0EE HL_EQUALS_DE_X_A
HL = DE * A
E0FB MAKE_TABLES
Build the drawing tables
E148 COPY_BUFFER
Copy the play area's pixels from the buffer to the screen
E1AD COPY_ATTR_BUFFER
Copy the play area's attributes from the buffer to the screen
E200 SHOW_PLAY_AREA
Show this turn's play area, and clear the buffers for the next
E239 READ_KEYS
Read a half-row of the keyboard
E241 READ_CONTROLS
Read the controls into CONTROLS
E32C PAUSE
Pause, when SPACE or CAPS SHIFT is pressed on its own
E353 TURN_SPRITE
Find an object's sprite, and turn its stored data the way the object wants it
E3D6 MIRROR_SPRITE
Mirror a sprite's data, whichever way it is stored now
E3D9 DRAW_SPRITE
Draw one object from the draw list
E49F SPRITE_ALIGNED_RUN
The unrolled row of a byte-aligned sprite
E4A7 SPRITE_ALIGNED_FOUR
The rest of the byte-aligned run
E4C9 SPRITE_ROW
Start a row of a sprite
E4CD SPRITE_SHIFTED_RUN
The unrolled row of a shifted sprite
E4DF SPRITE_SHIFTED_FOUR
The rest of the shifted run, and the step to the next row
E53A BUFFER_ADDRESS
The buffer address of a pixel position
E556 CALC_VRAM_ADDR
Display address of a pixel position
E579 ATTR_ADDRESS
The attribute buffer address of a pixel position
E596 ADD_HL_A
HL = HL + A
E59D CLEAR_SCREEN
Clear the screen
E5A8 CLR_BITMAP_MEMORY
Clear the display's pixels
E5B0 CLR_ATTRIBUTE_MEMORY
Set the display's attributes to bright white ink on black paper
E5BA CLEAR_MEMORY
Clear BC bytes from HL