Skip to navigation


Map of the source code

[6502 Second Processor version]

This page contains a map of all the routines, variables and macros in the original source files for the 6502 Second Processor version of Elite, in the order in which they appear in the original source. The source files are structured like this:

You can click on the links above to jump to the relevant part of the map.

Loader 1
--------

CategoryDetails

Workspaces

Workspace: ZP (Loader 1)

Important variables used by the loader

Copy protection

Variable: copyright (Loader 1)

A copyright notice, buried in the code

Drawing the screen

Variable: B% (Loader 1)

VDU commands for setting the square mode 1 screen

Sound

Variable: E% (Loader 1)

Sound envelope definitions

Sound

Macro: FNE (Loader 1)

Macro definition for defining a sound envelope

Loader

Subroutine: Elite loader (Loader 1)

Check for a 6502 Second Processor, perform a number of OS calls, set up sound and run the second loader

Drawing planets

Subroutine: PLL1 (Part 1 of 3) (Loader 1)

Draw Saturn on the loading screen (draw the planet)

Drawing planets

Subroutine: PLL1 (Part 2 of 3) (Loader 1)

Draw Saturn on the loading screen (draw the stars)

Drawing planets

Subroutine: PLL1 (Part 3 of 3) (Loader 1)

Draw Saturn on the loading screen (draw the rings)

Maths (Arithmetic)

Subroutine: DORND (Loader 1)

Generate random numbers

Drawing planets

Variable: RAND (Loader 1)

The random number seed used for drawing Saturn

Maths (Arithmetic)

Subroutine: SQUA2 (Loader 1)

Calculate (A P) = A * A

Drawing pixels

Subroutine: PIX (Loader 1)

Draw a single pixel at a specific coordinate

Drawing pixels

Variable: TWOS (Loader 1)

Ready-made single-pixel character row bytes for mode 1

Drawing planets

Variable: CNT (Loader 1)

A counter for use in drawing Saturn's planetary body

Drawing planets

Variable: CNT2 (Loader 1)

A counter for use in drawing Saturn's background stars

Drawing planets

Variable: CNT3 (Loader 1)

A counter for use in drawing Saturn's rings

Maths (Arithmetic)

Subroutine: ROOT (Loader 1)

Calculate ZP = SQRT(ZP(1 0))

Utility routines

Subroutine: OSB (Loader 1)

A convenience routine for calling OSBYTE with Y = 0

Loader

Variable: MESS1 (Loader 1)

The OS command string for changing the disc directory to E

Loader

Variable: MESS2 (Loader 1)

The OS command string for running the second part of the loader in file ELITEa

Loader 2
--------

CategoryDetails

Workspaces

Workspace: ZP (Loader 2)

Important variables used by the loader

Utility routines

Macro: MVE (Loader 2)

Move a one-page block of memory from one location to another

Loader

Subroutine: Elite loader (Part 1 of 2) (Loader 2)

Move loading screen binaries into screen memory and load and run the main game code

Loader

Variable: MESS2 (Loader 2)

The OS command string for running the I/O processor's main game code in file I.CODE

Loader

Variable: MESS3 (Loader 2)

The OS command string for running the parasite's main game code in file P.CODE

Utility routines

Subroutine: MVBL (Loader 2)

Move a multi-page block of memory from one location to another

Loader

Subroutine: Elite loader (Part 2 of 2) (Loader 2)

Include binaries for loading screen and dashboard images

Workspaces
----------

CategoryDetails

Workspaces

Workspace: ZP

Lots of important variables are stored in the zero page workspace as it is quicker and more space-efficient to access memory here

Workspaces

Workspace: XX3

Temporary storage space for complex calculations

Text tokens
-----------

CategoryDetails

Text

Macro: CHAR

Macro definition for characters in the recursive token table

Text

Macro: TWOK

Macro definition for two-letter tokens in the token table

Text

Macro: CONT

Macro definition for control codes in the recursive token table

Text

Macro: RTOK

Macro definition for recursive tokens in the recursive token table

Text

Variable: QQ18

The recursive token table for tokens 0-148

Maths (Geometry)

Variable: SNE

Sine/cosine table

Maths (Geometry)

Variable: ACT

Arctan table

Workspaces

Workspace: UP

Ship slots, variables

Workspaces

Workspace: WP

Variables

Workspaces
----------

CategoryDetails

Workspaces

Workspace: K%

Ship data blocks

Workspaces

Workspace: LP

Variables used for displaying the scrolling text in the demo

Elite A
-------

CategoryDetails

Workspaces

Workspace: Parasite variables

Various variables used by the parasite

Save and load

Variable: S1%

The drive and directory number used when saving or loading a commander file

Save and load

Variable: NA%

The data block for the last saved commander

Save and load

Variable: CHK2

Second checksum byte for the saved commander data file

Save and load

Variable: CHK

First checksum byte for the saved commander data file

Loader

Subroutine: S%

Checksum, decrypt and unscramble the main game code, and start the game

Copy protection

Subroutine: DEEOR

Decrypt bytes between &1300 and &9FFF by EOR'ing them with their page offset

Flight

Subroutine: DOENTRY

Dock at the space station, show the ship hangar and work out any mission progression

Save and load

Subroutine: BRKBK

Set the standard BRKV handler for the game

Main loop

Subroutine: Main flight loop (Part 1 of 16)

Seed the random number generator

Main loop

Subroutine: Main flight loop (Part 2 of 16)

Calculate the alpha and beta angles from the current pitch and roll of our ship

Main loop

Subroutine: Main flight loop (Part 3 of 16)

Scan for flight keys and process the results

Main loop

Subroutine: 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 loop

Subroutine: Main flight loop (Part 5 of 16)

For each nearby ship: If an energy bomb has been set off, potentially kill this ship

Main loop

Subroutine: 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 loop

Subroutine: Main flight loop (Part 7 of 16)

For each nearby ship: Check whether we are docking, scooping or colliding with it

Main loop

Subroutine: Main flight loop (Part 8 of 16)

For each nearby ship: Process us potentially scooping this item

Main loop

Subroutine: 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 loop

Subroutine: Main flight loop (Part 10 of 16)

For each nearby ship: Remove if scooped, or process collisions

Main loop

Subroutine: Main flight loop (Part 11 of 16)

For each nearby ship: Process missile lock and firing our laser

Main loop

Subroutine: Main flight loop (Part 12 of 16)

For each nearby ship: Draw the ship, remove if killed, loop back

Main loop

Subroutine: Main flight loop (Part 13 of 16)

Show energy bomb effect, charge shields and energy banks

Main loop

Subroutine: Main flight loop (Part 14 of 16)

Spawn a space station if we are close enough to the planet

Main loop

Subroutine: Main flight loop (Part 15 of 16)

Perform altitude checks with the planet and sun and process fuel scooping if appropriate

Main loop

Subroutine: Main flight loop (Part 16 of 16)

Process laser pulsing, E.C.M. energy drain, call stardust routine

Universe

Subroutine: SPIN

Randomly spawn cargo from a destroyed ship

Text

Subroutine: MT27

Print the captain's name during mission briefings

Text

Subroutine: MT28

Print the location hint during the mission 1 briefing

Text

Subroutine: DETOK3

Print an extended recursive token from the RUTOK token table

Text

Subroutine: DETOK

Print an extended recursive token from the TKN1 token table

Text

Subroutine: DETOK2

Print an extended text token (1-255)

Copy protection

Variable: Firebird

The name "Firebird", buried in the code of the Executive version

Text

Subroutine: MT1

Switch to ALL CAPS when printing extended tokens

Text

Subroutine: MT2

Switch to Sentence Case when printing extended tokens

Text

Subroutine: MT8

Tab to column 6 and start a new word when printing extended tokens

Text

Subroutine: MT9

Clear the screen and set the current view type to 1

Text

Subroutine: MT13

Switch to lower case when printing extended tokens

Text

Subroutine: MT6

Switch to standard tokens in Sentence Case

Text

Subroutine: MT5

Switch to extended tokens

Text

Subroutine: MT14

Switch to justified text when printing extended tokens

Text

Subroutine: MT15

Switch to left-aligned text when printing extended tokens

Text

Subroutine: MT17

Print the selected system's adjective, e.g. Lavian for Lave

Text

Subroutine: MT18

Print a random 1-8 letter word in Sentence Case

Text

Subroutine: MT19

Capitalise the next letter

Text

Subroutine: VOWEL

Test whether a character is a vowel

Text

Subroutine: WHITETEXT

Switch to white text

Text

Variable: JMTB

The extended token table for jump tokens 1-32 (DETOK)

Text

Variable: TKN2

The extended two-letter token lookup table

Text

Variable: QQ16

The two-letter token lookup table

Drawing ships

Variable: shpcol

Ship colours

Drawing ships

Variable: scacol

Ship colours on the scanner

Drawing lines

Variable: LSX2

The ball line heap for storing x-coordinates

Drawing lines

Variable: LSY2

The ball line heap for storing y-coordinates

Elite B
-------

CategoryDetails

Universe

Variable: UNIV

Table of pointers to the local universe's ship data blocks

Drawing pixels

Variable: TWOS

Ready-made single-pixel character row bytes for mode 4

Drawing pixels

Variable: TWOS2

Ready-made double-pixel character row bytes for mode 4

Drawing pixels

Variable: CTWOS

Ready-made single-pixel character row bytes for mode 5

Drawing lines

Subroutine: LL30

Draw a one-segment line by sending an OSWRCH 129 command to the I/O processor

Drawing lines

Subroutine: LOIN

Add a line segment to the multi-segment line buffer

Drawing lines

Subroutine: LBFL

Draw the lines in the multi-segment line buffer by sending an OSWRCH 129 command to the I/O processor

Drawing lines

Variable: LBUF

The multi-segment line buffer used by LOIN

Keyboard

Subroutine: FLKB

Flush the keyboard buffer

Drawing lines

Subroutine: NLIN3

Print a title and draw a horizontal line at row 19 to box it in

Drawing lines

Subroutine: NLIN4

Draw a horizontal line at pixel row 19 to box in a title

Drawing lines

Subroutine: NLIN

Draw a horizontal line at pixel row 23 to box in a title

Drawing lines

Subroutine: NLIN2

Draw a screen-wide horizontal line at the pixel row in A

Drawing lines

Subroutine: HLOIN2

Remove a line from the sun line heap and draw it on-screen

Drawing lines

Subroutine: HLOIN

Add a sun line to the horizontal line buffer

Drawing lines

Subroutine: HBFL

Draw the sun lines in the horizontal line buffer in orange by sending an OSWORD 247 command to the I/O processor

Drawing lines

Subroutine: HBZE

Reset the horizontal line buffer

Drawing lines

Variable: HBUF

The horizontal line buffer to send with the OSWORD 247 command

Drawing lines

Variable: TWFL

Ready-made character rows for the left end of a horizontal line in mode 4

Drawing lines

Variable: TWFR

Ready-made character rows for the right end of a horizontal line in mode 4

Maths (Arithmetic)

Subroutine: PIX1

Calculate (YY+1 SYL+Y) = (A P) + (S R) and draw stardust particle

Drawing pixels

Subroutine: PIXEL2

Draw a stardust particle relative to the screen centre

Drawing pixels

Subroutine: PIXEL

Add a white dot at a specific distance to the pixel buffer (2-pixel dash or 4-pixel square)

Drawing pixels

Subroutine: PBFL

Draw the pixel in the pixel buffer by sending an OSWORD 241 command to the I/O processor

Drawing pixels

Subroutine: PBZE

Reset the pixel buffer

Drawing pixels

Subroutine: PIXEL3

Add a coloured dot at a specific distance to the pixel buffer (1-pixel dot, 2-pixel dash or 4-pixel square)

Drawing pixels

Variable: PBUF

The pixel buffer to send with the OSWORD 241 command

Drawing circles

Subroutine: BLINE

Draw a circle segment and add it to the ball line heap

Stardust

Subroutine: FLIP

Reflect the stardust particles in the screen diagonal and redraw the stardust field

Stardust

Subroutine: STARS

The main routine for processing the stardust

Stardust

Subroutine: STARS1

Process the stardust for the front view

Stardust

Subroutine: STARS6

Process the stardust for the rear view

Maths (Geometry)

Subroutine: MAS1

Add an orientation vector coordinate to an INWK coordinate

Maths (Geometry)

Subroutine: MAS2

Calculate a cap on the maximum distance to the planet or sun

Maths (Arithmetic)

Subroutine: MAS3

Calculate A = x_hi^2 + y_hi^2 + z_hi^2 in the K% block

Status

Subroutine: STATUS

Show the Status Mode screen (red key f8)

Text

Subroutine: plf2

Print text followed by a newline and indent of 6 characters

Moving

Subroutine: MVT3

Calculate K(3 2 1) = (x_sign x_hi x_lo) + K(3 2 1)

Moving

Subroutine: MVS5

Apply a 3.6 degree pitch or roll to an orientation vector

Text

Variable: TENS

A constant used when printing large numbers in BPRNT

Text

Subroutine: pr2

Print an 8-bit number, left-padded to 3 digits, and optional point

Text

Subroutine: TT11

Print a 16-bit number, left-padded to n digits, and optional point

Text

Subroutine: BPRNT

Print a 32-bit number, left-padded to a specific number of digits, with an optional decimal point

Text

Variable: DTW1

A mask for applying the lower case part of Sentence Case to extended text tokens

Text

Variable: DTW2

A flag that indicates whether we are currently printing a word

Text

Variable: DTW3

A flag for switching between standard and extended text tokens

Text

Variable: DTW4

Flags that govern how justified extended text tokens are printed

Text

Variable: DTW5

The size of the justified text buffer at BUF

Text

Variable: DTW6

A flag to denote whether printing in lower case is enabled for extended text tokens

Text

Variable: DTW8

A mask for capitalising the next letter in an extended text token

Text

Subroutine: FEED

Print a newline

Text

Subroutine: MT16

Print the character in variable DTW7

Text

Subroutine: TT26

Print a character at the text cursor, with support for verified text in extended tokens

Sound

Subroutine: BELL

Make a standard system beep

Text

Subroutine: CHPR

Send a character to the I/O processor for printing or processing

Text

Variable: printflag

A flag that determines whether to send text output to the printer as well as the screen

Dashboard

Subroutine: DIALS

Update the dashboard indicators and flight variables by sending a #RDPARAMS command to the I/O processor

Flight

Subroutine: ESCAPE

Launch our escape pod

Charts

Subroutine: HME2

Search the galaxy for a system

Elite C
-------

CategoryDetails

Ship hangar

Variable: HATB

Ship hangar group table

Ship hangar

Subroutine: HALL

Draw the ships in the ship hangar, then draw the hangar by sending an OSWORD 248 command to the I/O processor

Ship hangar

Subroutine: HAS1

Draw a ship in the ship hangar

Ship hangar

Subroutine: UNWISE

Switch the main line-drawing routine between EOR and OR logic

Tactics

Subroutine: TACTICS (Part 1 of 7)

Apply tactics: Process missiles, both enemy missiles and our own

Tactics

Subroutine: TACTICS (Part 2 of 7)

Apply tactics: Escape pod, station, lone Thargon, safe-zone pirate

Tactics

Subroutine: TACTICS (Part 3 of 7)

Apply tactics: Calculate dot product to determine ship's aim

Tactics

Subroutine: TACTICS (Part 4 of 7)

Apply tactics: Check energy levels, maybe launch escape pod if low

Tactics

Subroutine: TACTICS (Part 5 of 7)

Apply tactics: Consider whether to launch a missile at us

Tactics

Subroutine: TACTICS (Part 6 of 7)

Apply tactics: Consider firing a laser at us, if aim is true

Tactics

Subroutine: TACTICS (Part 7 of 7)

Apply tactics: Set pitch, roll, and acceleration

Flight

Subroutine: DOCKIT

Apply docking manoeuvres to the ship in INWK

Maths (Arithmetic)

Subroutine: VCSU1

Calculate vector K3(8 0) = [x y z] - coordinates of the sun or space station

Maths (Arithmetic)

Subroutine: VCSUB

Calculate vector K3(8 0) = [x y z] - coordinates in (A V)

Maths (Arithmetic)

Subroutine: TAS1

Calculate K3 = (x_sign x_hi x_lo) - V(1 0)

Maths (Geometry)

Subroutine: TAS4

Calculate the dot product of XX15 and one of the space station's orientation vectors

Maths (Geometry)

Subroutine: TAS6

Negate the vector in XX15 so it points in the opposite direction

Flight

Subroutine: DCS1

Calculate the vector from the ideal docking position to the ship

Tactics

Subroutine: HITCH

Work out if the ship in INWK is in our crosshairs

Tactics

Subroutine: FRS1

Launch a ship straight ahead of us, below the laser sights

Tactics

Subroutine: FRMIS

Fire a missile from our ship

Tactics

Subroutine: ANGRY

Make a ship hostile

Tactics

Subroutine: FR1

Display the "missile jammed" message

Flight

Subroutine: SESCP

Spawn an escape pod from the current (parent) ship

Universe

Subroutine: SFS1

Spawn a child ship from the current (parent) ship

Moving

Subroutine: SFS2

Move a ship in space along one of the coordinate axes

Drawing circles

Subroutine: LL164

Make the hyperspace sound and draw the hyperspace tunnel

Drawing circles

Subroutine: LAUN

Make the launch sound and draw the launch tunnel

Drawing circles

Subroutine: HFS2

Draw the launch or hyperspace tunnel

Stardust

Subroutine: STARS2

Process the stardust for the left or right view

Maths (Arithmetic)

Subroutine: MU5

Set K(3 2 1 0) = (A A A A) and clear the C flag

Maths (Arithmetic)

Subroutine: MULT3

Calculate K(3 2 1 0) = (A P+1 P) * Q

Maths (Arithmetic)

Subroutine: MLS2

Calculate (S R) = XX(1 0) and (A P) = A * ALP1

Maths (Arithmetic)

Subroutine: MLS1

Calculate (A P) = ALP1 * A

Maths (Arithmetic)

Subroutine: MU6

Set P(1 0) = (A A)

Maths (Arithmetic)

Subroutine: SQUA

Clear bit 7 of A and calculate (A P) = A * A

Maths (Arithmetic)

Subroutine: SQUA2

Calculate (A P) = A * A

Maths (Arithmetic)

Subroutine: MU1

Copy X into P and A, and clear the C flag

Maths (Arithmetic)

Subroutine: MLU1

Calculate Y1 = y_hi and (A P) = |y_hi| * Q for Y-th stardust

Maths (Arithmetic)

Subroutine: MLU2

Calculate (A P) = |A| * Q

Maths (Arithmetic)

Subroutine: MULTU

Calculate (A P) = P * Q

Maths (Arithmetic)

Subroutine: MU11

Calculate (A P) = P * X

Maths (Arithmetic)

Subroutine: FMLTU2

Calculate A = K * sin(A)

Maths (Arithmetic)

Subroutine: FMLTU

Calculate A = A * Q / 256

Maths (Arithmetic)

Subroutine: MLTU2

Calculate (A P+1 P) = (A ~P) * Q

Maths (Arithmetic)

Subroutine: MUT3

An unused routine that does the same as MUT2

Maths (Arithmetic)

Subroutine: MUT2

Calculate (S R) = XX(1 0) and (A P) = Q * A

Maths (Arithmetic)

Subroutine: MUT1

Calculate R = XX and (A P) = Q * A

Maths (Arithmetic)

Subroutine: MULT1

Calculate (A P) = Q * A

Maths (Arithmetic)

Subroutine: MULT12

Calculate (S R) = Q * A

Maths (Geometry)

Subroutine: TAS3

Calculate the dot product of XX15 and an orientation vector

Maths (Arithmetic)

Subroutine: MAD

Calculate (A X) = Q * A + (S R)

Maths (Arithmetic)

Subroutine: ADD

Calculate (A X) = (A P) + (S R)

Maths (Arithmetic)

Subroutine: TIS1

Calculate (A ?) = (-X * A + (S R)) / 96

Maths (Arithmetic)

Subroutine: DV42

Calculate (P R) = 256 * DELTA / z_hi

Maths (Arithmetic)

Subroutine: DV41

Calculate (P R) = 256 * DELTA / A

Maths (Arithmetic)

Subroutine: DVID4

Calculate (P R) = 256 * A / Q

Maths (Arithmetic)

Subroutine: DVID3B2

Calculate K(3 2 1 0) = (A P+1 P) / (z_sign z_hi z_lo)

Dashboard

Subroutine: cntr

Apply damping to the pitch or roll dashboard indicator

Dashboard

Subroutine: BUMP2

Bump up the value of the pitch or roll dashboard indicator

Dashboard

Subroutine: REDU2

Reduce the value of the pitch or roll dashboard indicator

Maths (Geometry)

Subroutine: ARCTAN

Calculate A = arctan(P / Q)

Drawing lines

Subroutine: LASLI

Draw the laser lines for when we fire our lasers

Universe

Subroutine: PDESC

Print the system's extended description or a mission 1 directive

Missions

Subroutine: BRIEF2

Start mission 2

Missions

Subroutine: BRP

Print an extended token and show the Status Mode screen

Missions

Subroutine: BRIEF3

Receive the briefing and plans for mission 2

Missions

Subroutine: DEBRIEF2

Finish mission 2

Missions

Subroutine: DEBRIEF

Finish mission 1

Missions

Subroutine: BRIEF

Start mission 1 and show the mission briefing

Missions

Subroutine: BRIS

Clear the screen, display "INCOMING MESSAGE" and wait for 2 seconds

Missions

Subroutine: PAUSE

Display a rotating ship, waiting until a key is pressed, then remove the ship from the screen

Text

Subroutine: MT23

Move to row 10, switch to white text, and switch to lower case when printing extended tokens

Text

Subroutine: MT29

Move to row 6, switch to white text, and switch to lower case when printing extended tokens

Missions

Subroutine: PAS1

Display a rotating ship at space coordinates (0, 112, 256) and scan the keyboard

Keyboard

Subroutine: PAUSE2

Wait until a key is pressed, ignoring any existing key press

Elite D
-------

CategoryDetails

Market

Subroutine: tnpr1

Work out if we have space for one tonne of cargo

Market

Subroutine: tnpr

Work out if we have space for a specific amount of cargo

Text

Subroutine: DOXC

Move the text cursor to a specified column by sending a #SETXC command to the I/O processor

Text

Subroutine: DOYC

Move the text cursor to a specified row by sending a #SETYC command to the I/O processor

Text

Subroutine: label

Send a two-byte OSWRCH command to the I/O processor

Text

Subroutine: INCYC

Move the text cursor to the next row

Text

Subroutine: DOCOL

Set the text colour by sending a #SETCOL command to the I/O processor

Drawing the screen

Subroutine: DOVDU19

Change the mode 1 palette by sending a #SETVDU19 command to the I/O processor

Drawing the screen

Subroutine: TRADEMODE

Clear the screen and set up a printable trading screen

Universe

Subroutine: TT20

Twist the selected system's seeds four times

Universe

Subroutine: TT54

Twist the selected system's seeds

Universe

Subroutine: TT146

Print the distance to the selected system in light years

Text

Subroutine: TT60

Print a text token and a paragraph break

Text

Subroutine: TTX69

Print a paragraph break

Text

Subroutine: TT69

Set Sentence Case and print a newline

Text

Subroutine: TT67

Print a newline

Universe

Subroutine: TT70

Display "MAINLY " and jump to TT72

Text

Subroutine: spc

Print a text token followed by a space

Universe

Subroutine: TT25

Show the Data on System screen (red key f6)

Universe

Subroutine: TT24

Calculate system data from the system seeds

Charts

Subroutine: TT22

Show the Long-range Chart (red key f4)

Drawing lines

Subroutine: TT15

Draw a set of crosshairs

Drawing circles

Subroutine: TT14

Draw a circle with crosshairs on a chart

Drawing circles

Subroutine: TT128

Draw a circle on a chart

Market

Subroutine: TT219

Show the Buy Cargo screen (red key f1)

Market

Subroutine: gnum

Get a number from the keyboard

Market

Subroutine: NWDAV4

Print an "ITEM?" error, make a beep and rejoin the TT210 routine

Market

Subroutine: TT208

Show the Sell Cargo screen (red key f2)

Market

Subroutine: TT210

Show a list of current cargo in our hold, optionally to sell

Market

Subroutine: TT213

Show the Inventory screen (red key f9)

Keyboard

Subroutine: TT214

Ask a question with a "Y/N?" prompt and return the response

Charts

Subroutine: TT16

Move the crosshairs on a chart

Charts

Subroutine: TT103

Draw a small set of crosshairs on a chart

Charts

Subroutine: TT123

Move galactic coordinates by a signed delta

Charts

Subroutine: TT105

Draw crosshairs on the Short-range Chart, with clipping

Charts

Subroutine: TT23

Show the Short-range Chart (red key f5)

Universe

Subroutine: TT81

Set the selected system's seeds to those of system 0

Universe

Subroutine: TT111

Set the current system to the nearest system to a point

Flight

Subroutine: dockEd

Print a message to say there is no hyperspacing allowed inside the station

Flight

Subroutine: hyp

Start the hyperspace process

Flight

Subroutine: wW

Start a hyperspace countdown

Flight

Subroutine: TTX110

Set the current system to the nearest system and return to hyp

Flight

Subroutine: Ghy

Perform a galactic hyperspace jump

Universe

Subroutine: jmp

Set the current system to the selected system

Flight

Subroutine: ee3

Print the hyperspace countdown in the top-left of the screen

Text

Subroutine: pr6

Print 16-bit number, left-padded to 5 digits, no point

Text

Subroutine: pr5

Print a 16-bit number, left-padded to 5 digits, and optional point

Flight

Subroutine: TT147

Print an error when a system is out of hyperspace range

Text

Subroutine: prq

Print a text token followed by a question mark

Market

Subroutine: TT151

Print the name, price and availability of a market item

Market

Subroutine: TT152

Print the unit ("t", "kg" or "g") for a market item

Text

Subroutine: TT162

Print a space

Market

Subroutine: TT160

Print "t" (for tonne) and a space

Market

Subroutine: TT161

Print "kg" (for kilograms)

Market

Subroutine: TT16a

Print "g" (for grams)

Market

Subroutine: TT163

Print the headers for the table of market prices

Market

Subroutine: TT167

Show the Market Price screen (red key f7)

Market

Subroutine: var

Calculate QQ19+3 = economy * |economic_factor|

Universe

Subroutine: hyp1

Process a jump to the system closest to (QQ9, QQ10)

Universe

Subroutine: GVL

Calculate the availability of market items

Universe

Subroutine: GTHG

Spawn a Thargoid ship and a Thargon companion

Flight

Subroutine: MJP

Process a mis-jump into witchspace

Flight

Subroutine: TT18

Try to initiate a jump into hyperspace

Flight

Subroutine: TT110

Launch from a station or show the front space view

Charts

Subroutine: TT114

Display either the Long-range or Short-range Chart

Maths (Arithmetic)

Subroutine: LCASH

Subtract an amount of cash from the cash pot

Maths (Arithmetic)

Subroutine: MCASH

Add an amount of cash to the cash pot

Maths (Arithmetic)

Subroutine: GCASH

Calculate (Y X) = P * Q * 4

Maths (Arithmetic)

Subroutine: GC2

Calculate (Y X) = (A P) * 4

Loader

Variable: RDLI

The OS command string for running the flight code in file D.CODE in the disc version of Elite

Equipment

Subroutine: EQSHP

Show the Equip Ship screen (red key f3)

Market

Subroutine: dn

Print the amount of money we have left in the cash pot, then make a short, high beep and delay for 1 second

Text

Subroutine: dn2

Make a short, high beep and delay for 1 second

Equipment

Subroutine: eq

Subtract the price of equipment from the cash pot

Equipment

Subroutine: prx

Return the price of a piece of equipment

Equipment

Subroutine: qv

Print a menu of the four space views, for buying lasers

Charts

Subroutine: hm

Select the closest system and redraw the chart crosshairs

Equipment

Subroutine: refund

Install a new laser, processing a refund if applicable

Equipment

Variable: PRXS

Equipment prices

Elite E
-------

CategoryDetails

Universe

Subroutine: cpl

Print the selected system name

Status

Subroutine: cmn

Print the commander's name

Universe

Subroutine: ypl

Print the current system name

Universe

Subroutine: tal

Print the current galaxy number

Status

Subroutine: fwl

Print fuel and cash levels

Status

Subroutine: csh

Print the current amount of cash

Text

Subroutine: plf

Print a text token followed by a newline

Text

Subroutine: TT68

Print a text token followed by a colon

Text

Subroutine: TT73

Print a colon

Text

Subroutine: TT27

Print a text token

Text

Subroutine: TT42

Print a letter in lower case

Text

Subroutine: TT41

Print a letter according to Sentence Case

Text

Subroutine: qw

Print a recursive token in the range 128-145

Text

Subroutine: crlf

Tab to column 21 and print a colon

Text

Subroutine: TT45

Print a letter in lower case

Text

Subroutine: TT46

Print a character and switch to capitals

Text

Subroutine: TT74

Print a character

Text

Subroutine: TT43

Print a two-letter token or recursive token 0-95

Text

Subroutine: ex

Print a recursive token

Drawing ships

Subroutine: DOEXP

Draw an exploding ship

Universe

Subroutine: SOS1

Update the missile indicators, set up the planet data block

Universe

Subroutine: SOLAR

Set up various aspects of arriving in a new system

Stardust

Subroutine: NWSTARS

Initialise the stardust field

Stardust

Subroutine: nWq

Create a random cloud of stardust

Dashboard

Subroutine: WPSHPS

Clear the scanner, reset the ball line and sun line heaps

Drawing suns

Subroutine: FLFLLS

Reset the sun line heap

Drawing the screen

Subroutine: DET1

Show or hide the dashboard (for when we die) by sending a #DODIALS command to the I/O processor

Flight

Subroutine: SHD

Charge a shield and drain some energy from the energy banks

Flight

Subroutine: DENGY

Drain some energy from the energy banks

Dashboard

Subroutine: COMPAS

Update the compass

Maths (Arithmetic)

Subroutine: SPS2

Calculate (Y X) = A / 10

Maths (Geometry)

Subroutine: SPS4

Calculate the vector to the space station

Dashboard

Subroutine: SP1

Draw the space station on the compass

Dashboard

Subroutine: SP2

Draw a dot on the compass, given the planet/station vector

Drawing pixels

Subroutine: DOT

Draw a dash on the compass by sending a #DOdot command to the I/O processor

Flight

Subroutine: OOPS

Take some damage

Maths (Geometry)

Subroutine: SPS3

Copy a space coordinate from the K% block into K3

Universe

Subroutine: GINF

Fetch the address of a ship's data block into INF

Universe

Subroutine: NWSPS

Add a new space station to our local bubble of universe

Universe

Subroutine: NWSHP

Add a new ship to our local bubble of universe

Universe

Subroutine: NwS1

Flip the sign and double an INWK byte

Dashboard

Subroutine: ABORT

Disarm missiles and update the dashboard indicators

Dashboard

Subroutine: ABORT2

Set/unset the lock target for a missile and update the dashboard

Dashboard

Subroutine: ECBLB2

Start up the E.C.M. (light up the indicator, start the countdown and make the E.C.M. sound)

Dashboard

Subroutine: ECBLB

Light up the E.C.M. indicator bulb ("E") on the dashboard by sending a #DOBULB 255 command to the I/O processor

Dashboard

Subroutine: SPBLB

Light up the space station indicator ("S") on the dashboard by sending a #DOBULB 0 command to the I/O processor

Dashboard

Subroutine: MSBAR

Draw a specific indicator in the dashboard's missile bar by sending a #DOmsbar command to the I/O processor

Maths (Geometry)

Subroutine: PROJ

Project the current ship or planet onto the screen

Drawing planets

Subroutine: PL2

Remove the planet or sun from the screen

Drawing planets

Subroutine: PLANET

Draw the planet or sun

Drawing planets

Subroutine: PL9 (Part 1 of 3)

Draw the planet, with either an equator and meridian, or a crater

Drawing planets

Subroutine: PL9 (Part 2 of 3)

Draw the planet's equator and meridian

Drawing planets

Subroutine: PL9 (Part 3 of 3)

Draw the planet's crater

Drawing planets

Subroutine: PLS1

Calculate (Y A) = nosev_x / z

Drawing planets

Subroutine: PLS2

Draw a half-ellipse

Drawing planets

Subroutine: PLS22

Draw an ellipse or half-ellipse

Drawing suns

Subroutine: SUN (Part 1 of 4)

Draw the sun: Set up all the variables needed to draw the sun

Drawing suns

Subroutine: SUN (Part 2 of 4)

Draw the sun: Start from the bottom of the screen and erase the old sun line by line

Drawing suns

Subroutine: SUN (Part 3 of 4)

Draw the sun: Continue to move up the screen, drawing the new sun line by line

Drawing suns

Subroutine: SUN (Part 4 of 4)

Draw the sun: Continue to the top of the screen, erasing the old sun line by line

Drawing circles

Subroutine: CIRCLE

Draw a circle for the planet

Drawing circles

Subroutine: CIRCLE2

Draw a circle (for the planet or chart)

Drawing circles

Subroutine: LS2FL

Draw the contents of the ball line heap by sending an OSWRCH 129 command to the I/O processor

Drawing suns

Subroutine: WPLS

Remove the sun from the screen

Drawing lines

Subroutine: EDGES

Draw a horizontal line given a centre and a half-width

Drawing circles

Subroutine: CHKON

Check whether any part of a circle appears on the extended screen

Drawing planets

Subroutine: PL21

Return from a planet/sun-drawing routine with a failure flag

Drawing planets

Subroutine: PLS3

Calculate (Y A P) = 222 * roofv_x / z

Drawing planets

Subroutine: PLS4

Calculate CNT2 = arctan(P / A) / 4

Drawing planets

Subroutine: PLS5

Calculate roofv_x / z and roofv_y / z

Drawing planets

Subroutine: PLS6

Calculate (X K) = (A P) / (z_sign z_hi z_lo)

Keyboard

Subroutine: TT17

Scan the keyboard for cursor key or joystick movement

Universe

Subroutine: ping

Set the selected system to the current system

Elite F
-------

CategoryDetails

Universe

Subroutine: KS3

Set the SLSP ship line heap pointer after shuffling ship slots

Universe

Subroutine: KS1

Remove the current ship from our local bubble of universe

Universe

Subroutine: KS4

Remove the space station and replace it with the sun

Universe

Subroutine: KS2

Check the local bubble for missiles with target lock

Universe

Subroutine: KILLSHP

Remove a ship from our local bubble of universe

Sound

Variable: SFX

Sound data

Missions

Subroutine: THERE

Check whether we are in the Constrictor's system in mission 1

Start and end

Subroutine: RESET

Reset most variables

Start and end

Subroutine: RES2

Reset a number of flight variables and workspaces

Universe

Subroutine: ZINF

Reset the INWK workspace and orientation vectors

Dashboard

Subroutine: msblob

Display the dashboard's missile indicators in green

Flight

Subroutine: me2

Remove an in-flight message from the space view

Universe

Subroutine: Ze

Initialise the INWK workspace to a hostile ship

Maths (Arithmetic)

Subroutine: DORND

Generate random numbers

Main loop

Subroutine: Main game loop (Part 1 of 6)

Spawn a trader (a Cobra Mk III, Python, Boa or Anaconda)

Main loop

Subroutine: Main game loop (Part 2 of 6)

Call the main flight loop, and potentially spawn a trader, an asteroid, or a cargo canister

Main loop

Subroutine: Main game loop (Part 3 of 6)

Potentially spawn a cop, particularly if we've been bad

Main loop

Subroutine: Main game loop (Part 4 of 6)

Potentially spawn a lone bounty hunter, a Thargoid, or up to four pirates

Main loop

Subroutine: Main game loop (Part 5 of 6)

Cool down lasers, make calls to update the dashboard

Main loop

Subroutine: Main game loop (Part 6 of 6)

Process non-flight key presses (red function keys, docked keys)

Keyboard

Subroutine: TT102

Process function key, save key, hyperspace and chart key presses and update the hyperspace counter

Status

Subroutine: BAD

Calculate how bad we have been

Maths (Geometry)

Subroutine: FAROF

Compare x_hi, y_hi and z_hi with 224

Maths (Geometry)

Subroutine: FAROF2

Compare x_hi, y_hi and z_hi with A

Maths (Geometry)

Subroutine: MAS4

Calculate a cap on the maximum distance to a ship

Utility routines

Variable: brkd

The brkd counter for error handling

Utility routines

Subroutine: BRBR

The standard BRKV handler for the game

Start and end

Subroutine: DEATH

Display the death screen

Universe

Variable: spasto

Contains the address of the Coriolis space station's ship blueprint

Loader

Subroutine: BEGIN

Initialise the configuration variables and start the game

Start and end

Subroutine: TT170

Main entry point for the Elite game code

Start and end

Subroutine: DEATH2

Reset most of the game and restart from the title screen

Start and end

Subroutine: BR1 (Part 1 of 2)

Show the "Load New Commander (Y/N)?" screen and start the game

Start and end

Subroutine: BR1 (Part 2 of 2)

Show the "Press Fire or Space, Commander" screen and start the game

Status

Subroutine: BAY

Go to the docking bay (i.e. show the Status Mode screen)

Start and end

Subroutine: DFAULT

Reset the current commander data block to the last saved commander

Start and end

Subroutine: TITLE

Display a title screen with a rotating ship and prompt

Save and load

Subroutine: CHECK

Calculate the checksum for the last saved commander data block

Save and load

Subroutine: TRNME

Copy the last saved commander's name from INWK to NA%

Save and load

Subroutine: TR1

Copy the last saved commander's name from NA% to INWK

Save and load

Subroutine: GTNMEW

Fetch the name of a commander file to save or load

Text

Subroutine: MT26

Fetch a line of text from the keyboard

Text

Variable: RLINE

The OSWORD configuration block used to fetch a line of text from the keyboard

Utility routines

Subroutine: ZERO

Reset the local bubble of universe and ship status

Utility routines

Subroutine: ZEBC

Zero-fill pages &B and &C

Utility routines

Subroutine: ZES1

Zero-fill the page whose number is in X

Utility routines

Subroutine: ZES2

Zero-fill a specific page

Save and load

Variable: CTLI

The OS command string for cataloguing a disc

Save and load

Variable: DELI

The OS command string for deleting a file

Save and load

Subroutine: CATS

Ask for a disc drive number and print a catalogue of that drive

Save and load

Subroutine: DELT

Catalogue a disc, ask for a filename to delete, and delete the file

Save and load

Variable: stack

Temporary storage for the stack pointer when switching the BRKV handler between BRBR and MEBRK

Save and load

Subroutine: MEBRK

The BRKV handler for disc access operations

Save and load

Subroutine: CAT

Catalogue a disc, wait for a key press and display the disc access menu

Save and load

Subroutine: retry

Scan the keyboard until a key is pressed and display the disc access menu

Save and load

Subroutine: SVE

Display the disc access menu and process saving of commander files

Save and load

Subroutine: QUS1

Save or load the commander file

Save and load

Subroutine: GTDRV

Get an ASCII disc drive number from the keyboard

Save and load

Subroutine: LOD

Load a commander file

Utility routines

Subroutine: FX200

Set the behaviour of the ESCAPE and BREAK keys

Utility routines

Subroutine: backtonormal

Disable the keyboard, set the SVN flag to 0, and return with A = 0

Utility routines

Subroutine: SCLI2

Execute an OS command, setting the SVN flag while it's running

Save and load

Subroutine: DODOSVN

Set the SVN ("save in progress") flag by sending a #DOsvn command to the I/O processor

Utility routines

Subroutine: CLDELAY

Delay by iterating through 5 * 256 (1280) empty loops

Keyboard

Subroutine: ZEKTRAN

Reset the key logger buffer at KTRAN

Maths (Geometry)

Subroutine: SPS1

Calculate the vector to the planet and store it in XX15

Maths (Geometry)

Subroutine: TAS2

Normalise the three-coordinate vector in K3

Maths (Geometry)

Subroutine: NORM

Normalise the three-coordinate vector in XX15

Keyboard

Subroutine: RDKEY

Scan the keyboard for key presses by sending an OSWORD 240 command to the I/O processor

Flight

Subroutine: WARP

Perform an in-system jump

Sound

Subroutine: ECMOF

Switch off the E.C.M.

Sound

Subroutine: EXNO3

Make an explosion sound

Sound

Subroutine: BEEP

Make a short, high beep

Tactics

Subroutine: SFRMIS

Add an enemy missile to our local bubble of universe

Status

Subroutine: EXNO2

Process us making a kill

Sound

Subroutine: EXNO

Make the sound of a laser strike or ship explosion

Sound

Subroutine: NOISE

Make the sound whose number is in A

Sound

Subroutine: NO3

Make a sound from a prepared sound block

Sound

Subroutine: NOS1

Prepare a sound block

Keyboard

Variable: KYTB

Lookup table for in-flight keyboard controls

Keyboard

Subroutine: CTRL

Scan the keyboard to see if CTRL is currently pressed

Keyboard

Subroutine: DKS4

Scan for a particular key press by sending a #DODKS4 command to the I/O processor

Keyboard

Subroutine: DKS2

Read the joystick position

Keyboard

Subroutine: DKS3

Toggle a configuration setting and emit a beep

Keyboard

Subroutine: DKJ1

Read joystick and flight controls

Keyboard

Subroutine: U%

Clear the key logger

Keyboard

Subroutine: DOKEY

Scan for the seven primary flight controls and apply the docking computer manoeuvring code

Keyboard

Subroutine: DK4

Scan for pause, configuration and secondary flight keys

Save and load

Subroutine: savscr

Save a screenshot if CTRL-D is pressed when the game is paused

Keyboard

Subroutine: TT217

Scan the keyboard until a key is pressed

Flight

Subroutine: me1

Erase an old in-flight message and display a new one

Flight

Subroutine: MESS

Display an in-flight message

Flight

Subroutine: mes9

Print a text token, possibly followed by " DESTROYED"

Flight

Subroutine: OUCH

Potentially lose cargo or equipment following damage

Flight

Subroutine: ou2

Display "E.C.M.SYSTEM DESTROYED" as an in-flight message

Flight

Subroutine: ou3

Display "FUEL SCOOPS DESTROYED" as an in-flight message

Market

Macro: ITEM

Macro definition for the market prices table

Market

Variable: QQ23

Market prices table

Save and load

Variable: oscobl

OSFILE configuration block for saving a screenshot

Save and load

Variable: scname

Filename to be used when saving a screenshot

Save and load

Variable: oscobl2

Master OSFILE configuration block for saving a screenshot

Maths (Geometry)

Subroutine: TIDY

Orthonormalise the orientation vectors for a ship

Maths (Arithmetic)

Subroutine: TIS2

Calculate A = A / Q

Maths (Arithmetic)

Subroutine: TIS3

Calculate -(nosev_1 * roofv_1 + nosev_2 * roofv_2) / nosev_3

Maths (Arithmetic)

Subroutine: DVIDT

Calculate (P+1 A) = (A P) / Q

Keyboard

Variable: KTRAN

The key logger buffer that gets updated by the OSWORD 240 command

Keyboard

Variable: TRANTABLE

Translation table from internal key number to ASCII

Elite G
-------

CategoryDetails

Maths (Arithmetic)

Variable: log

Binary logarithm table (high byte)

Maths (Arithmetic)

Variable: logL

Binary logarithm table (low byte)

Maths (Arithmetic)

Variable: antilog

Binary antilogarithm table

Maths (Arithmetic)

Variable: antilogODD

Binary antilogarithm table

Drawing ships

Subroutine: SHPPT

Draw a distant ship as a point rather than a full wireframe

Maths (Arithmetic)

Subroutine: LL5

Calculate Q = SQRT(R Q)

Maths (Arithmetic)

Subroutine: LL28

Calculate R = 256 * A / Q

Maths (Arithmetic)

Subroutine: LL38

Calculate (S A) = (S R) + (A Q)

Maths (Geometry)

Subroutine: LL51

Calculate the dot product of XX15 and XX16

Drawing ships

Subroutine: LL9 (Part 1 of 12)

Draw ship: Check if ship is exploding, check if ship is in front

Drawing ships

Subroutine: LL9 (Part 2 of 12)

Draw ship: Check if ship is in field of view, close enough to draw

Drawing ships

Subroutine: LL9 (Part 3 of 12)

Draw ship: Set up orientation vector, ship coordinate variables

Drawing ships

Subroutine: LL9 (Part 4 of 12)

Draw ship: Set visibility for exploding ship (all faces visible)

Drawing ships

Subroutine: LL9 (Part 5 of 12)

Draw ship: Calculate the visibility of each of the ship's faces

Drawing ships

Subroutine: LL9 (Part 6 of 12)

Draw ship: Calculate the visibility of each of the ship's vertices

Maths (Arithmetic)

Subroutine: LL61

Calculate (U R) = 256 * A / Q

Maths (Arithmetic)

Subroutine: LL62

Calculate 128 - (U R)

Drawing ships

Subroutine: LL9 (Part 7 of 12)

Draw ship: Calculate the visibility of each of the ship's vertices

Drawing ships

Subroutine: LL9 (Part 8 of 12)

Draw ship: Calculate the screen coordinates of visible vertices

Drawing ships

Subroutine: LL9 (Part 9 of 12)

Draw ship: Draw laser beams if the ship is firing its laser at us

Drawing ships

Subroutine: LL9 (Part 10 of 12)

Draw ship: Calculate the visibility of each of the ship's edges

Drawing ships

Subroutine: LL9 (Part 11 of 12)

Draw ship: Add all visible edges to the ship line heap

Drawing ships

Subroutine: LL9 (Part 12 of 12)

Draw ship: Draw all the visible edges from the ship line heap

Drawing lines

Subroutine: LL118

Move a point along a line until it is on-screen

Maths (Arithmetic)

Subroutine: LL120

Calculate (Y X) = (S x1_lo) * XX12+2 or (S x1_lo) / XX12+2

Maths (Arithmetic)

Subroutine: LL123

Calculate (Y X) = (S R) / XX12+2 or (S R) * XX12+2

Maths (Arithmetic)

Subroutine: LL129

Calculate Q = XX12+2, A = S EOR XX12+3 and (S R) = |S R|

Drawing lines

Subroutine: LL145 (Part 1 of 4)

Clip line: Work out which end-points are on-screen, if any

Drawing lines

Subroutine: LL145 (Part 2 of 4)

Clip line: Work out if any part of the line is on-screen

Drawing lines

Subroutine: LL145 (Part 3 of 4)

Clip line: Calculate the line's gradient

Drawing lines

Subroutine: LL145 (Part 4 of 4)

Clip line: Call the routine in LL188 to do the actual clipping

Elite H
-------

CategoryDetails

Moving

Subroutine: MVEIT (Part 1 of 9)

Move current ship: Tidy the orientation vectors

Moving

Subroutine: MVEIT (Part 2 of 9)

Move current ship: Call tactics routine, remove ship from scanner

Moving

Subroutine: MVEIT (Part 3 of 9)

Move current ship: Move ship forward according to its speed

Moving

Subroutine: MVEIT (Part 4 of 9)

Move current ship: Apply acceleration to ship's speed as a one-off

Moving

Subroutine: MVEIT (Part 5 of 9)

Move current ship: Rotate ship's location by our pitch and roll

Moving

Subroutine: MVEIT (Part 6 of 9)

Move current ship: Move the ship in space according to our speed

Moving

Subroutine: MVEIT (Part 7 of 9)

Move current ship: Rotate ship's orientation vectors by pitch/roll

Moving

Subroutine: MVEIT (Part 8 of 9)

Move current ship: Rotate ship about itself by its own pitch/roll

Moving

Subroutine: MVEIT (Part 9 of 9)

Move current ship: Redraw on scanner, if it hasn't been destroyed

Moving

Subroutine: MVT1

Calculate (x_sign x_hi x_lo) = (x_sign x_hi x_lo) + (A R)

Moving

Subroutine: MVS4

Apply pitch and roll to an orientation vector

Moving

Subroutine: MVT6

Calculate (A P+2 P+1) = (x_sign x_hi x_lo) + (A P+2 P+1)

Moving

Subroutine: MV40

Rotate the planet or sun's location in space by the amount of pitch and roll of our ship

Copy protection

Subroutine: Checksum

Checksum the code from &1000 to &9FFF and check against S%-1

Flight

Subroutine: PLUT

Flip the coordinate axes for the four different views

Flight

Subroutine: LOOK1

Initialise the space view

Flight

Subroutine: SIGHT

Draw the laser crosshairs

Drawing the screen

Subroutine: TT66

Clear the screen and set the current view type

Drawing the screen

Subroutine: TTX66

Send control code 11 to the I/O processor to clear the top part of the screen and draw a white border

Utility routines

Subroutine: DELAY

Wait for a specified time, in 1/50s of a second

Drawing the screen

Subroutine: CLYNS

Clear the bottom three text rows of the mode 1 screen by sending a #clyns command to the I/O processor

Dashboard

Variable: SCANpars

The scanner buffer to send with the #onescan command

Dashboard

Subroutine: SCAN

Display the current ship on the scanner

Drawing the screen

Subroutine: WSCAN

Ask the I/O processor to wait for the vertical sync by sending a #wscn command to the I/O processor

Elite I
-------

CategoryDetails

Demo

Variable: HIMCNT

Used as a loop counter for the Cobra's slow approach in the demo

Universe

Subroutine: ZINF2

Reset the INWK workspace and orientation vectors

Demo

Subroutine: TWIST

Pitch the current ship by a small angle in a positive direction

Universe

Subroutine: STORE

Copy the ship data block at INWK back to the K% workspace

Demo

Subroutine: DEMON

Show the demo

Demo

Subroutine: SLIDE

Display a Star Wars scroll text

Utility routines

Subroutine: ZEVB

Zero-fill the Y1VB variable

Demo

Subroutine: GRIDSET

Populate the line coordinate tables with the lines for the scroll text

Demo

Subroutine: GRS1

Populate the line coordinate tables with the lines for a single scroll text character

Demo

Subroutine: ZZAAP

Draw a vertical red laser line from (128, 67) to (128, 160)

Demo

Variable: LTDEF

Line definitions for characters in the Star Wars scroll text

Demo

Variable: NOFX

The x-coordinates of the scroll text letter grid

Demo

Variable: NOFY

The y-coordinates of the scroll text letter grid

Demo

Variable: acorn

The text for the demo's opening scroll text

Demo

Variable: byian

The text for the demo's middle scroll text

Demo

Variable: executive

Extra text for the demo in the Executive version

Demo

Variable: true3

The text for the demo's final scroll text

Sound

Subroutine: TALK

Speak using the Watford Electronics Beeb Speech Synthesiser

Sound

Variable: SPEECH

Phrases for the Watford Electronics Beeb Speech Synthesiser

Elite J
-------

CategoryDetails

Text

Macro: EJMP

Macro definition for jump tokens in the extended token table

Text

Macro: ECHR

Macro definition for characters in the extended token table

Text

Macro: ETOK

Macro definition for recursive tokens in the extended token table

Text

Macro: ETWO

Macro definition for two-letter tokens in the extended token table

Text

Macro: ERND

Macro definition for random tokens in the extended token table

Text

Macro: TOKN

Macro definition for standard tokens in the extended token table

Text

Variable: TKN1

The first extended token table for recursive tokens 0-255 (DETOK)

Text

Variable: RUPLA

System numbers that have extended description overrides

Text

Variable: RUGAL

The criteria for systems with extended description overrides

Text

Variable: RUTOK

The second extended token table for recursive tokens 0-26 (DETOK3)

Text

Variable: MTIN

Lookup table for random tokens in the extended token table (0-37)

Loader

Subroutine: COLD

Copy the recursive tokens and ship blueprints to their correct locations

Utility routines

Variable: F%

Denotes the end of the main game code, from Elite A to Elite J

Ship blueprints
---------------

CategoryDetails

Drawing ships

Variable: XX21

Ship blueprints lookup table

Drawing ships

Variable: E%

Ship blueprints default NEWB flags

Drawing ships

Macro: VERTEX

Macro definition for adding vertices to ship blueprints

Drawing ships

Macro: EDGE

Macro definition for adding edges to ship blueprints

Drawing ships

Macro: FACE

Macro definition for adding faces to ship blueprints

Drawing ships

Variable: SHIP_MISSILE

Ship blueprint for a missile

Drawing ships

Variable: SHIP_CORIOLIS

Ship blueprint for a Coriolis space station

Drawing ships

Variable: SHIP_ESCAPE_POD

Ship blueprint for an escape pod

Drawing ships

Variable: SHIP_PLATE

Ship blueprint for an alloy plate

Drawing ships

Variable: SHIP_CANISTER

Ship blueprint for a cargo canister

Drawing ships

Variable: SHIP_BOULDER

Ship blueprint for a boulder

Drawing ships

Variable: SHIP_ASTEROID

Ship blueprint for an asteroid

Drawing ships

Variable: SHIP_SPLINTER

Ship blueprint for a splinter

Drawing ships

Variable: SHIP_SHUTTLE

Ship blueprint for a Shuttle

Drawing ships

Variable: SHIP_TRANSPORTER

Ship blueprint for a Transporter

Drawing ships

Variable: SHIP_COBRA_MK_3

Ship blueprint for a Cobra Mk III

Drawing ships

Variable: SHIP_PYTHON

Ship blueprint for a Python

Drawing ships

Variable: SHIP_BOA

Ship blueprint for a Boa

Drawing ships

Variable: SHIP_ANACONDA

Ship blueprint for an Anaconda

Drawing ships

Variable: SHIP_ROCK_HERMIT

Ship blueprint for a rock hermit (asteroid)

Drawing ships

Variable: SHIP_VIPER

Ship blueprint for a Viper

Drawing ships

Variable: SHIP_SIDEWINDER

Ship blueprint for a Sidewinder

Drawing ships

Variable: SHIP_MAMBA

Ship blueprint for a Mamba

Drawing ships

Variable: SHIP_KRAIT

Ship blueprint for a Krait

Drawing ships

Variable: SHIP_ADDER

Ship blueprint for an Adder

Drawing ships

Variable: SHIP_GECKO

Ship blueprint for a Gecko

Drawing ships

Variable: SHIP_COBRA_MK_1

Ship blueprint for a Cobra Mk I

Drawing ships

Variable: SHIP_WORM

Ship blueprint for a Worm

Drawing ships

Variable: SHIP_COBRA_MK_3_P

Ship blueprint for a Cobra Mk III (pirate)

Drawing ships

Variable: SHIP_ASP_MK_2

Ship blueprint for an Asp Mk II

Drawing ships

Variable: SHIP_PYTHON_P

Ship blueprint for a Python (pirate)

Drawing ships

Variable: SHIP_FER_DE_LANCE

Ship blueprint for a Fer-de-Lance

Drawing ships

Variable: SHIP_MORAY

Ship blueprint for a Moray

Drawing ships

Variable: SHIP_THARGOID

Ship blueprint for a Thargoid mothership

Drawing ships

Variable: SHIP_THARGON

Ship blueprint for a Thargon

Drawing ships

Variable: SHIP_CONSTRICTOR

Ship blueprint for a Constrictor

Drawing ships

Variable: SHIP_LOGO

Ship blueprint for the Elite logo

Drawing ships

Variable: SHIP_COUGAR

Ship blueprint for a Cougar

Drawing ships

Variable: SHIP_DODO

Ship blueprint for a Dodecahedron ("Dodo") space station

I/O processor
-------------

CategoryDetails

Workspaces

Workspace: ZP (I/O processor)

Important variables used by the I/O processor

Workspaces

Workspace: TINA (I/O processor)

The code block for the TINA hook

Drawing lines

Variable: TABLE (I/O processor)

The line buffer for line data transmitted from the parasite

Text

Variable: FONT% (I/O processor)

A copy of the character definition bitmap table from the MOS ROM

Maths (Arithmetic)

Variable: log (I/O processor)

Binary logarithm table (high byte)

Maths (Arithmetic)

Variable: logL (I/O processor)

Binary logarithm table (low byte)

Maths (Arithmetic)

Variable: antilog (I/O processor)

Binary antilogarithm table

Maths (Arithmetic)

Variable: antilogODD (I/O processor)

Binary antilogarithm table

Drawing pixels

Variable: ylookup (I/O processor)

Lookup table for converting pixel y-coordinate to page number of screen address

Drawing the screen

Variable: TVT3 (I/O processor)

Palette data for the mode 1 part of the screen (the top part)

Workspaces

Workspace: I/O variables (I/O processor)

Various variables used by the I/O processor

Tube

Variable: JMPTAB (I/O processor)

The lookup table for OSWRCH jump commands (128-147)

Loader

Subroutine: STARTUP (I/O processor)

Set the various vectors, interrupts and timers, and terminate the loading process so the vector handlers can take over

Tube

Subroutine: PUTBACK (I/O processor)

Reset the OSWRCH vector in WRCHV to point to USOSWRCH

Tube

Subroutine: USOSWRCH (I/O processor)

The custom OSWRCH routine for writing characters and implementing jump table commands

Drawing the screen

Subroutine: DODIALS (I/O processor)

Implement the #DODIALS command (show or hide the dashboard)

Flight

Subroutine: DOFE21 (I/O processor)

Implement the #DOFE21 command (show the energy bomb effect)

Drawing circles

Subroutine: DOHFX (I/O processor)

Implement the #DOHFX command (update the hyperspace effect flag)

Keyboard

Subroutine: DOVIAE (I/O processor)

Implement the #VIAE command (enable/disable interrupts)

Save and load

Subroutine: DOCATF (I/O processor)

Implement the #DOCATF command (update the disc catalogue flag)

Text

Subroutine: DOCOL (I/O processor)

Implement the #SETCOL command (set the current colour)

Save and load

Subroutine: DOSVN (I/O processor)

Implement the #DOSVN command (update the "save in progress" flag)

Utility routines

Subroutine: DOBRK (I/O processor)

Implement the OSWRCH 145 command (execute a BRK instruction)

Text

Subroutine: printer (I/O processor)

Implement the #printcode command (print a character on the printer and screen)

Text

Subroutine: POSWRCH (I/O processor)

Print a character on the printer only

Text

Subroutine: tosend (I/O processor)

Print a printable character and return to the printer routine

Text

Subroutine: prilf (I/O processor)

Implement the #prilf command (print a blank line on the printer)

Dashboard

Subroutine: DOBULB (I/O processor)

Implement the #DOBULB 0 command (draw the space station indicator bulb)

Dashboard

Subroutine: ECBLB (I/O processor)

Implement the #DOBULB 255 command (draw the E.C.M. indicator bulb)

Dashboard

Variable: SPBT (I/O processor)

The bitmap definition for the space station indicator bulb

Dashboard

Variable: ECBT (I/O processor)

The character bitmap for the E.C.M. indicator bulb

Dashboard

Subroutine: DOT (I/O processor)

Implement the #DOdot command (draw a dash on the compass)

Drawing pixels

Subroutine: CPIX4 (I/O processor)

Draw a double-height dot on the dashboard

Drawing pixels

Subroutine: CPIX2 (I/O processor)

Draw a single-height dash on the dashboard

Dashboard

Subroutine: SC48 (I/O processor)

Implement the #onescan command (draw a ship on the 3D scanner)

Drawing lines

Subroutine: BEGINLIN (I/O processor)

Implement the OSWRCH 129 command (start receiving a new line to draw)

Drawing lines

Subroutine: ADDBYT (I/O processor)

Implement the OSWRCH 130 command (add a byte to a line and draw it when all bytes are received)

Drawing pixels

Variable: TWOS (I/O processor)

Ready-made single-pixel character row bytes for mode 1

Drawing pixels

Variable: TWOS2 (I/O processor)

Ready-made double-pixel character row bytes for mode 1

Drawing pixels

Variable: CTWOS (I/O processor)

Ready-made single-pixel character row bytes for mode 2

Drawing lines

Subroutine: HLOIN2 (I/O processor)

Draw a horizontal line in a specific colour

Drawing lines

Subroutine: LOIN (Part 1 of 7) (I/O processor)

Draw a line: Calculate the line gradient in the form of deltas

Drawing lines

Subroutine: LOIN (Part 2 of 7) (I/O processor)

Draw a line: Line has a shallow gradient, step right along x-axis

Drawing lines

Subroutine: LOIN (Part 3 of 7) (I/O processor)

Draw a shallow line going right and up or left and down

Drawing lines

Subroutine: LOIN (Part 4 of 7) (I/O processor)

Draw a shallow line going right and down or left and up

Drawing lines

Subroutine: LOIN (Part 5 of 7) (I/O processor)

Draw a line: Line has a steep gradient, step up along y-axis

Drawing lines

Subroutine: LOIN (Part 6 of 7) (I/O processor)

Draw a steep line going up and left or down and right

Drawing lines

Subroutine: LOIN (Part 7 of 7) (I/O processor)

Draw a steep line going up and right or down and left

Drawing lines

Subroutine: HLOIN (I/O processor)

Implement the OSWORD 247 command (draw the sun lines in the horizontal line buffer in orange)

Drawing pixels

Variable: TWFL (I/O processor)

Ready-made character rows for the left end of a horizontal line

Drawing pixels

Variable: TWFR (I/O processor)

Ready-made character rows for the right end of a horizontal line

Drawing pixels

Variable: orange (I/O processor)

Lookup table for 2-pixel mode 1 orange pixels for the sun

Drawing pixels

Subroutine: PIXEL (I/O processor)

Implement the OSWORD 241 command (draw space view pixels)

Drawing pixels

Variable: PXCL (I/O processor)

A four-colour mode 1 pixel byte that represents a dot's distance

Tube

Subroutine: newosrdch (I/O processor)

The custom OSRDCH routine for reading characters

Maths (Arithmetic)

Subroutine: ADD (I/O processor)

Calculate (A X) = (A P) + (S R)

Ship hangar

Subroutine: HANGER (I/O processor)

Implement the OSWORD 248 command (display the ship hangar)

Ship hangar

Subroutine: HAS2 (I/O processor)

Draw a hangar background line from left to right

Ship hangar

Subroutine: HAL3 (I/O processor)

Draw a hangar background line from left to right, stopping when it bumps into existing on-screen content

Ship hangar

Subroutine: HAS3 (I/O processor)

Draw a hangar background line from right to left

Maths (Arithmetic)

Subroutine: DVID4 (I/O processor)

Calculate (P R) = 256 * A / Q

Dashboard

Subroutine: ADPARAMS (I/O processor)

Implement the OSWRCH 137 command (add a dashboard parameter and update the dashboard when all are received)

Dashboard

Subroutine: RDPARAMS (I/O processor)

Implement the #RDPARAMS command (start receiving a new set of parameters for updating the dashboard)

Keyboard

Macro: DKS4 (I/O processor)

Scan the keyboard to see if a specific key is being pressed

Keyboard

Variable: KYTB (I/O processor)

Lookup table for in-flight keyboard controls

Keyboard

Subroutine: KEYBOARD (I/O processor)

Implement the OSWORD 240 command (scan the keyboard and joystick and log the results)

Tube

Variable: OSWVECS (I/O processor)

The lookup table for OSWORD jump commands (240-255)

Tube

Subroutine: NWOSWD (I/O processor)

The custom OSWORD routine

Dashboard

Subroutine: MSBAR (I/O processor)

Implement the #DOmsbar command (draw a specific indicator in the dashboard's missile bar)

Drawing the screen

Subroutine: WSCAN (I/O processor)

Implement the #wscn command (wait for the vertical sync)

Keyboard

Subroutine: DODKS4 (I/O processor)

Implement the #DODKS4 command (scan the keyboard to see if a specific key is being pressed)

Drawing the screen

Subroutine: cls (I/O processor)

Clear the top part of the screen and draw a white border

Text

Subroutine: TT67 (I/O processor)

Print a newline

Text

Subroutine: TT26 (I/O processor)

Print a character at the text cursor by poking into screen memory

Drawing the screen

Subroutine: TTX66 (I/O processor)

Clear the top part of the screen and draw a white border

Utility routines

Subroutine: ZES1 (I/O processor)

Zero-fill the page whose number is in X

Utility routines

Subroutine: ZES2 (I/O processor)

Zero-fill a specific page

Text

Subroutine: SETXC (I/O processor)

Implement the #SETXC command (move the text cursor to a specific column)

Text

Subroutine: SETYC (I/O processor)

Implement the #SETYC command (move the text cursor to a specific row)

Copy protection

Subroutine: SOMEPROT (I/O processor)

Implement the OSWORD 249 command (some copy protection)

Drawing the screen

Subroutine: CLYNS (I/O processor)

Implement the #clyns command (clear the bottom of the screen)

Dashboard

Subroutine: DIALS (Part 1 of 4) (I/O processor)

Update the dashboard: speed indicator

Dashboard

Subroutine: DIALS (Part 2 of 4) (I/O processor)

Update the dashboard: pitch and roll indicators

Dashboard

Subroutine: DIALS (Part 3 of 4) (I/O processor)

Update the dashboard: four energy banks

Dashboard

Subroutine: DIALS (Part 4 of 4) (I/O processor)

Update the dashboard: shields, fuel, laser & cabin temp, altitude

Dashboard

Subroutine: PZW2 (I/O processor)

Fetch the current dashboard colours for non-striped indicators, to support flashing

Dashboard

Subroutine: PZW (I/O processor)

Fetch the current dashboard colours, to support flashing

Dashboard

Subroutine: DILX (I/O processor)

Update a bar-based indicator on the dashboard

Dashboard

Subroutine: DIL2 (I/O processor)

Update the roll or pitch indicator on the dashboard

Drawing the screen

Variable: TVT1 (I/O processor)

Palette data for the mode 2 part of the screen (the dashboard)

Copy protection

Subroutine: do65C02 (I/O processor)

Reverse the order of all bytes between the addresses in (1 0) and (3 2) and start the game

Drawing the screen

Subroutine: IRQ1 (I/O processor)

The main screen-mode interrupt handler (IRQ1V points here)

Drawing the screen

Subroutine: SETVDU19 (I/O processor)

Implement the #SETVDU19 command (change mode 1 palette)