add pixel_calc that does the same as picel_draw without the drawing pixel part
This commit is contained in:
parent
d09f417a49
commit
3a5a16cc06
11 changed files with 98 additions and 28 deletions
|
@ -8,8 +8,8 @@
|
||||||
t2 = $E1
|
t2 = $E1
|
||||||
X_math = radius
|
X_math = radius
|
||||||
Y_math = $E2
|
Y_math = $E2
|
||||||
;; E8 - EA is used by pixel.inc
|
;; E9 - EA is used by pixel.inc
|
||||||
byte_to_paint_qaa = byte_to_paint
|
byte_to_paint_qaa = $E8
|
||||||
byte_to_paint_qcb = $E3
|
byte_to_paint_qcb = $E3
|
||||||
byte_to_paint_qca = $E4
|
byte_to_paint_qca = $E4
|
||||||
byte_to_paint_qdb = $E5
|
byte_to_paint_qdb = $E5
|
||||||
|
|
|
@ -45,7 +45,10 @@ draw_upper_px_in_circle:
|
||||||
SBC radius
|
SBC radius
|
||||||
STA Y_pos
|
STA Y_pos
|
||||||
|
|
||||||
JSR pixel_draw
|
JSR pixel_calc
|
||||||
|
;; A = byte_to_paint (small_X_offset)
|
||||||
|
;; Y =small_y_offset
|
||||||
|
;; btp_mem_pos (bigg_X_offset + bigg_Y-offset)
|
||||||
|
|
||||||
;; initial pixel for 2 half-quarter arias
|
;; initial pixel for 2 half-quarter arias
|
||||||
LDA btp_mem_pos
|
LDA btp_mem_pos
|
||||||
|
@ -69,7 +72,12 @@ draw_left_px_in_circle: ;similar as above
|
||||||
SBC radius
|
SBC radius
|
||||||
STA X_pos
|
STA X_pos
|
||||||
|
|
||||||
JSR pixel_draw
|
JSR pixel_calc
|
||||||
|
;; A = byte_to_paint (small_X_offset)
|
||||||
|
;; Y =small_y_offset
|
||||||
|
;; btp_mem_pos (bigg_X_offset + bigg_Y-offset)
|
||||||
|
STA byte_to_paint_qca
|
||||||
|
|
||||||
LDA btp_mem_pos
|
LDA btp_mem_pos
|
||||||
STA btp_mem_pos_qca
|
STA btp_mem_pos_qca
|
||||||
STA btp_mem_pos_qba
|
STA btp_mem_pos_qba
|
||||||
|
@ -77,9 +85,6 @@ draw_left_px_in_circle: ;similar as above
|
||||||
STA btp_mem_pos_qca + 1
|
STA btp_mem_pos_qca + 1
|
||||||
STA btp_mem_pos_qba + 1
|
STA btp_mem_pos_qba + 1
|
||||||
|
|
||||||
LDA byte_to_paint
|
|
||||||
STA byte_to_paint_qca
|
|
||||||
|
|
||||||
LDA temp__
|
LDA temp__
|
||||||
STA X_pos
|
STA X_pos
|
||||||
draw_lower_px_in_circle: ;similar as above
|
draw_lower_px_in_circle: ;similar as above
|
||||||
|
@ -88,7 +93,12 @@ draw_lower_px_in_circle: ;similar as above
|
||||||
ADC radius
|
ADC radius
|
||||||
STA Y_pos
|
STA Y_pos
|
||||||
|
|
||||||
JSR pixel_draw
|
JSR pixel_calc
|
||||||
|
;; A = byte_to_paint (small_X_offset)
|
||||||
|
;; Y =small_y_offset
|
||||||
|
;; btp_mem_pos (bigg_X_offset + bigg_Y-offset)
|
||||||
|
STA byte_to_paint_qdb
|
||||||
|
STA byte_to_paint_qcb
|
||||||
|
|
||||||
LDA btp_mem_pos
|
LDA btp_mem_pos
|
||||||
STA btp_mem_pos_qdb
|
STA btp_mem_pos_qdb
|
||||||
|
@ -97,10 +107,6 @@ draw_lower_px_in_circle: ;similar as above
|
||||||
STA btp_mem_pos_qdb + 1
|
STA btp_mem_pos_qdb + 1
|
||||||
STA btp_mem_pos_qcb + 1
|
STA btp_mem_pos_qcb + 1
|
||||||
|
|
||||||
LDA byte_to_paint
|
|
||||||
STA byte_to_paint_qdb
|
|
||||||
STA byte_to_paint_qcb
|
|
||||||
|
|
||||||
STY Y_qdb
|
STY Y_qdb
|
||||||
STY Y_qaa
|
STY Y_qaa
|
||||||
|
|
||||||
|
@ -111,7 +117,11 @@ draw_right_px_in_circle:; similar as above
|
||||||
LDA X_pos
|
LDA X_pos
|
||||||
ADC radius
|
ADC radius
|
||||||
STA X_pos
|
STA X_pos
|
||||||
JSR pixel_draw
|
JSR pixel_calc
|
||||||
|
;; A = byte_to_paint (small_X_offset)
|
||||||
|
;; Y =small_y_offset
|
||||||
|
;; btp_mem_pos (bigg_X_offset + bigg_Y-offset)
|
||||||
|
STA byte_to_paint_qaa
|
||||||
|
|
||||||
LDA btp_mem_pos
|
LDA btp_mem_pos
|
||||||
STA btp_mem_pos_qda
|
STA btp_mem_pos_qda
|
||||||
|
@ -123,7 +133,6 @@ draw_right_px_in_circle:; similar as above
|
||||||
|
|
||||||
|
|
||||||
LDX #$08 ; X=8 always expected inside the loop
|
LDX #$08 ; X=8 always expected inside the loop
|
||||||
|
|
||||||
SEC
|
SEC
|
||||||
while_x_bigger_then_y: ; C=1 here because above and branching logic
|
while_x_bigger_then_y: ; C=1 here because above and branching logic
|
||||||
draw_pixels:
|
draw_pixels:
|
||||||
|
@ -230,13 +239,13 @@ change_x:
|
||||||
DEC X_math
|
DEC X_math
|
||||||
STA t1 ; t1 = t2
|
STA t1 ; t1 = t2
|
||||||
qaa_x:
|
qaa_x:
|
||||||
ASL byte_to_paint
|
ASL byte_to_paint_qaa
|
||||||
BCC qaa_x_end
|
BCC qaa_x_end
|
||||||
qaa_x_overflow:
|
qaa_x_overflow:
|
||||||
Sub_16 btp_mem_pos_qaa, btp_mem_pos_qaa + 1, #$08, #$00, ! ;-8
|
Sub_16 btp_mem_pos_qaa, btp_mem_pos_qaa + 1, #$08, #$00, ! ;-8
|
||||||
Sub_16 btp_mem_pos_qda, btp_mem_pos_qda + 1, #$08, #$00, ! ;-8
|
Sub_16 btp_mem_pos_qda, btp_mem_pos_qda + 1, #$08, #$00, ! ;-8
|
||||||
;; Restores byte to paint
|
;; Restores byte to paint
|
||||||
INC byte_to_paint
|
INC byte_to_paint_qaa
|
||||||
qaa_x_end:
|
qaa_x_end:
|
||||||
|
|
||||||
qca_x:
|
qca_x:
|
||||||
|
|
|
@ -4,9 +4,10 @@
|
||||||
X_end = ARGVEC + 2
|
X_end = ARGVEC + 2
|
||||||
Y_end = ARGVEC + 3
|
Y_end = ARGVEC + 3
|
||||||
;; private args
|
;; private args
|
||||||
dx = $E0
|
dx = $E0
|
||||||
dy = $E2
|
dy = $E2
|
||||||
dy_2 = dy ; 16-bit value (uses E1)
|
dy_2 = dy ; 16-bit value (uses E1)
|
||||||
dx_2 = dx ; 16-bit value (uses E3)
|
dx_2 = dx ; 16-bit value (uses E3)
|
||||||
V = $E4 ; 16-bit value (uses E5)
|
V = $E4 ; 16-bit value (uses E5)
|
||||||
D = $E6 ; 16-bit value (uses E7)
|
D = $E6 ; 16-bit value (uses E7)
|
||||||
|
byte_to_paint = $E8
|
||||||
|
|
|
@ -62,7 +62,8 @@ selfmod:
|
||||||
LDA V + 1
|
LDA V + 1
|
||||||
STA case_1 + 7
|
STA case_1 + 7
|
||||||
end_selfmod:
|
end_selfmod:
|
||||||
JSR pixel_draw ;;only used first pixel. after this relative position is abused
|
JSR pixel_calc ;;only used first pixel. after this relative position is abused
|
||||||
|
STA byte_to_paint
|
||||||
;; X = X_end - X_pos
|
;; X = X_end - X_pos
|
||||||
LDX dx
|
LDX dx
|
||||||
LDY #$00
|
LDY #$00
|
||||||
|
|
|
@ -39,7 +39,8 @@ selfmod:
|
||||||
LDA V + 1
|
LDA V + 1
|
||||||
STA case_1 + 7
|
STA case_1 + 7
|
||||||
end_selfmod:
|
end_selfmod:
|
||||||
jsr pixel_draw
|
JSR pixel_calc ;;only used first pixel. after this relative position is abused
|
||||||
|
STA byte_to_paint
|
||||||
LDY #$00
|
LDY #$00
|
||||||
LDX dy
|
LDX dy
|
||||||
for_y:
|
for_y:
|
||||||
|
|
|
@ -40,7 +40,8 @@ selfmod:
|
||||||
LDA V + 1
|
LDA V + 1
|
||||||
STA case_1 + 7
|
STA case_1 + 7
|
||||||
end_selfmod:
|
end_selfmod:
|
||||||
jsr pixel_draw
|
JSR pixel_calc ;;only used first pixel. after this relative position is abused
|
||||||
|
STA byte_to_paint
|
||||||
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$01, #$00 ;; Y has always a offset of at least 1
|
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$01, #$00 ;; Y has always a offset of at least 1
|
||||||
LDY #$01
|
LDY #$01
|
||||||
LDX dx
|
LDX dx
|
||||||
|
|
|
@ -39,7 +39,8 @@ selfmod:
|
||||||
LDA V + 1
|
LDA V + 1
|
||||||
STA case_1 + 7
|
STA case_1 + 7
|
||||||
end_selfmod:
|
end_selfmod:
|
||||||
jsr pixel_draw
|
JSR pixel_calc ;;only used first pixel. after this relative position is abused
|
||||||
|
STA byte_to_paint
|
||||||
LDY #$00
|
LDY #$00
|
||||||
LDX dy
|
LDX dy
|
||||||
for_y:
|
for_y:
|
||||||
|
|
|
@ -4,6 +4,5 @@
|
||||||
Y_pos = ARGVEC + 0
|
Y_pos = ARGVEC + 0
|
||||||
X_pos = ARGVEC + 1
|
X_pos = ARGVEC + 1
|
||||||
;; Private args
|
;; Private args
|
||||||
byte_to_paint = $E8
|
|
||||||
btp_mem_pos = $E9 ; 16-bit value (uses EA), byte to paint memory position
|
btp_mem_pos = $E9 ; 16-bit value (uses EA), byte to paint memory position
|
||||||
Bitmap = $4000
|
Bitmap = $4000
|
||||||
|
|
57
wip-hugo/routines/pixel/pixel_calc.s
Normal file
57
wip-hugo/routines/pixel/pixel_calc.s
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*-
|
||||||
|
|
||||||
|
;;Calculates values needed to draw a pixel on screen!
|
||||||
|
.proc pixel_calc
|
||||||
|
.include "pixel.inc"
|
||||||
|
|
||||||
|
;;FIND position to write byte_to_paint (btp_mem_pos)
|
||||||
|
;; + + + + + > X
|
||||||
|
;; +
|
||||||
|
;; +
|
||||||
|
;;\/
|
||||||
|
;; Y
|
||||||
|
|
||||||
|
;; The screen has a wierd memory to pixel maping!
|
||||||
|
;; Each line of 8 pixels is one byte
|
||||||
|
;; 8 consecutive bytes in memory makes up a chunk and are 'under each other' on the screen
|
||||||
|
;; the chunks are orderd from the left to the right and then looping downwards.
|
||||||
|
;; Therefore we have that: btp_mem_pos = big_x_offset + smal_y_offset + big_y_offset + bitmap_offset
|
||||||
|
|
||||||
|
;; We use a lookup-table for big_y_offset + bitmap_offset (see END.s)
|
||||||
|
;; (Y_pos / 8 floor)*2
|
||||||
|
LDA Y_pos
|
||||||
|
LSR A
|
||||||
|
LSR A
|
||||||
|
;; We need to remove the last digit if its still there
|
||||||
|
;; same as LSR ASR
|
||||||
|
AND #%11111110
|
||||||
|
TAX
|
||||||
|
;; big_y_offset + big_x_offset
|
||||||
|
CLC
|
||||||
|
;;A = big_x_offset
|
||||||
|
LDA #%11111000
|
||||||
|
AND X_pos
|
||||||
|
ADC big_y_offset, X
|
||||||
|
STA btp_mem_pos
|
||||||
|
LDA #$00
|
||||||
|
INX
|
||||||
|
ADC big_y_offset, X
|
||||||
|
STA btp_mem_pos + 1
|
||||||
|
|
||||||
|
;; + small_y_offset
|
||||||
|
LDA #%00000111 ; A = y (mod 8)
|
||||||
|
AND Y_pos ;; offset to add
|
||||||
|
TAY
|
||||||
|
|
||||||
|
calc_byte_to_paint: ;; aka small_x_offset
|
||||||
|
LDA X_pos
|
||||||
|
AND #%00000111
|
||||||
|
TAX
|
||||||
|
;;this is the same as: byte_to_paint = 2^X
|
||||||
|
LDA binary_factor, X;; (see END.s)
|
||||||
|
|
||||||
|
;; A = byte_to_paint (small_X_offset)
|
||||||
|
;; Y =small_y_offset
|
||||||
|
;; btp_mem_pos (bigg_X_offset + bigg_Y-offset)
|
||||||
|
RTS
|
||||||
|
.endproc
|
|
@ -49,7 +49,6 @@ calc_byte_to_paint: ;; aka small_x_offset
|
||||||
TAX
|
TAX
|
||||||
;;this is the same as: byte_to_paint = 2^X
|
;;this is the same as: byte_to_paint = 2^X
|
||||||
LDA binary_factor, X;; (see END.s)
|
LDA binary_factor, X;; (see END.s)
|
||||||
STA byte_to_paint ;; should be removed, here for other code!
|
|
||||||
|
|
||||||
draw: ;;Let draw some stuff
|
draw: ;;Let draw some stuff
|
||||||
ORA (btp_mem_pos), Y
|
ORA (btp_mem_pos), Y
|
||||||
|
|
|
@ -26,6 +26,7 @@ JMP exit
|
||||||
.include "routines/circle/circle.s"
|
.include "routines/circle/circle.s"
|
||||||
.include "routines/triangle/triangle.s"
|
.include "routines/triangle/triangle.s"
|
||||||
.include "routines/pixel/pixel_draw.s"
|
.include "routines/pixel/pixel_draw.s"
|
||||||
|
.include "routines/pixel/pixel_calc.s"
|
||||||
.include "routines/text/char_draw.s"
|
.include "routines/text/char_draw.s"
|
||||||
.include "routines/memory/memset.s"
|
.include "routines/memory/memset.s"
|
||||||
.include "routines/memory/memcpy.s"
|
.include "routines/memory/memcpy.s"
|
||||||
|
|
Loading…
Add table
Reference in a new issue