Цитата Сообщение от Lethargeek Посмотреть сообщение
да хоть код пихай
зачем?


да при чём тут это? можно сделать ветки, можно код перед входом патчить, дело в другом
у меня в примере обе подветки - части ОДНОГО цикла, рисующего слева направо для dx>dy
они обе в цикле отрабатывают, но в разных пропорциях в зависимости от наклона отрезка
вычитание из ошибки разных чисел в разных подветках избавляет от коррекции ошибки:
у тебя ошибка в коде
сделай нормальную линию


какие расчёты? плюс одна проверка, переход, сдвиг
другое дело, что выгодных отрезков немного будет
о чем и речь


всё еще 80-94 такта на пиксель (в цикле для лежачих отрезков)


второй недостаток:

вероятность выхода по завершению заведомо очень низкая
потому вместо jp выгоднее проверять на ноль условным ret
а для этого перенести декремент с проверкой в начало
и переход на него совместить с условным переходом после rrca
(который, напротив, происходит часто - в 7 из 8 случаев)
выигрыш - 5 тактов на каждый пиксель
у меня в примере уже так сделано
ну это можно поправить
видел бы ты оригинал, идеалист блин

- - - Добавлено - - -

Lethargeek
смотри что скажешь?


Код:
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
	dec	d
	ret	z
line_rlh2
	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_rlh0
	dec	h

	xor	(hl)
	ld	(hl),a

	dec	d
	jp	nz,line_rlh2	
	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
	dec	d
	ret	z
line_rlv1
	inc	l	;движение по вертикали
	ld	a,c
	sub	0	;c
line_rlvb0 equ	$-1	
	ld	c,a
	jp	nc,line_rlv0
;движение по горизонтали
	add	a,b
	ld	c,a
	
	ld	a,e
	or	a
	rlca
	ld	e,a
	jp	nc,line_rlv3
	dec	h
line_rlv3
	xor	(hl)
	ld	(hl),a

	dec	d
	jp	nz,line_rlv1	
	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
	dec	d
	ret	z
line_lrh2
	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_lrh0
	inc	h
	xor	(hl)
	ld	(hl),a

	dec	d
	jp	nz,line_lrh2	
	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
	
	dec	d
	ret	z	
line_lrv1
	inc	l
	ld	a,c	
	sub	0	;c	
line_lrvb0 equ	$-1
	ld	c,a	
	jp	nc,line_lrv0

	add	a,b
	ld	c,a
	ld	a,e
	rrca
	ld	e,a
	jp	nc,line_lrv3
	inc	h
line_lrv3
	xor	(hl)
	ld	(hl),a
	dec	d
	jp	nz,line_lrv1
	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
https://www.dropbox.com/s/bmlq6jzh75...eline.rks?dl=0 в работе