Код:
;[ октант 0
;кв 0 bc=line_start, de=line_end
ld (l_end+1),sp
; установка ловушки (по X конца)
quad0 ld sp,jp_q0:ld l,e,h,0:add hl,hl:add hl,sp:ld sp,hl
pop hl,hl:ld (trap+1),hl:ld hl,trap:push hl
; установка точки входа (по X начала)
ld sp,jp_q0:ld l,c,h,0:add hl,hl:add hl,sp:ld sp,hl
ld a,d:sub b:ld d,a ; дельта Y
ld a,e:sub c:ld e,a ; X
LD L,B,H,high DOT_TAB,A,(HL):INC H
LD b,(HL):INC H:LD L,C
ADD A,(HL):LD l,A ;:INC H:LD A,(DE):XOR (HL):LD (DE),A
ld h,b
ld a,e:srl a
ld b,7 ; это чтоб сэкономить на and после inc h
ret ; переход к отрисовке первой точки
q0_p7 set 7,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p6 set 6,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p5 set 5,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p4 set 4,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p3 set 3,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p2 set 2,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p1 set 1,(hl):sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
q0_p0 set 0,(hl):inc l:sub d:ret nc:add a,e:inc h:ld c,a:ld a,h:and b:ld a,c:ret nz:ld a,l:sub #e0:ld l,a:sbc a,a:and #f8:add a,h:ld h,a:ld a,c:ret
trap ld hl,0:push hl
l_end ld sp,0:ret
jp_q0 ; стек для ретов, октант 0, сюда надо правильно войти и правильно поставить ловушку
dup 32
dw q0_p7, q0_p6, q0_p5, q0_p4, q0_p3, q0_p2, q0_p1, q0_p0
edup
;]
Как бы сделать так-же для вертикального перемещения? (для 1 и 2 октантов)