Add more variable for triangle_drawing

This commit is contained in:
hugova 2025-05-01 17:25:37 +02:00
parent 737ebbbe51
commit 3bdf52d1a8
3 changed files with 30 additions and 10 deletions

View file

@ -1,15 +1,25 @@
;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*-
;;The triangles 3 corner-positions, they may be in any given order.
;; The triangles 3 corner-positions, they may be in any given order.
;; This is inputs to the subrotine!
A_X = $EA
A_Y = $E9
B_X = $E8
B_Y = $E7
C_X = $E6
C_Y = $E5
;; Differense in height (after these points have been sorted look in triangle.s for more detail)
AB = $E4
BC = $E3
;; We need some values for Bresenham's line algorithm, see triangle.s and line_down.s
V_l = $E2 ;16-bit value (uses E3)
V_r = $E0 ;16-bit value (used E1)
dy_2_l = $DE ;16-bit value (used DF)
dy_2_l = $DC ;16-bit value (used DD)
D_l = $DA ;16-bit value (uses DB)
D_r = $D8 ;16-bit value (uses D9)
;; These come from mem.inc
;; Takes up FF - F5

View file

@ -14,7 +14,7 @@
;; Each side of the sub-triangle can have 4 posiboul states (look at how line is implemented)
;;Lets first sort the edges such as
;; (i) A is at the highest point
;; (i) A is at the left point
;; (ii) B is at the middle point
;; (iii) C is at the lowest point
;; Lets also calculate the height-differense for the new points:
@ -25,11 +25,12 @@
SEC
LDA B_Y
SBC A_Y
STA AB
BCC AB_overflow_end
STA AB
;; A_Y > B_Y
AB_overflow:
EOR #$ff ; Fix byte underflow
STA AB
;; swop A and B
LDX B_Y
LDY A_Y
@ -44,11 +45,12 @@ AB_overflow_end:
SEC
LDA C_Y
SBC B_Y
STA BC
BCC BC_overflow_end
STA BC
;; B_Y > C_Y
BC_overflow:
EOR #$ff ; Fix byte underflow
STA BC
;; swop A and B
LDX C_Y
LDY B_Y

View file

@ -2,10 +2,9 @@
;; This is a help program for triangle.s to draw the upper triangle
;; We know that (se triangle.inc)
;; (i) A is at the highest point
;; (ii) B is at the middle point
;; (iii) C is at the lowest point
;; We know that (se triangle.inc) and triangle.s
;; The upper triangle has hight AB
;; Its tip is A
;; This triangle has 10 posibol cases, see table bellow
;; ----------------------------------------------------
@ -24,8 +23,17 @@
;; ----------------------------------------------------
.scope upper_triangle
LDA #$00
;; Lets for the sake of it say its a lr triangle
;; we need to compute V_l, V_r, dy_2l, dy_2_r, D_l, and D_r
;; lets also say B is on the left and C is on the right
;; we need to compute V_l, V_r, dy_2_l, dy_2_r, D_l, and D_r
;;We need to clear this memory
LDA #$00
STA V_l + 1
STA V_r + 1
STA dy_2_l + 1
STA dy_2_l + 1
STA $FD ; for pixel_draw
;; ..
.endscope