Skip to navigation


Drawing pixels: PIXEL2

[Commodore 64 version]

Name: PIXEL2 [Show more] Type: Subroutine Category: Drawing pixels Summary: Draw a stardust particle relative to the screen centre
Context: See this subroutine in context in the source code References: This subroutine is called as follows: * FLIP calls PIXEL2 * nWq calls PIXEL2 * STARS1 calls PIXEL2 * STARS2 calls PIXEL2 * STARS6 calls PIXEL2

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 convert it ADC #1 ; from a sign-magnitude number to a signed number .PX1 EOR #%10000000 ; Set X = X1 + 128 TAX ; ; So X is now the offset converted to an x-coordinate, ; centred on x-coordinate 128 LDA Y1 ; Fetch the y-coordinate offset into A and clear the AND #%01111111 ; sign bit, so A = |Y1| CMP #Y ; If |Y1| >= #Y then it's off the screen (as #Y 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 = #Y + 1 - Y1 LDA #Y+1 ; SBC T ; So if Y1 is positive we display the point up from the ; centre at y-coordinate 97, while a negative Y1 means ; down from the centre ; Fall through into PIXEL to draw the stardust at the ; screen coordinates in (X, A)