Elite on the BBC Micro and NES

# Dashboard: SP2

## [Acorn Electron version]

```       Name: SP2                                                     [Show more]
Type: Subroutine
Category: Dashboard
Summary: Draw a dot on the compass, given the planet/station vector
Context: See this subroutine in context in the source code
Variations: See code variations for this subroutine in the different versions
References: This subroutine is called as follows:
* COMPAS calls SP2

Draw a dot on the compass to represent the planet or station, whose normalised
vector is in XX15.

XX15 to XX15+2      The normalised vector to the planet or space station,
stored as x in XX15, y in XX15+1 and z in XX15+2

.SP2

LDA XX15               \ Set A to the x-coordinate of the planet or station to
\ show on the compass, which will be in the range -96 to
\ +96 as the vector has been normalised

JSR SPS2               \ Set (Y X) = A / 10, so X will be from -9 to +9, which
\ is the x-offset from the centre of the compass of the
\ dot we want to draw. Returns with the C flag clear

TXA                    \ Set COMX = 193 + X, as 184 is the pixel x-coordinate
ADC #193               \ of the leftmost edge of the compass, and X can be -9,
STA COMX               \ which would be 193 - 9 = 184. This also means that the
\ highest value for COMX is 193 + 9 = 202, and given
\ that the compass dot is two pixels wide, this means
\ the compass dot can overlap the left edge of the
\ compass, but not the right edge

LDA XX15+1             \ Set A to the y-coordinate of the planet or station to
\ show on the compass, which will be in the range -96 to
\ +96 as the vector has been normalised

JSR SPS2               \ Set (Y X) = A / 10, so X will be from -9 to +9, which
\ is the x-offset from the centre of the compass of the
\ dot we want to draw. Returns with the C flag clear

STX T                  \ Set COMY = 204 - X, as 203 is the pixel y-coordinate
LDA #204               \ of the centre of the compass, the C flag is clear,
SBC T                  \ and the y-axis needs to be flipped around (because
STA COMY               \ when the planet or station is above us, and the
\ vector is therefore positive, we want to show the dot
\ higher up on the compass, which has a smaller pixel
\ y-coordinate). So this calculation does this:
\
\   COMY = 204 - X - (1 - 0) = 203 - X

LDA #&F0               \ Set A to &F0, the value we pass to DOT for drawing a
\ two-pixel high dot, for when the planet or station
\ in the compass is in front of us

LDX XX15+2             \ If the z-coordinate of the XX15 vector is positive,
BPL P%+4               \ skip the following instruction

LDA #&FF               \ The z-coordinate of XX15 is negative, so the planet or
\ station is behind us and the compass dot should be a
\ single-height dash, so set A to &FF for the call to
\ DOT below

STA COMC               \ Store the compass shape in COMC

\ Fall through into DOT to draw the dot on the compass
```