There's a lot to explain in Lander, and some of it is pretty challenging stuff. Before getting stuck in, it's probably wise to take a brief look at some of the terminology I've used in this commentary.

Let's start with some general terms.

- Given a number X, ~X is the number with all the bits inverted.
- Given a number A, |A| is the absolute of that number - i.e. the number with no sign, or just the magnitude of the number.
- Coordinates are shown as (x, y), both on the screen and in the outside world, so the centre of the graphical portion of the screen is at screen coordinate (159, 119), while the origin for the outside world, which is in the front-left corner of the launchpad, is at (0, 0, 0).
- Vectors and matrices are enclosed in square brackets, like this:
[ 1 0 0 ] [ x ] [ 0 1 0 ] or [ y ] [ 0 0 -1 ] [ z ]

We might sometimes write a column vector as (x y z) instead, just to save space, but it means the same thing as the vertical version. And as vectors and coordinates are often interchangeable, we might also talk about the vector (x, y, z); it's all the same thing under the hood, anyway.

Unlike my 8-bit disassemblies, there is no need for a multi-byte terminology, as the 24-bit value limit on the early ARM processors is enough.

## Label names

-----------

As the original source for Lander has never been released, I have had to make up my own labels. My label names follow a number of rules:

- Subroutine names are in camel case with an initial capital letter, such as SubroutineLabel
- Variable names are in camel case with an initial lower case letter, such as variableLabel
- Variables that refer to coordinates tend to start with the axis, such as xVertexRotated
- Minor labels within subroutines are four lower-case letters and a number, such as trin21
- Constant are in all caps, such as TILE_SIZE

Routine names tend to be in the form "VerbNoun", so they describe an action, e.g. AddSparkParticleToBuffer or DrawObjects. Hopefully this makes things easier to follow...