Überblick über die verschiedenen Möglichkeiten, Programme oder/und deren Teile nachzuladen
Das Nachladen von Programmen und Programmteilen wird an Hand der Floppy (Geräteadresse 8) erklärt. Es ist sehr einfach, dies auch auf die Datassette (Geräteadresse 1) anzuwenden. Ich habe mich bemüht, alles sehr verständlich darzulegen, einige Kenntnisse in der Basic- und Assemblerprogrammierung sind allerdings von Vorteil.

Normalerweise startet man ein Programm wie folgt:
DLOAD "PROGRAMMNAME" [RETURN]
RUN [RETURN]


Leider muss diese Anweisung jedesmal neu von Hand eingegeben werden, auch für eventuelle weitere Programmteile. Man kann solche Befehle aber z.B. in ein Basic-Programm, welches auch ein schönes Startbild enthalten kann, einbinden.
Der einfachstete Weg, Programme aus einem Ladeprogramm heraus nachzuladen, ist Folgender:
300 LOAD "NAME",8

Mit dieser Anweisung kann ein Basic-Programm bzw. ein Maschinenprogramm mit Basic-Startzeile (10 SYS4567) nachgeladen und automatisch gestartet werden.
Beim Laden von Speicherbereichen, welche so angelegt sind, dass ab $1001 eine Basic-Zeile folgt ($0FF0 - $3FFF), muss der Speicherbereich an die Stelle geladen werden, von welcher aus er gespeichert wurde.

Das geschieht nun mit der Anweisung:
300 LOAD "NAME",8,1

Will man mehrere Programmteile an verschiedene Speicherstellen platzieren und das Programm mit einer bestimmten Systemadresse starten, kann man diesen Basictext anwenden:
1 A=A+1:ON A GOTO 10, 20, 30
10 LOAD"TEIL1",8,1
20 LOAD"TEIL2",8,1
30 SYS 4567


Die Zählschleife in Zeile 1 ist nötig, weil der Computer nach jedem Ladevorgang unser Basicprogramm neu startet.

Oft wird der Basic-Startbereich durch das nachgeladene Programm überschrieben. Hier muss nun die Ladeanweisung aus dem Startprogramm heraus an einen sicheren Ort gespeichert werden. Einer wäre der Bildschirmspeicher. Hier ein Beispiel:
1 COLOR 4,2: COLOR 0,2: PRINT"ctrl_2"
2 PRINT"{shift_home}POKE 44,20: POKE 20*256,0: NEW"
3 PRINT"{crsr_down,crsr_down}LOAD"CHR$(34)"T1"CHR$(34)",8,1
4 PRINT"{5x crsr_down}POKE 65298,192: POKE 65299,16: POKE 5120,0"
5 PRINT"{crsr_down,crsr_down}LOAD"CHR$(34)"T2"CHR$(34)",8: {ctrl_6}LOADING ... {ctrl_2}"
6 PRINT"{4x crsr_down}RUN"
7 POKE 239,7: POKE 1319,19: FOR I=1TO6: POKE 1319+I,13: NEXT I: NEW


Erläuterung:
In Zeile 1 werden der Bildschirmhintergrund und -rand sowie die Schriftfarbe auf weiß gesetzt.
Die Zeile 2 beinhaltet zwei POKE-Befehle, welche den Basicspeicher von $1000 auf $1400 heraufsetzen, der folgende NEW-Befehl passt die übrigen Zeiger an.
{Die Anweisungen in den geschweiften Klammern sind Steuerzeichen innerhalb von Anführungsstrichen. shift_home = die Tasten SHIFT und HOME gleichzeitig gedrückt, crsr_down = die Cursor-Taste mit dem Pfeil nach unten gedrückt usw.}
Mit Zeile 3 wird der erste Ladebefehl auf den Bildschirm geschrieben. Hier soll der neue Zeichensatz geladen werden und zwar an den nun vor dem folgenden Basicprogramm geschützten Speicherbereich ab $1000, welcher dann in Zeile 4 eingeschaltet wird.
In Zeile 5 folgt das Laden des Basic-Hauptprogrammes durch einen weiteren Befehl auf dem Bildschirm und das Anzeigen des Schriftzuges "LOADING ..." in der Farbe grün.
Die Zeile 6 schreibt den Befehl RUN wiederum in den Bildschirmspeicher.
Zeile 7 enthält jetzt die Ausführung der geschriebenen Anweisungen: POKE 239,7 simuliert 7 Tastatureingaben, deren Art durch die folgenden POKEs festgelegt werden, POKE1319,19 befördert den Cursor in die linke obere Bildschirmecke, die weiteren POKEs sind RETURNs: 1. für Zeile 2, 2. für den LOAD-Befehl aus Zeile 3, 3. ist eine einfache Zeilenschaltung, welche vermutlich aus Zeitgründen eingefügt wurde, 4. für Zeile 4, 5. für den LOAD-Befehl aus Zeile 5 und 6. für den RUN-Befehl aus Zeile 6. Durch NEW in Zeile 7 löscht sich das Ladeprogramm selbst.

Für Maschinenprogramme kann man das Gleiche anwenden, allerdings startet man die Programme hier vorzugsweise im TEDMON, dem eingebauten Maschinensprachemonitor.
1 SCNCLR
5 COLOR 0,1: COLOR 4,1
10 CHAR 1,17,10"{ctrl_4}LOADING"
20 PRINT "{home,ctrl_1}MONITOR"
30 PRINT "{5x crsr_down}L"CHR$(34)"NAME"CHR$(34)",8"
40 PRINT "{crsr_down,crsr_down}G3000
50 POKE 1319,19: POKE1320,13: POKE 1321,13: POKE 1322,13: POKE 239,4


Erläuterung:
Zeile 1 - Bildschirm löschen und Cursor in die linke obere Ecke
Zeile 5 - Hintergrund und Rand schwarz einfärben
Zeile 10 - LOADING in türkis auf den Bildschirm schreiben
Zeile 20 - in schwarz MONITOR links oben
Zeile 30 - Ladebefehl
Zeile 40 - Startbefehl
Zeile 50 - Tastatureingabe-Simulation analog obigem Programm

Wenn Teile des Hauptprogrammes selbst in den Bildschirmspeicher geschrieben werden, sollte man auf andere Speicherbereiche ausweichen, welche in der einschlägigen Literatur angegeben sind. Hier mal ein Beipiel als Basiclader
300 FOR I=0 TO 31: READ A$: POKE 1632+I,DEC(A$): NEXT I
310 SYS 1632
320 DATA A2,08,A9,00,A8,20,BA,FF
330 DATA A2,7D,A0,06,A9,03,20,BD,FF
340 DATA A2,00,A0,0E,A9,00,20,D5,FF
350 DATA 4C,00,18,41,42,43


und der Assemblerteil dazu ab Adresse $0660
.0660 LDX#$08 ; Geräte-Nr.
.0662 LDA#$00 ; log. File-Nr.
.0664 TAY ; Sek.-Nr.
.0665 JSR$FFBA ; SETLFS
.0668 LDX#$7D ; Low-Byte für Dateiname
.066A LDY#$06 ; High-Byte für Dateiname
.066C LDA#$03 ; Länge Dateiname
.066E JSR$FFBD ; SETNAM
.0671 LDX#$00 ; Low-Byte für Ladeziel
.0673 LDY#$0E ; High-Byte für Ladeziel
.0675 LDA#$00 ; Flag für LOAD
.0677 JSR$FFD5 ; LOAD
.067A JMP$1800 ; Start Programm

>067D 41 42 43 ... A B C ...


Und hier die Erläuterungen:
.0660 - Geräte-Adresse ins X-Register 8=Floppy, 1=Datassette
ACHTUNG! Es kann zur Ermittlung der Geräte-Nr. auch die Adresse 174 $AE herangezogen werden. Dabei übernimmt
.0660 LDX $AE (A6 AE)die Nummer des zuletzt benutzten Gerätes.
.0662 - 0664 - log. File-Nr. und Sekundär-Nr., hier beide 0
.0668 - 066A - Low- und High-Byte für die Speicherstelle, ab welcher der Programmname im Speicher steht $067D
.066C - Anzahl der Zeichen des Programmnamens, hier 3
.0671 - 0673 - Low- und High-Byte der Speicherstelle, an welche das Programm geladen werden soll $0E00
.067A - Einsprungadresse für den Programmstart $1800

Dieses kleine, gerade mal 29 Byte große Programm kann als Nachladeprogramm vielfältig eingesetzt werden.

Alternativ zum Basiclader kann das Programm auch mittels einer Assemblerroutine in den vorgesehenen Speicherraum geschoben werden:
.1500 LDX#$20
.1502 LDA$150E,X
.1505 STA$0660,X
.1508 DEX
.1509 BPL$1502
.150B JMP$0660

Der Nachlader folgt hier ab Adresse
.150E LDX$AE
.1510 LDA#$00
.1512 TAY
.1513 JSR$FFBA
.1516 ...