April 1993

Meinungen, Programme und Hardware

Programmprojekte

Autor: Sven Friedrichs



Giga-Print V2.0 (Fehlerbeschreibung)

"Giga-Print V2.0" ist zur Zeit das Druckprogramm für den C64 schlechthin, denn bis jetzt kann wahrlich kein anderes Programm an dessen Leistung heranreichen. Leider ist den Programmierern ein kleiner Fehler unterlaufen, der sich auf der 1541/71 netterweise nicht bemerkbar macht.

Es geht hierbei um die Option "XY-Files", die das gesamte Directory unabhängig vom jeweiligen Suffix (f'; g'; c'; d') zur Auswahl stellen soll. Während eine 1541 diese Aufgabe anstandslos erledigen würde, meldet die 1581 unbeeinflußt von der tatsächlichen Anzahl der Programme auf Diskette: "Keine Files vorhanden". Die Ursache hierfür liegt in einer abgeänderten Abkürzroutine (auch Wildcard-Routine genannt) des 1581-Kernals. Zur Veranschaulichung sind hier einige Beispiele zum Gebrauch der alten 1541/71 Abkürzroutine:

a) load'*',8
b) load'musicm*',8
c) load'* ',8 (1581: file not found error)
d) load'musicm*yntax err',8 (1581: file not found error)

Auf der 1581 führen nur noch die Programmaufrufe a) und b) zum Erfolg, da dieses Laufwerk alle Zeichen bis zum zweiten Anführungszeichen mit berücksichtigt. Das Sternchen verliert auf der 1581 somit seine eigentliche Funktion und ein 'file not found error' wird ausgegeben. Bei Giga-Print verhält es sich ähnlich, nur daß hier der Directoryaufruf eine besondere Rolle spielt.

Giga-Print V2.0 (Intern)

Um das Directory von Giga-Paint-Grafiken zu laden, benutzt Giga-Print an der Adresse $656a den Filenamen: S-1$:G'*S-0. Sollen jedoch alle Files gelistet werden, so wird der Filename in: S-1$:*'*S-0 umgeändert. Nach dem ersten Sternchen folgt also noch ein zweites Zeichen, welches für ein Nichtauffinden des Directorys verantwortlich ist.

Nachdem der Fehler lokalisiert worden war, wurde im freien Speicher ab $6659 eine kleine Routine eingefügt, die zunächst abfragt, ob an der dritten Stelle des Directoryfilenamens ein Sternchen auftritt. Ist dies der Fall, so wird die Länge des Filenamens von fünf ($:*'*) auf drei reduziert ($:*) und die 1581 zeigt nun auch das gesamte Directory an.

Giga-Print V2.0 (Lösung)

Um diesen Fehler zu beseitigen, laden Sie nun einen Maschinensprachemonitor, wie z.B. 'Final Mon V3.2' aus 64'er 11/92, oder benutzen Sie den im Action Replay bereits eingebauten Ms-Monitor. Nun müssen folgende Arbeitsschritte durchgeführt werden:

l"pr1",08 Hauptprogramm von $0810 bis $47d8

a 4470 20 59 66 jsr $6659 Spring neue Routine an
a 4710 8d 86 02 sta $0286 Befehl aus $4470
a 4713 ad 6c 65 lda $656c liest 3.Stelle des Dirnamens
a 4716 c9 2a cmp ~$2a vergleicht ob '*'
a 4718 d0 06 bne $4720 wenn nicht, dann $4720
a 471a a9 03 lda ~$03 wenn ja, dann Dirname nur
a 471c 8d c4 63 sta $63c4 noch 3 Zeichen ($:*)
a 471f 60 rts
a 4720 a9 05 lda ~$05 Dirname wird wieder 5
a 4722 8d c4 63 sta $63c4 Zeichen lang.
a 4725 60 rts
s"pr1",08,0810,47d8 speichern auf Laufwerk 8
oder
s"pr1",09,0810,47d8 speichern auf Laufwerk 9

Wird keine neue Diskette zum Speichern von "pr1" verwendet, so muß es vorher gelöscht werden.

Um Mißverständnissen vorzubeugen, sollte ich vielleicht noch erwähnen, daß 'pr1' beim Laden von Giga-Print im Speicher zumindest teilweise verschoben wird. Die Adresse $4710 entspricht danach auch wirklich $6659.




Inhalt

   
Zurueck