Turtle-Grafik – Die schnelle Schildkröte
Turtle-Grafik ist eine Spracherweiterung, die es in sich hat. Vollständig in Maschinensprache geschrieben stellt sie einige Befehle zur Verfügung, mit denen Sie komfortabel sehr schnell Bilder erzeugen können.


Wenn Sie dieses Programm abtippen, werden Sie keinen Ärger mit den vielen DATAs bekommen. Haben Sie einen falschen Wert eingegeben, weist Sie die eingebaute Prüfsummenroutine auf die fehlerhafte Zeile hin und listet sie am Bildschirm. Bitte halten Sie sich daher an die Zeilennumerierung. Nach der Eingabe sollten Sie das Programm speichern und erst dann starten. Wenn alles ok ist, empfehle ich Ihnen, das Demoprogramm (Listing 2) einzugeben. Es vermittelt Ihnen einen sehr guten Eindruck von den Fähigkeiten der Grafikerweiterung. Doch nun zur Turtle-Grafik selbst.
Das Programm ermöglicht die Programmierung von hochauflösender Grafik in Basic mit neuen leistungsfähigen Befehlen.
Wird das Programm gestartet, meldet es sich mit:
TURTLE GRAPHICS
BY PETER MENKE
38911 BASIC BYTES FREE
Nun sind alle Funktionen und Befehle des Programms fest in Basic eingebettet und bleiben bis zum Ausschalten erhalten.
Das Programm unterstützt die Programmierung zweier voneinander völlig unabhängiger Bildschirme:
- Den normalen Textbildschirm
- Den Grafikbildschirm auf dem die hochauflösende Grafik erscheint.
Zwischen den beiden Bildschirmen können Sie mit der Funktionstaste F1 hin- und herschalten. Der neue Befehl HIRES1 schaltet den Grafik-Bildschirm ein (HIRES 0 = ausschalten).
Im folgenden die Befehle im Einzelnen
HIRES1 hi, ra
- hi = Hintergrundfarbe (0-15)
- ra = Randfarbe (0-15)
Die Angaben für Hintergrund und/oder Randfarbe sind nicht unbedingt notwendig, die alten Farben werden dann beibehalten.
CLEAR
Dieser Befehl löscht den gesamten Grafikbildschirm.
REVERS
Dieser Befehl invertiert den gesamten Grafikbildschirm.
COLOR pu, hi, ra
Die Farben der hochauflösenden Grafik werden neu definiert (pu = Punktfarbe). Wie beim HIRES-Befehl können auch hier die Angaben für hi und/oder ra entfallen.
GSAVE »Name«, Gerätenummer
Speichert eine erzeugte Grafik ab.
GLOAD »Name«, Gerätenummer
Lädt eine vorher gespeicherte Grafik in den Computer.
Wenn Sie den Grafikbildschirm einschalten, sehen Sie in der Mitte des Bildschirms einen blinkenden Punkt: Den Grafikcursor (oder »Turtle«, zu deutsch »Schildkröte«),
Durch Bewegen dieses Grafikcursors können Sie Linien auf dem Bildschirm zeichnen.
DEG wi
Bestimmt die Bewegungsrichtung der Turtle. Acht Richtungen sind möglich (»wi« kann Werte zwischen 0 und 7 annehmen).
2 3 1 4 * 0 5 7 6
MOVEx
Move bewegt die Schildkröte um x Punkte.
Der HIRES-Befehl positioniert den Grafikcursor automatisch auf die Bildschirmmitte. Der eingestellte Winkel ist 0. Außerdem wird Modus 0 eingeschaltet (siehe MODE).
LTURN x (x max.=255)
Dreht den Grafikcursor um x Einheiten nach links.
RTURN x (x max.=255)
Dreht den Grafikcursor um x Einheiten nach rechts.
PLOT x-cor, y-cor
Setzt den Grafikcursor auf eine bestimmte Bildschirmposition. Die obere linke Ecke des Bildschirms hat die Koordinaten 0,0; die rechte untere 319,199.
MODE m (m max 4)
Bei den Befehlen MOVE und PLOT kennt das Programm 4 Modi.
- Punkt setzen
- Punkt löschen
- Punkt invertieren
- nichts verändern
Normalerweise ist Modus 0 eingeschaltet. Mit dem MODE-Befehl läßt sich dies ändern.
Gleichzeitige Darstellung von Text und Grafik
Das Programm teilt den Bildschirm in einen Text- und in einen Grafikteil.
Betätigt man bei eingeschaltetem Grafikbildschirm die F3-Taste, so wird im unteren Teil des Bildschirms der untere Teil des normalen Textbildschirms eingeblendet.
Bei nochmaligem Betätigen dieser Taste wird das »Textfenster« wieder ausgeblendet.
WINDOW 1
Schaltet Textfenster ein.
WINDOW 0
Schaltet Textfenster aus.
Mit der Taste F5 wird der Cursor (der normale) in die obere linke Ecke des Textfensters gebracht. Dies entspricht der HOME-Taste für den gesamten Bildschirm. Die F5-Taste läßt sich ebenso programmieren wie die HOME-Taste, das heißt mit PRINT ”(F5)” (auf dem Bildschirm erscheint ein reverses Grafikzeichen) läßt sich der Cursor in die obere linke Ecke des Textfensters bringen.
JOYSTICK ve
(ve=Verzögerung. Mit ve = 0 malt man am schnellsten, mit ve = 255 am langsamsten.)
Dieser Befehl erlaubt das Zeichnen von Bildern mit dem Joystick (Port 2). Mit dem Joystick kann der Grafikcursor bewegt werden. Druckt man gleichzeitig den Feuerknopf, wird entsprechend dem eingestellten Modus ein Punkt gesetzt, gelöscht etc. Nun können beliebige Bilder gezeichnet werden, solange, bis mit der F7-Taste mit der Programmabarbeitung fortgefahren wird.
LPEN
Dieser Befehl erlaubt das Zeichnen von Bildern mit dem Lightpen (Port 1). Ini Prinzip gilt das gleiche wie beim JOYSTICK-Befehl, nur daß hier statt des Feuerknopfes die CTRL-Taste beziehungsweise der Knopf am Lightpen benutzt wird. Man verläßt den Lightpenmodus mit F7.
Alle Befehle können unabhängig vom Einschaltzustand des Grafikbildschirms angewendet werden. Sie lassen sich auch wie normale Basic-Befehle abkürzen.
Die Funktionen und Anwendungen des Programms und seiner Befehle sind sehr gut in dem Programm »TURTLE DEMO« demonstriert (Listing 2).
(Peter Menke/gk)Das Programm beginnt mit Titel und Autorenanschrift. Das GOSUB in Zeile 260 dient nur zur Suche von Syntax-Fehlern in den DATA-Zeilen. Im Programmteil »Variable« ab Zeilennummer 290 wird der Variablen AN die Startadresse des Maschinenprogramms zugewiesen, der Variable ZI die Endadresse. In NA$ steht der Programmname. Die eigentliche Einleseroutine (ab Zeile 350) funktioniert folgendermaßen: Es werden in einer Schleife die ersten 16 Zahlen aus einer jeden DATA-Zeile gelesen und in den Speicher gePOKEt. Gleichzeitig wird aus den gelesenen Daten eine Prüfsumme gebildet. Diese Summe wird mit der letzten Zahl in der DATA-Zeile verglichen, dies ist die richtige Prüfsumme. Unterscheiden sich die beiden Zahlen, so wurde ein Tippfehler gemacht und die fehlerhafte Zeile wird vom Programm automatisch geLI-STet. Außerdem wird geprüft, ob eine Zeile vergessen wurde (Zeile 517-520) und ob die Anzahl der Daten richtig ist (Zeile 530-537). Zusätzlich wird noch getestet, ob die gelesene Zahl auch zwischen 0-255 liegt (Zeile 391). Ist dies nicht der Fall, wird eine Fehlermeldung ausgegeben (Zeile 503-505). Ursache ist wahrscheinlich ein Kommafehler. Wurde kein Fehler gefunden, so fragt das Programm, ob es sich selbst abspeichern soll (davon sollte bei der ersten Benutzung des Programms unbedingt Gebrauch gemacht werden, Zeile 546-580). Danach wird das Maschinenprogramm gestartet (Zeile 590-610). Trotz der Prüfsummen ist ein Fehler in den DATAs nicht völlig ausgeschlossen. Vertauschungen werden zum Beispiel nicht bemerkt. Solche Fehler sind jedoch sehr unwahrscheinlich.
Diese Art der Überprüfung von DATA-Werten sollten Sie sich genau ansehen. Sie erleichtert der Redaktion und vor allem den Lesern die Eingabe und Überprüfung großer Zahlenkolonnen. Falls Sie uns Programme einschicken wollen, dann nehmen Sie sich doch auch bitte etwas Zeit und fügen eine komfortable Prüfroutine in Ihre Programme ein.
Programmierung
- Speicheraufteilung:
- Die Belegung der Funktionstasten wird durch ein »Anzapfen« des Interrupt ermöglicht. Die Funktion PRINT ”(fs)” wird durch Verändern der BSOUT-Routine erreicht.
- Das Textfenster:
Wie Sie wissen, wird das Bild auf dem Fernseher (Monitor) durch einen Elektronenstrahl erzeugt, der den Bildschirm zeilenweise von oben nach unten abfährt. Der VIC bietet nun die Möglichkeit bei einer bestimmten Zeilenposition einen Interrupt auszulösen. Diese Fähigkeit des VIC wird ausgenutzt. In der dann ausgeführten Interruptroutine wird zwischen Hires- und Textmodus hin und her geschaltet, so daß der Bildschirm in ein Text und ein Grafikfenster eingeteilt wird.
- Die neuen Befehle:
Es gibt zahlreiche Möglichkeiten, neue Basic-Befehle zu implementieren. Anzapfen der
- CHRGET-Routme (DOS 5.1)
- Eingabe-Warteschleife (Toolkits)
- Interpreterschleife (beschrieben im 64 Intern)
Die drei Möglichkeiten haben jedoch alle große Nachteile: Sie sind alle entweder zu langsam (1. und 3.), die Befehle lassen sich nur im Direktmodus anwenden (2.) oder sie können nicht abgekürzt werden. Deshalb wurden die Befehle mit sehr komplexen Routinen voll als Tokens integriert. Aus diesem Grund wurde die Interpreterschleife, die Routine zur Umwandlung in Interpretercode und die Routine zur Rückumwandlung in Klartext verändert. Die Vorteile dieser Arbeitsweise sind, daß sich die neuen Befehle wie normale Basic-Befehle anwenden lassen und daß nur minimale Geschwindigkeitsverluste bei der Ausführung von Basic-Programmen in Kauf genommen werden müssen. Ähnliche Methoden verwenden übrigens auch professionelle Basic-Erweiterungen, wie zum Beispiel Simons Basic.
Ein solches »Anzapfen« von Betriebssystem- und Basic-Routinen wird beim C 64 durch zahlreiche Sprungvektoren ermöglicht, die verändert werden können. Dies ist leider nicht bei allen Computern so gut möglich. Die hier benutzten Vektoren sind:
Name: | Adresse in dezimal: |
Interrupt-Vektor | : 788/789 |
NMI-Vektor | : 792/793 |
BRK-Vektor | : 790/791 |
Bsout-Vektor | : 806/807 |
Vektor für Umwandlung in Interpretercode | : 772/773 |
Vektor für Umwandlung in Klartext | : 774/775 |
Vektor für Basic-Befehl ausführen (Interpreterschleife) | : 776/777 |
Das Wissen über die Programmierung des Programms ist für dessen Anwendung nicht nötig. Doch nun viel Spaß mit Turtle Grafik.
(Peter Menke/gk)AN | = Anfangsadresse des Maschinenprogramms |
ZI | = Endadresse des Maschinenprogramms |
NA$ | = Programmname beim Abspeichern |
GE | = Geräteadresse beim Abspeichern |
X | = eingelesener DATA-Wert |
S | = Speicherstelle, in die X gePOKEt wird |
Z | = aktuelle DATA-Zeilennummer |
PR | = errechnete Prüfsumme |
I | = Variable der FOR/NEXT-Einleseschleife |
20 print"{clr}{down}{down} {CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B} 30 print" {CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B} 40 print" {CBM-B}{CBM-B} {CBM-B}{CBM-B} 50 print" {CBM-B}{CBM-B} {CBM-B}{CBM-B} 60 print" {CBM-B}{CBM-B} turtle graphics {CBM-B}{CBM-B} 70 print" {CBM-B}{CBM-B} EEEEEEEEEEEEEEE {CBM-B}{CBM-B} 100 print" {CBM-B}{CBM-B} {CBM-B}{CBM-B} 110 print" {CBM-B}{CBM-B} entwickelt 8.1984 von {CBM-B}{CBM-B} 120 print" {CBM-B}{CBM-B} {CBM-B}{CBM-B} 130 print" {CBM-B}{CBM-B} {CBM-B}{CBM-B} 140 print" {CBM-B}{CBM-B} p e t e r m e n k e {CBM-B}{CBM-B} 150 print" {CBM-B}{CBM-B} {CBM-B}{CBM-B} 160 print" {CBM-B}{CBM-B} griftweg 4 {CBM-B}{CBM-B} 170 print" {CBM-B}{CBM-B} 2212 brunsbuettel {CBM-B}{CBM-B} 190 print" {CBM-B}{CBM-B} {CBM-B}{CBM-B} 200 print" {CBM-B}{CBM-B} {CBM-B}{CBM-B} 210 print" {CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B} 220 print" {CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B}{CBM-B} 230 print"{down}{down} bitte taste druecken" 240 get a$:if a$=""then240 250 print"{clr}" 260 gosub1000 270 : 280 : 290 rem **variable** 300 an=49152 301 zi=51360 310 na$="turtle gr." 320 : 330 : 340 : 350 rem **** einleseroutine **** 360 s=an:z=1000 370 fori=1to16:read x 390 ifx=-100then530 391 ifx<0orx>255then503 400 gosub515:pokes,x 410 s=s+1:pr=pr+x:next 440 : 460 read x:if pr=x then pr=0:z=z+10:goto 370 470 print"{down}{down}pruefsummenfehler in zeile"z 475 print"{down}pruefsumme der zeile"z":"pr:print 480 print"richtige pruefsumme:"x:print:print 490 print"{down}list"z-10"-"z"{up}{up}";:poke631,13:poke198,1 500 end 501 : 502 : 503 print"datenfehler in zeile"z 504 print"es wurde versucht"x"zu poken." 505 goto490 510 : 511 : 512 : 515 print"{home}{down}{down} zeile:"z" speicherstelle:"s 516 print"{down} eingelesener wert: {left}{left}{left}{left}"x 517 if z>=peek(63)+256*peek(64) then return 518 print"{down}{down}{down}data-zeile fehlt!!" 519 print"oder zeilennummern der data-zeilen nicht" 520 print"in zehner abstaenden":end 521 : 522 : 523 : 530 if s=zi then 539 531 print"{down}{down}{down}datenanzahl ist falsch":print:print"das waere richtig :";zi-an 532 print:print"ihre datenanzahl :";s-an 537 end 539 print"{down}{down}keinen fehler gefunden !{down}" 540 print"abspeichern (j/n) ?" 550 get a$:if a$="n" then 590 560 if a$<>"j" then 550 570 input"geraeteadresse (1=datasette/8=disk)";ge 580 save na$+"(c)pm",ge 590 print"{down}zum start eine beliebige taste druecken 600 get a$:if a$="" then 600 610 sysan 630 : 640 : 650 : 1000 data 120,032,063,193,088,032,163,193,032,223,193,169,028,133,254,169,2085 1010 data 192,133,255,032,097,192,032,068,166,076,116,164,147,017,017,017,1721 1020 data 029,029,084,085,082,084,076,069,032,071,082,065,080,072,073,067,1080 1030 data 083,190,190,029,029,066,089,032,080,069,084,069,082,032,077,069,1270 1040 data 078,075,069,190,190,029,029,051,056,057,049,049,032,066,065,083,1168 1050 data 073,067,032,066,089,084,069,083,032,070,082,069,069,017,017,190,1109 1060 data 191,160,000,177,254,201,191,240,012,201,190,208,002,169,013,032,2241 1070 data 210,255,200,208,238,096,173,025,208,141,025,208,016,029,173,018,2223 1080 data 208,201,250,176,011,032,204,193,169,250,141,018,208,076,188,254,2579 1090 data 032,185,193,169,217,141,018,208,076,188,254,173,013,220,088,165,2340 1100 data 204,208,033,169,032,044,017,208,240,026,206,252,203,208,021,169,2240 1110 data 007,141,252,203,173,241,203,072,169,002,141,241,203,032,118,195,2393 1120 data 104,141,241,203,165,212,208,030,165,216,208,026,165,203,205,255,2747 1130 data 203,240,019,141,255,203,201,064,240,012,201,004,240,011,201,005,2240 1140 data 240,029,201,006,240,048,076,049,234,173,017,208,041,032,240,009,1843 1150 data 032,204,193,032,017,194,076,230,192,032,185,193,076,230,192,173,2251 1160 data 017,208,041,032,240,246,173,026,208,041,001,240,006,032,017,194,1722 1170 data 076,230,192,032,254,193,162,021,160,000,024,032,240,255,076,230,2177 1180 data 192,072,138,072,152,072,169,127,141,013,221,172,013,221,048,012,1835 1190 data 032,163,253,032,024,229,032,063,193,108,002,160,076,114,254,032,1767 1200 data 204,193,169,004,141,136,002,169,118,141,020,003,169,192,141,021,1823 1210 data 003,169,033,141,024,003,169,193,141,025,003,169,048,141,022,003,1287 1220 data 169,193,141,023,003,169,011,141,254,203,169,001,141,253,203,141,2215 1230 data 252,203,169,000,141,026,208,169,134,141,004,003,169,196,141,005,1961 1240 data 003,169,043,141,008,003,169,197,141,009,003,169,084,141,006,003,1289 1250 data 169,197,141,007,003,169,103,141,038,003,169,199,141,039,003,032,1554 1260 data 249,195,096,162,032,160,000,169,224,133,255,132,254,152,145,254,2612 1270 data 136,208,251,230,255,202,208,246,096,169,056,141,024,208,169,148,2747 1280 data 141,000,221,173,017,208,009,032,141,017,208,096,169,021,141,024,1618 1290 data 208,169,151,141,000,221,173,017,208,041,223,141,017,208,096,169,2183 1300 data 204,133,255,160,000,132,254,162,004,173,253,203,010,010,010,010,1973 1310 data 013,254,203,145,254,136,208,251,230,255,202,208,246,096,169,217,3087 1320 data 141,018,208,173,017,208,041,127,141,017,208,169,001,141,026,208,1844 1330 data 096,169,000,141,026,208,096,166,122,202,232,142,242,203,162,255,2462 1340 data 142,251,203,142,250,203,238,250,203,174,250,203,189,127,194,240,3259 1350 data 033,016,243,238,251,203,172,242,203,136,200,185,000,002,141,249,2514 1360 data 203,232,189,127,194,056,237,249,203,240,239,201,128,240,019,076,2833 1370 data 038,194,174,242,203,189,000,002,240,007,201,058,240,188,232,208,2416 1380 data 244,096,174,242,203,173,251,203,024,105,208,157,000,002,232,200,2514 1390 data 185,000,002,157,000,002,240,218,232,200,208,244,076,082,194,200,2240 1400 data 072,073,082,069,211,077,079,086,197,067,076,069,065,210,087,073,1593 1410 data 078,068,079,215,080,076,079,212,077,079,068,197,068,069,199,082,1726 1420 data 069,086,069,082,211,076,084,085,082,206,082,084,085,082,206,067,1656 1430 data 079,076,079,210,071,076,079,065,196,071,083,065,086,197,074,079,1586 1440 data 089,083,084,073,067,203,076,080,069,206,072,069,076,208,000,239,1694 1450 data 194,205,197,095,195,084,199,073,196,118,196,147,197,163,197,128,2584 1460 data 198,144,198,165,198,036,199,223,198,161,199,059,200,053,199,032,2462 1470 data 158,183,224,000,240,054,032,121,000,240,040,032,253,174,032,158,1941 1480 data 183,224,016,144,003,076,106,195,142,254,203,032,223,193,032,121,2147 1490 data 000,240,016,032,253,174,032,158,183,224,016,144,003,076,106,195,1852 1500 data 142,032,208,032,185,193,032,249,195,076,174,167,032,121,000,240,2078 1510 data 037,032,253,174,032,158,183,224,016,144,003,076,106,195,142,033,1808 1520 data 208,032,121,000,240,016,032,253,174,032,158,183,224,016,144,003,1836 1530 data 076,106,195,142,032,208,032,017,194,032,204,193,076,174,167,208,2056 1540 data 012,032,163,193,032,223,193,076,174,167,162,014,044,162,011,032,1690 1550 data 204,193,076,055,164,096,173,241,203,201,003,240,248,174,246,203,2720 1560 data 138,074,074,041,254,168,185,015,196,141,244,203,185,016,196,141,2271 1570 data 245,203,138,041,007,024,109,244,203,141,244,203,173,247,203,041,2466 1580 data 248,141,243,203,173,244,203,133,252,024,169,224,109,245,203,133,2947 1590 data 253,024,165,252,109,243,203,133,252,165,253,109,248,203,133,253,2998 1600 data 173,247,203,041,007,073,007,170,189,065,196,160,000,120,162,052,1865 1610 data 134,001,174,241,203,240,008,224,001,240,014,224,002,240,019,017,1982 1620 data 252,145,252,169,055,133,001,088,096,073,255,049,252,145,252,076,2293 1630 data 227,195,081,252,145,252,076,227,195,169,000,141,248,203,141,241,2793 1640 data 203,141,240,203,169,160,141,247,203,169,100,141,246,203,096,000,2662 1650 data 000,064,001,128,002,192,003,000,005,064,006,128,007,192,008,000,800 1660 data 010,064,011,128,012,192,013,000,015,064,016,128,017,192,018,000,880 1670 data 020,064,021,128,022,192,023,000,025,064,026,128,027,192,028,000,960 1680 data 030,001,002,004,008,016,032,064,128,032,235,183,224,200,176,035,1370 1690 data 165,021,201,001,144,008,208,027,165,020,201,064,176,021,120,142,1684 1700 data 246,203,165,020,141,247,203,165,021,141,248,203,088,032,118,195,2436 1710 data 076,174,167,076,106,195,032,158,183,224,004,144,003,076,106,195,1919 1720 data 142,241,203,076,174,167,032,023,194,166,122,160,004,132,015,189,2040 1730 data 000,002,141,249,203,041,240,201,208,208,006,173,249,203,076,232,2432 1740 data 196,173,249,203,016,007,201,255,240,062,232,208,226,201,032,240,2741 1750 data 055,133,008,201,034,240,086,036,015,112,045,201,063,208,004,169,1610 1760 data 153,208,037,201,048,144,004,201,060,144,029,132,113,160,000,132,1766 1770 data 011,136,134,122,202,200,232,189,000,002,056,249,158,160,240,245,2336 1780 data 201,128,208,048,005,011,164,113,232,200,153,251,001,185,251,001,2152 1790 data 240,054,056,233,058,240,004,201,073,208,002,133,015,056,233,085,1891 1800 data 208,141,133,008,189,000,002,240,223,197,008,240,219,200,153,251,2412 1810 data 001,232,208,240,166,122,230,011,200,185,157,160,016,250,185,158,2521 1820 data 160,208,180,189,000,002,016,190,076,009,166,032,115,000,041,240,1624 1830 data 201,208,240,009,032,121,000,032,237,167,076,174,167,032,121,000,1817 1840 data 041,015,010,168,185,208,194,133,167,185,207,194,133,166,032,115,2153 1850 data 000,108,166,000,016,052,201,255,240,048,036,015,048,044,141,249,1619 1860 data 203,041,240,201,208,208,038,173,249,203,041,015,170,232,132,073,2427 1870 data 160,255,200,185,127,194,016,250,202,208,247,200,185,127,194,048,2798 1880 data 006,032,071,171,076,123,197,076,239,166,076,243,166,173,249,203,2267 1890 data 076,036,167,032,158,183,224,008,144,003,076,106,195,142,240,203,1993 1900 data 076,174,167,208,037,162,032,169,224,133,255,160,000,132,254,120,2303 1910 data 169,052,133,001,177,254,073,255,145,254,136,208,247,230,255,202,2791 1920 data 208,242,169,055,133,001,088,076,174,167,076,109,195,032,138,173,2036 1930 data 032,247,183,166,020,240,008,032,236,197,198,020,076,211,197,166,2229 1940 data 021,240,006,198,021,198,020,208,234,076,174,167,173,240,203,240,2419 1950 data 029,201,002,240,034,201,004,240,039,201,006,240,044,201,001,240,1923 1960 data 010,201,003,240,015,201,005,240,020,208,027,032,047,198,032,093,1572 1970 data 198,076,118,195,032,067,198,032,047,198,076,118,195,032,056,198,1836 1980 data 032,067,198,076,118,195,032,093,198,032,056,198,076,118,195,173,1857 1990 data 246,203,240,067,206,246,203,096,173,246,203,201,199,176,056,238,2999 2000 data 246,203,096,173,248,203,208,009,173,247,203,240,042,206,247,203,2947 2010 data 096,173,247,203,208,003,206,248,203,206,247,203,096,173,248,203,2963 2020 data 208,009,238,247,203,208,003,238,248,203,096,174,247,203,232,224,2981 2030 data 064,176,004,142,247,203,096,173,237,203,208,003,076,106,195,096,2229 2040 data 032,158,183,138,024,109,240,203,041,007,141,240,203,076,174,167,2136 2050 data 032,158,183,142,249,203,173,240,203,056,237,249,203,041,007,141,2517 2060 data 240,203,076,174,167,032,158,183,224,016,176,048,142,253,203,032,2327 2070 data 223,193,032,121,000,240,034,032,253,174,032,158,183,224,016,176,2091 2080 data 027,142,254,203,032,223,193,032,121,000,240,013,032,253,174,032,1971 2090 data 158,183,224,016,176,006,142,032,208,076,174,167,076,106,195,120,2059 2100 data 169,052,133,001,162,032,160,000,132,254,132,166,169,224,133,255,2174 2110 data 169,160,133,167,177,254,145,166,136,208,249,230,255,230,167,202,3048 2120 data 208,242,169,055,133,001,088,032,212,225,162,000,160,192,134,254,2267 2130 data 169,160,133,255,169,054,133,001,169,254,032,216,255,169,055,133,2357 2140 data 001,076,174,167,032,212,225,169,000,133,185,162,000,160,224,032,1952 2150 data 213,255,076,174,167,208,026,160,000,185,128,194,240,016,016,007,2065 2160 data 041,127,032,210,255,169,013,032,210,255,200,076,057,199,076,174,2126 2170 data 167,076,109,195,032,158,183,224,000,240,006,032,254,193,076,174,2119 2180 data 167,032,017,194,076,174,167,072,165,154,201,003,208,008,104,201,1943 2190 data 135,240,006,076,022,231,076,213,241,142,249,203,166,212,208,027,2447 2200 data 166,216,208,023,152,072,169,021,133,214,169,000,133,211,032,108,2027 2210 data 229,104,168,174,249,203,169,135,024,088,096,174,249,203,076,022,2363 2220 data 231,032,158,183,232,142,239,203,169,001,141,237,203,165,203,201,2740 2230 data 003,208,008,169,000,141,237,203,076,174,167,169,000,141,238,203,2137 2240 data 173,000,220,041,001,208,009,032,047,198,032,034,200,238,238,203,1874 2250 data 173,000,220,041,002,208,009,032,056,198,032,034,200,238,238,203,1884 2260 data 173,000,220,041,004,208,009,032,067,198,032,034,200,238,238,203,1897 2270 data 173,000,220,041,008,208,009,032,093,198,032,034,200,238,238,203,1927 2280 data 173,238,203,208,168,032,011,200,076,173,199,173,241,203,072,169,2539 2290 data 002,141,241,203,032,118,195,032,047,200,032,118,195,104,141,241,2042 2300 data 203,096,173,000,220,041,016,208,226,032,118,195,076,047,200,172,2023 2310 data 239,203,162,100,202,208,253,136,208,248,096,240,003,076,109,195,2678 2320 data 165,203,201,003,208,003,076,174,167,173,020,208,056,233,050,144,2084 2330 data 239,201,200,176,235,141,246,203,173,019,208,056,233,035,144,224,2733 2340 data 010,141,247,203,144,007,201,064,176,214,169,001,044,169,000,141,1931 2350 data 248,203,173,141,002,041,004,240,012,032,118,195,032,093,198,032,1764 2360 data 118,195,076,064,200,173,241,203,072,169,002,141,241,203,032,118,2248 2370 data 195,032,118,195,104,141,241,203,076,064,200,255,255,255,255,249,2838 63000 data -100:return
0 rem t u r t l e d e m o 1 rem by peter menke 2 : 3 hires 1,0,0:color15:clear 4 : 10 rem roboter-kopf 20 plot 120,160 30 deg 2:move 10 40 deg 0:move 30 50 deg 2:move 10 55 deg 4:move 40 60 deg 2:move 100 65 deg 0:move 100 70 deg 6:move 100 90 deg 4:move 40 100 deg 6:move 10 110 deg 0:move 30 120 deg 6:move 10 121 : 122 rem linkes ohr 130 plot 110,105 140 deg 4:move 15 150 deg 2:move 30 160 deg 0:move 15 161 : 162 rem rechtes ohr 170 plot 210,105 180 deg 0:move 15 190 deg 2:move 30 200 deg 4:move 15 201 : 202 rem mund 210 plot 130,120 220 deg 6:move 10 230 deg 0:move 60 240 deg 2:move 10 241 : 242 rem nase 250 plot 152,100 260 deg 0:move 16 270 deg 3:move 8 280 deg 4:move 1 290 deg 5:move 8 291 : 292 rem linkes auge 293 plot 130,60:deg 0 295 fort=1to4 300 move 15 310 rturn2 320 next 330 : 340 rem rechtes auge 350 plot 190,60:deg 6 360 fort=1to4 370 move 15 380 rturn 2 390 next 400 : 410 window 1:print"{clr}{f5} t u r t l e d e m o" 420 print"{down} by peter menke" 430 fori=0to4000:next 440 window 0 450 : 460 : 461 rem spirale 470 hires 1,2,2:color 0:clear:plot 160,100 480 fori=1to66 490 lturn 1 500 move i 510 next 511 fori=1to1000:next 520 : 530 : 540 rem viereck-spiralen 541 clear:color1 550 hires 1,2,2:fori=1to200step2 560 rturn 2:move i:next 561 plot 160,100 570 fori=1to195step2 580 lturn 2:move i:next 590 plot 160,100 600 fori=1to195 610 rturn 2:move i:next 620 : 630 : 640 rem muster 641 hires1,5,5:clear:color0 650 fori=1to45 660 forx=0to7 670 rturnx 671 move i 680 nextx 700 next 710 : 720 hires1,5,5 730 fori=1to45 740 forx=0to7 750 lturnx 761 movei 780 nextx 790 next 800 fori=1to2000:next 810 : 820 : 830 rem pyramiden 840 hires1,6,6:clear:color15 850 fori=1to33 860 forx=0to7 870 deg x 871 move i 880 nextx 900 next 910 : 930 fori=1to33 940 forx=0to7 950 deg 7-x 961 move i 980 nextx 990 next 991 fori=1to8:trap 992 forx=1to500:next 993 next 1000 : 1010 : 1011 rem inverses muster 1020 hires7,7:color 0:clear 1030 fory=1to4:hires 1:else 2 1040 fori=1to100 1050 move i 1060 forx=1to7 1070 lturn x:movex:nextx,i,y 1080 : 1090 : 1111 rem strich-muster 1120 hires1,8,8:color 0:clear 1130 fory=1to4:hires 1:else2 1140 fori=1to45 1150 move i 1160 forx=1to10 1170 rturn x:move x:nextx,i,y 1181 : 1182 : 1183 rem joystick zeichnen 1184 hires 1,10,10:color0:clear 1185 window1 1186 print"{clr}{f5} joystick-zeichnen (port 2)" 1187 print" weiter mit f7" 1188 joystick5 1189 : 1190 : 1191 rem lightpen zeichnen 1192 hires 1,1,1:color0:clear 1193 window1 1194 print"{clr}{f5} lightpen-zeichnen (port 1)" 1195 print" weiter mit f7" 1196 graphic 1197 : 1198 : 1200 rem zufall 1210 hires 1:clear:color 1,9,9 1220 window 1 1230 print"{clr}{f5}zufallsmuster 1240 print"schluss mit run/stop-taste 1250 deg rnd(1)*8:move 1:goto1250