BBC Micro Elite

# Drawing pixels: PIXEL2

```       Name: PIXEL2                                            [View in context]
Type: Subroutine
Category: Drawing pixels
Summary: Draw a stardust particle relative to the screen centre

Draw a point (X1, Y1) from the middle of the screen with a size determined by
a distance value. Used to draw stardust particles.

Arguments:

X1                   The x-coordinate offset

Y1                   The y-coordinate offset (positive means up the screen
from the centre, negative means down the screen)

ZZ                   The distance of the point (further away = smaller point)

.PIXEL2

LDA X1                 \ Fetch the x-coordinate offset into A

BPL PX1                \ If the x-coordinate offset is positive, jump to PX1
\ to skip the following negation

EOR #%01111111         \ The x-coordinate offset is negative, so flip all the
CLC                    \ bits apart from the sign bit and add 1, to negate
ADC #1                 \ it to a positive number, i.e. A is now |X1|

.PX1

EOR #%10000000         \ Set X = -|A|
TAX                    \       = -|X1|

LDA Y1                 \ Fetch the y-coordinate offset into A and clear the
AND #%01111111         \ sign bit, so A = |Y1|

CMP #96                \ If |Y1| >= 96 then it's off the screen (as 96 is half
BCS PX4                \ the screen height), so return from the subroutine (as
\ PX4 contains an RTS)

LDA Y1                 \ Fetch the y-coordinate offset into A

BPL PX2                \ If the y-coordinate offset is positive, jump to PX2
\ to skip the following negation

EOR #%01111111         \ The y-coordinate offset is negative, so flip all the
ADC #1                 \ bits apart from the sign bit and subtract 1, to negate
\ it to a positive number, i.e. A is now |Y1|

.PX2

STA T                  \ Set A = 97 - A
LDA #97                \       = 97 - |Y1|
SBC T                  \
\ so if Y is positive we display the point up from the
\ centre, while a negative Y means down from the centre

\ Fall through into PIXEL to draw the stardust at the
\ screen coordinates in (X, A)
```