Skip to navigation

BBC Micro Elite

List of all subroutines (6502SP version)

This index contains every subroutine and entry point that appears in the source code for the 6502 Second Processor version of BBC Micro 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
------

  • hm - Select the closest system and redraw the chart crosshairs
  • HME2 - Search the galaxy for a system
  • TT103 - Draw a small set of crosshairs on a chart
  • TT105 - Draw crosshairs on the Short-range Chart, with clipping
  • TT114 - Display either the Long-range or Short-range Chart
  • TT123 - Move galactic coordinates by a signed delta
  • TT16 - Move the crosshairs on a chart
  • TT180 - Contains an RTS
  • TT22 - Show the Long-range Chart (red key f4)
  • TT23 - Show the Short-range Chart (red key f5)

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

  • Checksum - Checksum the code from &1000 to &9FFF and check against S%-1
  • DEEOR - Decrypt bytes between &1300 and &9FFF by EOR'ing them with their page offset
  • do65C02 (I/O processor) - Reverse the order of all bytes between the addresses in (1 0) and (3 2) and start the game
  • SOMEPROT (I/O processor) - Implement the OSWORD 249 command (some copy protection)

Dashboard
---------

  • ABORT - Disarm missiles and update the dashboard indicators
  • ABORT2 - Set/unset the lock target for a missile and update the dashboard
  • ADPARAMS (I/O processor) - Implement the OSWRCH 137 command (add a dashboard parameter and update the dashboard when all are received)
  • BUMP2 - Bump up the value of the pitch or roll dashboard indicator
  • cntr - Apply damping to the pitch or roll dashboard indicator
  • COMPAS - Update the compass
  • DIALS - Update the dashboard indicators and flight variables by sending a #RDPARAMS command to the I/O processor
  • DIALS (Part 1 of 4) (I/O processor) - Update the dashboard: speed indicator
  • DIALS (Part 2 of 4) (I/O processor) - Update the dashboard: pitch and roll indicators
  • DIALS (Part 3 of 4) (I/O processor) - Update the dashboard: four energy banks
  • DIALS (Part 4 of 4) (I/O processor) - Update the dashboard: shields, fuel, laser & cabin temp, altitude
  • DIL (I/O processor) - The range of the indicator is 0-16 (for the energy banks)
  • DIL-1 (I/O processor) - The range of the indicator is 0-32 (for the speed indicator)
  • DIL2 (I/O processor) - Update the roll or pitch indicator on the dashboard
  • DILX (I/O processor) - Update a bar-based indicator on the dashboard
  • DILX+2 (I/O processor) - The range of the indicator is 0-64 (for the fuel indicator)
  • djd1 - Auto-recentre the value in X, if keyboard auto-recentre is configured
  • DOBULB (I/O processor) - Implement the #DOBULB 0 command (draw the space station indicator bulb)
  • ECBLB - Light up the E.C.M. indicator bulb ("E") on the dashboard by sending a #DOBULB 255 command to the I/O processor
  • ECBLB (I/O processor) - Implement the #DOBULB 255 command (draw the E.C.M. indicator bulb)
  • ECBLB2 - Start up the E.C.M. (indicator, start countdown and make sound)
  • MSBAR - Draw a specific indicator in the dashboard's missile bar by sending a #DOmsbar command to the I/O processor
  • MSBAR (I/O processor) - Implement the #DOmsbar command (draw a specific indicator in the dashboard's missile bar)
  • msblob - Display the dashboard's missile indicators in green
  • PZW (I/O processor) - Fetch the current dashboard colours, to support flashing
  • PZW2 (I/O processor) - Fetch the current dashboard colours for non-striped indicators, to support flashing
  • RDPARAMS (I/O processor) - Implement the #RDPARAMS command (start receiving a new set of parameters for updating the dashboard)
  • RE2+2 - Restore A from T and return from the subroutine
  • REDU2 - Reduce the value of the pitch or roll dashboard indicator
  • SC48 (I/O processor) - Implement the #onescan command (draw a ship on the 3D scanner)
  • SCAN - Display the current ship on the scanner
  • SCANcol - The colour of the ship on the scanner SCANx1 The screen x-coordinate of the dot on the scanner
  • SCANflg - The sign of the stick height (in bit 7) SCANlen The stick height for the ship on the scanner
  • SCANlen - The stick height for the ship on the scanner SCANcol The colour of the ship on the scanner
  • SCANx1 - The screen x-coordinate of the dot on the scanner SCANy1 The screen y-coordinate of the dot on the scanner
  • SCANy1 - The screen y-coordinate of the dot on the scanner
  • SP1 - Draw the space station on the compass
  • SP2 - Draw a dot on the compass, given the planet/station vector
  • SPBLB - Light up the space station indicator ("S") on the dashboard by sending a #DOBULB 0 command to the I/O processor
  • WPSHPS - Clear the scanner, reset the ball line and sun line heaps

Demo
----

  • DEMON - Show the demo
  • GRIDSET - Populate the line coordinate tables with the lines for the scroll text
  • GRS1 - Populate the line coordinate tables with the lines for a single scroll text character
  • SLIDE - Display a Star Wars scroll text
  • TWIST - Pitch the current ship by a small angle in a positive direction
  • TWIST2 - Pitch in the direction given in A
  • ZZAAP - Draw a vertical red laser line from (128, 67) to (128, 160)

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

  • BLINE - Draw a circle segment and add it to the ball line heap
  • CHKON - Check whether any part of a circle appears on the extended screen
  • CIRCLE - Draw a circle for the planet
  • CIRCLE2 - Draw a circle (for the planet or chart)
  • DOHFX (I/O processor) - Implement the #DOHFX command (update the hyperspace effect flag)
  • HFS1 - Don't clear the screen, and draw 8 concentric rings with the step size in STP
  • HFS2 - Draw the launch or hyperspace tunnel
  • LAUN - Make the launch sound and draw the launch tunnel
  • LL164 - Make the hyperspace sound and draw the hyperspace tunnel
  • LS2FL - Draw the contents of the ball line heap by sending an OSWRCH 129 command to the I/O processor
  • TT128 - Draw a circle on a chart
  • TT14 - Draw a circle with crosshairs on a chart
  • WP1 - Contains an RTS

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

  • ADDBYT (I/O processor) - Implement the OSWRCH 130 command (add a byte to a line and draw it when all bytes are received)
  • BEGINLIN (I/O processor) - Implement the OSWRCH 129 command (start receiving a new line to draw)
  • EDGES - Draw a horizontal line given a centre and a half-width
  • HBFL - Draw the sun lines in the horizontal line buffer in orange by sending an OSWORD 247 command to the I/O processor
  • HBZE - Reset the horizontal line buffer
  • HLOIN - Add a sun line to the horizontal line buffer
  • HLOIN (I/O processor) - Implement the OSWORD 247 command (draw the sun lines in the horizontal line buffer in orange)
  • HLOIN2 - Remove a line from the sun line heap and draw it on-screen
  • HLOIN2 (I/O processor) - Draw a horizontal line in a specific colour
  • HLOIN3 (I/O processor) - Draw a line from (X, Y1) to (X2, Y1) in the colour given in A (we need to set Q = Y2 + 1 before calling HLOIN3 so only one line is drawn)
  • LASLI - Draw the laser lines for when we fire our lasers
  • LASLI2 - Just 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
  • LBFL - Draw the lines in the multi-segment line buffer by sending an OSWRCH 129 command to the I/O processor
  • LL118 - Move a point along a line until it is on-screen
  • LL118-1 - Contains 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
  • LL147 - Don't initialise the values in SWAP or A
  • LL30 - Draw a one-segment line by sending an OSWRCH 129 command to the I/O processor
  • LOIN - Add a line segment to the multi-segment line buffer
  • LOIN (Part 1 of 7) (I/O processor) - Draw a line: Calculate the line gradient in the form of deltas
  • LOIN (Part 2 of 7) (I/O processor) - Draw a line: Line has a shallow gradient, step right along x-axis
  • LOIN (Part 3 of 7) (I/O processor) - Draw a shallow line going right and up or left and down
  • LOIN (Part 4 of 7) (I/O processor) - Draw a shallow line going right and down or left and up
  • LOIN (Part 5 of 7) (I/O processor) - Draw a line: Line has a steep gradient, step up along y-axis
  • LOIN (Part 6 of 7) (I/O processor) - Draw a steep line going up and left or down and right
  • LOIN (Part 7 of 7) (I/O processor) - Draw a steep line going up and right or down and left
  • NLIN - Draw a horizontal line at pixel row 23 to box in a title
  • NLIN2 - Draw a screen-wide horizontal line at the pixel row in A
  • NLIN3 - Print a title and a horizontal line at row 19 to box it in
  • NLIN4 - Draw a horizontal line at pixel row 19 to box in a title
  • TT15 - Draw a set of crosshairs
  • TT15b - Draw the crosshairs in the current colour

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

  • CPIX2 (I/O processor) - Draw a single-height dot on the dashboard
  • CPIX4 (I/O processor) - Draw a double-height dot on the dashboard
  • DOT (I/O processor) - Implement the #DOdot command (draw a dot on the compass)
  • PBFL - Draw the pixel in the pixel buffer by sending an OSWORD 241 command to the I/O processor
  • PBZE - Reset the pixel buffer
  • PIX (Loader 1) - Draw a single pixel at a specific coordinate
  • pixbl - Points to the first byte of the PBUF block, which is where the OSWORD transmission size goes
  • PIXEL - Add a white dot at a specific distance to the pixel buffer (2-pixel dash or 4-pixel square)
  • PIXEL (I/O processor) - Implement the OSWORD 241 command (draw space view pixels)
  • PIXEL2 - Draw a stardust particle relative to the screen centre
  • PIXEL3 - Add a coloured dot at a specific distance to the pixel buffer (1-pixel dot, 2-pixel dash or 4-pixel square)
  • PX4 - Contains an RTS

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

  • PL2 - Remove the planet or sun from the screen
  • PL2-1 - Contains an RTS
  • PL21 - Return from a planet/sun-drawing routine with a failure flag
  • PL44 - Clear 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
  • PLANET - Draw the planet or sun
  • PLL1 (Loader 1) - Draw Saturn on the loading screen
  • PLS1 - Calculate (Y A) = nosev_x / z
  • PLS2 - Draw a half-circle
  • PLS22 - Draw a circle or half-circle
  • PLS3 - Calculate (Y A P) = 222 * roofv_x / z
  • PLS4 - Calculate CNT2 = arctan(P / A) / 4
  • PLS5 - Calculate roofv_x / z and roofv_y / z
  • PLS6 - Calculate (X K) = (A P) / (z_sign z_hi z_lo)

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

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

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

  • FLFLLS - Reset the sun line heap
  • RTS2 - Contains 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
  • WPLS - Remove the sun from the screen

Equipment
---------

  • c - Contains an RTS
  • eq - Subtract the price of equipment from the cash pot
  • EQSHP - Show the Equip Ship screen (red key f3)
  • err - Beep, pause and go to the docking bay (i.e. show the Status Mode screen)
  • prx - Return the price of a piece of equipment
  • prx-3 - Return the price of the item with number A - 1 c Contains an RTS
  • qv - Print a menu of the four space views, for buying lasers
  • refund - Install a new laser, processing a refund if applicable

Flight
------

  • DCS1 - Calculate the vector from the ideal docking position to the ship
  • DENGY - Drain some energy from the energy banks
  • dockEd - Print a message to say no hyperspacing inside the station
  • DOCKIT - Apply docking manoeuvres to the ship in INWK
  • DOENTRY - Dock at the space station, show the ship hanger and work out any mission progression
  • DOFE21 (I/O processor) - Implement the #DOFE21 command (show the energy bomb effect)
  • ESCAPE - Launch our escape pod
  • Ghy - Perform a galactic hyperspace jump
  • hyp - Start the hyperspace process
  • LO2 - Contains an RTS PU1-1 Contains an RTS
  • LOOK1 - Initialise the space view
  • MJP - Process a mis-jump into witchspace
  • OOPS - Take some damage
  • OUCH - Potentially lose cargo or equipment following damage
  • PLUT - Flip the coordinate axes for the four different views
  • ptg - Called when the user manually forces a mis-jump RTS111 Contains an RTS
  • PU1-1 - Contains an RTS
  • RTS111 - Contains an RTS
  • SESCP - Spawn an escape pod from the current (parent) ship
  • SFS1-2 - Add a missile to the local bubble that has AI enabled, is hostile, but has no E.C.M.
  • SHD - Charge a shield and drain some energy from the energy banks
  • TT110 - Launch from a station or show the front space view
  • TT18 - Try to initiate a jump into hyperspace
  • TTX110 - Set the current system to the nearest system and return to hyp
  • TTX111 - Used to rejoin this routine from the call to TTX110
  • WARP - Perform an in-system jump
  • wW - Start a hyperspace countdown
  • wW2 - Start the hyperspace countdown, starting the countdown from the value in A
  • zZ+1 - Contains an RTS

Inventory
---------

  • NWDAVxx - Used to rejoin this routine from the call to NWDAV4
  • TT210 - Show a list of current cargo in our hold, optionally to sell
  • TT213 - Show the Inventory screen (red key f9)
  • TT214 - Ask a question with a "Y/N?" prompt and return the response

Keyboard
--------

  • auton - Get the docking computer to "press" the flight keys to dock the ship
  • buf - The two OSWORD size bytes for transmitting the key logger from the I/O processor to the parasite
  • CTRL - Scan the keyboard to see if CTRL is currently pressed
  • DK4 - Scan for pause, configuration and secondary flight keys
  • DKJ1 - Read joystick and flight controls
  • DKS2 - Read the joystick position
  • DKS3 - Toggle a configuration setting and emit a beep
  • DKS4 - Scan for a particular key press by sending a #DODKS4 command to the I/O processor
  • DODKS4 (I/O processor) - Implement the #DODKS4 command (scan the keyboard to see if a specific key is being pressed)
  • DOKEY - Scan for the seven primary flight controls
  • DOVIAE (I/O processor) - Implement the #VIAE command (enable/disable interrupts)
  • FLKB - Flush the keyboard buffer
  • FREEZE - Rejoin the pause routine after processing a screen save
  • KEYBOARD (I/O processor) - Implement the OSWORD 240 command (scan the keyboard and joystick and log the results)
  • KYTB - Contains an RTS
  • out - Contains an RTS t As TT217 but don't preserve Y, set it to YSAV instead
  • PAS1 - Display a rotating ship at space coordinates (0, 112, 256) and scan the keyboard
  • PAUSE - Display a rotating ship, waiting until a key is pressed, then remove the ship from the screen
  • PAUSE2 - Wait until a key is pressed, ignoring any existing key press
  • RDKEY - Scan the keyboard for key presses by sending an OSWORD 240 command to the I/O processor
  • t - As TT217 but don't preserve Y, set it to YSAV instead
  • T95 - Print the distance to the selected system
  • TT102 - Process function key, save, hyperspace and chart key presses
  • TT17 - Scan the keyboard for cursor key or joystick movement
  • TT217 - Scan the keyboard until a key is pressed
  • U% - Clear the key logger (from KY1 through KY19)
  • ZEKTRAN - Reset the key logger buffer at KTRAN

Loader
------

  • BEGIN - Initialise the configuration variables and start the game
  • COLD - Copy the recursive tokens and ship blueprints to their correct locations
  • Elite loader (Loader 1) - Check for a 6502 Second Processor, perform a number of OS calls, set up sound and run the second loader
  • Elite loader (Part 1 of 2) (Loader 2) - Move loading screen binaries into screen memory and load and run the main game code
  • Elite loader (Part 2 of 2) (Loader 2) - Include binaries for loading screen and dashboard images
  • S% - Checksum, decrypt and unscramble the main game code, and start the game
  • STARTUP (I/O processor) - Set the various vectors, interrupts and timers, and terminate the loading process so the vector handlers can take over

Main loop
---------

Market
------

  • BAY2 - Jump into the main loop at FRCE, setting the key "pressed" to red key f9 (so we show the Inventory screen)
  • gnum - Get a number from the keyboard
  • NWDAV4 - Print an "ITEM?" error, make a beep and rejoin the TT210 routine
  • tnpr - Work out if we have space for a specific amount of cargo
  • tnpr1 - Work out if we have space for one tonne of cargo
  • TT151 - Print the name, price and availability of a market item
  • TT152 - Print the unit ("t", "kg" or "g") for a market item
  • TT160 - Print "t" (for tonne) and a space
  • TT161 - Print "kg" (for kilograms)
  • TT163 - Print the headers for the table of market prices
  • TT167 - Show the Market Price screen (red key f7)
  • TT16a - Print "g" (for grams)
  • TT208 - Show the Sell Cargo screen (red key f2)
  • TT219 - Show the Buy Cargo screen (red key f1)
  • var - Calculate QQ19+3 = economy * |economic_factor|

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

  • ADD - Calculate (A X) = (A P) + (S R)
  • ADD (I/O processor) - Calculate (A X) = (A P) + (S R)
  • DV41 - Calculate (P R) = 256 * DELTA / A
  • DV42 - Calculate (P R) = 256 * DELTA / z_hi
  • DVID3B2 - Calculate K(3 2 1 0) = (A P+1 P) / (z_sign z_hi z_lo)
  • DVID4 - Calculate (P R) = 256 * A / Q
  • DVID4 (I/O processor) - Calculate (P R) = 256 * A / Q
  • DVIDT - Calculate (P+1 A) = (A P) / Q
  • FMLTU - Calculate A = A * Q / 256
  • FMLTU2 - Calculate A = K * sin(A)
  • GC2 - Calculate (Y X) = (A P) * 4
  • GCASH - Calculate (Y X) = P * Q * 4
  • LCASH - Subtract an amount of cash from the cash pot
  • LL120 - Calculate (Y X) = (S x1_lo) * XX12+2 or (S x1_lo) / XX12+2
  • LL121 - Calculate (Y X) = (S R) / Q and set the sign to the opposite of the top byte on the stack
  • LL122 - Calculate (Y X) = (S R) * Q and set the sign to the opposite of the top byte on the stack
  • LL123 - Calculate (Y X) = (S R) / XX12+2 or (S R) * XX12+2
  • LL128 - Contains an RTS
  • LL129 - Calculate Q = XX12+2, A = S EOR XX12+3 and (S R) = |S R|
  • LL133 - Negate (Y X) and return from the subroutine LL128 Contains an RTS
  • LL28 - Calculate R = 256 * A / Q
  • LL28+4 - Skips the A >= Q check and always returns with C flag cleared, so this can be called if we know the division will work
  • LL31 - Skips 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
  • LL38 - Calculate (S A) = (S R) + (A Q)
  • LL5 - Calculate Q = SQRT(R Q)
  • LL61 - Calculate (U R) = 256 * A / Q
  • LL62 - Calculate 128 - (U R)
  • MAD - Calculate (A X) = Q * A + (S R)
  • MAS3 - Calculate A = x_hi^2 + y_hi^2 + z_hi^2 in the K% block
  • MCASH - Add an amount of cash to the cash pot
  • MLS1 - Calculate (A P) = ALP1 * A
  • MLS2 - Calculate (S R) = XX(1 0) and (A P) = A * ALP1
  • MLTU2 - Calculate (A P+1 P) = (A ~P) * Q
  • MLTU2-2 - Set Q to X, so this calculates (A P+1 P) = (A ~P) * X
  • MLU1 - Calculate Y1 = y_hi and (A P) = |y_hi| * Q for Y-th stardust
  • MLU2 - Calculate (A P) = |A| * Q
  • MU1 - Copy X into P and A, and clear the C flag
  • MU11 - Calculate (A P) = P * X
  • MU5 - Set K(3 2 1 0) = (A A A A) and clear the C flGag
  • MU6 - Set P(1 0) = (A A)
  • MULT1 - Calculate (A P) = Q * A
  • MULT12 - Calculate (S R) = Q * A
  • MULT3 - Calculate K(3 2 1 0) = (A P+1 P) * Q
  • MULTS-2 - Calculate (A P) = X * A
  • MULTU - Calculate (A P) = P * Q
  • MUT1 - Calculate R = XX and (A P) = Q * A
  • MUT2 - Calculate (S R) = XX(1 0) and (A P) = Q * A
  • MUT3 - Unused routine that does the same as MUT2
  • PIX1 - Calculate (YY+1 SYL+Y) = (A P) + (S R) and draw stardust particle
  • ROOT (Loader 1) - Calculate ZP = SQRT(ZP(1 0))
  • SPS2 - Calculate (Y X) = A / 10
  • SQUA - Clear bit 7 of A and calculate (A P) = A * A
  • SQUA2 - Calculate (A P) = A * A
  • SQUA2 (Loader 1) - Calculate (A P) = A * A
  • TAS1 - Calculate K3 = (x_sign x_hi x_lo) - V(1 0)
  • TIS1 - Calculate (A ?) = (-X * A + (S R)) / 96
  • TIS2 - Calculate A = A / Q
  • TIS3 - Calculate -(nosev_1 * roofv_1 + nosev_2 * roofv_2) / nosev_3
  • TT113 - Contains an RTS
  • VCSU1 - Calculate vector K3(8 0) = [x y z] - coordinates of the sun or space station
  • VCSUB - Calculate vector K3(8 0) = [x y z] - coordinates in (A V)

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

  • ARCTAN - Calculate A = arctan(P / Q)
  • FAROF - Compare x_hi, y_hi and z_hi with 224
  • FAROF2 - Compare x_hi, y_hi and z_hi with A
  • LL51 - Calculate the dot product of XX15 and XX16
  • m - Do not include A in the calculation
  • MA9 - Contains an RTS
  • MAS1 - Add an orientation vector coordinate to an INWK coordinate
  • MAS2 - Calculate a cap on the maximum distance to the planet or sun
  • MAS4 - Calculate a cap on the maximum distance to a ship
  • NO1 - Contains an RTS
  • NORM - Normalise the three-coordinate vector in XX15
  • SPS1 - Calculate the vector to the planet and store it in XX15
  • SPS1+1 - A BRK instruction
  • SPS3 - Copy a space coordinate from the K% block into K3
  • SPS4 - Calculate the vector to the space station
  • TA2 - Calculate the length of the vector in XX15 (ignoring the low coordinates), returning it in Q
  • TAS2 - Normalise the three-coordinate vector in K3
  • TAS3 - Calculate the dot product of XX15 and an orientation vector
  • TAS4 - Calculate the dot product of XX15 and one of the space station's orientation vectors
  • TAS6 - Negate the vector in XX15 so it points in the opposite direction
  • TIDY - Orthonormalise the orientation vectors for a ship

Missions
--------

  • BRIEF - Start mission 1 and show the mission briefing
  • BRIEF2 - Start mission 2
  • BRIEF3 - Receive the briefing and plans for mission 2
  • BRIS - Clear the screen, display "INCOMING MESSAGE" and wait for 2 seconds
  • BRP - Print an extended token and show the Status Mode screen
  • BRPS - Print the extended token in A, show the Status Mode screen and return from the subroutine
  • DEBRIEF - Finish mission 1
  • DEBRIEF2 - Finish mission 2
  • THERE - Check whether we are in the Constrictor's system in mission 1

Moving
------

  • MV40 - Rotate the planet or sun by our ship's pitch and roll
  • MV45 - Rejoin 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
  • MVS4 - Apply pitch and roll to an orientation vector
  • MVS5 - Apply a 3.6 degree pitch or roll to an orientation vector
  • MVT1 - Calculate (x_sign x_hi x_lo) = (x_sign x_hi x_lo) + (A R)
  • MVT1-2 - Clear bits 0-6 of A before entering MVT1
  • MVT3 - Calculate K(3 2 1) = (x_sign x_hi x_lo) + K(3 2 1)
  • MVT6 - Calculate (A P+2 P+1) = (x_sign x_hi x_lo) + (A P+2 P+1)
  • SFS2 - Move a ship in space along one of the coordinate axes

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

  • BRKBK - Set the standard BRKV handler for the game
  • CAT - Catalogue a disc, wait for a key press and display the disc access menu
  • CATS - Ask for a disc drive number and print a catalogue of that drive
  • CHECK - Calculate the checksum for the last saved commander data block
  • DELT - Catalogue a disc, ask for a filename to delete, and delete the file
  • DOCATF (I/O processor) - Implement the #DOCATF command (update the disc catalogue flag)
  • DODOSVN - Set the SVN ("save in progress") flag by sending a #DOsvn command to the I/O processor
  • DOSVN (I/O processor) - Implement the #DOSVN command (update the "save in progress" flag)
  • GTDRV - Get an ASCII disc drive drive number from the keyboard
  • GTNMEW - Fetch the name of a commander file to save or load
  • LOD - Load a commander file
  • LOR - Set the C flag and return from the subroutine
  • MEBRK - The BRKV handler for disc access operations
  • QUS1 - Save or load the commander file
  • retry - Scan the keyboard until a key is pressed and display the disc access menu
  • savscr - Save a screenshot if CTRL-D is pressed when the game is paused
  • stack - Temporary storage for the stack pointer when switching the BRKV handler between BRBR and MEBRK
  • SVE - Display the disc access menu and process saving of commander files
  • TR1 - Copy the last saved commander's name from NA% to INWK
  • TRNME - Copy the last saved commander's name from INWK to NA%

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

  • DET1 - Show or hide the dashboard (for when we die) by sending a #DODIALS command to the I/O processor
  • DODIALS (I/O processor) - Implement the #DODIALS command (show or hide the dashboard)
  • IRQ1 (I/O processor) - The main screen-mode interrupt handler (IRQ1V points here)
  • SETVDU19 (I/O processor) - Implement the #SETVDU19 command (change mode 1 palette)
  • VNT3+1 (I/O processor) - Changing this byte modifies the palette-loading instruction at VNT3, to support the #SETVDU19 command for changing the mode 1 palette
  • WSCAN - Ask the I/O processor to wait for the vertical sync by sending a #wscn command to the I/O processor
  • WSCAN (I/O processor) - Implement the #wscn command (wait for the vertical sync)

Ship hanger
-----------

  • HALL - Draw the ships in the ship hanger, then draw the hanger by sending an OSWORD 248 command to the I/O processor
  • HANGER (I/O processor) - Implement the OSWORD 248 command (display the ship hanger)
  • HAS1 - Draw a ship in the ship hanger
  • UNWISE - Contains an RTS

Sound
-----

  • BEEP - Make a short, high beep
  • BELL - Make a standard system beep
  • ECMOF - Switch off the E.C.M.
  • EXNO - Make the sound of a laser strike or ship explosion
  • EXNO-2 - Set X = 7 and fall through into EXNO to make the sound of a ship exploding
  • EXNO2 - Process us making a kill
  • EXNO3 - Make an explosion sound
  • NO3 - Make a sound from a prepared sound block
  • NOISE - Make the sound whose number is in A
  • NOS1 - Prepare a sound block

Stardust
--------

  • FLIP - Reflect the stardust particles in the screen diagonal
  • nWq - Create a random cloud of stardust
  • NWSTARS - Initialise the stardust field
  • STARS - The main routine for processing the stardust
  • STARS1 - Process the stardust for the front view
  • STARS2 - Process the stardust for the left or right view
  • STARS6 - Process the stardust for the rear view

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

  • BR1 - Restart the game
  • DEATH - Display the death screen
  • DEATH2 - Reset most of the game and restart from the title screen
  • DFAULT - Reset the current commander data block to the last saved commander
  • QU5 - Restart the game using the last saved commander without asking whether to load a new commander file
  • RES2 - Reset a number of flight variables and workspaces
  • RESET - Reset most variables
  • TITLE - Display a title screen with a rotating ship and prompt
  • TT170 - Main entry point for the Elite game code

Status
------

  • BAD - Calculate how bad we have been
  • BAY - Go to the docking bay (i.e. show the Status Mode screen)
  • STATUS - Show the Status Mode screen (red key f8)

Tactics
-------

  • ANGRY - Make a ship hostile
  • fq1 - Used to add a cargo canister to the universe
  • FR1 - Display the "missile jammed" message
  • FR1-2 - Clear the C flag and return from the subroutine
  • FRMIS - Fire a missile from our ship
  • FRS1 - Launch a ship straight ahead of us, below the laser sights
  • GOPL - Make the ship head towards the planet
  • HI1 - Contains an RTS
  • HITCH - Work out if the ship in INWK is in our crosshairs
  • SFRMIS - Add an enemy missile to our local bubble of universe
  • TA151 - Make the ship head towards the planet
  • 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
----

  • BPRNT - Print a 32-bit number, left-padded to a specific number of digits, with an optional decimal point
  • CHPR - Send a character to the I/O processor for printing or processing
  • cmn - Print the commander's name
  • cmn-1 - Contains an RTS
  • cpl - Print the selected system name
  • crlf - Tab to column 21 and print a colon
  • csh - Print the current amount of cash
  • DASC - DASC does exactly the same as TT26 and prints a character at the text cursor, with support for verified text in extended tokens
  • DETOK - Print an extended recursive token from the TKN1 token table
  • DETOK2 - Print an extended text token (1-255)
  • DETOK3 - Print an extended recursive token from the RUTOK token table
  • dn - Print the amount of cash and beep
  • dn2 - Make a short, high beep and delay for 1 second
  • DOCOL - Set the text colour by sending a #SETCOL command to the I/O processor
  • DOT - Draw a dot on the compass by sending a #DOdot command to the I/O processor
  • DOVDU19 - Change the mode 1 palette by sending a #SETVDU19 command to the I/O processor
  • DOXC - Move the text cursor to a specified column by sending a #SETXC command to the I/O processor
  • DOYC - Move the text cursor to a specified row by sending a #SETYC command to the I/O processor
  • DTEN - Print recursive token number X from the token table pointed to by (A V), used to print tokens from the RUTOK table via calls to DETOK3
  • DTS - Print the single letter pointed to by A, where A is an address within the extended two-letter token tables of TKN2 and QQ16
  • ee3 - Print the hyperspace countdown in the top-left of the screen
  • ex - Print a recursive token
  • FEED - Print a newline
  • fwl - Print fuel and cash levels
  • INCYC - Move the text cursor to the next row
  • label - Send a two-byte OSWRCH command to the I/O processor
  • me1 - Erase an old in-flight message and display a new one
  • me2 - Remove an in-flight message from the space view
  • mes9 - Print a text token, possibly followed by " DESTROYED"
  • MESS - Display an in-flight message
  • MT1 - Switch to ALL CAPS when printing extended tokens
  • MT13 - Switch to lower case when printing extended tokens
  • MT14 - Switch to justified text when printing extended tokens
  • MT15 - Switch to left-aligned text when printing extended tokens
  • MT16 - Print the character in variable DTW7
  • MT17 - Print the selected system's adjective, e.g. Lavian for Lave
  • MT18 - Print a random 1-8 letter word in Sentence Case
  • MT19 - Capitalise the next letter
  • MT2 - Switch to Sentence Case when printing extended tokens
  • MT23 - Move to row 10, switch to white text, and switch to lower case when printing extended tokens
  • MT26 - Fetch a line of text from the keyboard
  • MT27 - Print the captain's name during mission briefings
  • MT28 - Print the location hint during the mission 1 briefing
  • MT29 - Move to row 6, switch to white text, and switch to lower case when printing extended tokens
  • MT5 - Switch to extended tokens
  • MT6 - Switch to standard tokens in Sentence Case
  • MT8 - Tab to column 6 and start a new word when printing extended tokens
  • MT9 - Clear the screen and set the current view type to 1
  • ou2 - Display "E.C.M.SYSTEM DESTROYED" as an in-flight message
  • ou3 - Display "FUEL SCOOPS DESTROYED" as an in-flight message
  • PDESC - Print the system's extended description or a mission 1 directive
  • plf - Print a text token followed by a newline
  • plf2 - Print text followed by a newline and indent of 6 characters
  • POSWRCH (I/O processor) - Print a character on the printer only
  • pr2 - Print an 8-bit number, left-padded to 3 digits, and optional point
  • pr2+2 - Print the 8-bit number in X to the number of digits in A
  • pr5 - Print a 16-bit number, left-padded to 5 digits, and optional point
  • pr6 - Print 16-bit number, left-padded to 5 digits, no point
  • prilf (I/O processor) - Implement the #prilf command (print a blank line on the printer)
  • printer (I/O processor) - Implement the #printcode command (print a character on the printer and screen)
  • prq - Print a text token followed by a question mark
  • qw - Print a recursive token in the range 128-145
  • RR4 (I/O processor) - Restore the registers and return from the subroutine
  • rT9 - Contains an RTS
  • sent (I/O processor) - Turn the printer off and restore the USOSWRCH handler, returning from the subroutine using a tail call
  • SETXC (I/O processor) - Implement the #SETXC command (move the text cursor to a specific column)
  • SETYC (I/O processor) - Implement the #SETYC command (move the text cursor to a specific row)
  • spc - Print a text token followed by a space
  • tal - Print the current galaxy numbe
  • tosend (I/O processor) - Print a printable character and return to the printer routine
  • TT11 - Print a 16-bit number, left-padded to n digits, and optional point
  • TT146 - Print the distance to the selected system in light years
  • TT147 - Print an error when a system is out of hyperspace range
  • TT162 - Print a space
  • TT162+2 - Jump to TT27 to print the text token in A
  • TT26 - Print a character at the text cursor, with support for verified text in extended tokens
  • TT26 (I/O processor) - Print a character at the text cursor by poking into screen memory
  • TT27 - Print a text token
  • TT41 - Print a letter according to Sentence Case
  • TT42 - Print a letter in lower case
  • TT43 - Print a two-letter token or recursive token 0-95
  • TT44 - Jumps to TT26 to print the character in A (used to enable us to use a branch instruction to jump to TT26)
  • TT45 - Print a letter in lower case
  • TT46 - Print a character and switch to capitals
  • TT48 - Contains an RTS
  • TT60 - Print a text token and a paragraph break
  • TT67 - Print a newline
  • TT67 (I/O processor) - Print a newline
  • TT68 - Print a text token followed by a colon
  • TT69 - Set Sentence Case and print a newline
  • TT70 - Display "MAINLY " and jump to TT72
  • TT73 - Print a colon
  • TT74 - Print a character
  • TTX69 - Print a paragraph break
  • VOWEL - Test whether a character is a vowel
  • WHITETEXT - Switch to white text
  • ypl - Print the current system name
  • ypl-1 - Contains an RTS

Tube
----

Universe
--------

  • GINF - Fetch the address of a ship's data block into INF
  • GTHG - Spawn a Thargoid ship and a Thargon companion
  • GVL - Calculate the availability of a market item
  • hy5 - Contains an RTS
  • hyp1 - Process a jump to the system closest to (QQ9, QQ10)
  • hyp1+3 - Jump 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
  • hyR - Contains an RTS
  • jmp - Set the current system to the selected system
  • KILLSHP - Remove a ship from our local bubble of universe
  • KS1 - Remove the current ship from our local bubble of universe
  • KS2 - Check the local bubble for missiles with target lock
  • KS3 - Set the SLSP ship heap pointer after shuffling ship slots
  • KS4 - Remove the space station and replace it with the sun
  • NwS1 - Flip the sign and double an INWK byte
  • NWSHP - Add a new ship to our local bubble of universe
  • NWSPS - Add a new space station to our local bubble of universe
  • oh - Contains an RTS SPIN2 Remove any randomness: spawn cargo of a specific type (given in X), and always spawn the number given in A
  • ping - Set the selected system to the current system
  • SFS1 - Spawn a child ship from the current (parent) ship
  • SOLAR - Set up various aspects of arriving in a new system
  • SOS1 - Update the missile indicators, set up the planet data block
  • spasto - Contains the address Coriolis space station's ship blueprint
  • SPIN - Randomly spawn cargo from a destroyed ship
  • SPIN2 - Remove any randomness: spawn cargo of a specific type (given in X), and always spawn the number given in A
  • STORE - Copy the ship data block at INWK back to the K% workspace
  • TT111 - Set the current system to the nearest system to a point
  • TT111-1 - Contains an RTS
  • TT20 - Twist the selected system's seeds four times
  • TT24 - Calculate system data from the system seeds
  • TT25 - Show the Data on System screen (red key f6)
  • TT54 - Twist the selected system's seeds
  • TT72 - Used by TT70 to re-enter the routine after displaying "MAINLY" for the economy type
  • TT81 - Set the selected system's seeds to those of system 0
  • Ze - Initialise the INWK workspace to a hostile ship

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

  • backtonormal - Disable the keyboard, set the SVN flag to 0, and return with A = 0
  • BOX - Just 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
  • BRBR - The standard BRKV handler for the game
  • brkd - The brkd counter for error handling
  • CLDELAY - Delay by iterating through 5 * 256 (1280) empty loops
  • cls (I/O processor) - Clear the top part of the screen and draw a white border
  • CLYNS - Clear the bottom three text rows of the mode 1 screen by sending a #clyns command to the I/O processor
  • CLYNS (I/O processor) - Implement the #clyns command (clear the bottom of the screen)
  • DELAY - Wait for a specified time, in 1/50s of a second
  • DOBRK (I/O processor) - Implement the OSWRCH 145 command (execute a BRK instruction)
  • DOCOL (I/O processor) - Implement the #SETCOL command (set the current colour)
  • DORND - Generate random numbers
  • DORND (Loader 1) - Generate random numbers
  • DORND2 - Restricts the value of RAND+2 so that bit 0 is always 0
  • FX200 - Set the behaviour of the ESCAPE and BREAK keys
  • OSB (Loader 1) - A convenience routine for calling OSBYTE with Y = 0
  • SC5 - Contains an RTS
  • SCLI2 - Execute an OS command, setting the SVN flag while it's running
  • TRADEMODE - Clear the screen and set up a printable trading screen
  • TT66 - Clear the screen and set the current view type
  • TTX66 - Send control code 11 to the I/O processor to clear the top part of the screen and draw a white border
  • TTX66 (I/O processor) - Clear the top part of the screen and draw a white border
  • ZEBC - Zero-fill pages &B and &C
  • ZERO - Reset the local bubble of universe and ship status
  • ZES1 - Zero-fill the page whose number is in X
  • ZES1 (I/O processor) - Zero-fill the page whose number is in X
  • ZES2 - Zero-fill a specific page
  • ZES2 (I/O processor) - Zero-fill a specific page
  • ZEVB - Zero-fill the Y1VB variable
  • ZINF - Reset the INWK workspace and orientation vectors
  • ZINF2 - Reset the INWK workspace and orientation vectors