Speed 1581

Diese Seite ist über einen softwaremässigen Lade-Beschleuniger für C64 und 1581, welcher in der Ausgabe 6/89 des Magazins 64'er von Markt & Technik unter dem Titel 1581 mit Turbo – Ein Schnellader für die 1581 (Scan als PDF-Datei) veröffentlicht wurde. Er bestand aus dem Installations-Programm speed 1581.prg (auch im PC64-Format oder als D81-Image). Der Original-Quelltext (siehe unten für neuere Version mit mehr Kommentar und Querverweisen) war im Format von Giga-Assembler (aus 64'er Sonderheft 21, 27 oder 53).

A partial English translation of the article can be found in the Utilities section of The Commodore 128 Page. Note that this floppy speeder is not supported on the NTSC version of the C64 as it was written for PAL only.

Anleitung

Der Schnell-Lader ist ein Auto-Boot-Programm und installiert sich selbst beim Einschalten in der 1581. Benutzt wird wie gewohnt der LOAD-Befehl, jedoch ändert sich die Bedeutung der Sekundäradresse. Abhängig von dieser wird das Programm absolut (MSP) oder relativ (BASIC) geladen und entsprechend automatisch gestartet. Der Speeder bringt etwa eine 17fache Geschwindigkeitssteigerung.

Hat man eine Diskette mit der Datei COPYRIGHT CBM 86 eingelegt und schaltet das Laufwerk ein, so installiert sich der Beschleuniger selbsttätig. Nachträglich kann das durch

OPEN 1,9,15,"UJ": CLOSE 1

erfolgen. Deaktiviert wird das Programm durch

OPEN 1,9,15,"UI": CLOSE 1

oder Aus- und Einschalten des Geräts ohne Diskette. Geladen wird nun abhängig von der Sekundäradresse:

LOAD "Name",9,1lädt ein Maschinensprache-Programm absolut
LOAD "Name",9,2lädt ein BASIC-Programm relativ
LOAD "Name",9,3lädt ein Maschinensprache-Programm und startet es an der Ladeadresse
LOAD "Name",9,4lädt ein BASIC-Programm und startet es mit RUN

Die Sekundäradressen 8 und 9 bewirken dasselbe wie die 1. Mit 0 oder ohne Sekundäradresse wird nur die Schnell-Lade-Routine in den C64 übertragen, aber nicht gestartet, was sehr wahrscheinlich nicht die Absicht ist. Deshalb muss für diesen Fall dem Dateinamen ein Doppelpunkt vorangestellt werden, der einen Ladevorgang mit der originalen Übertragungsroutine erzwingt, ohne aber den Speeder in der Floppy auszuschalten.

Bei VERIFY muss der Doppelpunkt immer benutzt werden:

VERIFY ":Name",9

Das Verzeichnis kann wie gewohnt mit

LOAD "$",9

in den Speicher geholt werden, da $ vom Programm erkannt wird.

Installation

Zur komfortablen Nutzung überträgt man das Schnell-Lade-Programm am besten auf jede Diskette. Dazu lädt man das Programm SPEED 1581 und startet es mit RUN. Nach der RETURN-Taste wird der Speeder unter dem Namen COPYRIGHT CBM 86 als USR-Datei auf Disk geschrieben. Abschliessend wird der Floppy-Status angezeigt und die Diskette kann wieder entnommen werden.

Verträglichkeit

Der Lader führt im C64 einen Autostart über die Vektoren aus, deshalb funktioniert er nicht mit anderen Autostart-Programmen und diese werden automatisch mit den Originalroutinen geladen. BASIC-Erweiterungen und Hilfsprogramme wie Assembler oder Maschinensprache-Monitore werden durch das Überschreiben der Vektoren ausgeschaltet, daher ist dem Dateinamen ein Doppelpunkt voranzustellen oder der Speeder durch "UI" auszuschalten. Mit Zweitlaufwerken und Drucker gibt es keine Komplikationen, auch funktioniert das Programm bei zusätzlichen Floppies mit Harware-Beschleunigern. Selbstverständlich kann die Geräteadresse auch eine andere als 9 sein.

Funktion

Falls die Floppy 1581 nach einem Reset eine Datei (beliebigen Typs) mit dem Namen COPYRIGHT CBM 86 findet, wird sie geladen und als Programm ausgeführt. In unserem Fall setzt dieses Programm in $0300…$0640 den TALK-Vektor auf eine neue Adresse und kopiert einen Teil der TALK-Routine vom ROM ins RAM. Das Setzen des DEJAVU-Flags verhindert eine erneute Initialisierung beim Abschalten mit dem Befehl "UI". Ebenso wird die Lesekopfbewegung beschleunigt, das Verzeichnis vorsorglich in den Cache eingelesen und dann wieder ins Betriebssystem zurückgekehrt.

Erfolgt nun ein TALK-Aufruf des Computers, dann wird in der Floppy die neue TALK-Routine nur ausgeführt wenn ein LOAD-Befehl vorliegt, im C64-Modus geladen wird (auf C-128), und kein anderes Autostart-Programm oder ein Verzeichnis geladen wird. Die Laderoutine des C64 wird nach $0300…$03ec übertragen und dort gestartet (Bildschirm löscht). Als erstes sendet das Floppy-Programm ein Kommando-Byte, das Ende- oder Fehler-Status oder Anzahl Bytes pro Sektor enthält (ausser erster und letzter Sektor immer 254 Bytes).

Mit dem Job log. Sektor lesen liest die Floppy jeweils eine ganze Spur ein und sendet diese sektorweise mit einer schnellen Routine, die 2 Bits gleichzeitig überträgt. Nach dem letzten Sektor überträgt die 1581 $00 als Ende-Kommando, beendet den Transfer und liest die Verzeichnis-Spur in den Cache. Auf dem C64 wird der Bildschirm wieder eingeschaltet und eventuell das geladene Programm ausgeführt.

Quelltext

Der kommentierte Quelltext, angepasst an den Assembler ca65 des 6502 C Cross-Compilers cc65, befindet sich zusammen mit benötigten Hilfsdateien in der Zip-Datei speed1581.zip (Public Domain). Ein make-Durchlauf erzeugt neben dem Installations-Programm speed1581.prg auch ein Assembler-Listing (verlinkte Version).

Hilfreich sind wahrscheinlich ROM-Listings von C64 und 1581 sowie eine Beschreibung des Utility-Loader-Formats. Original-Quelltext von Fred Bowen, Listing, User's Guide und Bedienungshandbuch der 1581 kann vom Mirror von ftp.funet.fi:/pub/cbm runtergeladen werden (1581.zip, serlib.zip, 1581-manual.txt.gz, 1581.pdf). Und hier ist der Quelltext einer leicht an den ca65 angepassten Version, die sich mit

cl65 -t none -C 1581.cfg -l -o 1581.bin 1581.s

assemblieren lässt.

Viel Spass!