Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Defenderoids - Playing with bitmaps
#9
Hi,

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.
Reply


Messages In This Thread
Defenderoids - Playing with bitmaps - by Ahchay - 04-04-2019, 01:51 AM
RE: Defenderoids - Playing with bitmaps - by hitchhikr - 05-11-2019, 11:15 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)