Tips & Tricks für Profis
Wie nützt man am besten den $C000-Bereich für Basic-Programme? Wir zeigen Ihnen eine wirklich geniale Lösung und viele weitere interessante und trickreiche C 64-Leckerbissen.
Übrigens: Vor kurzem wollten wir in der Redaktion einen »too many files«-Error hervorrufen. Wir verwendeten dazu folgenden Einzeiler:
10 FOR I = 1 TO 20 : OPEN I,2 : NEXT
Völlig ungläubig starrten wir auf die nach dem »RUN« ausgegebene Fehlermeldung unseres C 64. Sie lautete nämlich… Halt! Probieren Sie es selbst einmal aus. Kennen Sie die Erklärung? Auflösung folgt in der nächsten Ausgabe.
Auffrisierter SYS-Befehl
Wer selbst Basic-Erweiterungen programmiert, wird bei zeitkritischen Befehlen (zum Beispiel einer Plot-Routine) schnell an die Grenzen des SYS-Befehls mit Parameterübergabe stoßen. Er ist aufgrund der Adreßumrechnung (Sprungadresse aus dem Basic-Text holen, umrechnen, auf Fehler testen und einen JMP ausführen) manchmal zu langsam. Eine besonders geniale Methode bietet sich als Alternative an: die USR-Funktion. Sie ist um einen wesentlichen Faktor schneller als der SYS-Befehl und eine Parameterübergabe ist ebenso möglich (USR(x),y,z). Ein weiterer Vorteil: Manche Compiler verweigern den SYS-Befehl mit nachfolgenden Parametern. Ein Compiler, der die USR-Funktion nicht verarbeitet, ist uns hingegen nicht bekannt. Bei Befehlserweiterungen mit mehreren Befehlen kann dem Maschinenprogramm über den Übergabeparameter x mitgeteilt werden, welcher Befehl gewünscht wird. Übrigens: Der USR-Vektor steht in 785/786 dezimal. Das Maschinenprogramm müßte dann so aussehen:
| JSR $B7F7 | USR-Argument nach $0014/$0015 holen… |
| LDA $14 | und schon steht der Parameter x zur Weiterverarbeitung bereit! |
Das High-Byte ($0015) der Übergabevariablen x wird bei dieser Methode natürlich nicht berücksichtigt, aber wer hat schon eine Befehlserweiterung mit mehr als 256 Befehlen… (Hartmut Kroos/tr)
LOAD-Schutz einmal anders
Kannten Sie den schon? Verwenden Sie zur Speicherung eines Programms auf Floppy folgenden Dateinamen:
SAVE CHR$(34),8
Im Directory erscheint dieses File dann mit dem Dateinamen "". Versuchen Sie nun einmal, dieses Programm wieder zu laden. Richtig! Dies geht nur mehr mit
LOAD CHR$(34),8
Hilfe beim Programme-Abtippen
Wenn man ein Programm abtippen möchte, sieht man sich öfters einer DATA-Wüste gegenüberstehen, beziehungsweise -sitzen. Das dabei am meisten vorkommende Zeichen ist zweifellos das Komma. Dieses liegt aber nun auf einer kleinen Taste auf der Tastatur, die, wenn man nicht dauernd auf die Tastatur schauen will, recht schwer zu erreichen ist. Die Folge ist: Man vertippt sich häufiger. Um das zu ändern, tue man folgendes:
1) ROM ins RAM kopieren
Zum Beispiel mit dem Einzeiler:
FOR I = 0 TO 8191 : POKE 40960 + I, PEEK (40960 + I) : POKE 57344 + I,PEEK (57344 + I) : NEXT
Genialer geht es natürlich mit einem Maschinensprache-Monitor und einem Transfer-Befehl. Es müssen die Bereiche $A000 bis $BFFF nach $A000 und $E000 bis $FFFF nach $E000 verschoben werden.
2) Umschalten mit POKE 1,53
3) POKE 60349,44
Wenn man nun auf die SPACE-Taste drückt, entdeckt man, daß diese Kommanta produziert. Wer Lust hat, kann die Komma-Taste mit POKE 60336,32 mit der SPACE-Funktion belegen. Diese Umbelegung erleichtert das Abtippen um einiges.
(Peter Gorgs/tr)Grafik-Erweiterung für den LoRes-Bildschirm
Manchmal ist es aus Platzgründen sinnvoll, für grafische Darstellungen nicht die HiRes-Grafik zu verwenden. Unsere kleine Basic-Erweiterung in Listing 1 erlaubt es, mit einem einfachen SYS-Aufruf im normalen Text-Modus einen Pixel (4x4 Punkte) zu setzen.
Syntax: SYS 49152,X-Wert,Y-Wert,Modus(,Farbe)
Für X sind Werte von 0 bis 79, für Y von 0 bis 49 zugelassen. »Modus« gibt an, ob der Punkt gesetzt (Modus = 1), gelöscht (Modus = 0), oder getestet (Modus = 255) werden soll. Bei Modus gleich 255 steht das Ergebnis des Tests (1 = gesetzt, 0 = gelöscht) in Speicherzelle 2. Für den Parameter »Farbe« gelten die normalen Farb-POKEs (0 bis 15). Wenn auf »Punkt gesetzt/gelöscht« geprüft werden soll, muß »,Farbe« entfallen. (Georg Brandt/Andreas Wellie/tr)
PROGRAMM : LORES C000 C136 ----------------------------------- C000 : 20 FD AE 20 9E B7 86 F7 80 C008 : E0 50 90 03 4C 48 B2 20 A7 C010 : FD AE 20 9E B7 86 F8 E0 96 C018 : 32 B0 F1 20 FD AE 20 9E 36 C020 : B7 86 FD E8 F0 08 20 FD 82 C028 : AE 20 9E B7 86 FE A5 F8 6E C030 : 4A 85 F8 90 03 A9 02 2C 6B C038 : A9 00 A8 A5 F7 4A 85 F7 98 C040 : 98 90 02 09 01 85 02 A6 54 C048 : F8 BD CD C0 18 6D 88 02 BD C050 : 85 FC BD F0 EC 85 FB A4 15 C058 : F7 B1 FB A6 FD F0 38 E8 16 C060 : F0 35 A2 0F DD E6 C0 F0 6F C068 : 05 CA 10 F8 A2 00 A9 00 C6 C070 : A4 02 F0 07 18 69 10 88 50 C078 : 18 90 F7 85 02 8A 18 65 26 C080 : 02 AA BD F6 C0 A4 F7 91 5A C088 : FB A5 FC 29 03 18 69 D8 02 C090 : 85 FC A5 FE 91 FB 60 48 E7 C098 : A9 00 A4 02 F0 07 18 69 25 C0A0 : 10 88 18 90 F7 AA 68 A0 C4 C0A8 : 00 DD F6 C0 F0 0B E8 C8 09 C0B0 : C0 10 D0 F5 A9 00 85 02 20 C0B8 : 60 24 FD F0 05 A9 01 18 9A C0C0 : 90 F4 D9 E6 C0 F0 E7 B9 C4 C0C8 : E6 C0 4C 85 C0 00 00 00 DE C0D0 : 00 00 00 00 01 01 01 01 EF C0D8 : 01 01 02 02 02 02 02 02 57 C0E0 : 02 03 03 03 03 03 20 6C 27 C0E8 : 7B 7C 7E 61 62 E2 E1 EC 0C C0F0 : FC FE FB FF 7F A0 7E 7F 60 C0F8 : 61 E2 7E 61 FC E2 FB EC 47 C100 : FC A0 FB EC 7F A0 7C E1 9B C108 : FF 7C E2 EC FE E2 E1 EC 04 C110 : A0 FE FB FF FB A0 7B 62 A6 C118 : 7B FF 61 61 62 EC FE EC 7B C120 : FC FE A0 FF FC A0 6C 6C 23 C128 : 62 E1 7F FC 62 FB E1 A0 C9 C130 : FC FE FB FE 7F A0 22
Die verflixte Müllabfuhr
Bei einer Garbage Collection zeigt der C 64 keine Reaktion mehr. Man weiß dann nie so genau, ob der Computer abgestürzt oder am Rechnen ist. Besonders schlimm ist diese Tatsache bei der Programmentwicklung oder bei gekauften Basic-Programmen, die viele Daten zu verarbeiten haben (Adreßverwaltung, Vokabelprogramm, Haushaltsbuchhaltung. .). Mit dem Programm »Garbage Anzeige» (Listing 2) wollen wir nun eine Möglichkeit angeben, diese Unsicherheit aus dem Weg zu räumen. Sobald der Computer dabei ist, den Stringmüll zu sortieren, zeigt das Programm automatisch einen Text. Ist die Garbage Collection beendet, sieht der Bildschirm genauso aus wie vorher, das heißt der überschriebene Text wird wieder in unveränderter Form auf den Bildschirm gebracht. Ferner kann man vorher genau bestimmen, wo der Text erscheinen soll (Spalte, Zeile). Zusätzlich wird bei jedem Aufruf die Rahmenfarbe um eins erhöht. Selbstverständlich wird diese bei Ende der Garbage Collection sofort wieder zurückgesetzt.
Will man die Rahmenfarbe jedoch belassen, so sind noch zwei POKEs einzugeben: POKE 53102,44: POKE 53119,44. Das Programm braucht nur einmal, aufgerufen zu werden und bleibt die ganze Zeit durch den Gebrauch der Interrupttechnik einsatzbereit. Nach RUN/STOP-RESTORE und RESET muß die Routine wieder initialisiert werden. Listing 3 demonstriert die Anwendung des Programms.
Initialisierung mit: SYS 52992, Spalte, Zeile
PROGRAMM : G.C.-ANZEIGE CF00 CFC5 ----------------------------------- CF00 : 20 FD AE 20 9E B7 E0 28 4A CF08 : B0 41 8E 9D CF 20 FD AE 03 CF10 : 20 9E B7 E0 19 B0 34 86 7E CF18 : 28 A2 28 86 71 A9 00 85 DC CF20 : 29 85 72 20 57 B3 8A 18 1A CF28 : 6D 9D CF 90 01 C8 C8 C8 75 CF30 : C8 C8 8C 91 CF 8D 90 CF FD CF38 : 8C 94 CF 8D 93 CF 78 A2 93 CF40 : 4E A0 CF 8E 14 03 8C 15 5A CF48 : 03 58 60 4C 48 B2 BA BC 97 CF50 : 05 01 BD 06 01 AA C9 B5 FE CF58 : D0 05 98 C9 26 B0 0A 8A 2F CF60 : C9 B6 D0 13 98 C9 06 B0 6C CF68 : 0E AD 9E CF D0 14 EE 20 98 CF70 : D0 20 85 CF 4C 82 CF AD 1F CF78 : 9E CF F0 06 20 85 CF CE 06 CF80 : 20 D0 4C 31 EA 49 FF 8D 56 CF88 : 9E CF A0 23 B9 9F CF BE F0 CF90 : 00 04 99 00 04 8A 99 9F 33 CF98 : CF 88 10 F0 60 00 00 AD 2F CFA0 : A0 82 89 94 94 85 A0 97 9D CFA8 : 81 92 94 85 8E BA A0 87 98 CFB0 : 81 92 82 81 87 85 A0 83 79 CFB8 : 8F 8C 8C 85 83 94 89 8F 83 CFC0 : 8E A0 AD 01 08 76
60 print"{clr}{down}{down}{rght}{rght}{rght}dieser text wird jetzt gleich wegen"
70 print"einer garbage collection ueberschrieben."
80 dim a$(200,1):fori=1to200:a$(i,1)=chr$(i):next
120 print"{down}{down}{down}<taste>":poke198,0:wait198,255
130 sys 52992,2,3
140 a=fre(0):rem erzwingen einer garbage collection
150 print"{down}{down}wie sie sehen blieb der urspruengliche"
160 print"text jedoch erhalten."
43007 Bytes free!
»BASIC $B000« (Listing 4) verschiebt den Basic-Interpreter von $A000-$BFFF nach $B000-$CFFF und ändert alle benötigten Parameter beziehungsweise Werte und Adressen. Somit meldet sich anschließend eine Basic-Version mit 43007 statt 38911 Bytes free. Der Vorteil gegenüber anderen Basic-RAM-Erweiterungen liegt darin, daß die 43007 Bytes an einem Stück liegen, und somit in einer beliebigen Aufteilung für Variablen oder Programm zur Verfügung stehen. Die zusätzlichen 4 KByte RAM sind für Adventures oder Datenverwaltungsprogramme äußerst nützlich. Als Beispielprogramm diene das Adventure »Buch der Weisheit« aus dem Sonderheft 3/85, Spiele. Dieses Adventure ist normalerweise nur in einer compilierten Fassung lauffähig, sonst meldet es sich mit einem »OUT OF MEMORY ERROR«. Mit Basic $B000 ist auch die Basic-Version lauffähig. Es muß allerdings darauf hingewiesen werden, daß nur reine Basic-Programme ohne Maschinen-Routinen mit Basic $B000 verwendet werden dürfen!
Bedienungsanleitung:
Wenn Sie mit Hypra-Load arbeiten wollen, so laden Sie dies zuerst und starten es. Ansonsten oder anschließend laden Sie »BASIC $B000« und starten es mit »RUN«. Danach wird »Bitte warten« ausgegeben, und nach zirka sieben Sekunden meldet sich »BASIC $B000« mit »43007 Bytes free«. Mit »SYS 64738«, also einem Software-Reset, wird nicht auf das normale Basic umgestellt, sondern »BASIC $B000« neu initialisiert. Nur mit einem Reset-Taster oder »POKE 1,55« kommt man wieder in den Normalmodus. Danach läßt sich das »BASIC $B000« nur mit einem erneuten Laden und Starten wiederbeleben. Da Turbo-Tape-Versionen einen Teil des Bereichs von $C000 bis $CFFF belegen, kann man diese leider nicht mit »BASIC $B000« verwenden, da es selbst diesen Bereich benötigt. Somit ist eine Benutzung von »BASIC $B000« nur mit einer Diskettenstation zu empfehlen. Bei einer Benutzung von Hypra-Load schalten Sie vorher bitte den Drucker aus und laden keine Programme über 169 Blocks beziehungsweise 43007 Bytes Länge.
PROGRAMM : BASIC $B000 0801 0A8D ----------------------------------- 0801 : 1A 08 C2 07 9E 32 35 36 6E 0809 : 30 3A 12 20 42 41 53 49 ED 0811 : 43 20 24 42 30 30 30 20 3B 0819 : 00 00 00 A9 A0 85 44 A9 E9 0821 : B0 85 46 A9 E0 85 48 A0 F7 0829 : 00 84 43 84 45 84 47 B1 C6 0831 : 43 91 45 B1 47 91 47 C8 74 0839 : D0 F5 E6 44 E6 46 E6 48 13 0841 : D0 ED A9 35 85 01 A9 B0 81 0849 : 8D 01 FD 8D 8B FD 8D 71 4A 0851 : FE A0 0D A2 81 20 C6 08 7B 0859 : A9 B3 A0 29 A2 65 20 C6 8C 0861 : 08 A9 E4 A0 48 A2 54 20 B6 0869 : C6 08 A9 C8 8D D7 08 A9 C2 0871 : B0 A0 82 A2 A0 8E 8A FD 0B 0879 : 20 C6 08 A9 B3 A0 8A A2 E3 0881 : D0 20 F9 08 A9 E0 A0 00 05 0889 : A2 E5 8C 89 FD 8E D6 FD 1E 0891 : 20 F9 08 A9 A2 8D 88 FD 9A 0899 : A9 B3 A2 D0 A0 00 20 36 D5 08A1 : 09 A0 8A 20 3D 09 A9 E0 25 08A9 : A2 E3 A0 3D 20 36 09 A0 26 08B1 : 00 20 3D 09 A9 E3 A2 E4 40 08B9 : A0 5E 20 36 09 A0 7B 20 1B 08C1 : 3D 09 6C FC FF 85 44 8E 98 08C9 : D9 08 B1 43 C9 E0 B0 04 E9 08D1 : 69 10 91 43 C8 C8 EA C0 0F 08D9 : AA D0 EF 60 C8 D0 02 E6 DC 08E1 : 44 A5 46 C5 44 D0 08 C4 B7 08E9 : 45 D0 04 BA E8 E8 9A 60 F0 08F1 : C0 00 D0 02 C6 44 88 60 97 08F9 : 85 44 86 46 B1 43 C9 A9 BA 0901 : D0 2D 20 DD 08 20 DD 08 35 0909 : B1 43 C9 A0 D0 1B 20 DD 04 0911 : 08 B1 43 29 F0 C9 A0 F0 AA 0919 : 04 C9 B0 D0 09 B1 43 18 A3 0921 : 69 10 91 43 D0 09 20 F1 19 0929 : 08 20 F1 08 20 F1 08 20 B1 0931 : DD 08 4C FD 08 85 44 86 B0 0939 : 46 84 45 60 A2 4A B1 43 E8 0941 : DD 7D 09 F0 0F CA D0 F8 BA 0949 : A2 30 DD C7 09 F0 0E CA 59 0951 : D0 F8 F0 03 20 DD 08 20 8B 0959 : DD 08 4C 3D 09 20 DD 08 0E 0961 : 20 DD 08 B1 43 29 F0 C9 7D 0969 : 90 F0 08 C9 A0 F0 04 C9 E2 0971 : B0 D0 E4 B1 43 18 69 10 B3 0979 : 91 43 4C 58 09 69 29 C9 DE 0981 : E0 C0 49 A9 A2 A0 09 E9 70 0989 : 65 25 06 24 C5 E4 C4 C6 AB 0991 : 45 E6 A5 A6 A4 46 05 26 64 0999 : 66 E5 85 86 84 75 35 16 19 09A1 : D5 D6 55 F6 B5 B4 56 15 9A 09A9 : 36 76 F5 95 94 B6 96 90 C5 09B1 : B0 F0 30 D0 10 50 70 71 28 09B9 : 31 D1 51 B1 11 F1 91 61 07 09C1 : 21 C1 41 A1 01 E1 81 6D 47 09C9 : 2D 0E 2C CD EC CC CE 4D CD 09D1 : EE F9 20 AD AE AC 4E 0D 1D 09D9 : 2E 6E ED 8D 8E 8C 7D 3D 29 09E1 : 1E DD DE 5D FE BD BC 5E DF 09E9 : 1D 3E 7E FD 9D 79 39 D9 C3 09F1 : 59 B9 BE 19 4C 99 6C 00 3D 09F9 : 00 00 00 00 00 00 00 A9 4D 0A01 : 37 85 01 A2 00 BD 48 0A B3 0A09 : 20 D2 FF E8 E0 29 D0 F5 36 0A11 : 20 9F FF A5 CB C9 27 F0 3F 0A19 : 19 C9 22 D0 F3 A9 B1 8D 28 0A21 : 36 08 A9 B0 8D 49 F0 8D DE 0A29 : 1E F4 A9 90 8D 4E F0 8D 68 0A31 : 23 F4 A2 00 BD 78 0A 20 7F 0A39 : D2 FF E8 E0 12 D0 F5 4C 79 0A41 : 1C 08 2A 2A 2A 2A 2A 93 F5 0A49 : 11 11 11 11 48 41 42 45 6B 0A51 : 4E 20 53 49 45 20 48 59 D7 0A59 : 50 52 41 2D 4C 4F 41 44 95 0A61 : 20 47 45 4C 41 44 45 4E E8 0A69 : 20 3F 20 28 4A 2F 4E 29 E0 0A71 : 00 00 00 2A 2A 2A 2A 93 7A 0A79 : 11 11 11 11 20 42 49 54 5B 0A81 : 54 45 20 57 41 52 54 45 ED 0A89 : 4E 00 00 00 7E
Hi-Eddi und Panasonic-Drucker
Mit dieser geänderten Druckroutine läßt sich der KX-P1090 genauso wie ein Epson-Drucker ansprechen. Die Einstellung der DIP-Schalter ist bis auf Schalter 1 identisch mit der Originaleinstellung des Druckers.
1. Änderungsmöglichkeit:
Im Basic-Lader aus der 64’er, Ausgabe 1/85, Seite 66, müssen in Zeile 580 zwei DATA-Werte geändert werden. Die neue Zeile heißt:
580 DATA 27,75,255,255,255
2. Änderungsmöglichkeit:
Bei dem Maschinenprogramm müssen die Adressen $0E75 und $0E76 überschrieben werden. Dies geschieht am besten mit dem SMON. SMON laden und starten. Die ursprüngliche HI-PRINT-Version laden.
Nun eingeben: M0E70 0E77
Jetzt werden in der angezeigten Zeile das 6. und 7. Byte geändert in 4B und FF. Nachdem <Return> gedrückt wurde, kann die geänderte Version auf Diskette gespeichert werden.
(Werner Tüllmann/tr)Hypra-Platos und FX 80
Für den FX 80 habe ich das »2. PRG« etwas verlängert, um die Zeichengenauigkeit in X-Richtungzu verbessern. Die Zeilenbreite von im Mittel genau 54o Zoll erreiche ich dadurch, daß der Vorschub innerhalb von fünf Zeilen dreimal den Wert 2%is Zoll (1., 3. und 4. Zeile) und zweimal den Wert 26 Zoll annimmt. Zusätzlich wird am Ende jeder Zeile LF ausgegeben. Dadurch kann beim Görlitz-Interface die Sekundäradresse 4 (Linearkanal) benutzt werden. (Falls das nicht erwünscht ist, überschreiben Sie $9CED bis $9CF1 mit EA (NOP).) Die dafür notwendigen Änderungen können mit dem MSE eingegeben werden.
Geändert werden muß die Zeile:
9A74: 4C C2 9C EA EA 20 33 f3 0A
und angefügt werden die Zeilen:
9CC0: 00 16 EE C0 9C AD C0 9C 12
9CC8: C9 02 F0 09 C9 05 D0 08 08
9CD0: A9 00 8D C0 0C CE C1 9C 75
9CD8: A9 1B 20 D2 FF A9 33 20 CC
9CE0: D2 FF AD C1 9C 20 D2 FF 6B
9CE8: A9 0D 20 D2 FF A9 0A 20 30
9CF0: D2 FF A9 16 8D C1 9C 4C E1
9CF8: 79 9A AD 66 95 C9 52 D0 89
9D00: 03 4C 81 99 4C E4 9B 20 57
»DEF FN« sinnvoll eingesetzt
Eine der nützlichsten Funktionen des mageren C 64-Basic führt bei den meisten C 64-Fans zweifellos ein Schattendasein: die DEF FN-Funktion. Das kleine Demo-Programm in Listing 5 zeigt, wie sich fast ausschließlich mit dieser Funktion die Echtzeituhr der CIAs auslesen läßt.
Nebenbei bemerkt: Es gibt unglaublich viele Anwendungsbeispiele für die FN-Anweisung, und sei es nur die LoHi-Zerlegung einer Zahl. Die Joysticks lassen sich damit auslesen, Sprites steuern, Grafikpunkte setzen, und die Register des SID kann man durch gezielte Umrechnungen wesentlich komfortabler programmieren…
Listing 5 ist durch die REM-Zeilen ausreichend dokumentiert, so daß hier auf weitere Erklärungen verzichtet werden kann.
10 td=56328:rem echtzeituhr sec/10-register
20 poketd+6,peek(td+6)and127:rem 50 hz einstellen
30 def fn u4(x) = (xand15):rem untere 4 bits von x
40 def fn o4(x)=(xand240)/16:rem obere 4 bits
50 def fn dc(x)=fn u4(x)+fn o4(x)*10:rem wert bei bcd-codierung
60 def fn di(x)=fn dc(peek(x)and127):rem bcd-inhalt von x ohne bit 7
70 def fn h(x)=fn di(td+3):rem stunden
80 def fn m(x)=fn di(td+2):rem minuten
90 def fn s(x)=fn di(td+1):rem sekunden
100 def fn dh(x)=x-int(x/10)*10+int(x/10)*16:rem dezimal nach bcd
110 input"uhrzeit hh,mm,ss";hh,mm,ss
120 ifhh>12thenhh=hh-12
130 poketd+3,fn dh(hh):rem uhr stellen
140 poketd+2,fn dh(mm)
150 poketd+1,fn dh(ss)
160 poketd+0,0
170 print"{clr}"
180 print"{home}"fn h(x)"{left}"fn m(x)"{left}"fn s(x)"{left}"peek(td)"{del}";
190 goto180
Der Super-Autostart
Darauf haben Sie schon lange gewartet: Einen Autostart-Generator, der viele sinnvolle Eigenschaften aufweist. Dazu gehören: Kurzes Listing (sowohl des Generator-Programms als auch des Autostarts selber), einfach in der Anwendung, RUN/STOP-RESTORE- und Reset-Schutz für das fertige Programm und eine eingebaute Codier- und Decodier-Funktion.
Der Autostart-Generator in Listing 6 hat alle genannten Funktionen. Die Anwendung ist äußerst einfach: Abtippen, speichern, absolut laden, »NEW« eintippen. Dann das zu bearbeitende (Basic-)Programm laden und den Autostart mit folgender Zeile aktivieren:
SYS 49152,Code, "Haupt-Name", "Lader-Name"
»Code« ist eine beliebige Zahl zwischen 0 und 255. »Haupt-Name« und »Lader-Name« sind die zukünftigen Namen des codierten Hauptteils beziehungsweise des Lade-Programms auf der Diskette. Der Lader ist später mit »,8,1« in den C 64 zu lesen.
Läßt man »,"Lader-Name"« weg, so wird nur der codierte Hauptteil neu gespeichert (wenn man Änderungen am Hauptteil vorgenommen hat). Wichtig ist dann nur, daß die Code-Zahl des Hauptprogramms mit der des Laders übereinstimmt. Im Zweifelsfall sollte man lieber den alten Lader löschen und beide Teile neu generieren.
PROGRAMM : AUTOSTART C000 C131 ----------------------------------- C000 : 20 FD AE 20 9E B7 8E AC 0A C008 : C0 20 FD AE 20 9E AD 20 1B C010 : A3 B6 8D 6F C0 C9 0D 90 0F C018 : 03 4C 71 A5 20 BD FF 20 83 C020 : 11 C1 A2 08 86 BA 20 35 E5 C028 : C0 A9 2B A6 2D A4 2E 20 4D C030 : D8 FF 4C BF C0 A5 2B 85 04 C038 : FB A5 2C 85 FC A0 00 B1 FA C040 : FB 4D AC C0 91 FB C8 D0 E3 C048 : F6 A5 FC E6 FC C5 2E D0 85 C050 : EE 60 A2 EA 8E 28 03 BD 26 C058 : 77 02 4D 00 03 9D 80 7F 42 C060 : CA 30 F4 A2 04 BD 10 FD 3E C068 : 9D 04 80 CA 10 F7 A9 0C 00 C070 : A2 0D A0 80 20 BD FF A9 14 C078 : 00 85 9D 20 D5 FF 86 2D 78 C080 : 98 A6 2B 86 FB A4 2C 84 A6 C088 : FC 20 57 A6 A8 B1 FB 4D E2 C090 : 00 03 91 FB C8 D0 F6 A5 30 C098 : 2E E7 FC 10 F0 20 53 E4 22 C0A0 : 4C AE A7 E2 FC 5E FE 43 CF C0A8 : 48 44 38 36 00 45 A6 02 B0 C0B0 : 28 43 29 38 36 20 42 59 EB C0B8 : 20 43 48 44 4C 79 00 20 E5 C0C0 : 35 C0 20 79 00 C9 2C D0 2D C0C8 : F3 20 73 00 20 9E AD 20 96 C0D0 : A3 B6 C9 00 D0 05 A2 08 11 C0D8 : 4C 37 A4 20 BD FF A2 52 F8 C0E0 : A0 C0 86 AC 84 AD A2 BC D1 C0E8 : A0 C0 86 AE 84 AF A9 61 8F C0F0 : 85 B9 20 D5 F3 20 8F F6 81 C0F8 : A9 08 20 B1 FF A9 61 20 F7 C100 : 93 FF A9 A6 20 DD ED A9 CE C108 : 02 20 DD ED A0 00 4C 24 D3 C110 : F6 86 FB 84 FC A8 88 B1 73 C118 : FB 4D AC C0 99 B0 C0 88 30 C120 : 10 F5 A0 03 B9 A3 C0 4D 0A C128 : AC C0 99 A3 C0 88 10 F4 8A C130 : 60 22