# Drawing planets: PLL1 (Part 2 of 3)

## [BBC Master version, Loader]

```       Name: PLL1 (Part 2 of 3)                                      [Show more]
Type: Subroutine
Category: Drawing planets
Summary: Draw Saturn on the loading screen (draw the stars)
Deep dive: Drawing Saturn on the loading screen
Context: See this subroutine in context in the source code
Variations: See code variations for this subroutine in the different versions
References: No direct references to this subroutine in this source file

\ The following loop iterates CNT2(1 0) times, i.e. &1DD
\ or 477 times, and draws the background stars on the

.PLL2

JSR DORND              \ Set A and X to random numbers, say A = r3

TAX                    \ Set X = A
\       = r3

JSR SQUA2              \ Set (A P) = A * A
\           = r3^2

STA ZP+1               \ Set ZP+1 = A
\          = r3^2 / 256

JSR DORND              \ Set A and X to random numbers, say A = r4

STA YY                 \ Set YY = r4

JSR SQUA2              \ Set (A P) = A * A
\           = r4^2

ADC ZP+1               \ Set A = A + r3^2 / 256
\       = r4^2 / 256 + r3^2 / 256
\       = (r3^2 + r4^2) / 256

CMP #&11               \ If A < 17, jump down to PLC2 to skip to the next pixel
BCC PLC2

LDA YY                 \ Set A = r4

JSR PIX                \ Draw a pixel at screen coordinate (X, -A), i.e. at
\ (r3, -r4), where (r3^2 + r4^2) / 256 >= 17
\
\ Negating a random number from 0 to 255 still gives a
\ random number from 0 to 255, so this is the same as
\ plotting at (x, y) where:
\
\   x = random number from 0 to 255
\   y = random number from 0 to 255
\   (x^2 + y^2) div 256 >= 17
\
\ which is what we want

.PLC2

DEC CNT2               \ Decrement the counter in CNT2 (the low byte)

BNE PLL2               \ Loop back to PLL2 until CNT2 = 0

DEC CNT2+1             \ Decrement the counter in CNT2+1 (the high byte)

BNE PLL2               \ Loop back to PLL2 until CNT2+1 = 0
```