Archiv der Kategorie: C64

MPP 2: Zeropage, oh, Zeropage

Unlängst habe ich über Möglichkeiten zur Unterscheidung verschiedener Commodore-Rechner geschrieben. Heute geht es darum, diese Informationen zu nutzen, um Programme entwickeln zu können, die sich unterschiedlicher Hardwarebasis anpassen können. Für die weiteren Beschreibungen beschränke ich mich auf die 8-Bit-Rechner mit 40-Zeichen-Darstellung (PET, CBM, P500, C64, Plus4, C128), da ansonsten der Aufwand für die Anpassung der Bildschirmdarstellung zu groß wäre bzw. die Darstellungsmöglichkeiten zu stark einschränken würden.

Unabhängig von später zu behandelnden Sonderfällen, die durch individuelle Eigenheiten oder spezifische Inkompatibilitäten einzelner Rechnertypen ausgelöst werden, gibt es einige Unterscheidungsmerkmale, die alle (oder zumindest mehrere) Rechner betreffen und die im Programm am Besten über das Vorbelegen einer Variable mit einem jeweils systemspezifischen Wert gelöst werden müssen. Ich nenne das jetzt hier einfach mal eine Systemvariable. Was sich hier kompliziert anhört, wirkt in einem Beispiel ganz simpel und verständlich: Anstatt mit POKE 1024,0 im linken oberen Bildschirmeck eines C64 einen Klammeraffen erscheinen zu lassen, verwendet man eine Variable: P=1024 und einen flexiblen POKE-Befehl: POKE P,0. Durch Anpassen des Werts der Variable P für verschiedene Systeme kann der POKE-Befehl auf allen Rechnern im linken oberen Eck den gewünschten Klammeraffen erzeugen.

Neben dem Basiswert des Bildschirmspeichers könnten auch Werte für I/O-Register als Systemvariable interessant sein, um zum Beispiel die Hintergrund- und Rahmenfarbe festlegen zu können:

Computer Screen-RAM Color-RAM Hintergrundfarbe Rahmenfarbe
PET 2001 32768
CBM 3/4/8001 Series 32768
P 500 / CBM 500 53248 54272 55329 55328
C 64 / SX 64 1024 55296 53281 53280
C16 / C116 / Plus 4 3072 2048 65301 65305
C 128 / C 128 D 1024 55296 53281 53280

Eine weitere Spielwiese ist die Belegung der „Zeropage“. Bei Commodore-Rechnern ist die Besonderheit zu beachten, dass mit dem Begriff Zeropage oft die „erweiterte Zeropage“, also der Bereich bis $03ff (beim C128 sogar bis $12ff), angesprochen wird und nicht nur die Zeropage, wie sie die CPU sieht. Und so soll der Begriff auch hier verstanden werden. Wobei klar sein muss, dass der Begriff „erweiterte Zeropage“ technisch gesehen Unsinn ist. Möglicherweise hat Commodore (oder eigentlich Microsoft) diesen Begriff dadurch provoziert, dass beim ROM-Update vom PET 2001 zu den Rechnern der CBM 3001 Series diverse Kernel- und BASIC-ROM-Variable und -Zeiger aus der Zeropage in den Bereich ab $0200 bis $033a verlegt wurden und umgekehrt. In jedem Fall war ein Begriff für den Gesamtbereich des von Kernel und BASIC benötigten RAM-Speichers erforderlich.

In der (erweiterten) Zeropage finden sich Daten zur zuletzt genutzten Peripherie (Gerätenummer für Nachladeoperationen), zu Tastatureingaben (Tastaturpuffer und Zeiger in den selben), Sprungektoren, z.B. für den IRQ, und vieles mehr. Die nachfolgende Tabelle listet einige dieser Daten in einer synoptischen Darstellung für die hier betrachteten Geräte auf:

Label PET 2001 CBM 3/4/8001 P 500 C 64 Plus 4 C 128
FA 241 212 159 186 174 186
NDX 525 158 209 198 239 208
STKEY 521 155 169 145 145 145
KEYD 527 623 939 631 1319 842
SFDX 515 151 205 203 198 212
LSTX 547 166 225 215 2038 213
SHFLAG 516 152 (224) 653 1347 211
RPTFLG (228) 650 1344 2594
PNT 224/225 196/197 200/201 209/210 200/201 224/225
PNTR 226 198 203 211 202 236
TBLX 245 216 202 214 205 235
IIRQ 537/538 144/145 768/769 788/789 788/789 788/789
TBUFFR 634/826 634/826 (1024) 828 819 2816

FA: Aktuelle Gerätenummer – Diese Adresse ist relevant für alle Programme, die andere Programmteile nachladen. So können Kassetten- und Diskversionen unterschieden werden und das Nachladen erfolgt immer vom richtigen Laufwerk.

NDX: Anzahl der Zeichen im Tastaturpuffer (Warteschlange) – Durch Beschreiben mit dem Wert Null (0) wird der Tastaturpuffer „gelöscht“.

KEYD: Tastaturpuffer – In der Regel umfasst der Tastaturpuffer 10 Zeichen.

STKEY: Flag für STOP-Taste – Bei einigen Rechnern kann hier auch die RVS-Taste abgefragt werden. Prinzipiell stehen die 8 Bits für 8 Tasten. Welche das sind, ist jedoch systemspezifisch (abhängig von der Verdrahtung der Tastaturmatrix); nur die STOP-Taste ist immer dabei.

SFDX: Nummer der augenblicklich gedrückten Taste – In der Regel systemspezifische Indexnummer in die Tastaturdekodiertabelle. Bei CBM-Rechnern mit neuen ROMs, neuem Board und CRTC-Chip (40xx/80xx) ist es allerdings der dekodierte PETSCII-Code. Wer es in VICE testen will, kann dazu den 4032 (neue ROMs) mit dem 4032B (alte ROMs) vergeichen.

LSTX: Nummer der zuletzt gedrückten Taste – Analog zu SFDX.

SHFLAG: Flag für SHIFT-Taste – Neben der SHIFT-Taste werden hier (sofern vorhanden) auch die Tasten CONTROL und COMMODORE durch ein Bit repräsentiert. Beim P 500 beeinflussen auch andere Tasten den Inhalt dieser Speicherzelle.

RPTFLG: Ermöglicht Tastenwiederholung – Dieses Flag bestimmt die Art der Repeatfunktion: $80 = aktiv für alle Tasten, $40 = keine Tasten, $00 nur für Cursorsteuerung. Bei den CBM-Rechnern hat nur der CBM 80xx eine Repeatfunktion. Beim P 500 konnte ich das Flag nicht zweifelsfrei identifizieren.

PNT: Zeiger auf aktuelle Zeile (Text) – Pointer auf den Zeilenanfang.

PNTR: Aktuelle Cursor-Spalte

TBLX: Aktuelle Cursor-Zeile

IIRQ: IRQ-RAM-Vektor – Über diesen Vektor werden eigene Interruptgesteuerte Routinen eingebunden.

TBUFFR: Kassettenpuffer – Immer wieder beliebt für kleine, unterstützende Assemblerroutinen.

Üblicherweise werden nur wenige der hier aufgeführten Systemvariablen in die Systemerkennungsroutine integriert werden. Dafür kommen noch ein paar systemspezifische Systemadressen hinzu, die jeweils nur für ein Rechnersystem relevant sind, um dort Sonderfunktionen auslösen bzw. steuern zu können. Darüber wird allerdings erst im nächsten Teil berichtet.

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

MPP 1: Identifizieren Sie sich!

Der Erste Schritt bei der Multiplattform-Programmierung besteht im Erkennen des Computersystems. Denn bei aller Ähnlichkeit zwischen den Commodore 8-Bit-Rechnern, gibt es doch genügend Unterschiede, die es zu beachten gilt. Zur Unterscheidung sind spezifische und unverwechselbare Kriterien heranzuziehen. Ein Beispiel für eine automatische Rechnererkennung ist die Routine die sauhund im Forum64 gepostet hat.

Wenn man auf Details, wie den RAM-Ausbau beim VC20 oder die Unterscheidung zwischen C16 und Plus4 verzichten kann, geht es aber auch einfacher. Statt diverse Adressen zu prüfen, genügt es, sich auf eine zu beschränken, die bei allen Rechnern unterschiedlich ausfällt aber bei allen ROM-Varianten identisch ist. Eine vertiefende Analyse läßt sich dann in den erforderlichen Fällen noch nachträglich durchführen.

Am Ende des ROMs finden sich gleich zwei geeignete Kandidaten für einen Rechnercheck. Nach meinen bisherigen Recherchen sind IRQ- (Puls) und RESET-Vektor bei jedem Commodore-Rechner unterschiedlich jedoch für verschiedene ROM-Versionen eines Rechners immer identisch. Zur Identifizierung genügt es, das Low-Byte des Vektors zu prüfen. Ich persönlich bevorzuge dabei den IRQ-Vektor, für irgendetwas muss man sich ja mal entscheiden.

Computer IRQ LB (hex) LB (dez) RESET LB (hex) LB (dez)
PET 2001 $E66B $6B 107 $FD38 $38 056
CBM 3001 $E61B $1B 027 $FCD1 $D1 209
CBM 4001/8001 $E442 $42 066 $FD16 $16 022
P 500 / CBM 500 $FBE5 $E5 229 $F99E $9E 158
CBM 600 / 700 $FBD6 $D6 214 $F997 $97 151
VC 20 $FF71 $72 114 $FD22 $22 034
C 64 / C64 SX $FF48 $48 072 $FCE2 $E2 226
C 16 / C 116 / Plus 4 $FCB3 $B3 179 $FF6F $F6 246
C 128 / C 128 D $FF17 $17 023 $FF3D $3d 061

Tabelle der Systemvektoren IRQ und RESET für alle Commodore-8-Bit-Rechner

Der IRQ-Vektor liegt bei $FFFE/FFFF, der RESET-Vektor bei $FFFC/FFFD im ROM; wie bei der CPU 6502 üblich im Format LSB/MSB (Low-Byte/High-Byte bzw. LB/HB). Mittels PEEK lässt sich der gewünschte Wert auslesen. PEEK(65534) liefert das Low-Byte des IRQ-Vektors, PEEK(65532) den des RESET-Vektors. Beim Commodore Plus 4 (und C16 / C116) muss zuvor allerdings noch das ROM eingeblendet werden, was einen kleinen schmutzigen Trick erfordert. Man kann ihn in Zeile 130 des nachfolgenden Listings finden:

100 rem *** cbm checker a (wte) ***
110 :
120 cbm=peek(65534): pet=0: c$=“commodore “
130 if peek(1177)=63 then poke1177,62: cbm=peek(65534): poke1177,63
140 rem 2001,3001,4001,p500,cbm600/700,vc20,c64,c16/p4,c128
150 restore:data 107, 27, 66, 229, 214, 114, 72, 179, 23
160 ix=0: for i=1 to 9: read a:if a=cbm then ix=i: i=9
170 next: on ix gosub 240, 260, 280, 340, 360, 380, 400, 420, 440
180 if ix then 460
190 print
200 print „not supported system!“
210 print „dieser computer wird nicht unterstuetzt!“
220 end
230 :
240 a$=“2″: goto300
250 :
260 a$=“3″: goto300
270 :
280 a$=chr$(52-(peek(224)=0)*4)
290 :
300 if a$<„4“ then poke59458,peek(59458) or 32:rem killer poke (fast poke)
310 a$=mid$(„pet cbm „,5+(a$=“2″)*4,4)+a$
320 pet=59468: c$=c$+a$+“001 series“: return
330 :
340 c$=c$+“p500/cbm510″: return
350 :
360 c$=c$+“600/700 series“: return
370 :
380 c$=c$+“vic20/vc20″: return
390 :
400 c$=c$+“64″: return
410 :
420 c$=c$+“c16/c116/plus4″: return
430 :
440 c$=c$+“128″: graphic 0: slow: return
450 :
460 print chr$(147)chr$(142): if pet then poke pet,12
470 print „this program is running on a“
480 print c$: print
490 print „dieses programm laeuft auf einem“
500 print c$: print: end

Variante A der Systemerkennung. Rechnerspezifische Details werden über ON / GOSUB definiert

100 rem *** cbm checker b (wte) ***
110 :
120 cbm=peek(65534): c$=“commodore “
130 if peek(1177)=63 then poke1177,62: cbm=peek(65534): poke1177,63
140 restore
150 rem 2001,3001,4001,p500,cbm600/700,vc20,c64,c16/p4,c128
160 data 107, pet 2001 series, 1, 1, 0
170 data 27, cbm 3001 series, 1, 1, 0
180 data 66, cbm 4001 series, 1, 0, 0
190 data 229, p500/cbm510, 0, 0, 0
200 data 214, 600/700 series, 0, 0, 0
210 data 114, vic20/vc20, 0, 0, 0
220 data 72, 64, 0, 0, 0
230 data 179, c16/c116/plus4, 0, 0, 0
240 data 23, 128, 0, 0, 1
250 :
260 ix=0: for i=1 to 9
270 read a, a$, pet, kp, c128
280 if a=cbm then ix=i: i=9
290 next
300 if ix then 370
310 :
320 print
330 print „not supported system!“
340 print „dieser computer wird nicht unterstuetzt!“
350 end
360 :
370 if kp then poke59458,peek(59458) or 32:rem killer poke (fast poke)
380 if kp<>pet then if peek(224)=0 then a$=“cbm 8″+mid$(a$,6)
390 c$=c$+a$: if c128 then graphic 0: slow
400 :
410 print chr$(147)chr$(142): if pet then poke 59468,12
420 print „this program is running on a“
430 print c$: print
440 print „dieses programm laeuft auf einem“
450 print c$: print: end

Variante B der Systemerkennung. Rechnerspezifische Details werden über DATA-Statements definiert

Wer den Quellcode genau studiert, wird feststellen, dass für die Rechner der CBM 8000er Reihe, die den gleichen IRQ-Vektor haben wie die 4000er, eine zusätzliche Detailprüfung implementiert wurde. Über die Speicherstelle $E0 (224) in der Zeropage kann man leicht erkennen, welchen Rechner (8001 Series: 0 / 4001 Series: 128) man vor sich hat.

Beide Varianten der Rechnererkennung haben ihre Vor- und Nachteile und stehen hier nur beispielhaft für zwei Möglichkeiten das Problem anzugehen [die Programme können als Text- und PRG-Dateien (gezippt) für Testzwecke heruntergeladen werden]. Da sich meine Multiplattform-Programme in der Regel auf die Rechner mit 40-Zeichen-Darstellung beschränken, lasse ich in der Praxis die Erkennung von CBM 600/700 und VC 20 „unter den Tisch fallen“ und erkläre sie zu „nicht unterstützten Systemen“. Und natürlich muss der Identifizierung auch eine ausgefeilte Differenzierung folgen (hier angedeutet durch den „Killer-POKE“ und die BASIC 7-Befehle GRAPHIC und SLOW). Doch dazu berichte ich später mehr.

Veröffentlicht unter C128, C64, CBM, Soft | Ein Kommentar

Multiplattform Programmierung

Als der C64 im Jahr 1982 auf den Markt kam, hatte er ein Problem nicht: fehlende Software. Zwei ganz wesentliche Eigenschaften waren dafür verantwortlich: zum einen das Commodore BASIC 2.0, das die sprachbarrierenfreie Übernahme der bereits für ältere Commodore-Rechner (PET 2001, CBM und VC20) geschriebene Programme ermöglichte und zum anderen der über POKE-Befehle direkt beschreibbare Bildschirm mit 25 Zeilen zu 40 Zeichen (dem Format von PET 2001 und CBM 3001/4001 Series). Nahm man von beidem die Schnittmenge, so ergab sich, dass alles was als BASIC-Programm auf einem CBM-Rechner mit 40-Zeichen-Bildschirm lief, mit wenig Aufwand auf einen C64 übertragbar war.

Zwar bot der C64 mit Farbe, Grafik und Sound viele zusätzliche Möglichkeiten und natürlich lagen der Bildschirmspeicher und auch die für BASIC wichtigen Zeropage-Adressen an anderen Stellen im RAM, aber insgesamt war die Umstellung vom CBM auf den C64 nicht problematischer als die vom PET 2001 auf CBM 3001 Series. [Die stellte für Commodore sicher auch keine große Herausvorderung dar, aber ich erinnere mich noch mit Grausen an meine Probleme, denn mir fehlte damals jede Dokumentation.]

Spielanleitung ‘FROSCH’ Szene ‘FROSCH’

Eines der bekanntesten Beipiele für ein umgestelltes Programm ist sicher „FROSCH“ (Original Titel: „Back to Nature„) von der deutschen 1541-Demodiskette [Inhalt und Download]. Wie man an der Spielanleitung noch erkennt, wurde das Spiel ursprünglich für einen CBM-Rechner mit 40-Zeichen-Bildschirm und separatem Ziffernblock geschrieben (Autor: Bob Carr; veröffentlicht im CURSOR Magazine). Außer ein bißchen Farbe hat die C64-Version auch noch ein paar Geräusche bekommen. Doch allein durch einfaches Ändern der in Zeile 0 definierten Bildschirmadresse kann man, mit einigen Abstrichen, das Programm jederzeit auf einem CBM-Rechner ausführen.

Die Portierung von CBM-Programmen auf die Nachfolgegeräte (C64 /C128) hat also eine lange Tradition. Auch von mir gibt es dazu einige vor langer Zeit programmierte Beipiele (Wumpus, Wator). Im Zuge einer 4k BASIC Compo im Forum64 hatte ich mich (im Jahr 2009) des Themas mal wieder angenommen, besaß ich doch noch ein paar simple auf einem CBM 4008 programmierte BASIC-Spielchen auf Diskette, die außer mir noch kein Mensch gespielt hatte. Was lag da also näher, als sich an fertigen Programmen zu bedienen, anstatt sich neue Ideen abzuquälen.

Ich entschied mich damals für die Portierung von „Distichon„. Da noch genügend Bytes verfügbar waren, konnte ich allerdings gleich Nägel mit Köpfen machen und baute das Programm als Multiplattform-Game auf. Neben dem C64 wurden so auch CBM-Rechner (2001, 3001/4001 Series), der CBM 510 (aka P 500) aus der CBM2-Serie und der Plus 4 (C16/C116) bedient. Die bei der Compo noch bestehenden Limitierungen wurden jetzt mit einer Aktualisierung behoben (so dass nun auch die CBM 8001 Serie unterstützt wird).

Ein weiteres BASIC-Spiel (Isola) mit vergleichbarem „Migrationshintergrund“, habe ich für die letztjährigen C128 4kGame Coding Compo erstellt. Vermutlich mangels Teilnehmer ist es aber irgendwie nie zu einer Veröffentlichung der eingereichten Beiträge gekommen. Auch „Isola“ wird zu einem Multiplattform-Game weiterentwickelt. Ähnliches ist auch für das Spiel Canyon-Bomber geplant, das ich für die Compo auf der Bunkerparty 2012 vom CBM 4008 auf C64 portiert hatte (wobei hier zusätzlich einige Assemblerroutinen umzustellen waren).

Langer Rede kurzer Sinn: Im Laufe der Zeit hat sich so einiges an Informationen angesammelt, die es verdienen, hier dokumentiert zu werden. Es soll beleuchtet werden, wie man die einzelnen Rechner identifiziert und welche Besonderheiten zu berücksichtigen sind, wie kompatibel BASIC 2.0 mit sich selber ist, wie zickig sich 40-Zeichen-Bildschirme verhalten können und welche Gemeinheiten sonst noch so lauern. Wenn man all das beachtet, ist es jedoch keine große Kunst mehr ein Programm so aufzusetzen, dass es auf allen 40-Zeichen-Rechnern lauffähig ist.

Teil 1: Identifizieren Sie sich! – Auf welchem Computer läuft mein Programm?
Teil 2: Zeropage, oh, Zeropage – Synopse wichtiger Adressen im RAM
Teil 3: Jedem seine Extrawurst – Das Individuum fordert sein Recht
Teil 4: Immer im Takt – Die CPU (und BASIC): mal schnell, mal langsam
Teil 5: Abwärtskompatibel (zu BASIC 2.0) – Es ist gleich, doch nicht dasselbe
Teil 6: Das vierzigste Zeichen – Wie Fortschritt zum Problem wird

PS: Tokra hat mich darauf aufmerksam gemacht, dass es für den VC 20 einen PET-Simulator mit einer 40-Zeichen-Anzeige gibt. Und natürlich kann auch der VDC im C128 in einen 40-Zeichen-Modus geschaltet werden. Trotzdem werden beide Modi von meinen Multiplatformprogrammen nicht unterstützt. Diese Sonderfälle zu erfassen, würde sicher ein oder zwei Kilobyte zusätzlichen Programmcode erfordern. Da ich die Programme aber so klein halten will, dass sie auch auf einem CBM-Rechner mit nur 8K RAM lauffähig sind, ist das nicht umsetzbar. Was nicht heißen soll, dass es im Einzelfall nicht doch eine Spezialversion für den VDC im C128 geben wird.

Veröffentlicht unter C128, C64, CBM, Soft | Ein Kommentar

Canyon Bomber 65%

Cracker sind auch nicht mehr das, was sie mal waren. Ein für mich vollkommen neues Erlebnis haben mir die zwei Lahmer von Really Proud Lamers beschert. Immerhin benennen Sie sich passend. Mein Beitrag zur C64 Mixed-Compo der Bunkerparty, Canyon Bomber 65%, wurde binnen kürzester Zeit „gecrackt“!

Canyon Bomber 65% als ‘gecrackte’ Version

Die „Leistung“ der Cracker bestand darin, die deutschen Texte irgendwie ins Englische zu übersetzen und das ganze zu einem One-Filer zu verbinden. Großartig. Ich weiß jetzt nur noch nicht so recht, ob ich mich beleidigt oder geehrt fühlen soll. Beleidigt, weil sowas als „Crack“ bezeichnet wird (seit wann kann man freie Software cracken?) und geehrt, weil jemand das Spiel für Wert hält, übersetzt zu werden.

Wie auch immer, vielleicht kann ich sogar ein paar Worte dieses Machwerks für meine eigene Übersetzung verwenden. Schließlich soll ja auch dieses Spiel irgendwann als zweisprachige Multiplattform-Version (CBM, C64, C128, Plus4) veröffentlicht werden.

Veröffentlicht unter C64, Compo | Schreib einen Kommentar

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 | Ein Kommentar

Dunkle Höhlen – leerer Weltraum

C64-Textadventures – uralter Kram? Weit gefehlt! Schon seit einigen Jahren publiziert Eway 10 Software eine Reihe von Spielen diesen Genres auf Daten-Kassetten. Jetzt gibt es zusätzlich alles auf Diskette und in limitierter Auflage auch als „Games Complilation“. Für diese sogenannte Gold-Version wurden die Spiele überarbeitet und erweitert. Einen Vorgeschmack gab es auch als Dreingabe in der letzten Digital Talk.

Eway 10 Games Compilation

Ich habe mir das volle Programm gegönnt und heute lag es im Briefkasten. Natürlich habe ich gleich mal das erste Adventure, Die Höhle, angespielt und saß nach einer halben Stunde immer noch vor dem Eingang fest. Es ist eine totale Umstellung von heutigen Spielen zu diesen neuen „Klassikern“. Das hält mich aber nicht auf. Es wird schon noch werden, denn Übung mach den Meister!

Veröffentlicht unter C64, Soft | Ein Kommentar

Schlonkelmania: The Lost Caves 6

Heute kam ich wieder nicht dazu, mir die Digital Talk vorzunehmen, lag da doch ein Päckchen mit „The Lost Caves 6 – For A Fistful Of Diamonds“ von Schlonkel im Briefkasten. Wie immer vollkommen kostenfrei, aber erstmals gleich mit Lösungs-DVD (Schande über mich, aber die hatte ich eher im PC als die Diskette im C128) und als Zugabe noch ein schöner C64-Aufkleber:

The Lost Caves 6 - die offene Box

„The Lost Caves“ ist eine Reihe von inoffiziellen Fortsetzungen der C64-Version von Boulder Dash (First Star Software, 1984). Die Abgabe erfolgt vollkommen kosten- und portofrei. Weitere Infos zu TLC6 gibt es auf der TLC-Homepage und im Forum64. Die Ausgabe in der Jewel-Box ist streng limitiert. TLC gibt es auf der Homepage aber auch als D64-Imagedatei zum Download.

Veröffentlicht unter C64, Soft | Ein Kommentar

Konfetti 2.0

Nach 5 Jahren endlich ein Update, hier kommt: Konfetti 2.0! Noch immer gilt: Machen Sie sich Ihr eigenes elektronisches Konfetti. Werfen Sie Luftschlangen und lassen Sie die Welt ständig in einem neuen Licht erscheinen. Dieses Update bietet jetzt Konfetti in zwei Fallgeschwindigkeiten und mit Haufenbildung! So realitätsnah war elektronisches Konfetti noch nie!
Konfetti!

Das Programm auf dem D64-Image muss auf einem C64 mit LOAD“KONFETTI.BAS“,8 oder LOAD“*“,8 geladen werden (nicht mit „,8,1″), da C64 und C128 unterschiedliche Startadressen für Basicprogramme haben. Auf einem C128 (40-Zeichen-Modus) geht auch RUN“*“ oder DLOAD“*“. Mit [SPACE] wird der Farbwechsel des Hintergrunds aktiviert bzw. deaktiviert. Über die Taste [L] werden zusätzlich fliegende Luftschlangen aktiviert. Jede andere Taste stoppt die „Demo“. Helau!

Veröffentlicht unter C128, C64, Soft | Schreib einen Kommentar

EasyFlash 3

Es hatte über zwei Jahre gebraucht, bis ich mein „altes“ EasyFlash [C64-Wiki] endlich in sein Gehäuse eingepasst hatte. Möglicherweise wird es mir mit dem nigelnagelneuen EasyFlash 3 genauso gehen. Dieses feine Stück Hardware habe ich vor nicht allzulanger Zeit von Retro Donald erstanden, der das von Skoe entwickelte Multi-Modul-Modul in seinem Shop anbietet.

EsayFlash 3

Das EasyFlash 3 bietet Platz für 8 Kernals sowie 7 EasyFlash Slots (ersetzt also 7 EasyFlash) und ein Firmware-Update ist einfach per USB möglich doch leider hat es einen kleinen Haken: während mein „altes“ Easyflash problemlos am C128 werkelt, zickt das Nachfolgeprodukt rum. Dass das EasyFlash 3, wegen des komplexeren Timings, eher selten an einem C128 richtig funktioniert (eher an keinem), war allerdings bekannt. Aber wie heißt es so schön: Die Hoffnung stirbt zuletzt. Zwar meldet sich auch am C128 das Startmenü, doch das von Donald mitgelieferte Prince of Persia stürzt nach dem Laden mit einem grauen Bildschirm ab. Es sieht so aus, als ob ich mir auf meine alten Tage doch noch einen C64 zulegen muss. Wer hätte das gedacht.

Veröffentlicht unter C64, Hard | Ein Kommentar