So habe mal versucht den pseudocode anzupassen, viel war ja nicht mehr zu machen... Es scheint ein bisschen buggy zu sein. Hat jemand anderes schon die hardware nachgebaut???
Code:
$regfile = "m128def.dat"
$crystal = 16000000
'#########Variablen Line Funktion
Dim Xlen As Long
Dim Ylen As Long
Dim Xa As Long
Dim Ya As Long
Dim Temp As Long
'#################################
Declare Sub Drawline(byval Xs As Byte , Byval Ys As Byte , Byval Xe As Byte , Byval Ye As Byte)
Config Porta = Output
Config Portc = Output
Config Portf = Output
Z Alias Portf.1
Z = 1 ' dunkel
Do
Call Drawline(0 , 0 , 100 , 100)
Waitms 1
Loop
End
'Drawline in Pseudocode.
';-----------------------
'
';Übergeben werden die Start- und Endpunkte der Linie xs,ys und ys,ye
'
';Die Routine braucht nur Addition /Subtrktion, kommt ohne Multiplikation / Division aus.
';Alle Variable könne Byte sein.
';Kann problemlos und einfach in Assembler kodiert werden.
Sub Drawline(xs As Byte , Ys As Byte , Xe As Byte , Ye As Byte)
';Längen für x und y ausrechnen
xlen=xs-xe
ylen=ys-ye
';Schrittrichtung für x und Y festlegen
if xlen>=0 then xa=1 else xa=-1
if ylen>=0 then ya=1 else ya=-1
';wenn xlänge grösser ist, dann laufen wir an der X-Achse entlang
'; ansonsten an der Y-Achse
If Xlen < 0 Then Xlen = Xlen * -1
If Ylen < 0 Then Xlen = Xlen * -1
If Xlen < Ylen Then Goto Walky
walkx:
Z = 0 'licht einschalten
temp=xlen
do
Porta = Xs
Portc = Ys
Waitus 1
Xs = Xs + Xa ':immer einen Schritt in x-Richtung weiter
Temp = Temp - ylen ';Schritt in Y-Richtung nötig ?
If Temp <= 0 Then ';wenn <=0 dann ja
Temp = Temp + Xlen ';
Ys = Ys + Ya ';Schritt in Y-Richtung
endif
Loop Until Xs = Xe ';Wiederholen bis Ende der Linie
Goto Endofsub
WalkY:
Z = 0
temp=ylen
do
Porta = Xs
Portc = Ys
Waitus 1
ys=ys+ya
temp=temp-xlen
if temp<0 then
temp=temp+ylen
xs=xs+xa
endif
loop until ys=ye
Endofsub:
Z = 1 'und wieder aus
End Sub
Lesezeichen