Ich habe dennoch die Routine bei mir eingebaut und es funktioniert gut... den Code musste ich dabei kaum anpassen:
Code: Alles auswählen
.proc drawto
* Schnelle Berechnung von Linien
*
* Parameter: XALT,YALT: Startpunkt
* <X>,<Y> : Endpunkt
DRAWTO STX XNEU ;Endpunkt merken
STY YNEU
LDX XALT ;Anfangspunkt
LDY YALT ;zeichnen
JSR PLOT ; Sprung zur Plot-Routine
LDA #0 ;Flags ruecksetzen
STA XFLAG
STA YFLAG
LDX XNEU ;Endpunkt in Register
LDY YNEU ;(einfacher)
CPX XALT ;Anfang = Ende?
BNE DR1
CPY YALT
BNE DR1
RTS ;ja fertig!==>
DR1 CPX XALT ;Neuer Punkt ist
BCC DRX ;links von alten P.->
INC XFLAG ;rechts!
TXA ;Delta ausrechnen
SBC XALT
JMP DR2
DRX DEC XFLAG ;links!
SEC
LDA XALT ;Delta her.
SBC XNEU
DR2 STA DELTAX ;Abstand merken
CPY YALT ;neuer Punkt ist
BCC DRY ;oberhalb alten P.
INC YFLAG ;unterhalb
TYA
SBC YALT ;Delta berechnen
JMP DR3
DRY DEC YFLAG ;oberhalb
SEC
LDA YALT ;Abstand (delta)
SBC YNEU
DR3 STA DELTAY ;und merken
LDA XALT ;Neuer P.= alter P.
STA XNEU
LDA YALT
STA YNEU
LDA DELTAX ;welches Delta ist
CMP DELTAY ;groesser?
BCC DRYSTEP ;DY ist groesser->
LDA DELTAY ;DX ist groesser!
ASL
STA HILFA ;Naeherung fuer
LDA #0 ;Schrittweite
ROL
STA HILFA+1
;SUB HILFA,DELTAX,HILFT
sec
lda HILFA
sbc DELTAX
sta HILFT
lda HILFA+1
sbc #0
sta HILFT+1
;SUB HILFT,DELTAX,HILFB
sec
lda HILFT
sbc DELTAX
sta HILFB
lda HILFT+1
sbc #0
sta HILFB+1
LDA DELTAX ;Zaehler fuer
STA ZAEHLER ;Pixels einrichten
DXSCHL CLC
LDA XNEU ;X weiterzaehlen
ADC XFLAG
STA XNEU
LDA HILFT+1 ;Schritt nach Y
BPL DRX5 ;erfoderlich? Ja->
clc ;ADD HILFA,HILFT
lda HILFT
adc HILFA
sta HILFT
lda HILFT+1
adc HILFA+1
sta HILFT+1
JMP DRX4 ;kein Schritt
DRX5
clc ;ADD HILFB,HILFT
lda HILFT
adc HILFB
sta HILFT
lda HILFT+1
adc HILFB+1
sta HILFT+1
CLC
LDA YNEU ;Schritt nach Y
ADC YFLAG ;ausfuehren
STA YNEU
DRX4 LDX XNEU ;Pixel plotten
LDY YNEU
JSR PLOT ; Sprung zur Plot-Routine
DEC ZAEHLER ;ganzes Deltax
BNE DXSCHL ;abgefahren? nein->
JMP DREND ;fertig !==>
DRYSTEP LDA DELTAX ;Delta Y war groesser
ASL
STA HILFA ;Naeherung fuer
LDA #0 ;Schritt in X-Richt.
ROL
STA HILFA+1
;SUB HILFA,DELTAY,HILFT
sec
lda HILFA
sbc DELTAY
sta HILFT
lda HILFA+1
sbc #0
sta HILFT+1
;SUB HILFT,DELTAY,HILFB
sec
lda HILFT
sbc DELTAY
sta HILFB
lda HILFT+1
sbc #0
sta HILFB+1
LDA DELTAY ;Zaehler fuer Abstand
STA ZAEHLER ;einrichten
DYSCHL CLC
LDA YNEU ;Y weiterzaehlen
ADC YFLAG
STA YNEU
LDA HILFT+1 ;Schritt nach X
BPL DRY5 ;noetig? ja ->
clc ;ADD HILFA,HILFT
lda HILFT
adc HILFA
sta HILFT
lda HILFT+1
adc HILFA+1
sta HILFT+1
JMP DRY4 ;keine X-Korrektur
DRY5 clc ;ADD HILFB,HILFT
lda HILFT
adc HILFB
sta HILFT
lda HILFT+1
adc HILFB+1
sta HILFT+1
CLC
LDA XNEU ;X-Korrektur aus-
ADC XFLAG ;fuehren
STA XNEU
DRY4 LDX XNEU ;Pixel ausgeben
LDY YNEU
JSR PLOT ; Sprung zur Plot-Routine
DEC ZAEHLER ;alle Punkte?
BNE DYSCHL ;nein —->
DREND LDX XNEU ;Ende der Linie
LDY YNEU ;kann Anfang einer
STX XALT ;neuen sein.
STY YALT
RTS
.endp
Peter