Archiv der Kategorie: C64

NAV: File-Browser für C64

Das Research Center for Advanced Commodore Study (dahinter verbirgt sich das Blog von Alan Reed) präsentierte vor zwei Tagen NAV, einen File-Browser für den C64, der speziell zur Navigation auf Geräten mit modernen Speichermedien wie SD-Karten konzipiert wurde. Neben Geräten wie dem uIEC und SD2IEC werden auch das IDE64 und natürlich echte Commodore-Laufwerke unterstützt. Der folgende Text ist eine sinngemäße Übersetzung von Alans Originalpostings.


Ich freue mich, NAV präsentieren zu können, einen neuen File-Browser für den C64. NAV kann mit einer Maus in Port 1, einem Joystick in Port 2, oder mit der Tastatur gesteuert werden. NAV arbeitet mit bis zu fünf Laufwerken und wurde mit folgenden Laufwerkstypen getestet: 1541, 1571, 1581, uIEC, IDE64

Jeder Laufwerkstyp hat sein eigenes spezifisches Icon.

Mit einfachem Mausklick blättert man durch Inhaltsverzeichnisse und Laufwerke. Geräte wie das uIEC, die Gigabytes an Software enthalten können, nach bestimmten Daten zu durchsuchen, kann nervtötend und sehr frustrierend sein. NAV erlaubt das einfache Arbeiten mit D64/D71/D81/DNP/M2I-Disk-Images, echten Commodore Disketten und dem IDE64. Und das mit bis zu 5 Laufwerken gleichzeitig!

Zum Browsen einfach auf das Laufwerk-Icon klicken!

Ein Druck auf die @-Taste läßt die Kommandozeile erscheinen, die genau wie das gute alte DOS Wedge funktioniert. Es wurden jedoch ein paar zusätzliche Kommandos implementiert. Mit „@HELP“ kann man sich die komplette Liste der Kommandos anzeigen lassen.

NAV findet man auf CommodoreServer.com unter ‚Public Disks‚, im Verzeichnis ‚Utilities/Disk Tools‚. Man kann es aber auch HIER herunterladen.


Posted By: HowlinAl in Blog Research Center for Advanced Commodore Study
Published: Thursday, January 10, 2013

Nachtrag (29.01.2012):
Inzwischen ist auf CommodoreServer die Version 9.2 erhältlich.
Alternativer Download vom Nightfall Blog.

Nachtrag (06.11.2013):
Die Version 9.6 (vom Februar 2013) scheint die bisher letzte zu sein.

Veröffentlicht unter C64, Soft | 17 Kommentare

Einzeiler (update)

Auf Commodore128.org wurden gestern Neuigkeiten zur “One Liners Competition” veröffentlicht. Leider wurde dabei das ursprüngliche Posting gelöscht, so dass der Link in meinem ersten Blog-Beitrag zu diesem Thema ungültig wurde. Der offizielle Start der Competition wird voraussichtlich in der nächsten Ausgabe der Commodore Free bekannt gegeben. Einsendeschluß für Beiträge soll Freitag, 8. März sein.

Die erlaubte Programmzeilenlänge ist nicht auf die von den jeweiligen Bildschirmeditoren direkt unterstützte Länge von 80 bzw. 160 Zeichen begrenzt; tricksen ist durchaus zulässig. In den Speicher gepokter und mit SYS gestarteter Maschinencode wird ebenfalls akzeptiert, reine Assemblerprogramme jedoch nicht. Beispiele kann man sich auf der jetzt als Diskimage veröffentlichten Beispieldiskette ansehen, die ich der Einfachheit halber hier als gezipptes File bereitstelle.

Muster vom Cover des Buchs: “10 PRINT CHR$(205.5+RND(1)); : GOTO 10″

Veröffentlicht unter C128, C64, CBM, Compo | Schreib einen Kommentar

MPP4: Immer im Takt

Schneller, höher, weiter, lautet die Maxime im Sport. Schneller, bunter, klangvoller, könnte man das auf Computer übertragen. Für die Multiplattform-Programmierung kann sich das allerdings als (kleines) Problem erweisen, z.B. wenn man mit einfachen FOR-NEXT-Warteschleifen arbeitet. Der heutige Beitrag in dieser Reihe widmet sich dem „schneller“, wobei man sich in einem Irrtum befindet, wenn man meint, dass neuere 8-Bit-Rechner schneller als ältere gewesen sein müssen, und dem „Schleifenproblem“ (was uns wieder mit den spezifischen Eigenheiten der Rechner konfrontieren wird).

Die CPU: mal schnell, mal langsam

Grundsätzlich wird die Rechengeschwindigkeit durch den Takt des Prozessors (der CPU) bestimmt. Der ist je nach Rechnertyp mal schneller, mal langsamer. Vom C64 weiß man, dass schon zwischen einem NTSC- und einem PAL-Gerät merkliche Unterschiede bestehen. Ein Plus/4 taktet (scheinbar) schneller, ein C128 (ohne VIC-Bildschirmanzeige) ebenfalls. Doch der CPU-Takt ist nur die halbe Wahrheit und manchmal führt er uns auch an der Nase herum.

Tabelle 1: Vergleich der CPU-Taktraten der Commodore-Rechner:

Computer PET/CBM VC 20 P 500 C 64 Plus/4 C 128 1MHz C 128 2MHz
PAL 1 MHz 1,10 MHz 0,98 MHz 0,98 MHz 1,76 MHz 0,98 MHz 1,97 MHz
NTSC 1 MHz 1,02 MHz 1,02 MHz 1,02 MHz 1,79 MHz 1,02 MHz 2,04 MHz

Anmerkungen:
PET/CBM: der Takt ist unabhängig vom Videochip und daher gibt es kein PAL oder NTSC.
VC 20
: Kein Fehler! Die PAL-Version ist schneller.
P 500
: Die verfügbaren Quellen sprechen alle nur von 1 MHz; da jedoch ein VIC II verbaut wurde, ist zu vermuten, dass die gleichen Werte wie für den C64 gelten.
Plus/4: Die hohe Taktrate (hier gibt es aus unterschiedlichen Quellen leicht variierende Angaben) führt in die Irre. Im sichtbaren Bereich des Bildschirms wird auf halbe Taktrate zurückgeschaltet, da TED und CPU sich den Systemtakt teilen müssen. Die effektive mittlere Taktrate liegt wohl irgendwo bei 1 MHz. Wegen unterschiedlicher Anzahl von Bildern/Sekunde zeigt die mittlere Taktrate eine weitere Abhängigkeit von der jeweiligen Videonorm (PAL/NTSC).

BASIC: weniger ist manchmal mehr

Bei Multiplattform-Programmen ist die Geschwindigkeit des BASICs entscheidend. Diese ist von zusätzlichen Faktoren abhängig, die sich durchaus stärker als die Variatonen in der Taktrate auswirken können. Zum einen spielt die Komplexität des Interpreters eine gewichtige Rolle. Ein mächtigeres BASIC (wie beim C128 BASIC 7.0) verlangsamt die Ausführung, spezielle Implementierungen von Grundfunktionen wie die verbesserte Garbage Collection ab BASIC 4.0 beschleunigt Programme mit vielen Stringoperationen. Zum anderen spielt die Komplexität der Hardware eine Rolle. Beim C64 braucht sich der Interpreter nicht groß mit Bankswitching herumzuschlagen, beim C128 hat das jedoch durchaus einen spürbareren Einfluss. Auch beim P500 wirkt sich das komplizierte Bankswitching geschwindigkeitshemmend aus.

Für einen Praxistest verwenden wir folgendes Programm:

10 t1=ti:fori=1to10000:next:t2=ti
20 print (t2-t1)/60"sekunden"

Zur Erinnerung: Die reservierte Variable TI gibt die Zeit in sechzigstel Sekunden (1/60) an. Der Zähler für TI wird initialisiert (auf Null gesetzt), wenn der Rechner startet und auch jedesmal wenn man die Anweisung TI$="000000" ausführt. TI$ gibt die seit dem letzten Initialisieren vergangene Zeit in Stunden, Minuten und Sekunden an („hhmmss“).

Mir ist klar, dass eine einfache Schleife nicht die ganze Wahrheit über die Leistungsfähigkeit eines Rechners offenbart. Es handelt sich mit Absicht um einen simplen Vergleich. Ich tröste mich damit, dass er auf jeden Fall besser ist als ein Vergleich mit PRINT-Operationen, da dabei die zusätzlichen Berechnungen für das Setzen des Farbrams die Ergebnisse einseitig beeinflussen würden.

In Ermangelung der erforderlichen Hardwarevielfalt wurden alle Messungen mit dem Emulator VICE unter Win98 durchgeführt. Daher sind die Angaben mit Vorsicht zu genießen. Zudem zeigten sich in Einzelfällen Probleme mit dem Emulator, die einen eigenen Artikel wert sind.

Tabelle 2 und 3: Zeitverbrauch der FOR-NEXT-Schleife mit 10.000 Durchläufen:

Computer PET 2001 CBM 3032 CBM 4032 B CBM 4032 CBM 8032
Dauer [Sekunden] 9,25 s 9,22 s 9,45 s 10,83 s 11,40 s

Anmerkung: Die Messungen für PET 2001 und CBM 3032 mussten mit VICE 2.2 statt der aktuellen Version 2.4 durchgeführt werden, da VICE 2.4 bei diesen Rechnern eine Bildwiederholrate von 56 fps statt 50 fps anzeigt und folglich andere Berechnungszeiten als VICE 2.2 liefert.

Computer P 500 VC 20 C 64 Plus/4 C 128 (2 MHz)
PAL 15,4 s 9,38 s 11,20 s 13,55 s 15,92 s (7,62 s)
NTSC 10,20 s 10,87 s 17,98 s 15,52 s (7,33 s)

Anmerkung: Für den P 500 sind derzeit keine Angaben zu NTSC möglich, da die Umstellung auf NTSC unter VICE 2.4 dazu führt, dass der Emulator nur noch mit 87%iger Geschwindigkeit läuft, dies beeinträchtigt die Messung. Unter VICE 2.2 ist im Menü keine Auswahl zwischen PAL und NTSC vorhanden. Beim Plus/4 ist deutlich der Effekt der Videonorm zu erkennen. Durch die höhere Bildfrequenz (60 Hz) unter NTSC wirkt sich der Bremseffekt des TED stärker aus als unter PAL (50 Hz). Beim C128 ist zum Vergleich zusätzlich der Wert für den 2 MHz-Modus in Klammern angegeben.

Für Experten sei noch angemerkt, dass der C128 auch im 40-Zeichen-Modus mit ein paar Tricks auf ca. 1,3 MHz beschleunigt werden kann. Die Schleife braucht dann ca. 11,74 s (PAL). Man kann auch noch den BASIC-IRQ deaktivieren und weitere Millisekunden gewinnen, Aber das alles bringt den C128 nur in die Nähe der Geschwindigkeit eines C64.

Kurze Zwischenbilanz: Komplexität und verrotztes Design (Plus/4) lassen die neueren Rechner gegenüber den alten CBMs alt aussehen. Hier gilt: weniger ist mehr. Die Unterschiede in der Effektivgeschwindigkeit sind erheblich. Blinkeffekte oder Anzeigezeiten für Info-Texte sollte man daher nicht mit einer einfachen FOR-NEXT-Schleife lösen!

Der Turbo: schlimmer geht immer

Wer jetzt noch meint, man könne diese „leichten“ Variationen in der Geschwindigkeit ignorieren, der sollte bedenken, dass es noch andere Gründe gibt, es nicht zu tun. Die passenden Stichworte sind SuperCPU, Chameleon im Turbo-Mode und BASIC-Compiler!

Die Zeit: ein steter Fluss

Die Lösung des Warteschleifenproblems ist simpel (oder auch nicht, wie wir später sehen werden) und nicht neu! BASIC 2.0 liefert uns seit seinen Anfängen das Werkzeug, das wir dazu brauchen: TI

Beispiel 1: Eine simple Warteschleife, wie sie vielleicht für einen Blinkeffekt genutzt werden könnte:
for i=1 to 1000 : next i

Auf einem C64 erhalten wir eine Verzögerung von ca. einer Sekunde. Der C128 benötigt für die gleiche Schleife allerdings gute 1,5 Sekunden. Derartige Abweichungen sind, vorsichig ausgedrückt: „unschön“.

Immer exakt eine Sekunde liefert hingegen dieses Programmschnipsel:
10000 t=ti+59:fori=0to1:i=-(ti>t):next:return

Man kann das auch so schreiben:
10000 t=ti+60:fori=0to1:i=-(ti=>t):next:return

So geht’s noch eleganter:
10000 t=ti+60:fori=-1to0:i=ti<t:next:return

Für einen relativen Vergleich der Rechnergeschwindigkeiten kann man ermitteln, wie häufig eine Schleife durchlaufen wird. Dazu baut man einen Zähler ein. Integriert man weitere Elemente in die Schleife kann man so auch die verbleibenden Ressourcen abschätzen. Zur Demonstration mag sich die simple Schleife selbst genügen. Die nachstehende Tabelle basiert auf folgendem Programm:

10 x=0:t1=ti:t=ti+60:fori=-1to0:i=ti<t:x=x+1:next:t2=ti
20 print (t2-t1)/60"sekunden", x"loops"

Computer CBM 3032 CBM 4032 VC 20 C64 Plus/4 (NTSC) C128 (2 MHz)
Schleifen-durchläufe 162 140 157 131 124 (96) 102 (212)

Anmerkung: Die Zahlen gelten bei den farbfähigen Computern für die PAL-Geräte. Zum Vergleich ist beim Plus/4 zusätzlich der Wert für NTSC, beim C128 der für den 2 MHz-Modus, in Klammern angegeben.

Beispiel 2: Eine Warteschleife mit Abbruchoption, wie sie vielleicht für die Anzeige von Infotexten genutzt werden könnte. Das folgende Unterprogramm kombiniert elegant Zeitschleife und Tastaturabfrage:

10000 rem 10 sekunden textanzeige (weiter mit <taste>)
10010 t=ti+600:fori=-1to0:getg$:i=(ti<t)and(g$=""):next:return

Über TI läßt sich auch bei Spielen der zeitliche Verlauf steuern, indem (z.B.) Unterprogramme (nur) alle halbe Sekunde angesprungen werden und nicht, abhängig von anderen Operationen und dem jeweiligen Rechnertyp, häufiger. Der Schwierigkeitsgrad des Programms ist dann plattformunabhängig gleich. Wobei man zugeben muss: gleich schwach, denn der schwächste Rechner bestimmt dann das zulässige Tempo. Was nerven kann, wenn es sich um interpretiertes BASIC handelt.

Beabsichtigt man hingegen, die Programme zu compilieren (danach ist das jeweils compilierte Programm natürlich wieder systemspezifisch, aber man braucht es nur in einer Version zu pflegen), dann ist ein TI-gesteuertes Programm oft die einzige Möglichkeit es überhaupt noch spielen zu können.

Der Frust: Commodore ist eben Commodore!

Commodore wäre nicht Commodere, wenn sie nicht wieder die simpelsten Grundregeln mißachtet und Blödsinn fabriziert hätten. Zum Thema TI/TI$ muss es daher heißen: Achtung Falle! Man mag es sich nicht vorstellen, was in den Knallköpfen damals vorgegangen sein muss, als man sich entschloß die CBM II-Reihe mit einem BASIC auszustatten, dass die Systemvariable TI (TIME) nicht mehr kennt.

Zwar zeigt der P 500 ein BASIC 4.0 an (es ist allerdings Version 4.7), das zu BASIC 2.0 abwärtskompatibel sein soll, doch hilft das wenig. TI ist nicht verwendbar und TI$ (TIME$) erhielt (wohl als schwachen Ersatz) einen veränderten Wertebereich. Was die Sache noch schlimmer macht. In BASIC 2.0 ist TI$ sechsstellig (ti$=“000000″) im Format „hhmmss“ (Stunden, Minuten, Sekunden). Bei BASIC 4.7 kommt eine siebte Stelle hinzu. Diese steht für Zehntel Sekunden. Kürzere Zeiteinheiten sind in BASIC nicht mehr erfassbar.

Bei der im Abschnitt „BASIC: weniger ist manchmal mehr“ in Tabelle 3 angegebenen Rechenzeit habe ich daher gemogelt. Statt des oben angegebenen Programms habe ich das folgende verwenden müssen (und folgerichtig habe ich keine zweite Nachkommastelle angegeben, denn es gab hier nichts zu Runden):

10 ti$="0000000":fori=1to10000:next:t$=ti$
20 print val(right$(t$,3))/10+val(mid$(t$,3,2))*60"sekunden"

Doch was bedeutet das für die Multiplattform-Programmierung? Man muss entweder auf den hübschen TI-Trick verzichten, für den P 500 eine alternative „Schleife“ auf Basis von TI$ entwickeln oder den P 500 aus dem Kreis der unterstützten Rechner ausschließen (da waren’s nur noch vier: PET/CBM, C64, Plus/4, C128). Beim Verbreitungsgrad des P 500 fällt da im Zweifel die Entscheidung leicht. Doch ein Gutes hat die Sache: Spötter können die CBM II-Reihe jetzt als zweifelsfrei „zeitlos“ titulieren – und in Anbetracht des Designs, wäre in diesem Spruch sogar noch eine zweite Wahrheit verborgen.

Nachdem sich, sozusagen als Nebenprodukt dieses Beitrags, die erste der bereits angekündigten bösen Überraschungen offenbart hat, mag man erahnen, dass im nächten Teil weiteres Ungemach droht, wenn wir uns intensiver mit der Kompatibilität bezüglich BASIC 2.0 beschäftigen werden.

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

Nachlese 2012

Im Laufe des Jahres haben sich einige Meldungen angesammelt, die es nie in den Blog geschafft haben. Sei es, weil der aktuelle Bezug nicht (mehr) gegeben war, sei es, weil das Thema nicht genug hergab oder ich keine Lust hatte es auszurecherchieren. Manches davon verdient jedoch zumindest eine Erwähnung. Daher folgen jetzt hier: Meldungen, die es nicht in mein Blog geschafft haben:

Januar 2012: Megabit 128 Function ROM
Genaugenommen hätte man schon im November oder Dezember 2011 über diese Erweiterung für Sockel U36 im C128 schreiben können, aber ich wollte ja einen Bericht über mein eigenes Exemplar verfassen. Bis auf zwei Randnotizen hier im Blog, ist daraus jedoch nichts geworden. Vielleicht im nächsten Jahr…

Februar 2012: Digital Audio Concepts
Ebenfalls schon seit Herbst 2011 hatte Vanessa in ihrem kleinen Hardware Shop eine 1 MB REU und ein Stereo-SID-Modul im Angebot. Darüber gelesen hatte ich im Februar. Den geplanten Beitrag kann ich mir jetzt aber endgültig sparen, denn der Shop wurde inzwischen geschlossen.

März 2012: ACE128TOS
Irgendwann im Frühjahr stieß ich auf der Commodore News Page von Richard Lagendijk auf einige ältere Berichte zu ACE128. Diese neue Betriebssystem mit GUI, das den VDC als Standardbildschirm verwendet und von einer SuperCPU profitiert (diese aber nicht voraussetzt) wird von Miroslav Karkus und einigen Mitstreitern programmiert. Seinen besonderen Reiz erhält es durch die VDC-Grafikfähigkeiten, für die Dirk Vroomen verantwortlich zeichnet. Die Entwicklung geht weiter und ich halte mich auf dem Laufenden, aber im Augenblick ist das Ganze doch noch ziemlich pre-Alpha.

ACE128TOS About-Screen

Juni 2012: BioTerror!
Was sich anhört wie eine akute Warnung vor einem kommenden Terroranschlag ist zum Glück nur ein neues Strategiespiel für den Original PET 2001, angekündigt auf CommodorePETAlive. Weitere Infos finden sich auf der Webseite des Entwicklers.

Juli 2012: Media Player 128 (beta)
Auf Commodore128Alive posted Hydrophilic diverse Infos über das PC-Tool CBM Encoder, das Videos in ein spezielles Format für den Media Player 128 umwandelt. Dieser Mediaplayer für den Commodore 128 läuft sowohl im 40- als auch im 80-Zeichen-Modus (Video werden aber nur auf dem 40-Zeichen-Bildschirm [VIC II] angezeigt), kann verschiedene Sound- und spezifische Videoformate abspielen und unterstützt NTSC und PAL. Weitergehende Infos finden sich auf den Webseiten des Entwicklers.

August 2012: Retroport
Irgendwann im Sommer bin ich auf Retroport gestoßen. Und damit auf eine der wohl umfangreichsten Dokumentationen zu Commodore „Krempel“ (Werbeartikel und anderes mit dem Commodore-Logo), die mir je begegnet ist. Diese Sammlung braucht den Vergleich mit den entsprechenden Seiten beim Commodore Billbord nicht zu scheuen.

Oktober 2012: Whacky-Wit
Im Oktober bekam ich ein Mail, ob ich nicht im Blog über das Retro-Style-Brettspiel „Whacky-Wit“ berichten wolle. Nun, das hatte ich mir schon vor dem Mail überlegt und mich dann wegen der fehlenden acht Bit dagegen entschieden. Pac-Man ist ja nun nicht gerade ein Commodore-spezifisches Spiel. Andererseits ist es ein wirklich schönes Projekt. Daher hier der Hinweis: Whacky-Wit kann man jetzt käuflich erwerben.

Whacky-Wit

November 2012: Windows 105
Bei Recherchen zu Hardsync kam mir auf Hack a Day ein anderer Beitrag unter die Finger. Ein 13jähriger programmierte sich im Jahr 2002 sein eigenes Windows… für den C64. Das Vorbild war Microsoft Windows 95. Die Versionsnummer für den CeVi wurde einfach „hochgezählt“. So entstand Gigasoft Windows 105.

Dezember 2012: Avalanche & Mayhem
Zwei neue „kommerzielle“ Spiele für Commodore CBM (CBM 3001/4001/8001 Series) und auch den VC 20 erblickten das Licht der Welt: Avalanche und Mayhem. Publisher ist Revival Studios. Die Vollversion wird auf einer Daten-Kassette geliefert. Man kann die Spiele aber auch frei herunterladen. Es sind diverse weitere Veröffentlichungen für 2013 geplant.

Anmerkung: Ergänzt und überarbeitet am 1. Januar 2013

Veröffentlicht unter Allgemein, C128, C64, CBM | Schreib einen Kommentar

Frohes Weihnachtsfest!

Commodore Christmas Demo: Candle
Frohes Fest mit dem Commodore Christmas Demo (1982).
Wer weitere Weihnachts-Demos sucht, findet entsprechende Links im Forum64.

Veröffentlicht unter Allgemein, C64 | Schreib einen Kommentar

Einzeiler

Das Magazin Commodore Free beabsichtigt eine „One Liners Competition“ für BASIC 2.0, 3.5 und 7.0 zu starten. Alle Commodore Acht-Bit-Rechner vom PET bis zum C128 sind „startberechtigt“. Es wird zwei Hauptkategorien (und jeweils mehrere Unterkategorien) geben: Echte Einzeiler und Zweizeiler. Wobei sich „Zweizeiler“ so definiert, dass alle Variablen-, DATA- und Funktionsdefinitionen in einer und die eigentliche Programmlogik in der anderen Zeile stehen.

Eine offizielle Ankündigung der Competition, mit Bekanntgabe der genauen Regeln, wird es im kommenden Jahr im Heft #67 der Commodore Free geben. Zusätzlich sollen einige Programmbeispiele auf Heftdiskette (D64-Image) veröffentlicht werden. (Quelle: Commodore128.org)

Es gab vor ein paar Jahren schon mal eine (wenig ergiebige) Competition für Einzeiler für den Commodore 128. Hoffen wir, dass der jetzt geplante Wettbewerb mit verbreiterter Plattform ergiebiger wird.

Das Buch: “10 PRINT CHR$(205.5+RND(1)); : GOTO 10″

Einzeiler kennt man aus dem Handbuch zum C64 und aus alten Computerzeitschriften. Dass man mit diesem Thema auch ein ganzes Buch füllen kann, haben Nick Montfort und seine Co-Autoren im November diesen Jahres mit der Veröffentlichung von „10 PRINT CHR$(205.5+RND(1)); : GOTO 10“ bewiesen. Der arg seltsam anmutenden Titel stammt von einem Programmierbeispiel aus dem Handbuch zum C64 und erzeugt auf dem Bildschirm das auch im Cover (siehe Abbildung) verwendete Muster.

Auf über 300 Seiten werden von verschiedenen Autoren die Themen Einzeiler (verschiedene Varianten), Blockgrafik, Commodore C64, BASIC als Programmiersprache, Zufallszahlen, Irrgärten und Computer-Kunst bearbeitet. Das englischsprachige Buch ist in gedruckter Form im Handel erhältlich. Über die Homepage 10print.org ist zudem eine kostenlose PDF-Version herunterladbar.

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

MPP 3: Jedem seine Extrawurst

Nachdem im letzten Teil dieser Serie über Multiplattform-Programmierung die über die gemeinsame Basis BASIC 2.0 hinausgehenden, vergleichbaren Eigenschaften der Commodore-Rechner im Mittelpunkt standen und Wege gesucht wurden, diese auf den unterschiedlichen Geräten einheitlich anzusprechen, geht es diesmal um Beispiele für die Nutzung spezifischer, individueller Eigenschaften. Diese zu kennen und zu berücksichtigen, ist oft hilfreich und in manchen Fäller sogar erforderlich. Auch der CBM-Checker macht Gebrauch davon.

Einige dieser Besonderheiten beziehen sich auf Befehle aus höheren BASIC-Versionen (BASIC 4.0, 4.7, 3.5 und 7.0). In diesen Fällen ist es erforderlich, dass die betroffenen Programmzeilen nur vom passenden Rechnertyp abgearbeitet werden. Erschwerend kommt hinzu, dass die Token, also die Verschlüsselung der zusätzlichen Befehle, für die BASIC-Versionen 4.x und 3.5/7.0 unterschiedlich und daher inkompatibel sind. In einer späteren Folge werden wir uns mit einem solchen Fall noch beschäftigen müssen. Hier aber sollen nur das Befehlspaar FAST und SLOW und das Kommando GRAPHIC 0 des C128 betrachtet werden.

Commodore 128: Die Kombination SLOW:GRAPHIC 0 findet sich auch im Programm CBM-Checker. Sie soll sicherstellen, dass das Programm, wenn es im 80-Zeichen-Modus gestartet wurde, in den 40-Zeichen-­Modus wechselt und dort angezeigt wird. Es kann auch durchaus mal sinnvoll sein, für den Fall längerer Berechnungen, auf einem C128 die Möglichkeit zu nutzen, den Rechner kurzzeitig mit FAST in den 2 Mhz-Modus zu versetzten. Es gibt kein Gesetz, das das verbietet.

Andere Besonderheiten beziehen sich auf spezielle Zeropage bzw. I/O-Adressen. Einige davon sind uns schon im Programm CBM-Checker begegnet. Hier sollen nun die und eine weitere näher betrachtet werden.

CBM 4001/8001 Series: Mittels PEEK(224) unterschiedet man zwischen einem CBM-Rechner mit 40-Zeichen (PEEK(224)<>0) und mit 80-Zeichen (PEEK(224)=0) Bildschirmbreite. Diese Information kann genutzt werden, um ein spezielles Programm (CBM4032 ANY HZ) nachzuladen, das die erforderlichen Einstellungen vornimmt, um den Bildschirm in den 40-Zeichen-Betrieb umzustellen und diese Änderung in das Betriebssystem einzubinden. Durch diesen Trick können viele Spiele für einen CBM 40xx auch auf einem CBM 80xx laufen.

PET 2001 / CBM 3001 Series: Ein bekanntes Beispiel für systemspezifische Eigenschaften ist der Killer-Poke, auch Fastprint-Poke genannt. Diesen sollte man aus bekannten Gründen nie auf CBM-Rechner mit dem neuen Universalboard (board#3) und CRTC-Chip anwenden. Andererseits laufen ältere CBM-Rechner mit altem Board (board#2) ohne ein gesetztes Bit 5 an Adresse 59458 ($E842; VIA) wie eine Schnecke. Das fragliche Bit wird mittels POKE59458,PEEK(59458)OR32 gesetzt.

YouTube: Killer poke! (PET 2001)
Killer poke! (PET 2001): Ein ziemlich sinnfreies Video, aber ein schöner Totenkopf

PET 2001: Ein paar hübsche Blinkeffekte aber auch ein sauberes „Umschalten“ von Bildschirminhalten erhält man mit dem Blank-Poke (Adresse 59409, Bit 3; $E811; PIA 1) . Um den Bildschirm auszuschalten verwendet man POKE59409,52 mit POKE59409,60 läßt sich der Bildschirm wieder einschalten. Dieser POKE-Befehl funktioniert nur bei einem PET 2001 (board#1) und schaltet den Bildschirm komplett ab. Das Programm Distichon nutzt diesen Effekt, um unbemerkt die Darstellung des Einleitungstexts korrigieren zu können. Bekanntlich sind beim PET 2001 im Zeichensatz Groß- und Kleinschriftzeichen vertauscht. Dies wird in besagtem Programm unsichtbar durch eine kleine Assemblerroutine korrigiert.

PET/CBM: Während man bei den farbfähigen Commodore-Rechnern zwischen den zwei implementierten Zeichensätzen bequem über Steuerzeichen umschalten kann [Groß-/Kleinschrift: PRINT CHR$(14); Grafikzeichen: PRINT CHR$(142)], muss dies bei PET/CBM mittels POKE-Befehl bewerkstelligt werden. POKE59468,14 aktiviert Groß-/Kleinschrift und POKE59468,12 den Grafikzeichensatz.

Plus/4, C16, C116: Bedingt durch die Speicherkonfiguration überlagern sich RAM-Bank und ROM-Bank. Da anders als beim C128 kein BANK-Befehl verfügbar ist, wird über Adresse 1177 ($0499) gesteuert, auf welche Speicherbank ein PEEK-Befehl zugreift. Nach einem POKE1177,62 liest PEEK aus dem ROM, nach POKE1177,63 (Grundeinstellung) aus dem RAM. CBM-Checker benutzt diesen Trick, um an den für die Systemerkennung benötigten IRQ-Vektor zu kommen.

Mit den gesammelten Informationen sollte es jetzt eigentlich möglich sein, ein Multiplattform-Programm zu erzeugen. Dass da aber trotzdem noch ein paar interessante Kniffe und (böse) Überraschungen warten, wird sich in den folgenden Teilen dieser Serie zeigen.

Nachtrag (22.12.2012) : Zusammenfassung

Funktion Computer Code
Umschaltung auf 40-Zeichen Commodore 128 SLOW:GRAPHIC 0
Test auf 40/80-Zeichen CBM 4001/8001 PEEK(224) [0:80 / >0:40 Zeichen]
Killer-Poke / Fastprint-Poke PET 2001/CBM 3001 POKE59458,PEEK(59458)OR32
Blank-Poke (Bildschirm aus/an) PET 2001 POKE59409,52 / POKE59409,60
Zeichensatzumschaltung
(Kleinschrift/Grafik)
PET/CBM POKE59468,14 / POKE59468,12
Speicherzugriff (PEEK auf ROM/RAM) Plus/4, C16, C116 POKE1177,62 / POKE1177,63
Veröffentlicht unter C128, C64, CBM, Soft | 3 Kommentare

Pakete für die H&E #4 Space Lords

Inzwischen ist ein weiteres Paket angekommen. Jetzt sind es vier! Da das Spielen von Bomb-Mania zu viert soviel Spaß bereitet, man aber auf der Messe auch mal etwas Abwechselung benötigt, habe ich bei RGCD ein Steckmodul mit Space Lords (Centaurus) bestellt. Das gibt mir zudem Gelegenheit meine Paddles einem ernsten Belastungstest auszusetzen.

Paket aus England mit Space Lords-Plastikbox

Inhalt der Space Lords-Plastikbox

Space Lords für den C64 ist angelehnt an das klassische Arcade/Atari 2600-Spiel „Warlords„. Bei der C64 16KB Cartridge Competition, im Jahr 2011 belegte das Programm den vierten Platz. ALeX, Retrofan and Taxim von P1X3L.net haben den Competition-Beitrag nochmals überarbeitet und an vielen Stellen optisch und vom Gameplay her verbessert. Diese neue Version „Centaurus“ ist jetzt, seit Ende Oktober, als 16KB Steckmodul ab 20 Pfund über RGCD zu beziehen. Eine Download-Version gibt es schon, mit Dokumentation, zu einem zehntel des Preises.

Space Lords Screenshots (Quelle: RGCD)

Wer das Spiel zuvor einmal selber testen will, kann dazu die frei verfügbaren (alten) Versionen Andromeda und Andromeda II nutzen. Space Lords kann nicht nur mit Paddles, sondern auch diversen anderen Eingabegeräten (unter anderem dem Protovision 4-Player-Adapter) gespielt werden. Verschiedene Spielmodi, auch für schnelle Duelle, und eine KI, falls mal keine weiteren drei Mitspieler zur Verfügung stehen, sorgen bei Space Lords für Spielspaß auf jede Party und zu Hause.

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

Pakete für die H&E #3 Turbo Chameleon 64

Das dritte Paket enthielt ein Turbo Chameleon 64 (TC64) mit Dockingstation und Zubehör (Blog-Link); gebaut von individual Computers und bestellt über Vesalia. [Das TC64 ersetzt mittels FPGA-Technologie alle üblichen Steckmodule; bietet eine REU mit 16 MB, VGA-Anschluss, 1541 Emulation auf SD-Karte und Turbo-Funktionen sowie PS/2-Maus- und Tastatur-Unterstützung. Im Stand-Alone-Mode ersetzt das Chameleon den kompletten C64 inklusive VIC und SID.] Wir sind zwar „retro“ aber nicht von gestern. Auf der Hobby & Elektronik Messe in Stuttgatt werden wir daher nicht nur viele „historische“ Computer zeigen, sondern auch moderne Hardwareentwicklungen präsentieren.

Chameleon und Zubehör

Da man das TC64 leider nicht am C128 betreiben darf, werde ich es wohl nur im Stand-Alone-Modus nutzen können. Dieser Modus bietet allerdings nicht nur einen FPGA-Ersatz für den Commodore 64 sondern auch die Möglichkeit andere FPGA-Cores zu installieren, zum Beispiel für den Sinclair Spectrum oder Atari 2600.

Umfassende Infos und weiterführende Links gibt es auf der inoffiziellen Entwicklerseite. Firmwareupdates und Tools findet man beim Hersteller. Und im Forum64 wurde sogar ein spezielles Unterforum eingerichtet, in dem diverse Detailfragen diskutiert werden.

Veröffentlicht unter C64, Events, Hard | Schreib einen Kommentar

Pakete für die H&E #2 Hardsync: Just Dance 64

Das zweite Paket, die große Kiste, enthielt eine PS1/PS2-Tanzmatte. Nicht, dass ich ein großer Tänzer bin, aber, wenn alles klappt wie vorgesehen, wollen wir Hardsync von Linus Åkesson auf der Messe präsentieren. Ohne Tanzmatte, die von Skern noch neu verdrahtet werden muss, wäre das aber ziemlich langweilig. Ich bin jetzt schon auf die schreckerstarrten Gesicher der Kollegen vom Wii-Stand gespannt, wenn die Girlies nicht bei ihnen mit Just Dance oder Dancing Stage, sondern bei uns mit Hardsync abrocken.

Tanzmatte fuer Hardsync

Das Tanzspiel Hardsync wurde am 4. November 2012 veröffentlicht (siehe CSDB). Linus gibt eine sehr ausführliche Beschreibung des Programms und der Hardware auf seiner Homepage (dort findet man auch das Programm, SID- und MP3-Tunes, Tools und Hinweise zum Erstellen eigener Musikzusammenstellungen und ein Video). Inspiriert wurde das ganze von Spielen wie Dance Dance Revolution (Dancing Stage) und StepMania. Allerdings erspart uns Hardsync das übliche Pop-Gedudel der Konsolenspiele und ersetzt es durch klaren SID-Sound.

Hardsync: Musikauswahl

Hardsync: Optionsmenue

Das Spielprinzip ist simpel: Entsprechend dem Rythmus werden Pfeile angezeigt, der Tänzer muss dann im richtigen Moment den richtigen Pfeil auf der Tanzmatte antippen. Nicht so ganz mein Stil aber viele haben Spaß daran. Noch vor 20 Jahren wäre das auf dem C64 eine Killerapplikation gewesen (immerhin besteht ja ca. die Hälfte der Bevölkerung aus weiblichen Wesen).

Hardsync: Tanzen nach Pfeilen (1)

Hardsync: Tanzen nach Pfeilen (2)

Da heutzutage keiner Tanzmatten für den C64 herstellt, muss man andere Wege beschreiten, um diese doch anschließen zu können. Linus hat auf seiner Homepage die erforderlichen Infos für seine Lösung, einen PS2/Joystick-Konverter auf Basis eines ATmega88, bereitgestellt. Es gibt darüber hinaus fertige PSX64-Adapter zu kaufen (nur derzeit leider nicht). Man kann allerdings auch einfach die überflüssige Elektronik rausrupfen und die Kontakte direkt mit dem JoyPort verbinden (was die bevorzugte Methode bei der Hobby & Elektronik sein dürfte).

Veröffentlicht unter C64, Events, Hard, Music, Soft | Schreib einen Kommentar