Ultraload Plus

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Ultraload Plus
Ultraload Plus Startmeldung und BASIC-Zeile
Entwickler Martin Pfost
Verleger Markt & Technik Verlag
Release 1986
Lizenz keine (Listing zum Abtippen)
Plattform(en) C64
Genre Schnelllader
Steuerung Icon tastatur.png
Medien Icon disk525.png
Information Listing des Monats in Happy Computer 1986/01

Der Software-Schnelllader Ultraload Plus wurde 1985 von Martin Pfost programmiert und als "Listing des Monats" in der "Happy Computer" 01/1986 veröffentlicht. Die Lade-Geschwindigkeit wird um etwas mehr als den Faktor 6 erhöht. Der Speeder ist für viele Programme anwendbar, weil der Benutzer die Möglichkeit hat, die Lage der Routinen im Speicher des C64 anzupassen.

"Ultraload Plus" wurde später auch im 64'er-Magazin veröffentlicht. Man findet das Programm in der Ausgabe 1997/05 auf der Diskette 9705B incl. Extras und Anleitung und im Sonderheft 83 auf der Diskette SH83A (1992) beim Programm "Ultra Boot Menue". Allerdings fehlen auf diesen beiden Disketten die zwei Hilfsprogramme "Ultraload Tool 1" und "Ultraload Tool 2" aus der Happy Computer.



Laden und Starten[Bearbeiten | Quelltext bearbeiten]

Ultraload Plus wird wie ein BASIC-Programm geladen und gestartet.
Falls man die Standardeinstellungen benutzen will, gibt man ein:

LOAD 'ULTRALOAD PLUS",8
RUN

Für Änderungen an den Einstellungen gibt man nach dem Laden erst LIST ein, wonach die Zeile

1985 sys 2080,00288,192,214,n,3

erscheint, in der man nun die Werte der Parameter ändern kann - s.u. das Kapitel "Anpassen von Ultraload Plus" für Details. Danach erst startet man das Programm mit RUN.

Nun erscheint eine Meldung, die anzeigt, dass das Programm aktiv ist. Es steht nun die erhöhte Geschwindigkeit zur Verfügung. Programme werden wie gewohnt geladen.

Beschreibung[Bearbeiten | Quelltext bearbeiten]

Eigenschaften[Bearbeiten | Quelltext bearbeiten]

"Ultraload Plus" lädt Programme ein wenig schneller als sein bekannter Vorgänger Hypra-Load. Der Bildschirm bleibt während des Ladevorgangs eingeschaltet, die RS232-Routinen bleiben erhalten. Alle ROM-Routinen stehen weiter zur Verfügung. Damit erlaubt das Programm neben schnellerem Laden von Diskette auch den vollen Kassettenbetrieb, sogar mit Turbo-Tape. Das Laden des Directorys (LOAD "$",8 ...) wird nicht beschleunigt, aber VERIFY wird mit der erhöhten Geschwindigkeit ausgeführt. Im Gegensatz zur Original-Verify-Routine bricht das Programm beim Auftreten eines Fehlers sofort ab. Mit der Befehlsfolge "PRINT PEEK(174) + 256 * PEEK(175)" kann man das erste unterschiedliche Byte ermitteln.

Der Ladevorgang kann jederzeit mit der RESTORE-Taste abgebrochen werden. Bei einem nicht korrigierbaren Lesefehler stürzt das Programm nicht ab, sondern meldet sich mit dem entsprechenden Fehler zurück. Wird "Ultraload Plus" überschrieben, so wird der LOAD-Vektor wieder zurückgesetzt.

In der letzten Zeile der Einschaltmeldung steht der Befehl SYS 336. Man kann ihn verwenden, nachdem <RUN-STOP/RESTORE> gedrückt oder ein Reset ausgelöst wurde. Danach stehen die schnelle Laderoutinen sofort wieder zur Verfügung, ohne dass das Programm neu geladen werden muss.

Anpassen von Ultraload Plus[Bearbeiten | Quelltext bearbeiten]

Sollte ein Programm nicht problemlos mit dem Floppy-Speeder laufen, kann man die Lage der Programmteile im Speicher anpassen.
Dafür werden Werte in der BASIC-Zeile des Programms geändert:

1985 sys 2080,00288,192,214,n,3
         adr    1    2   3  4 5

Der SYS-Befehl hat die Adresse 2080=$0820, d.h. die hier beginnende Initialisierung-Routine liegt direkt hinter der BASIC-Zeile. Deren Länge muss daher immer gleich sein. Änderungen müssen ggf. mit führenden Nullen versehen werden (z.B. wie hier 00288 statt 288).

"Ultraload Plus" kann entweder als zweiteilige oder dreiteilige Version im Speicher liegen. Das wird durch den Wert des fünften und letzten Parameters bestimmt. Die dreiteilige Version ist für die meisten Programme die geeignete Wahl. Die zweiteilige empfiehlt sich nur, wenn der freie Speicherbereich sehr klein ist.

Die einzelnen Parameter haben die folgende Bedeutung:

Parameter Bedeutung Standardwert 2 Teile Bereich 2 Teile Standardwert 3 Teile Bereich 3 Teile
1 Startadresse des Bootprogramms 00288 0 bis 65535 00288 0 bis 65535
2 High-Byte der Anfangsadresse des Arbeitsbereichs 088 16 bis 200 192 4 bis 204
3 High-Byte der Anfangsadresse des Hauptteils wie 2 wie 2 214 16 bis 246
4 Transfergeschwindigkeit n n (normal), h (hoch) n n,h
5 Speicherbelegungsart 2 3

Beispiel 3-teilig:

1985 sys 2080, 00288, 192, 214, n, 3
  1. Der Bootteil liegt ab Adresse 288=$120 im Stack. Er ist mit 82 Bytes recht kurz und kann überall im RAM liegen, wo dies nicht vom ROM oder I/O überlagert wird. Der Stack empfiehlt sich, weil er nicht bei einem Reset gelöscht wird. Auch der Vektorbereich (ab 704) oder der Kassettenpuffer (ab 828) bieten sich an.
  2. Der Arbeitsbereich liegt ab 192*256=49152 ($C000). Seine Lage muss man nur ändern, wenn "Ultraload Plus" eine Datei nicht lädt oder wenn während des Ladens der Bildschirm verändert wird. Er belegt 2 Pages (512 Bytes).
  3. Der Hauptteil liegt ab 214*256=54784 ($D600). Er ist 1500 Bytes lang und wird von der Bootroutine aufgerufen. Im Gegensatz zur 2-teiligen Version kann man diesen Teil in das RAM unter dem Kernel oder den I/O-Bausteinen legen.
  4. Der Übertragungsmodus ist auf "normal" gesetzt.
  5. Die "3" am Ende definiert, daß es sich um eine dreiteilige Version handelt.


Beispiel 2-teilig:

1985 sys 2080, 00288, 088, 088, n, 2

Der Bootteil liegt wieder ab 288, der Arbeitsbereich ab 88*256=22528 ($5800). Da es sich um eine 2-teilige Version handelt, muss der 3. Parameter mit dem 2. übereinstimmen. Arbeitsteil ($5800-$5BFF) und Hauptteil ($5A00-$5FDC) belegen dabei zusammen etwas weniger als 2 KB.


Tools

Werteausgabe vom Ultraload Tool 2

Die beiden Programme "Ultraload Tool 1" und "Ultraload Tool 2" sollen helfen, geeignete Werte für ein Programm zu finden, das sich mit der normalen Ultraload-Version nicht laden lässt. Das Tool 1 füllt den Speicher mit einem bestimmten Code. Nun wird das zu untersuchende Programm geladen, gestartet und mit einem Reset beendet. Mit Tool 2 durchsucht man dann den Speicher nach unbenutzen Stellen und bekommt eine Liste der möglichen Parameter. Für den Bereich von $0200 bis $03FF kann es allerdings keine gültigen Werte für den Bootteil angeben, da der bei einem Reset gelöscht wird. Hier muss man eventuell ausprobieren.

Anmerkung: die beiden Programme auf der Diskette zur Happy Computer 1986/01 dienen nur zur Generierung der Tools. Die fertigen Programme findet man z.B. auf der Basic-Boss Diskette (siehe Weblinks).

Transfergeschwindigkeit erhöhen[Bearbeiten | Quelltext bearbeiten]

Der fünfte Parameter ist speziell. Er gibt die Transfergeschwindigkeit an, mit der geladen und gespeichert werden soll. Dabei steht "n" für normal und "h" für hoch. Mit den folgenden Anweisungen kann man die Ladegeschwindigkeit auf den Faktor 8 erhöhen:

OPEN 1,8,15 
PRINT# 1, "M-W"+CHR$(105)+CHR$(0)+CHR$(1)+CHR$(7); 
CLOSE l

Damit wird der Interleave (Blockabstand) auf Diskette von normalerweise zehn auf sieben umgestellt. Alle Programme, die so gespeichert wurden, werden später auch wieder schneller geladen. Allerdings funktioniert dies nur, wenn der Übertragungsmodus (4. Parameter) auf "h" gestellt ist.

Tipps und Tricks[Bearbeiten | Quelltext bearbeiten]

Dier folgende Text ist auf der 64'er Diskette 9705B aus dem Programm "ANL.UL":

Tipps und Tricks zu ULTRALOAD PLUS von Martin Pfost 

Ultraload Plus arbeitet mit vielen 5.25 Laufwerken von Commodore zusammen. Dabei ist allerdings zu beachten, daß 3.5-Zoll-Laufwerke nicht unterstützt werden, Parallelfloppies ebensowenig. Wenn Sie  also ausschließen wollen, daß ein solches Laufwerk vorliegt, dann fragen Sie einfach Hardwareunterschiede ab. Einen Block auf Spur 71 kann weder die 1541, die 1570 noch die 1571 lesen (Direktzugriffs-befehl B-R bzw. U1 verwenden). Diese Laufwerke können sich aber z.B. im doppelseitigen Betrieb befinden. Um diese Laufwerke zurückzusetzen, verwenden Sie bitte nicht den "UI"-Befehl. Dieser setzt auch die Laufwerksnummer zurück. Das zurückgesetzte Laufwerk ist also eventuell "verschwunden"! Besser ist der Befehl "U0>M0". Dieser ist bei der 1541 gar nicht vorgesehen, wird aber problemlos akzeptiert. Die 1571 schaltet er in den 1541-Modus und der Floppyspeeder funktioniert. Ultraload Plus können Sie mit SYS 336 aktivieren und mit SYS 64789 deaktivieren. Wenn Ihnen das Abfragen des Floppytyps noch nicht ganz klar sein sollte, dann werfen Sie doch einen Blick auf die Bootsektorprogramme auf dieser Diskette. Beide analysieren das Diskettenformat auf diese Weise. BSG V1.3 in den Programmzeilen 770-790.

Etwas mehr Komfort erwartet man heute ja doch ...

Ultraload Plus muss erst geladen und dann gestartet werden. Danach lädt man das Inhaltsverzeichnis und dann das Programm. Das muss nicht sein. Bei der Initialisierung befördert das Programm zwei  Assembler-Teile in andere Speicherbereiche, gibt eine Meldung aus und startet sich selbst. Dabei könnte es doch auch ein anderes Programm nachladen. Dieses ist hier exemplarisch für ein Programm  "START" verwirklicht worden. Das Nachladen ist über den Bildschirm und den Tastaturpuffer realisiert. Das erledigt ein kleines BASIC-Programm ('bas.linkit'). Damit die Maschinenspracheteile ab $0120 bzw. ab $da00 an ihren Ort gelangen, ist eine Kopierroutine in  Assembler erforderlich. Damit der BASIC-Interpreter nach dem Entpacken noch Variablen benutzen kann, beginnt der Maschinenspracheteil bei $4000. Ferner werden die Bildschimfarben geändert und ein RUN simuliert. Das Ergebnis ist als "linkit" mit Quellcode im Hypra-Ass-Format auf der  Diskette. Beim Linken ist als Sprungadresse der Anfang ($4000) und als RAM-Koniguration der Wert $37 (Normalwert) angegeben. Ein anderer Weg besteht darin, das Basicprogramm in den Assembler einzubinden. Das ist mit "linked" (Quellcode:"src") geschehen.

Hier die Dateien:        
"src"            PRG     39   Sourcecode/Hypra-Ass
"linked"         PRG      8   Fastload+Autostart        
-------------------------------------------------------
"bas.linkit"     PRG      1   BASIC-Teil für'linkit'
"src.linkit"     PRG     36   Quellcode $4000+RUN        
"linkit"         PRG      7   copyass+RUN $4000
"linkit!"        PRG      8   gelinkt/jmp$4000/$37

C128-Besitzer können noch weiter gehen. Sie können beide Files mit dem Tool 'header.obj' in ein C128-Programm verwandeln, das direkt den C64-Modus aktiviert und dort startet. Dabei geht die Information über das aktuelle Laufwerk, Speicherstelle 186=$ba, verloren. DieserFehler kann durch die Abfrage            
d=peek(186):if d<7 then d=8        
abgefangen werden. Dasselbe Problem tritt auch bei der Verwendung von Bootsektoren ("BSG V1.3" bzw. "autoboot128++") auf. "BSG v1.3" erzeugt dabei Bootsektoren für C64-Programme, "autoboot128++" Bootsektoren für C128-Programme. Letztes ist flexibler und kompatibler. Da für den Start vom C128 aus aber vorher das Programmfile auch noch mit 'header.obj' verlängert werden und für den C64 auch noch in der Normalversion vorliegen muss, verbraucht diese Lösung wesentlich mehr Diskettenplatz.        

Hier noch eine Anmerkung: Header.obj starten Sie mit:           
boot"header.obj".

Alle Angaben ohne Gewähr!

Weblinks[Bearbeiten | Quelltext bearbeiten]

Artikel:

Disketten: