make circledraw faster by using lookup table

This commit is contained in:
hugova 2025-06-29 02:51:34 +02:00
parent 380728a80a
commit b7f04d1fcb
2 changed files with 81 additions and 13 deletions

View file

@ -1,6 +1,65 @@
inverse_factor_value: ;lookup 00000001 --gives--> 10000000 , etc etc. only 1st 1 in binary numbers
NOP
.byte %10000000, %01000000
NOP
.byte %00100000
NOP
NOP
NOP
.byte %00010000
NOP
NOP
NOP
;; i put another lookup table where nops normaly are'
binary_factor: binary_factor:
.byte %10000000, %01000000, %00100000, %00010000, %00001000, %00000100, %00000010, %00000001 .byte %10000000, %01000000, %00100000, %00010000, %00001000, %00000100, %00000010, %00000001
;; ^ this one it is (in inverse_faktor value)
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
.byte %00000100
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
.byte %00000010
;; i put another lookup table where nops normaly are
Bitmap = $4000 Bitmap = $4000
;;This is used by pixel_draw! look at it for more detail ;;This is used by pixel_draw! look at it for more detail
big_y_offset: big_y_offset:
@ -54,3 +113,17 @@ big_y_offset:
.hibytes $1CC0 + Bitmap .hibytes $1CC0 + Bitmap
.lobytes $1E00 + Bitmap .lobytes $1E00 + Bitmap
.hibytes $1E00 + Bitmap .hibytes $1E00 + Bitmap
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
.byte %00000001

View file

@ -43,8 +43,7 @@ draw_right_px_in_circle:
while_x_bigger_then_y: while_x_bigger_then_y:
;STY temp
;LDY #$00
draw_pixel: draw_pixel:
LDA byte_to_paint ;A byte containing a single 1. Coresponds to X position in the chunk. LDA byte_to_paint ;A byte containing a single 1. Coresponds to X position in the chunk.
ORA (btp_mem_pos), Y ORA (btp_mem_pos), Y
@ -66,16 +65,12 @@ SEC
SBC temp SBC temp
TAY TAY
;; calculate byte_to_paint_inv (could be faster with lookup table) ;; calculate byte_to_paint_inv 00000001 --> 10000000, 00000010 --> 01000000 ... etc
LDA byte_to_paint ;; uses a table!
STA temp_ stx temp_
LDA #%10000000 ldx byte_to_paint
jmp start_calc LDA inverse_factor_value, X;; (see END.s)
calc: ldx temp_
LSR A
start_calc:
LSR temp_
BCC calc
; A = byte_to_paint_inv ; A = byte_to_paint_inv
ORA (btp_mem_pos_inv), Y ORA (btp_mem_pos_inv), Y