;------------ L I N E ----- BREZENHAIMUV ALGORITMUS --------------------- .Z80 ASEG ORG 100h ; ----------------------------------------------------------------------- LINE00: ld de,(X1) ld hl,(X2) call LINE10 ld (DX),hl ld (S1),de ld (Z1),a ld de,(Y1) ld hl,(Y2) call LINE10 ld (DY),hl ; spocte Delta X a Delta Y ld (S2),de ; a Sign 1[X] a Sign 2[Y] ld (Z2),a ld de,(S1) ld hl,(S2) ld a,(Z1) ld hl,Z2 or (hl) ; nejsou nahodou obe delty = 0 - chci jen bod ? jr nz,LINE01 ; ne ld hl,(X1) ld de,(Y1) jp PLOTXY ; ano,takze ho nakresli a padej.. LINE01: ; ----- vlastni Brezenhaim ----- ld hl,(DY) ld de,(DX) or a sbc hl,de ld a,h cp 80h jr nc,LINE02 ld (DX),hl ld (DY),de ld a,1 ld (OBMEN),a ; po jednicce se skace ve smeru osy X jr LINE03 LINE02: xor a ld (OBMEN),a ; po jednicce se skace ve smeru osy Y LINE03: ; ----------- if dy > dx then... ld hl,(DY) add hl,hl ld de,(DX) or a sbc hl,de ld (EPRUH),hl ld bc,(DX) LINE90: ; -------------- for i=1 to dx push bc ld hl,(XX) ld de,(YY) call PLOTXY ; ld hl,(EPRUH) LINE91: ; ----- while epruh >= 0 bit 7,h ; zaporne ? jr z,LINE92 ld a,(OBMEN) or a jr z,LINE93 ld hl,(XX) ld de,(S1) add hl,de ; bud 1 nebo 0 nebo -1 (FFFF) ld (XX),hl jr LINE94 LINE93: ld hl,(YY) ld de,(S2) add hl,de ld (YY),hl LINE94: ld hl,(DX) add hl,hl ld de,(EPRUH) ex de,hl or a sbc hl,de ; ---- epruh = epruh - 2*dx jr LINE91 ; --- end while LINE92: ld a,(OBMEN) or a jr z,LINE95 ld hl,(YY) ld de,(S2) add hl,de ld (YY),hl jr LINE96 LINE95: ld hl,(XX) ld de,(S1) add hl,de ld (XX),hl LINE96: ld de,(EPRUH) ld hl,(DY) add hl,hl add hl,de ld (EPRUH),hl ; epruh = epruh + 2*dy pop bc dec bc ld a,b or c jr nz,LINE90 ret ;-------------- LINE10: or a sbc hl,de ; delta x = x2 - x1 ld a,h cp 07Fh ; uvazuji x = <0,32758> : podteklo ? { de>hl } jr nc,LINE11 ; podteklo,obrat poradi ld a,l or h ld e,l ld d,h ret z ; sign = 0 ld de,1 ; sign = 1 ret LINE11: add hl,de ex de,hl or a sbc hl,de ld a,l or h ld e,l ld d,h ret z ; sign = 0 ld de,0FFFFh ; sign = -1 ret ;------------ PLOTXY: ld a,l add a," " ld (PLOT10),a ld a,e add a," " ld (PLOT9),a ld hl,PLOT00 PLOTW: ld a,(hl) cp 255 ret z ld e,a ld c,2 push hl call 5 pop hl jr PLOTW PLOT00: db 27,"=" PLOT9: db " " PLOT10: db " " db 255 X1: dw 10 X2: dw 3 Y1: dw 20 Y2: dw 3 ; vstupni promenne DX: dw 0 DY: dw 0 XX: dw 0 YY: dw 0 S1: dw 0 S2: dw 0 Z1: db 0 Z2: db 0 OBMEN: db 0 EPRUH: dw 0 end