Monatsarchive: Juli 2012

Distichon 2012 (Multiplattform Game)

In den letzten Wochen habe ich meinen Beitrag zur 4k BASIC Compo von 2009 übearbeitet und zudem eine Englische Version erstellt. Nach wie vor werden alle Commodore-Rechner mit 40-Zeichen-Darstellung vom PET über CBM 3/4/8001 Series, CBM 510, C16/C116/Plus4 und C64 bis zum C128 unterstützt. Zur Auswahl der gewünschten Sprache wurde ein kleines Vorprogramm erstellt. Die einzelnen Sprachversionen sind aber auch eigenständig lauffähig.

Distichon Sprachauswahl
Das Vorprogramm zur Sprachauswahl, hier auf einem (emulierten) Plus4

Das aktuelle Update behebt auch die Probleme mit den vertauschten Gross- und Kleinbuchstaben im Textzeichensatz des PET 2001 und ermöglicht die Nutzung des Spiels auf einem CBM 8016/8032 durch Umschaltung auf 40-Zeichen-Darstellung. Das Programm kann man auf MySoft128.de als gezipptes D64 downloaden.

Veröffentlicht unter C128, C64, CBM | 2 Kommentare

Unnützes Wissen (1): LOAD & PEEK

Bei einem Programmierprojekt, das auf verschiedenen Commodore-Rechnern laufen soll, bin ich über ein Phänomen gestolpert, das man nicht wirklich kennen muss. Daher erklärt sich dann auch die Überschrift dieses Blogbeitrags. Die Numerierung ist dabei rein spekulativ; wer weiß schon, was die Zukunft bringt?

Commodore-BASIC erlaubt es, aus einem Programm heraus weitere Programmteile (z.B. Assembler-Code, Zeichensätze, oder Daten) nachladen zu können. Hier soll aber nicht auf die dazu erforderliche Technik eingegangen werden (das wäre ja auch kein unnützes Wissen), sondern auf einen kleinen Unterschied zwischen den Rechnern der CBM2-Reihe und dem Rest der Commodore-8-Bitter-Welt.

Um Programmteile erfolgreich nachladen zu können, ist es erforderlich, das zuvor benutzte Laufwerk (Device) identifizieren zu können. Wie oft hat man sich geärgert, dass ein Programm nur mit dem Laufwerk #8 zusammenarbeitet und stur immer nur von diesem seine Daten nachladen will! Dabei bieten Commodore-Rechner in der Zeropage eine Adresse an, in der die zuletzt genutzte Devicenummer (FA) abgelegt wird. Wird diese Möglichkeit richtig genutzt, kann das Programm von jedem beliebigen Gerät aus erfolgreich verwendet werden.

Die Zeropage-Adresse (FA) ist natürlich Rechnerabhängig: PET 2001: 241 ($F1); CBM 3001/4001/8001: 212 ($D4); CBM2 (CBM 510/6X0/7X0): 159 ($9F); C16/C116/Plus4: 174 ($AE); C64/C128: 186 ($BA).

Um eine Datei vom selben Laufwerk (Device) wie das Programm nachzuladen, sollte also ein einfaches LOAD“DATEINAME„, PEEK(FA) genügen. Die folgende Abbildung zeigt, dass das manchmal, jedoch keineswegs immer der Fall ist:

LOAD-Phaenomen

Der Trick gelingt beim CBM 510 (links) problemlos. Das ist allerdings die Ausnahme und nicht die Regel. Wie der gleiche Versuch am C64 (rechts) zeigt, versuchen andere Commodore-Rechner auf das Tape (Device #1) zuzugreifen. Der C64 verhält sich hier wie alle PET und CBM-Rechner, wie Plus4 und C128.

Die Lösung ist ein zweistufiges Vorgehen: UN=PEEK(FA):LOAD“DATEINAME„, UN

Hintergrund des seltsamen „Vergessens“ der zuvor genutzten Devicenummer beim LOAD-Befehl ist der Befehl selber. Er setzt gleich beim Aufruf das Tape (Device #1) als Standarddevice, also das Gerät, dass bei Weglassen der Devicenummer verwendet wird (und ändert damit den Inhalt von FA). Dies erfolgt bevor der PEEK-Befehl ausgeführt wird, der daher nicht mehr das gewünschte Ergebnis liefern kann. Nur in der CBM2-Reihe wurde dieser Fehler behoben.

Nachtrag (08.10.2012):
Teil 2: DATA … Lost in Space

Veröffentlicht unter C128, C64, CBM | 1 Kommentar