Routines
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