LOAD

Aus C64-Wiki
Wechseln zu: Navigation, Suche
LOAD
Format: LOAD [<Programmname>] [,<Gerätenummer>] [,<Sekundäradresse>]
Parameter
<Programmname>: Zeichenketten-Ausdruck, der den Programmnamen enthält
<Gerätenummer>: numerischer Ausdruck im Wertebereich von 1 bis 255
<Sekundäradresse>: numerischer Ausdruck im Wertebereich von 0 bis 255
Einordnung
Typ: Anweisung
Kontext: BASIC-Editor
Aufgabe: Programme in den RAM-Speicher laden
Abkürzung: lO
Verwandte Befehle
SAVE, VERIFY

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl LOAD unter BASIC V2 des Commodore 64.


Mit dem BASIC-Befehl LOAD werden Programmdateien (PRG), z.B. BASIC- oder Maschinensprache-Programme, von Datasette oder Diskette in den RAM-Speicher geladen. Bevor diese bearbeitet werden oder mit BASIC-Befehlen wie RUN oder SYS ausgeführt werden können.

Mit der Gerätenummer wird bestimmt, ob ein Programm von Datasette (Gerätenummer 1), Diskette (Gerätenummer 8-30, normal 1. Diskettenlaufwerk 8 und 2. Diskettenlaufwerk 9 usw.) oder einem anderen Datenträger wie z.B. einer Festplatte eingelesen wird. Fehlt die Gerätenummer, so wird auf das im Betriebssystem (KERNAL) verankerte Standardeingabegerät (beim originalen Commodore-Betriebssystem die Datasette) zugegriffen. Geräteadressen im Bereich von 4-62 führen für nicht vorhandene Geräte zur Fehlermeldung ?DEVICE NOT PRESENT ERROR. Werte 0, 2 und 3 rufen ein ?ILLEGAL DEVICE ERROR hervor, während Werte außerhalb des Bereichs 0 bis 255 mit der Fehlermeldung ?ILLEGAL QUANTITY ERROR abbrechen.

Der Programmname, als Zeichenkettenausdruck verstanden, wählt die entsprechend zu ladende Datei am Datenträger aus, wobei auch Jokerzeichen wie '*' oder '?' eingesetzt werden können. Die Eingabe von LOAD "0:*",8 bzw. LOAD ":*",8 lädt von Gerät Nr. 8 und Laufwerk 0 (ein Selektor im Falle von Doppellaufwerken) die erste PRG-Datei laut Disketteninhaltsverzeichnis. Bei LOAD "*",8 wird unmittelbar nach dem Einlegen der Diskette ins Laufwerk oder nach einer Floppy-Initialisierung die erste PRG-Datei oder sonst die zuletzt geladene Datei geladen. In der gewöhnlichen Form kann beispielsweise mit LOAD "ABC*",8 der erste Dateiname beginnend mit ABC geladen werden.
Der Spezialfall LOAD "$",8 bewirkt das Abrufen des Disketteninhaltsverzeichnisses, das sich wie ein normales BASIC-Programm mittels LIST-Befehl sichten lässt und dabei ein im Speicher vorhandenes BASIC-Programm zerstört.

Durch die Angabe der Sekundäradresse 1 (LOAD "NAME",8,1) wird ein Programm absolut geladen, d.h. es wird an die Stelle im Speicher geladen, die der gespeicherten Ladeadresse entspricht (z.B. durch Speicherung mit dem BASIC-Befehl SAVE). Dies ist z.B. für Maschinenspracheprogramme erforderlich, die nur an einer bestimmten Stelle im Speicher ausführbar sind und dabei das gerade aktive BASIC-Programm nicht überschreiben sollen.
Fehlt die Sekundäradresse oder ist sie Null, wird das Programm immer an den BASIC-Anfang (beim C64 i.d.R. die Speicherstelle 2049 bzw. $0801 des RAMs) geladen.

Im Direktmodus ausgeführt, schließt LOAD alle offenen Dateien und führt den BASIC-Befehl CLR aus und passt die BASIC-Programmende an das Ende der geladenen Datei an, was bei Nicht-BASIC-Programmen zu unerwarteten Ergebnissen führen kann (z.B. zum Fehler ?OUT OF MEMORY ERROR).
Im Programmmodus dagegen wird der Stapelspeicher (Stack) gelöscht, dabei aber das BASIC-Programmende nicht geändert und nach dem Laden des Programms das nachladende BASIC-Programm automatisch ähnlich RUN mit der ersten Zeile gestartet. Hier bleiben aber sämtliche Variablen erhalten, sofern sie nicht vom nachgeladenen Programm überschrieben bzw. dabei der Variablenbereich korrumpiert wurde).

Im Gegensatz zum direkten Ansprechen der Programmdateien mit dem Dateinamen bei Disketten, reicht es beim Umgang der Datasette für den Zugriff auf Datenkassetten, den BASIC-Befehl LOAD einzugeben oder die Tasten SHIFT +RUN/STOP  zu drücken. Danach kann die <PLAY>-Taste der Datasette gedrückt werden und es wird die erste gefundene Datei eingelesen. Jedes dabei gefundene Programm wird zuerst nach einigen Sekunden mit FOUND Dateiname angezeigt, bevor es geladen wird. Mit der Taste C=  (Commodore-Logo) oder auch SPACE  (Leertaste) wird der Ladevorgang der aktuellen Datei unverzüglich fortgesetzt, bevor die Pause mit der Programmfundanzeige automatisch beendet wird. Die Datasette stoppt selbsttätig, wenn das Programm komplett eingelesen ist oder das Ende des Bandes erreicht ist. Während des Ladens von Programmen von Kassette wird der Bildschirm bei der originalen Commodore-Laderoutine abgeschaltet. Dies macht das Commodore-Betriebssystem beim Einlesen von Disketten oder von anderen Datenträgern nicht.

Die BASIC-Fehlermeldung ?FILE NOT FOUND ERROR wird ausgegeben, wenn der Dateiname des Programms nicht existiert oder es keine Programmdatei ist. Die Systemvariable ST kann spezifische Fehlerbits gesetzt haben und bei Diskettenlaufwerken weist der Fehlerkanal zusätzlich eine entsprechende Fehlermeldung auf.

Die maximale sinnvolle Länge - LOAD selbst schränkt die Länge nicht ein - eines per LOAD geladenen und mit RUN gestarteten Programms beträgt im Normalfall etwa 51 KByte bzw. 202 Blöcke. Dabei handelt es sich um den Speicherbereich von $0801 bis $CFFF, wobei die obere Grenze der I/O-Bereich ab $D000 (siehe Speicherbelegungsplan) vorgegeben wird. Daten, die in den Bereich von $A000 bis $BFFF gelangen, werden von LOAD dabei in das RAM "unter" das BASIC-ROM geladen und sind von BASIC aus nicht sichtbar. Entsprechend sind Programme dieser Länge nicht selten Maschinenspracheprogramme oder auch kombiniert mit Daten, die z.B. mittels Assembler oder Compiler erzeugt wurden und auch dann auch von Maschinespracheprogrammen verwendet werden. Die maximale Länge eines BASIC-Programms beträgt in der Praxis unter 39 KByte bzw. 153 Blöcke (bis $9FFF), typischerweise weniger, da im gleichen Speicherbereich auch die Variablen liegen müssen.

Intern öffnet LOAD die jeweilige Datei vom Laufwerk (beim seriellen Zugriff) immer mit Sekundäradresse $60/96. Der Sekundäradressen-Parameter von LOAD wird also dem Laufwerk nicht übermittelt und nur genutzt, um die Behandlung der Ladeadresse festzulegen.

[Bearbeiten] Beispiele

LOAD "DATEINAME",8

Lädt das Programm von Diskette im 1. Diskettenlaufwerk, mit Gerätenummer 8.

LOAD "DATEINAME",9,1

Lädt das Programm "absolut" von Diskette im 2. Diskettenlaufwerk, mit Gerätenummer 9.

LOAD FILE$,1,1

Lädt das Programm, dessen Name in Zeichenkette FILE$ abgelegt ist, absolut von Datasette.

10 REM JUMP&RUN-SPIEL VORLADEPROGRAMM
20 A=A+1
30 IF A=1 THEN LOAD "MUSIK",8,1
40 IF A=2 THEN LOAD "SPRITES",8,1
50 IF A=3 THEN LOAD "GRAFIK",8,1
60 IF A=4 THEN LOAD "LEVEL1",8


In anderen Sprachen