Destr,
давай тогда с тобой подумаем вместе
вот простой и удобный алгоритм рисования линии
Код:
beginning
di
ld hl,#1020 ; yx dest
ld de,#3060 ; yx sour
call line00
ei
ret
;в HL - yx конца
;в DE - yx начала
line00
ld a,h ;вычисляем DY
sub d
ld bc,#141c ;создаем базовые изменения координат
jr nc,line1 ;основная пара de
inc b
;поэтому меняем DE><HL если рисуем сверху вниз
;ВСЕГДА рисуем сверху вниз
neg
line1 ld h,a ;H=DY
ld a,l ;вычисляем DX
sub e ;
jr nc,line2
inc c ;если рисуем справа налево то меняем направление
neg
line2 cp h ;DX=DY?
ld l,a
jr c,line3
;если меньше то считаем основной координатой DY
ld l,h
ld h,a
ld a,b
ld b,c
ld c,a
line3 ld a,b ;обозначаем как менять координаты
ld (line5),a
ld a,c
ld (line6),a
ld b,h
ld a,h
inc l
inc b
line4 call plot ;здесь печать точки - в de координаты yx
line5 nop
sub l
jr nc,line7
line6 nop
add a,h
line7 djnz line4
ret
plot
push hl,de,af
ld l,d
ld h,koors/256
ld a,(hl)
inc h
ld d,(hl)
inc h
ld l,e
or (hl)
ld e,a
inc h
ld a,(de)
xor (hl)
ld (de),a
pop af,de,hl
ret
на основе этого алгоритма надо подумать как рисовать в пределах знакоместа линию
у нас есть 4 варианта развития линии
х+ у+
х- у+
х+ у-
х- у-