Skip to navigation

Elite on the BBC Micro

List of all subroutines [Cassette version]

This index contains every subroutine and entry point that appears in the source code for the cassette version of Elite, grouped by category. An entry points is a label within a subroutine that is called from outside the subroutine, which typically implements a subset or variation of the functionality of the parent subroutine.

Charts
------

hmSelect the closest system and redraw the chart crosshairs
TT103Draw a small set of crosshairs on a chart
TT105Draw crosshairs on the Short-range Chart, with clipping
TT114Display either the Long-range or Short-range Chart
TT123Move galactic coordinates by a signed delta
TT16Move the crosshairs on a chart
TT180Contains an RTS
TT22Show the Long-range Chart (red key f4)
TT23Show the Short-range Chart (red key f5)

Copy protection
---------------

BEGIN% (Loader)Single-byte decryption and copying routine, run on the stack
CHECKER (Loader)Run checksum checks on tokens, loader and tape block count
David7 (Loader)Part of the multi-jump obfuscation code in PROT1
DOMOVE (Loader)Multi-byte decryption and copying routine, run on the stack
doPROT1 (Loader)Routine to self-modify the loader code
LBL (Big Code file)Checksum the two pages of code that were copied from UU% to LE%
LBL+2 (Big Code file)Contains an RTS
swine (Loader)Resets the machine if the copy protection detects a problem

Dashboard
---------

ABORTDisarm missiles and update the dashboard indicators
ABORT2Set/unset the lock target for a missile and update the dashboard
BULBDraw an indicator bulb on the dashboard
BULB-2Set the Y screen address
BUMP2Bump up the value of the pitch or roll dashboard indicator
cntrApply damping to the pitch or roll dashboard indicator
COMPASUpdate the compass
DIALS (Part 1 of 4)Update the dashboard: speed indicator
DIALS (Part 2 of 4)Update the dashboard: pitch and roll indicators
DIALS (Part 3 of 4)Update the dashboard: four energy banks
DIALS (Part 4 of 4)Update the dashboard: shields, fuel, laser & cabin temp, altitude
DILThe range of the indicator is 0-16 (for the energy banks)
DIL-1The range of the indicator is 0-32 (for the speed indicator)
DIL2Update the roll or pitch indicator on the dashboard
DILXUpdate a bar-based indicator on the dashboard
DILX+2The range of the indicator is 0-64 (for the fuel indicator)
DOTDraw a dash on the compass
ECBLBLight up the E.C.M. indicator bulb ("E") on the dashboard
ECBLB2Start up the E.C.M. (indicator, start countdown and make sound)
MSBARDraw a specific indicator in the dashboard's missile bar
msblobDisplay the dashboard's missile indicators in green
PZWFetch the current dashboard colours, to support flashing
RE2+2Restore A from T and return from the subroutine
RE3+2Auto-recentre the value in X, if keyboard auto-recentre is configured
REDU2Reduce the value of the pitch or roll dashboard indicator
SCANDisplay the current ship on the scanner
SP1Draw the space station on the compass
SP2Draw a dot on the compass, given the planet/station vector
SPBLBLight up the space station indicator ("S") on the dashboard
WPSHPSClear the scanner, reset the ball line and sun line heaps

Drawing circles
---------------

BLINEDraw a circle segment and add it to the ball line heap
CHKONCheck whether any part of a circle appears on the extended screen
CIRCLEDraw a circle for the planet
CIRCLE2Draw a circle (for the planet or chart)
HFS2Draw the launch or hyperspace tunnel
LAUNMake the launch sound and draw the launch tunnel
LL164Make the hyperspace sound and draw the hyperspace tunnel
TT128Draw a circle on a chart
TT14Draw a circle with crosshairs on a chart

Drawing lines
-------------

EDGESDraw a horizontal line given a centre and a half-width
HL6Contains an RTS
HLOINDraw a horizontal line from (X1, Y1) to (X2, Y1)
HLOIN2Remove a line from the sun line heap and draw it on-screen
LASLIDraw the laser lines for when we fire our lasers
LASLI-1Contains an RTS
LASLI2Just draw the current laser lines without moving the centre point, draining energy or heating up. This has the effect of removing the lines from the screen
LL118Move a point along a line until it is on-screen
LL118-1Contains an RTS
LL145 (Part 1 of 4)Clip line: Work out which end-points are on-screen, if any
LL145 (Part 2 of 4)Clip line: Work out if any part of the line is on-screen
LL145 (Part 3 of 4)Clip line: Calculate the line's gradient
LL145 (Part 4 of 4)Clip line: Call the routine in LL188 to do the actual clipping
LL147Don't initialise the values in SWAP or A
LL30LL30 is a synonym for LOIN and draws a line from (X1, Y1) to (X2, Y2)
LOIN (Part 1 of 7)Draw a line: Calculate the line gradient in the form of deltas
LOIN (Part 2 of 7)Draw a line: Line has a shallow gradient, step right along x-axis
LOIN (Part 3 of 7)Draw a shallow line going right and up or left and down
LOIN (Part 4 of 7)Draw a shallow line going right and down or left and up
LOIN (Part 5 of 7)Draw a line: Line has a steep gradient, step up along y-axis
LOIN (Part 6 of 7)Draw a steep line going up and left or down and right
LOIN (Part 7 of 7)Draw a steep line going up and right or down and left
NLINDraw a horizontal line at pixel row 23 to box in a title
NLIN2Draw a screen-wide horizontal line at the pixel row in A
NLIN3Print a title and a horizontal line at row 19 to box it in
NLIN4Draw a horizontal line at pixel row 19 to box in a title
TT15Draw a set of crosshairs

Drawing pixels
--------------

CPIX2Draw a single-height dash on the dashboard
CPIX4Draw a double-height dot on the dashboard
PIX (Loader)Draw a single pixel at a specific coordinate
PIXELDraw a 1-pixel dot, 2-pixel dash or 4-pixel square
PIXEL2Draw a stardust particle relative to the screen centre
PX3Plot a single pixel at (X, Y) within a character block
PX4Contains an RTS

Drawing planets
---------------

PL2Remove the planet or sun from the screen
PL2-1Contains an RTS
PL21Return from a planet/sun-drawing routine with a failure flag
PL44Clear the C flag and return from the subroutine
PL9 (Part 1 of 3)Draw the planet, with either an equator and meridian, or a crater
PL9 (Part 2 of 3)Draw the planet's equator and meridian
PL9 (Part 3 of 3)Draw the planet's crater
PLANETDraw the planet or sun
PLL1 (Loader)Draw Saturn on the loading screen
PLS1Calculate (Y A) = nosev_x / z
PLS2Draw a half-circle
PLS22Draw a circle or half-circle
PLS3Calculate (Y A P) = 222 * roofv_x / z
PLS4Calculate CNT2 = arctan(P / A) / 4
PLS5Calculate roofv_x / z and roofv_y / z
PLS6Calculate (X K) = (A P) / (z_sign z_hi z_lo)
WP1Reset the ball line heap
WPLS2Remove the planet from the screen

Drawing ships
-------------

DOEXPDraw an exploding ship
EE51Remove the current ship from the screen, called from SHPPT before drawing the ship as a point
LL10-1Contains an RTS
LL70+1Contains an RTS (as the first byte of an LDA instruction)
LL81+2Draw the contents of the ship line heap, used to draw the ship as a dot from SHPPT
LL9 (Part 1 of 12)Draw ship: Check if ship is exploding, check if ship is in front
LL9 (Part 2 of 12)Draw ship: Check if ship is in field of view, close enough to draw
LL9 (Part 3 of 12)Draw ship: Set up orientation vector, ship coordinate variables
LL9 (Part 4 of 12)Draw ship: Set visibility for exploding ship (all faces visible)
LL9 (Part 5 of 12)Draw ship: Calculate the visibility of each of the ship's faces
LL9 (Part 6 of 12)Draw ship: Calculate the visibility of each of the ship's vertices
LL9 (Part 7 of 12)Draw ship: Calculate the visibility of each of the ship's vertices
LL9 (Part 8 of 12)Draw ship: Calculate the screen coordinates of visible vertices
LL9 (Part 9 of 12)Draw ship: Draw laser beams if the ship is firing its laser at us
LL9 (Part 10 of 12)Draw ship: Calculate the visibility of each of the ship's edges
LL9 (Part 11 of 12)Draw ship: Add all visible edges to the ship line heap
LL9 (Part 12 of 12)Draw ship: Draw all the visible edges from the ship line heap
PROJProject the current ship onto the screen
SHPPTDraw a distant ship as a point rather than a full wireframe

Drawing suns
------------

FLFLLSReset the sun line heap
RTS2Contains an RTS
SUN (Part 1 of 4)Draw the sun: Set up all the variables needed
SUN (Part 2 of 4)Draw the sun: Start from bottom of screen and erase the old sun
SUN (Part 3 of 4)Draw the sun: Continue to move up the screen, drawing the new sun
SUN (Part 4 of 4)Draw the sun: Continue to the top of the screen, erasing old sun
WPLSRemove the sun from the screen
WPLS-1Contains an RTS

Equipment
---------

cContains an RTS
eqSubtract the price of equipment from the cash pot
EQSHPShow the Equip Ship screen (red key f3)
errBeep, pause and go to the docking bay (i.e. show the Status Mode screen)
presGiven an item number A with the item name in recursive token Y, show an error to say that the item is already present, refund the cost of the item, and then beep and exit to the docking bay (i.e. show the Status Mode screen)
prxReturn the price of a piece of equipment
prx-3Return the price of the item with number A - 1 c Contains an RTS
qvPrint a menu of the four space views, for buying lasers

Flight
------

DENGYDrain some energy from the energy banks
ESCAPELaunch our escape pod
GhyPerform a galactic hyperspace jump
hy6Print a message to say no hyperspacing inside the station
hypStart the hyperspace process
LO2Contains an RTS
LOOK1Initialise the space view
MJPProcess a mis-jump into witchspace
OOPSTake some damage
OUCHPotentially lose cargo or equipment following damage
PLUTFlip the coordinate axes for the four different views
ptgCalled when the user manually forces a mis-jump
PU1-1Contains an RTS
SESCPSpawn an escape pod from the current (parent) ship
SHDCharge a shield and drain some energy from the energy banks
SIGHTDraw the laser crosshairs
TT110Launch from a station or show the front space view
TT18Try to initiate a jump into hyperspace
WARPPerform an in-system jump
wWStart a hyperspace countdown
zZ+1Contains an RTS

Inventory
---------

TT210Show a list of current cargo in our hold, optionally to sell
TT213Show the Inventory screen (red key f9)
TT214Ask a question with a "Y/N?" prompt and return the response

Keyboard
--------

CTRLScan the keyboard to see if CTRL is currently pressed
DK4Scan for pause, configuration and secondary flight keys
DKJ1Read joystick and flight controls
DKS1Scan the keyboard for a flight key
DKS2Read the joystick position
DKS2-1Contains an RTS
DKS3Toggle a configuration setting and emit a beep
DKS4Scan the keyboard to see if a specific key is being pressed
DOKEYScan for the seven primary flight controls
outContains an RTS
RDKEYScan the keyboard for key presses
T95Print the distance to the selected system
TT102Process function key, save key, hyperspace and chart key presses and update the hyperspace counter
TT17Scan the keyboard for cursor key or joystick movement
TT217Scan the keyboard until a key is pressed
U%Clear the key logger

Loader
------

Elite loader (Part 1 of 6) (Loader)Include binaries for recursive tokens, Python blueprint and images
Elite loader (Part 2 of 6) (Loader)Perform a number of OS calls, set up sound, push routines on stack
Elite loader (Part 3 of 6) (Loader)Move and decrypt recursive tokens, Python blueprint and images
Elite loader (Part 4 of 6) (Loader)Copy more code onto stack, decrypt TUT block, set up IRQ1 handler
Elite loader (Part 5 of 6) (Loader)Load main game code, decrypt it, move it to the correct location
Elite loader (Part 6 of 6) (Loader)Set up interrupt vectors, calculate checksums, run main game code

Main loop
---------

FRCEThe entry point for the main game loop if we want to jump straight to a specific screen, by pretending to "press" a key, in which case A contains the internal key number of the key we want to "press"
GOINWe jump here from part 3 of the main flight loop if the docking computer is activated by pressing "C"
M%The entry point for the main flight loop
Main flight loop (Part 1 of 16)Seed the random number generator
Main flight loop (Part 2 of 16)Calculate the alpha and beta angles from the current pitch and roll of our ship
Main flight loop (Part 3 of 16)Scan for flight keys and process the results
Main flight loop (Part 4 of 16)For each nearby ship: Copy the ship's data block from K% to the zero-page workspace at INWK
Main flight loop (Part 5 of 16)For each nearby ship: If an energy bomb has been set off, potentially kill this ship
Main flight loop (Part 6 of 16)For each nearby ship: Move the ship in space and copy the updated INWK data block back to K%
Main flight loop (Part 7 of 16)For each nearby ship: Check whether we are docking, scooping or colliding with it
Main flight loop (Part 8 of 16)For each nearby ship: Process us potentially scooping this item
Main flight loop (Part 9 of 16)For each nearby ship: If it is a space station, check whether we are successfully docking with it
Main flight loop (Part 10 of 16)For each nearby ship: Remove if scooped, or process collisions
Main flight loop (Part 11 of 16)For each nearby ship: Process missile lock and firing our laser
Main flight loop (Part 12 of 16)For each nearby ship: Draw the ship, remove if killed, loop back
Main flight loop (Part 13 of 16)Show energy bomb effect, charge shields and energy banks
Main flight loop (Part 14 of 16)Spawn a space station if we are close enough to the planet
Main flight loop (Part 15 of 16)Perform altitude checks with the planet and sun and process fuel scooping if appropriate
Main flight loop (Part 16 of 16)Process laser pulsing, E.C.M. energy drain, call stardust routine
Main game loop (Part 1 of 6)Spawn a trader (a peaceful Cobra Mk III)
Main game loop (Part 2 of 6)Call the main flight loop, and potentially spawn a trader, an asteroid, or a cargo canister
Main game loop (Part 3 of 6)Potentially spawn a cop, particularly if we've been bad
Main game loop (Part 4 of 6)Potentially spawn a lone bounty hunter, a Thargoid, or up to four pirates
Main game loop (Part 5 of 6)Cool down lasers, make calls to update the dashboard
Main game loop (Part 6 of 6)Process non-flight key presses (red function keys, docked keys)
MAL1Marks the beginning of the ship analysis loop, so we can jump back here from part 12 of the main flight loop to work our way through each ship in the local bubble. We also jump back here when a ship is removed from the bubble, so we can continue processing from the next ship
me3Used by me2 to jump back into the main game loop after printing an in-flight message
MLOOPThe entry point for the main game loop. This entry point comes after the call to the main flight loop and spawning routines, so it marks the start of the main game loop for when we are docked (as we don't need to call the main flight loop or spawning routines if we aren't in space)
thaConsider spawning a Thargoid (22% chance)
TT100The entry point for the start of the main game loop, which calls the main flight loop and the moves into the spawning routine

Market
------

BAY2Jump into the main loop at FRCE, setting the key "pressed" to red key f9 (so we show the Inventory screen)
gnumGet a number from the keyboard
tnprWork out if we have space for a specific amount of cargo
TT151Print the name, price and availability of a market item
TT152Print the unit ("t", "kg" or "g") for a market item
TT160Print "t" (for tonne) and a space
TT161Print "kg" (for kilograms)
TT163Print the headers for the table of market prices
TT167Show the Market Price screen (red key f7)
TT16aPrint "g" (for grams)
TT208Show the Sell Cargo screen (red key f2)
TT219Show the Buy Cargo screen (red key f1)
varCalculate QQ19+3 = economy * |economic_factor|

Maths (Arithmetic)
------------------

ADDCalculate (A X) = (A P) + (S R)
DV41Calculate (P R) = 256 * DELTA / A
DV42Calculate (P R) = 256 * DELTA / z_hi
DVID3B2Calculate K(3 2 1 0) = (A P+1 P) / (z_sign z_hi z_lo)
DVID4Calculate (P R) = 256 * A / Q
DVIDTCalculate (P+1 A) = (A P) / Q
FMLTUCalculate A = A * Q / 256
FMLTU2Calculate A = K * sin(A)
GC2Calculate (Y X) = (A P) * 4
GCASHCalculate (Y X) = P * Q * 4
LCASHSubtract an amount of cash from the cash pot
LL120Calculate (Y X) = (S x1_lo) * XX12+2 or (S x1_lo) / XX12+2
LL121Calculate (Y X) = (S R) / Q and set the sign to the opposite of the top byte on the stack
LL122Calculate (Y X) = (S R) * Q and set the sign to the opposite of the top byte on the stack
LL123Calculate (Y X) = (S R) / XX12+2 or (S R) * XX12+2
LL128Contains an RTS
LL129Calculate Q = XX12+2, A = S EOR XX12+3 and (S R) = |S R|
LL133Negate (Y X) and return from the subroutine LL128 Contains an RTS
LL28Calculate R = 256 * A / Q
LL28+4Skips the A >= Q check and always returns with C flag cleared, so this can be called if we know the division will work
LL31Skips the A >= Q check and does not set the R counter, so this can be used for jumping straight into the division loop if R is already set to 254 and we know the division will work
LL38Calculate (S A) = (S R) + (A Q)
LL5Calculate Q = SQRT(R Q)
LL61Calculate (U R) = 256 * A / Q
LL62Calculate 128 - (U R)
MADCalculate (A X) = Q * A + (S R)
MAS3Calculate A = x_hi^2 + y_hi^2 + z_hi^2 in the K% block
MCASHAdd an amount of cash to the cash pot
MLS1Calculate (A P) = ALP1 * A
MLS2Calculate (S R) = XX(1 0) and (A P) = A * ALP1
MLTU2Calculate (A P+1 P) = (A ~P) * Q
MLTU2-2Set Q to X, so this calculates (A P+1 P) = (A ~P) * X
MLU1Calculate Y1 = y_hi and (A P) = |y_hi| * Q for Y-th stardust
MLU2Calculate (A P) = |A| * Q
MU1Copy X into P and A, and clear the C flag
MU11Calculate (A P) = P * X
MU5Set K(3 2 1 0) = (A A A A) and clear the C flGag
MU6Set P(1 0) = (A A)
MULT1Calculate (A P) = Q * A
MULT12Calculate (S R) = Q * A
MULT3Calculate K(3 2 1 0) = (A P+1 P) * Q
MULTS-2Calculate (A P) = X * A
MULTUCalculate (A P) = P * Q
MUT1Calculate R = XX and (A P) = Q * A
MUT2Calculate (S R) = XX(1 0) and (A P) = Q * A
MUT3Unused routine that does the same as MUT2
PIX1Calculate (YY+1 SYL+Y) = (A P) + (S R) and draw stardust particle
ROOT (Loader)Calculate ZP = SQRT(ZP(1 0))
SPS2Calculate (Y X) = A / 10
SQUAClear bit 7 of A and calculate (A P) = A * A
SQUA2Calculate (A P) = A * A
SQUA2 (Loader)Calculate (A P) = A * A
TAS1Calculate K3 = (x_sign x_hi x_lo) - V(1 0)
TIS1Calculate (A ?) = (-X * A + (S R)) / 96
TIS2Calculate A = A / Q
TIS3Calculate -(nosev_1 * roofv_1 + nosev_2 * roofv_2) / nosev_3
TT113Contains an RTS
Unused duplicate of MULTUUnused duplicate of the MULTU routine

Maths (Geometry)
----------------

ARCTANCalculate A = arctan(P / Q)
FAROFCompare x_hi, y_hi and z_hi with 224
FAROF2Compare x_hi, y_hi and z_hi with A
LL51Calculate the dot product of XX15 and XX16
mDo not include A in the calculation
MA9Contains an RTS
MAS1Add an orientation vector coordinate to an INWK coordinate
MAS2Calculate a cap on the maximum distance to the planet or sun
MAS4Calculate a cap on the maximum distance to a ship
NO1Contains an RTS
NORMNormalise the three-coordinate vector in XX15
SPS1Calculate the vector to the planet and store it in XX15
SPS1+1A BRK instruction
SPS3Copy a space coordinate from the K% block into K3
SPS4Calculate the vector to the space station
TA2Calculate the length of the vector in XX15 (ignoring the low coordinates), returning it in Q
TAS2Normalise the three-coordinate vector in K3
TAS3Calculate the dot product of XX15 and an orientation vector
TIDYOrthonormalise the orientation vectors for a ship

Moving
------

MV40Rotate the planet or sun's location in space by the amount of pitch and roll of our ship
MV45Rejoin the MVEIT routine after the rotation, tactics and scanner code
MVEIT (Part 1 of 9)Move current ship: Tidy the orientation vectors
MVEIT (Part 2 of 9)Move current ship: Call tactics routine, remove ship from scanner
MVEIT (Part 3 of 9)Move current ship: Move ship forward according to its speed
MVEIT (Part 4 of 9)Move current ship: Apply acceleration to ship's speed as a one-off
MVEIT (Part 5 of 9)Move current ship: Rotate ship's location by our pitch and roll
MVEIT (Part 6 of 9)Move current ship: Move the ship in space according to our speed
MVEIT (Part 7 of 9)Move current ship: Rotate ship's orientation vectors by pitch/roll
MVEIT (Part 8 of 9)Move current ship: Rotate ship about itself by its own pitch/roll
MVEIT (Part 9 of 9)Move current ship: Redraw on scanner, if it hasn't been destroyed
MVS4Apply pitch and roll to an orientation vector
MVS5Apply a 3.6 degree pitch or roll to an orientation vector
MVT1Calculate (x_sign x_hi x_lo) = (x_sign x_hi x_lo) + (A R)
MVT1-2Clear bits 0-6 of A before entering MVT1
MVT3Calculate K(3 2 1) = (x_sign x_hi x_lo) + K(3 2 1)
MVT6Calculate (A P+2 P+1) = (x_sign x_hi x_lo) + (A P+2 P+1)
SFS2Move a ship in space along one of the coordinate axes

Save and load
-------------

CHECKCalculate the checksum for the last saved commander data block
GTNMEFetch the name of a commander file to save or load
LODLoad a commander file
QUS1Save or load the commander file
SVESave the commander file
TR1Copy the last saved commander's name from NA% to INWK
TRNMECopy the last saved commander's name from INWK to NA%

Screen mode
-----------

DET1Show or hide the dashboard (for when we die)
IRQ1The main screen-mode interrupt handler (IRQ1V points here)
IRQ1 (Loader)The loader's screen-mode interrupt handler (IRQ1V points here)
WSCANWait for the vertical sync

Sound
-----

BEEPMake a short, high beep
BELLMake a standard system beep
ECMOFSwitch off the E.C.M.
EXNOMake the sound of a laser strike or ship explosion
EXNO-2Set X = 7 and fall through into EXNO to make the sound of a ship exploding
EXNO2Process us making a kill
EXNO3Make an explosion sound
NO3Make a sound from a prepared sound block
NOISEMake the sound whose number is in A
NOS1Prepare a sound block

Stardust
--------

FLIPReflect the stardust particles in the screen diagonal
nWqCreate a random cloud of stardust
NWSTARSInitialise the stardust field
STARSThe main routine for processing the stardust
STARS1Process the stardust for the front view
STARS2Process the stardust for the left or right view
STARS6Process the stardust for the rear view

Start and end
-------------

BR1 (Part 1 of 2)Start or restart the game
BR1 (Part 2 of 2)Show the "Load New Commander (Y/N)?" screen and start the game
DEATHDisplay the death screen
DEATH2Reset most of the game and restart from the title screen
QU5Reset the current commander data block to the last saved commander
RES2Reset a number of flight variables and workspaces
RES4Reset the shields and energy banks, then fall through into RES2 to reset the stardust and the ship workspace at INWK
RESETReset most variables
TITLEDisplay a title screen with a rotating ship and prompt
TT170Main entry point for the Elite game code

Status
------

BADCalculate how bad we have been
BAYGo to the docking bay (i.e. show the Status Mode screen)
STATUSShow the Status Mode screen (red key f8)

Tactics
-------

ANGRYMake a ship hostile
fq1Used to add a cargo canister to the universe
FR1Display the "missile jammed" message
FR1-2Clear the C flag and return from the subroutine
FRMISFire a missile from our ship
FRS1Launch a ship straight ahead of us, below the laser sights
HI1Contains an RTS
HITCHWork out if the ship in INWK is in our crosshairs
SFRMISAdd an enemy missile to our local bubble of universe
TACTICS (Part 1 of 7)Apply tactics: Process missiles, both enemy missiles and our own
TACTICS (Part 2 of 7)Apply tactics: Escape pod, station, lone Thargon, safe-zone pirate
TACTICS (Part 3 of 7)Apply tactics: Calculate dot product to determine ship's aim
TACTICS (Part 4 of 7)Apply tactics: Check energy levels, maybe launch escape pod if low
TACTICS (Part 5 of 7)Apply tactics: Consider whether to launch a missile at us
TACTICS (Part 6 of 7)Apply tactics: Consider firing a laser at us, if aim is true
TACTICS (Part 7 of 7)Apply tactics: Set pitch, roll, and acceleration

Text
----

BPRNTPrint a 32-bit number, left-padded to a specific number of digits, with an optional decimal point
cmnPrint the commander's name
cmn-1Contains an RTS
cplPrint the selected system name
crlfTab to column 21 and print a colon
cshPrint the current amount of cash
dnPrint the amount of cash and beep
dn2Make a short, high beep and delay for 1 second
ee3Print the hyperspace countdown in the top-left of the screen
exPrint a recursive token
fwlPrint fuel and cash levels
me1Erase an old in-flight message and display a new one
me2Remove an in-flight message from the space view
mes9Print a text token, possibly followed by " DESTROYED"
MESSDisplay an in-flight message
ou2Display "E.C.M.SYSTEM DESTROYED" as an in-flight message
ou3Display "FUEL SCOOPS DESTROYED" as an in-flight message
plfPrint a text token followed by a newline
plf2Print text followed by a newline and indent of 6 characters
pr2Print an 8-bit number, left-padded to 3 digits, and optional point
pr2+2Print the 8-bit number in X to the number of digits in A
pr5Print a 16-bit number, left-padded to 5 digits, and optional point
pr6Print 16-bit number, left-padded to 5 digits, no point
prqPrint a text token followed by a question mark
qwPrint a recursive token in the range 128-145
RR3+1Contains an RTS RREN Prints the character definition pointed to by P(2 1) at the screen address pointed to by (A SC). Used by the BULB routine
RRENPrints the character definition pointed to by P(2 1) at the screen address pointed to by (A SC). Used by the BULB routine
rT9Contains an RTS
spcPrint a text token followed by a space
talPrint the current galaxy number
TT11Print a 16-bit number, left-padded to n digits, and optional point
TT146Print the distance to the selected system in light years
TT147Print an error when a system is out of hyperspace range
TT162Print a space
TT162+2Jump to TT27 to print the text token in A
TT26Print a character at the text cursor by poking into screen memory
TT26 (Loader)Print a character at the text cursor (WRCHV points here)
TT27Print a text token
TT41Print a letter according to Sentence Case
TT42Print a letter in lower case
TT43Print a two-letter token or recursive token 0-95
TT44Jumps to TT26 to print the character in A (used to enable us to use a branch instruction to jump to TT26)
TT45Print a letter in lower case
TT46Print a character and switch to capitals
TT48Contains an RTS
TT60Print a text token and a paragraph break
TT67Print a newline
TT68Print a text token followed by a colon
TT69Set Sentence Case and print a newline
TT70Display "MAINLY " and jump to TT72
TT73Print a colon
TT74Print a character
TTX69Print a paragraph break
yplPrint the current system name
ypl-1Contains an RTS

Universe
--------

GINFFetch the address of a ship's data block into INF
GTHGSpawn a Thargoid ship and a Thargon companion
GVLCalculate the availability of market items
hy5Contains an RTS
hyp1Process a jump to the system closest to (QQ9, QQ10)
hyp1+3Jump straight to the system at (QQ9, QQ10) without first calculating which system is closest. We do this if we already know that (QQ9, QQ10) points to a system
hyRContains an RTS
jmpSet the current system to the selected system
KILLSHPRemove a ship from our local bubble of universe
KS1Remove the current ship from our local bubble of universe
KS2Check the local bubble for missiles with target lock
KS3Set the SLSP ship heap pointer after shuffling ship slots
KS4Remove the space station and replace it with the sun
NwS1Flip the sign and double an INWK byte
NWSHPAdd a new ship to our local bubble of universe
NWSPSAdd a new space station to our local bubble of universe
pingSet the selected system to the current system
SFS1Spawn a child ship from the current (parent) ship
SFS1-2Add a missile to the local bubble that has AI enabled, is hostile, but has no E.C.M.
SOLARSet up various aspects of arriving in a new system
SOS1Update the missile indicators, set up the planet data block
TT111Set the current system to the nearest system to a point
TT111-1Contains an RTS
TT20Twist the selected system's seeds four times
TT24Calculate system data from the system seeds
TT25Show the Data on System screen (red key f6)
TT54Twist the selected system's seeds
TT72Used by TT70 to re-enter the routine after displaying "MAINLY" for the economy type
TT81Set the selected system's seeds to those of system 0
ZeInitialise the INWK workspace to a hostile ship

Utility routines
----------------

BOXJust draw the border and (if this is a space view) the view name. This can be used to remove the border and view name, as it is drawn using EOR logic
CLYNSClear the bottom three text rows of the mode 4 screen
command (Loader)Execute an OS command
DEL8Wait for 8/50 of a second (0.16 seconds) DELAY-5 Wait for 2/50 of a second (0.04 seconds)
DELAYWait for a specified time, in 1/50s of a second
DELAY-5Wait for 2/50 of a second (0.04 seconds)
DORNDGenerate random numbers
DORND (Loader)Generate random numbers
DORND2Make sure the C flag doesn't affect the outcome
FX200Set the behaviour of the ESCAPE and BREAK keys
LYNClear most of a row of pixels
OSB (Loader)A convenience routine for calling OSBYTE with Y = 0
osprint (Loader)Print a character
SC5Contains an RTS
TT66Clear the screen and set the current view type
TT66-2Call TT66 with A = 1
TTX66Clear the top part of the screen and draw a white border
ZEROZero-fill pages &9, &A, &B, &C and &D
ZES1Zero-fill the page whose number is in X
ZES2Zero-fill a specific page
ZINFReset the INWK workspace and orientation vectors