Skip to navigation


Drawing ships: LL9 (Part 11 of 12)

[Commodore 64 version]

Name: LL9 (Part 11 of 12) [Show more] Type: Subroutine Category: Drawing ships Summary: Draw ship: Add all visible edges to the ship line heap Deep dive: Drawing ships
Context: See this subroutine in context in the source code References: This subroutine is called as follows: * SHPPT calls via LL81+2

This part adds all the visible edges to the ship line heap, so we can draw them in part 12. Other entry points: LL81+2 Draw the contents of the ship line heap, used to draw the ship as a dot from SHPPT
.LL80 LDY U ; Fetch the ship line heap pointer, which points to the ; next free byte on the heap, into Y LDA XX15 ; Add X1 to the end of the heap STA (XX19),Y INY ; Increment the heap pointer LDA XX15+1 ; Add Y1 to the end of the heap STA (XX19),Y INY ; Increment the heap pointer LDA XX15+2 ; Add X2 to the end of the heap STA (XX19),Y INY ; Increment the heap pointer LDA XX15+3 ; Add Y2 to the end of the heap STA (XX19),Y INY ; Increment the heap pointer STY U ; Store the updated ship line heap pointer in U CPY T1 ; If Y >= T1 then we have reached the maximum number of BCS LL81 ; edge lines that we can store in the ship line heap, so ; skip to LL81 so we don't loop back for the next edge .LL78 INC XX17 ; Increment the edge counter to point to the next edge LDY XX17 ; If Y >= XX20, which contains the number of edges in CPY XX20 ; the blueprint, jump to LL81 as we have processed all BCS LL81 ; the edges and don't need to loop back for the next one LDY #0 ; Set Y to point to byte #0 again, ready for the next ; edge LDA V ; Increment V by 4 so V(1 0) points to the data for the ADC #4 ; next edge STA V BCC ll81 ; If the above addition didn't overflow, jump to ll81 to ; skip the following instruction INC V+1 ; Otherwise increment the high byte of V(1 0), as we ; just moved the V(1 0) pointer past a page boundary .ll81 JMP LL75 ; Loop back to LL75 to process the next edge .LL81 ; We have finished adding lines to the ship line heap, ; so now we need to set the first byte of the heap to ; the number of bytes stored there LDA U ; Fetch the ship line heap pointer from U into A, which ; points to the end of the heap, and therefore contains ; the heap size LDY #0 ; Store A as the first byte of the ship line heap, so STA (XX19),Y ; the heap is now correctly set up