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







Zitieren

Lesezeichen