05-11-2019, 11:15 PM
Hi,
Maybe you could try my line drawing routine (it MAY be faster than the one you're using (or not)):
To be used like this:
Have a nice day.
Maybe you could try my line drawing routine (it MAY be faster than the one you're using (or not)):
Code:
; ------------------------------------------------------
; Draw a line on screen (mainly optimized for size)
; Written by Franck "hitchhikr" Charlet
; ------------------------------------------------------
table_pixels_tiles:
db 0 + 1, 1 + 1, 2 + 1, 3 + 1, 4 + 1, 5 + 1, 6 + 1, 7 + 1
db 8 + 1, 9 + 1, 10 + 1, 11 + 1, 12 + 1, 13 + 1
db 14 + 1, 15 + 1, 16 + 1, 17 + 1, 18 + 1, 19 + 1
table_pixels_pos_nibble:
db 1, 1, 1, 1
db 0, 0, 0, 0
table_pixels:
db 0x80, 0x20, 0x8, 0x2
DX equ 0
SX equ 2
X1 equ 8
Y1 equ 10
X2 equ 12
Y2 equ 14
draw_line:
dec 4, XSP
ld WA, (XSP + X2)
sub WA, (XSP + X1)
j ge, delta_x
neg WA
delta_x:
ld (XSP), WA
ld BC, -1
ld WA, (XSP + X1)
cp WA, (XSP + X2)
j ge, step_x
neg BC
step_x:
ld (XSP + SX), BC
ld IZ, (XSP + Y1)
ld HL, (XSP + Y2)
sub HL, IZ
j ge, delta_y
neg HL
delta_y:
ld DE, -1
cp IZ, (XSP + Y2)
j ge, step_y
neg DE
step_y:
cp (XSP), HL
j le, neg_err
ld IX, (XSP)
j pos_err
neg_err:
ld IX, HL
neg IX
pos_err:
sra 1, IX
line_loop:
ld IY, IZ
srl 3, IY
mul IY, 20
ld WA, (XSP + X1)
srl 3, WA
lda XBC, table_pixels_tiles
ld A, (XBC + WA)
extz WA
add WA, IY
ld BC, WA
sll 4, BC
ld IY, IZ
and XIY, 0x7
add XIY, XIY
add IY, BC
ld WA, (XSP + X1)
and WA, 0x7
lda XBC, table_pixels_pos_nibble
ld A, (XBC + WA)
extz WA
add IY, WA
add XIY, BACK_BUFFER
ld WA, (XSP + X1)
and WA, 0x3
lda XBC, table_pixels
ld A, (XBC + WA)
or (XIY), A
ld WA, (XSP + X1)
cp WA, (XSP + X2)
j ne, check_end_of_line
cp IZ, (XSP + Y2)
j eq, line_done
check_end_of_line:
ld BC, IX
ld WA, (XSP)
neg WA
cp IX, WA
j le, inc_x
sub IX, HL
ld WA, (XSP + SX)
add (XSP + X1), WA
inc_x:
cp BC, HL
j ge, line_loop
add IX, (XSP)
add IZ, DE
j line_loop
line_done:
inc 4, XSP
ret
To be used like this:
Code:
pushw 100
pushw 10
pushw 50
pushw 120
calr draw_line
inc 8, XSP
Have a nice day.