Das Directory einer Diskette, während ein Programm abläuft, anzuzeigen, bereitet auf dem Commodore 64 größere Schwierigkeiten. Das kleine Maschinenprogramm »Catalog« schafft das leicht und elegant.
Bekanntlich kann man das Directory nicht laden, ohne das im Speicher befindliche Programm zu löschen. Es gibt zwar diverse Tricks durch Verbiegen der Speichervektoren, diese führen aber manchmal zum Datenverlust, weil das Directory unglücklicherweise bis in den Variablenbereich langte. Programme in Basic, wie das auf der Demodiskette, die diesen Fehler beheben sollen, sind nervenaufreibend langsam. Jede Basic-Erweiterung besitzt einen Befehl zum Anzeigen des Directory auf dem Bildschirm, der auch mit einer passablen Geschwindigkeit ausgeführt wird. Nur, warum soll man immer umständlich eine Erweiterung laden, wenn man doch nur den einen Befehl verwenden möchte? Durch unser kleines Programm »Catalog« kommen Sie auch in den Genuß dieses Befehles, und zwar ohne viel Speicherplatz zu verschwenden, denn die Länge des Programms ist sensationell zu nennen: Es belegt nur 108 Byte.
Vor dem ersten Aufruf müssen Sie es durch »SYS 52000« initialisieren. Danach verfügen Sie über einen neuen Befehl, nämlich»—«. Der Pfeil nach links wurde gewählt, weil er nur selten benutzt wird. Falls Ihnen ein anderes Zeichen sympathischer ist, brauchen Sie nur den neunzehnten Wert im DATA-Lader (momentan 95) durch den ASCII-Wert des neuen Zeichens zu ersetzen. Beachten Sie bitte dabei, daß sich die Prüfsumme dadurch ändert. Geben Sie das Listing daher erst so ein, wie es abgedruckt ist. Da das neue Zeichen als Befehl interpretiert wird, sollten Sie bei seiner Wahl sehr vorsichtig sein, sonst erscheint das Directory und Sie wissen nicht warum.
Speichern Sie es und probieren Sie, ob alles korrekt läuft. Dann lassen Sie die Prüfsumme weg und setzen den neuen Zahlenwert ein. Falls Sie das MSE-Listing verwenden, gilt das gleiche, nur benötigen Sie zum Ändern einen Monitor, der nicht im $C000-Bereich liegt. Ändern Sie das entsprechende Byte und speichern Sie die Directory-Routine mit neuen Namen. Wenn Ihnen das zuviel Mühe macht, können Sie natürlich auch den entsprechenden ASCII-Code nach dem Laden in die Speicherzelle 52018 schreiben.
Das Programm beginnt wie angegeben bei $CB20 und ist nicht relokatibel (verschiebbar), das heißt es arbeitet nur korrekt, wenn es an dieser Adresse liegt. Nach dem Initialisieren durch »SYS 52000« arbeitet es sowohl im Direktmodus als auch innerhalb eines Programms. Wenn ein Fehler auftritt, erscheint nochmals das vorher angezeigte Directory, und die rote LED blinkt. Dasselbe geschieht auch, wenn das Laufwerk nicht angeschaltet ist. Achten Sie darauf, wenn Sie gleich danach einen Diskettenzugriff planen, denn das angezeigte Directory entspricht dann nicht dem der Diskette im Laufwerk. Einen Fehler erkennt man daran, daß die Meldung »Loading« nicht erscheint.
(Andre Weber/gn)
Steckbrief
Programm: Catalog
Computer: C 64, C 128
Checksummer: V3 / MSE
Datenträger: Diskette
Name : catalog cb20 cb8cE5
cb20 : a9 2b a2 cb 8d 08 03 8e c3
cb28 : 09 03 60 20 73 00 f0 04 d2
cb30 : c9 5f f0 03 4c e7 a7 20 28
cb38 : 73 00 20 40 cb 4c ae a7 e5
cb40 : a9 24 85 02 a9 01 a2 02 ce
cb48 : a0 00 20 f9 fd a9 02 a6 b2
cb50 : ba a0 00 20 00 fe a9 00 fd
cb58 : a2 00 a0 40 86 5f 84 60 61
cb60 : 20 d5 ff a5 5f a4 60 20 fc
cb68 : 37 a5 ad 00 03 48 ad 01 08
cb70 : 03 48 a9 3d 8d 00 03 a9 e2
cb78 : e3 8d 01 03 20 c3 a6 68 4e
cb80 : 8d 01 03 68 8d 00 03 a9 94
cb88 : 5f 4c ae a7 00 ff 00 ff ae
Listing 1. Bitte mit dem MSE eingeben
100 REM CATALOG VON ANDRE WEBER <004>
110 : <086>
120 FOR A=52000 TO 52107:READ DA:IF DA=-1 THEN PRINT"ZU WENIG DATAS!!":END <223>
130 PS=PS+DA:POKE A,DA:NEXT <174>
140 IF PS<>10850 THEN PRINT"FEHLER IN DEN DATAZEILEN":END <253>
150 PRINT"ALLES OK ! ANSCHALTEN MIT SYS 52000" <179>
160 SYS 52000 <016>
170 END <172>
180 : <156>
32000 DATA 169,43,162,203,141,8,3,142,9,3,96,32,115,0,240,4,201,95,240,3,76,231 <209>
32001 DATA 167,32,115,0,32,64,203,76,174,167,169,36,133,2,169,1,162,2,160,0,32 <097>
32002 DATA 249,253,169,2,166,186,160,0,32,0,254,169,0,162,0,160,64,134,95,132 <120>
32003 DATA 96,32,213,255,165,95,164,96,32,55,165,173,0,3,72,173,1,3,72,169,61 <244>
32004 DATA 141,0,3,169,227,141,1,3,32,195,166,104,141,1,3,104,141,0,3,169,95,76 <061>
32005 DATA 174,167,-1 <002>
Listing 2. Verwenden Sie bitte den Checksummer