CyberLoad

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Cyberload
Entwickler John Twiddy
Firma Vivid Image
Verleger Sonopress
Release 1986
Plattform(en) C64
Genre Schnelllader
Steuerung Icon tastatur.png
Medien Icon disk525 1.png, Icon kassette.png
Sprache(n) Sprache:englisch

CyberLoad ist ein Kassettenschnellladeprogramm für den Commodore 64 mit Datasette.

CyberLoad bietet — neben einer Beschleunigung des Ladevorgangs durch eine verbesserte und sogar konfigurierbare Datendichte — noch weitere Vorteile: Auf Wunsch kann ein Ladebildschirm im Textmodus, ein Scrolltext oder ein begleitendes Musikstück eingebunden werden, zudem kann der Ladevorgang durch einen flimmernden Bildschirmrahmen oder ein blinkendes, frei positionierbares Sprite illustriert werden.

Es wurde gerne von englischen Softwarehäusern und Publishern wie Thalamus, Palace Software oder System 3 zum Laden von C64-Spielen von Datassette verwendet. Das erste C64-Spiel, das CyberLoad nutzte, war Sanxion von Thalamus[1].


Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Cyberload besteht aus gleich drei Schnellladern, die aufeinander aufbauend von Kassette geladen und aktiviert werden. Diese Struktur bietet nicht nur Flexibilität hinsichtlich des Adressbereichs, der vom nachzuladenden Programm freigehalten werden muss, sondern soll offensichtlich auch dazu dienen, eine Analyse des Laders zu erschweren und das geladene Hauptprogramm zu schützen. Für diejenigen, die dennoch der Funktionsweise der Routine auf den Grund gehen wollen, hält der dritte Schnelllader den — am Bildschirm unter keinen Umständen angezeigten — Text "HACKERS, FUCK OFF AND DIE..." bereit (im kommentierten Assemblercode zu finden an Label T301, Adresse $E2CD).


Erster Schnelllader[Bearbeiten | Quelltext bearbeiten]

Der erste Schnelllader wird mit den Datassetten-Routinen des Kernal in den Adressbereich $029F–$03FF geladen. Der Ladevorgang überschreibt die Kopie des Interruptvektors an Adresse $029F/$02A0 mit der Startadresse der Laderoutine. Diese Kopie wird nach dem Ende des Ladevorgangs als Interruptvektor an Adresse $0314/$0315 zurückgeschrieben, so dass der darauffolgende Timer-Interrupt den Schnelllader aktiviert.

Die Aufgabe dieser Routine ist es, den zweiten Schnelllader von Band in den Adressbereich $0002—$03FF nachzuladen. Dass dieser Teil des Hauptspeichers insbesondere die Zeropage und den Stack umfasst, hat gleich mehrere Vorteile: Zum wird dieser Bereich bei einem Kaltstart des C64 vollständig gelöscht, so dass die Routine vor einer Analyse nach dem Abbruch des Ladevorgangs geschützt ist, zum anderen kann der Stack mit Sprungadressen gefüllt werden, die anschließend — schwer nachvollziehbar — nacheinander mit Hilfe von RTS-Befehlen angesprungen werden. Auch der Ladevorgang selbst endet mit Hilfe dieses technischen Kniffs, nachdem der Schnelllader sich teilweise mit den geladenen Daten selbst überschrieben und dadurch einen Unterprogrammaufruf (per JSR) in einen Sprung (per JMP) verwandelt hat.

Während des Ladevorgangs zeigt Cyberload einen animierten Ladebildschirm an. Anders als dessen Meldung (siehe nachfolgende Animation) vermuten lässt, haben die in dieser Phase von Band gelesenen Daten noch nichts mit dem eigentlichen Hauptprogramm (hier dem Spiel "Cauldron") zu tun.

Das "Markenzeichen" von CyberLoad: Der animierte erste Ladebildschirm, hier beim Laden von Cauldron

Zweiter Schnelllader[Bearbeiten | Quelltext bearbeiten]

Die zweite Schnelllader-Routine liegt im Adressbereich $0002–$03FF. Ihre Aufgabe ist es, den dritten Schnelllader von Band zu lesen und in einen von drei möglichen Adressbereichen zu übertragen. Hierfür nutzt sie die Byte- und Bit-Leseroutinen des ersten Schnellladers, zeigt dementsprechend auch noch den gleichen Ladebildschirm an. Das Ziel dieses mehrstufigen Verfahrens dürfte — neben dem Schutz des Hauptprogramms — auch die Tatsache sein, dass üblicherweise der Adressbereich unterhalb von $0400 nicht für das Laden von Programmen genutzt wird und somit von diesem Schnelllader aus flexibel weitere Programmteile von Band gelesen werden können.

Der zweite Schnelllader erwartet als Banddaten zunächst einen vier Byte langen Header, der nacheinander die Ladeadresse und die Länge des Datenblocks (jeweils zwei Byte im Little Endian-Format) enthält. Mögliche Ladeadressen sind — neben dem im Fall von "Cauldron" genutzten Wert $E000 — auch $0800 und $C800. Sobald der dritte Schnelllader sich komplett im Speicher befindet, wird er über einen RTS-Befehl (und eine auf dem Stack deponierte "Rücksprungadresse") angesteuert.

Dritter Schnelllader[Bearbeiten | Quelltext bearbeiten]

Der dritte Schnelllader nimmt endlich das Laden des Hauptprogramms in Angriff. Dies geschieht in Blöcken von jeweils maximal 256 Bytes, denen je ein 8 Byte langer Header vorausgeht. Die Blöcke können an beliebige Stellen in den Hauptspeicher geschrieben werden. Eine Erkennung des Dateiendes ist dabei nicht vorgesehen, vielmehr lädt die Routine als letzten Block eine Befehlssequenz, mit der sie Teile von sich selbst überschreibt und dadurch in die nächste Phase des Ladevorgangs wechselt.

Der dritte Schnelllader bietet eine Fülle von Möglichkeiten, den Benutzer während des Ladens zu unterhalten. Neben einem selbstdefinierten Textbildschirm ist auch ein Scrolltext in einer beliebigen Bildschirmzeile, ein blinkendes Sprite an einer wählbaren Position oder das Abspielen einer Begleitmusik möglich. Ferner können nachgeladene Programmteile auch sofort ausgeführt werden, und auf Wunsch während ihrer Ausführung die Datassette angehalten werden.

Von diesen Gestaltungsmöglichkeiten machen die mit CyberLoad ausgestatteten Spiele in sehr unterschiedlichem Maße Gebrauch — beispielsweise nutzt die Kassettenversion von Microprose Soccer keine der Optionen, so dass beim Übergang vom zweiten zum dritten Schnelllader einfach die Animation stoppt und der Bildschirm einfriert. Altered Beast zeigt immerhin nach einiger Zeit ein Titelbild an, und Cauldron wartet mit einer Laufschrift auf ("NOW LOADING, PLEASE WAIT."). Sanxion lässt eine Begleitmelodie erklingen und zeigt im Multicolor-Bitmap-Modus ein Titelbild und ein blinkendes Sprite an (siehe linke Animation der nachfolgenden Galerie), und Last Ninja 2 kombiniert nacheinander sogar Musik, Laufschrift, einen flackernden Bildschirmrand, blinkende Sprites und wechselnde Titelbilder (rechte Animation).

Im Unterpunkt "Videos" des nachfolgenden Abschnitts "Weblinks" finden sich Verweise auf Videos, die den vollständigen Ladevorgang darstellen.


Ladebildschirm von CyberLoad beim Laden von Sanxion
… und beim Laden von Last Ninja 2.



Für das Starten des geladenen Programms kommt zuletzt noch ein weiteres Mal der zweite Schnelllader zum Einsatz. Da aber die Bildschirmmeldung, die dieser Lader animiert hat, möglicherweise inzwischen nicht mehr angezeigt wird, wird der Programmcode zunächst so modifiziert, dass er während des Ladens nun den abgeschalteten Bildschirm in allen Farben blinken lässt.

Der zweite Schnelllader lädt noch eine kurze Routine, die die I/O-Bausteine und die Speicherbelegung auf die übliche Konfiguration zurücksetzt, und führt diese Routine dann aus, bevor zum Hauptprogramm übergegangen wird.

Die genaue Funktionsweise aller Routinen ist aus dem kommentierten Assemblerlisting ersichtlich, dem der Schnelllader aus dem Spiel Cauldron zugrundeliegt.

Tape Mastering[Bearbeiten | Quelltext bearbeiten]

Die Software, mit deren Hilfe sich CyberLoad konfigurieren und zusammen mit einem zu ladenden Programm auf Kassette speichern lässt, ist seit 2007 frei im Internet verfügbar (siehe nachfolgenden Abschnitt "Weblinks"). Der Schnelllader kann daher inzwischen auch für eigene Software-Projekte eingesetzt werden.

Hierfür müssen alle Teile des zu ladenden Programms sowie eventuell ein Musikstück auf Diskette gespeichert werden, damit sie von später nacheinander per Floppy (Geräteadresse 8) eingelesen und auf Band geschrieben werden können. Für jeden Programmteil muss die Ladeadresse bekannt sein, und für das Musikstück zusätzlich die Startadresse der Initialisierungsroutine sowie der Einsprungpunkt für das Abspielen (Aufruf alle 20 ms).

Die Software selbst ist menügesteuert (linkes Bild der nachfolgenden Galerie). Die wichtigsten Programmpunkte sind zwei kleine Texteditoren für den Ladebildschirm und die Laufschrift (Punkt A und B), das Beschreiben der Kassette (Punkt E) und eventuell die Konfiguration der Datendichte (Punkt D). Zahlreiche Eingaben, insbesondere zur Begleitmusik oder zu Programmteilen, die später schon während des Ladevorgangs ausgeführt werden sollen, werden erst erfragt, wenn die Kassette zusammengestellt wird (mittleres Bild). Sollen mehrere Kassetten gleichen Inhalts erstellt werden, so macht man die Angaben aber natürlich nur einmal und beantwortet die Frage "DO YOU WISH TO SAVE ANOTHER COPY ?" später mit "Y" (Yes).

Hauptmenü der Tape Mastering-Software
Detailfragen beim Einbinden von Musikstücken
Ladebildschirm einer mit CyberLoad erstellten Demo-Kassette


Weil die in dieser Phase eingegebenen Parameter vor dem Schreiben des Bandes nicht noch einmal kontrolliert werden können, fallen Tippfehler erst bei der ersten Verwendung der Kassette auf. Wenn es dann für eine Korrektur (durch nochmaliges Tape Mastering) zu spät ist oder der Verantwortliche keine Lust hat, den ganzen Vorgang nochmals durchzuführen, wirkt die so erstellte Kassettenversion des Spiels ziemlich zusammengeschustert:

Das Spiel heißt eigentlich "Brainstorm"...
... und hier hat sich jemand beim Titel "Beach Buggy" kräftig vertippt.


Die im Hauptmenü angezeigte "Baud Rate" ist in etwa die Pulsdauer für ein 0-Bit, gemessen in Systemtakten. Ihre Festlegung ist ein Kompromiss zwischen Datensicherheit und Ladegeschwindigkeit. Die nachfolgende Tabelle stellt für unterschiedliche Werte der "Baud Rate" die Längen von 0- und 1-Bits zusammen. Der ebenfalls aufgeführten Aufzeichnungsgeschwindigkeit liegt die Annahme zugrunde, dass das zu speichernde Programm je zur Hälfte aus 0- und 1-Bits besteht. Die tatsächliche Ladegeschwindigkeit ist aber deutlich geringer, da hierbei auch noch Pausen zwischen Datenblöcken sowie Blockheader und Signale zur Synchronisation einfließen.

Nutzung von CyberLoad bei C64-Spielen[Bearbeiten | Quelltext bearbeiten]

Die nachfolgende Tabelle stellt eine umfangreiche Liste von Spielen zusammen, deren Kassettenversion auf dem Schnelllader CyberLoad basiert. Sie zeigt insbesondere, dass für die Aufzeichnung meist die voreingestellte Datendichte übernommen wird. Wenn auf einen andere Datendichte umgeschaltet wird, dann geschieht dies üblicherweise mit dem Ziel, eine höhere Datensicherheit (erkauft durch eine niedrigere Ladegeschwindigkeit) zu erreichen.


"Baud Rate" Länge 0-Bit Länge 1-Bit Datenrate Bemerkung/Beispiele
200 240 μs 448 μs 363 Byte/s Minimale "Baud Rate", maximale Ladegeschwindigkeit
250 288 μs 512 μs 308 Byte/s Sanxion
340 376 μs 728 μs 223 Byte/s Voreingestellte "Baud Rate"
3D Pool, Alien 3, Armalyte, Altered Beast, Atomic Robo-Kid, Bloodwych, Cauldron 2, Combat Crazy, Creatures, Cyberdyne Warrior, Deliverance, Diplomacy, Doctor Doom's Revenge. Dominator, Donald's Alphabet Chase, Dragon Breed, Dynamite Dux, Exterminator, F-16 Combat Pilot, Fighter Bomber, First Samurai, Galaxy Force II, Gazza II, Goofy's Railway Express, Hammerfist, Head the Ball, Hunter's Moon, Ikari Warriors, Inner Space, Insects in Space, James Pond II - Codename Robocod, Last Battle, Last Ninja 2, Lightforce, Maze Mania, Mickey's Runaway Zoo, Microprose Soccer, Mission Impossibubble, Monty Python, Moonfall, Night Shift, North & South, Power Drift, Ninja Spirit, President Is Missing, Retrograde, Robozone, Rubicon, Saint & Greavsie, SDI, Sidewinder II, Smash TV, Sonic Boom, Speedball, Stormlord, Street Warriors, Super Cars, Supremacy, Teenage Mutant Hero Turtles, Time Machine, Troll, Turbo Charge, Tusker, Vendetta, Viz, Wicked, Wonderboy in Monsterland, Zalaga
440 472 μs 912 μs 178 Byte/s Action Fighter, Afterburner, Bangkok Knights, Beach Buggy Simulator, BMX Kidz, Brainstorm, Cauldron, European 5-a-Side, Hopper Copper, I, Ball 2, Last Ninja, Mean Streak, Mega-Apocalypse, Mr. Wino, Ninja Scooter Simulator, Oh No!, Paste-Man Pat, Peter Packrat, Pogo Stick Olympics, Rick Dangerous, Ricochet, Savage, Scuba Kidz, Skateboard Joust, Slimey's Mine, Stunt Bike Simulator, Trojan Warrior, Thrust II, Turbo Boat Simulator, Ubik's Musik
640 680 μs 1320 μs 123 Byte/s Army Days, Gangster, The Image System, Time Traveller
999 1032 μs 2045 μs 81 Byte/s Maximale "Baud Rate", minimale Ladegeschwindigkeit

Weblinks[Bearbeiten | Quelltext bearbeiten]

Videos[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]