Код:
bitstream db #80,#40,#20,#10,#08,#04,#02,#01
;в DE - yx начала
;в HL - yx конца
line00
ld a,h
sub d
;h<d?
jp nc,line1
;h>d
ex de,hl
cpl
inc a
line1
ld b,a
;b=vertical cntr DY
ld a,l
sub e
;a=DX
;e<l?
jp nc,line_lr
;e>l
line_rl
cpl
inc a
ld c,a
;c=horizontal cntr
cp b
;c?b
jp c,line_rlv
;c>b
or b
jp nz,line_rlh
inc c
line_rlh
;right left horizontal
call de_coo
ld a,b
ld (line_rlhb0),a
ld d,c
ld a,e
line_rlh0
xor (hl)
ld (hl),a
ld a,b
sub 0 ;b
line_rlhb0 equ $-1
jp nc,line_rlh1
add a,c
inc l
line_rlh1
ld b,a
ld a,e
rlca
ld e,a
jp nc,line_rlhb
dec h
line_rlhb
dec d
jp nz,line_rlh0
ret
line_rlv
;right left vertical
or b
jp nz,line_rlv2
inc b
line_rlv2
call de_coo
ld a,c
ld (line_rlvb0),a
ld d,b
line_rlv0
ld a,(hl)
xor e
ld (hl),a
inc l
ld a,c
sub 0 ;c
line_rlvb0 equ $-1
ld c,a
jp nc,line_rlv1
add a,b
ld c,a
ld a,e
or a
rlca
ld e,a
jp nc,line_rlv1
dec h
line_rlv1
dec d
jp nz,line_rlv0
ret
line_lr
ld c,a
cp b
;c?b
jp c,line_lrv
;c>b
or b
jp nz,line_lrh
inc c
line_lrh
;left right horizontal
call de_coo
ld a,b
ld (line_lrhb0),a
ld d,c
ld a,e
line_lrh0
xor (hl)
ld (hl),a
ld a,b
sub 0 ;b
line_lrhb0 equ $-1
jp nc,line_lrh1
add a,c
inc l
line_lrh1
ld b,a
ld a,e
rrca
ld e,a
jp nc,line_lrhb
inc h
line_lrhb
dec d
jp nz,line_lrh0
ret
line_lrv
or b
jp nz,line_lrv2
inc b
line_lrv2
;left right vertical
call de_coo
ld a,c
ld (line_lrvb0),a
ld d,b
line_lrv0
ld a,(hl)
xor e
ld (hl),a
inc l
ld a,c
sub 0 ;c
line_lrvb0 equ $-1
ld c,a
jp nc,line_lrv1
add a,b
ld c,a
ld a,e
rrca
ld e,a
jp nc,line_lrv1
inc h
line_lrv1
dec d
jp nz,line_lrv0
ret
de_coo
;de=source
ld a,e
rra
rra
rra
and #1f
add a,#98
ld h,a
ld l,d
ld a,e
ex de,hl
and #07
ld hl,bitstream
add a,l
ld l,a
ld l,(hl)
ex de,hl
;hl=addr
;e=bitstream
ret