*****************************************************************
HEADER-SAVE V 5.9 (C) by RB
*****************************************************************
-Programmstandort: E000H-E3FFH Start: E3EEH
eigentliche SAVE-LOAD-Routine E000H - E3EDH
fuer Grundversion Standort 3C00-3FFF, St:3FEE
-benutzte Zellen:
DATA: 13H Blockadresse des gelesenen Blocks
ZILAD: 25H zu lesende Blockadresse
SOIL: 16H Start of Input-Line
ARG1: 1BH Anfangsadresse File
ARG2: 1DH End -"-
ARG3: 23H Start -"-
DATA+2:15H Zeichenzaehler bei Nameneingabe
Pufferbereich Kopf: 0E0H-0FFH
-Die orig. SAVE/LOAD-Routine aus dem Monitor wird nicht benutzt.
-Beim Start wird die Kommandoschleife auf B0H geladen (B0H-B5H).
-Alle weiteren Aufrufe erfolgen mit @ ... .
SAVE: @S anfadr. endadr. startadr. ENTER
danach Abfrage TYP und FILENAME
TYP: C-COM-File selbststartend
T-TEXT-File
B-BASIC-Programm
M-Maschinenprogramm, nicht selbststartend
S-SOURCE-Assemblerquelle (Quelltext)
P-PASCAL-Proramm
D-DATA-Datenfelder
I-Introduction, Informationen
E-EPROM-Inhalte
SPACE-ohne Typ
FILENAME: max. 16 Zeichen (alles zugelassen, auch Space)
-Beim Abspeichern wird in jeden Blockkopf die physische Anfangs-
adresse eingetragen, welche beim Einlesen ausgewertet werden kann.
-Das File bleibt trotzdem unter Weglassen des Kopfblocks mit
dem originalen Monitor-Load lesbar!
-Die Einfuehrung eines Memorypointers erleichtert die Kontrolle
ueber den Abarbeitungsstand.
-Nach dem SAVE-Vorgang kann eine Verify-Funktion genutzt werden,
die nur die Blockchecksummen ueberprueft. Der Memorypointer zeigt
dabei wieder den Abarbeitungsstand und im Fehlerfall die Adresse
des fehlerhaften Blocks an. Die Kontrolle erfolgt erst nach dem
Lesen eines Kopfblocks und endet nach dem Lesen der zu dem File
gehoerenden letzten Kopfadresse. Alles, was gelesen wird, er-
scheint als ASCII-Interpretation auf der obersten Bildschirmzeile.
-externer Aufruf: CALL SARUF (E003H) moeglichst ueber Sprungver-
teiler (FFF4H). Der 1.Registersatz und AF' werden zerstoert!
Parameteruebergabe: Zellen 1BH - Anfangsadresse
1DH - Endadresse
23H - Startadresse
Akku 3AH - Wiederholen der SAVE-Funktion
mit gleichem Kopf (gilt auch fuer
den Kopf eines vorangegangenen LOAD)
-Typuebergabe in H(IY), sonst H(IY)=0
-Bei Eingabe von @S:: wird die SAVE-Funktion mit den alten
Kopf-Parametern ausgefuehrt. Diese koennen auch von der LOAD-Fkt.
stammen (Nutzung zum schnellen Kopieren von Files).
LOAD : @L - Laden das naechstfolgenden Files ohne Namen-
und Typkontrolle
@LN - Laden eines Files mit Namen- und Typkontrolle
Es gilt, dass alles signifikant ist, was eingege-
ben wird, das heisst, wird nur mit Enter quit-
tiert, erfolgt fuer den Typ oder den Namen keine
Kontrolle. Es muessen nur so viele Zeichen einge-
geben werden, wie fuer eindeutige Signifikanz
notwendig sind.
Achtung: Es muss darauf geachtet werden, dass der ge-
waehlte Name auf dem Bildschirm stehen bleibt, da
kein Nameneingabepuffer existiert.
-Erfolgt der Aufruf mit X, z.B. @LNX oder @LXX, wird nach
dem Laden auf einen Autostart bei COM-FILE's verzichtet
(X=alle Zeichen ausser SPACE).
-Der Rechner befindet sich so lange in einer Warteschleife, bis
ein gueltiger Kopf gelesen oder mit BREAK (S4-K, CTRL-C)
abgebrochen wird. Der Abruch gelingt nur bei anliegendem Signal,
ansonsten mit RESET. Ungueltige Koepfe werden angezeigt. Nach
sieben Koepfen ist der gewaehlte Name aus dem Bildschirmbereich
gelaufen und es ist kein Laden mehr moeglich.
Man sollte also wenigstens in die Naehe des gesuchten Files spulen.
-Soll ein File auf eine andere Adresse geladen werden, als die
im Kopf angegebene geladen werden, ist es moeglich, eine neue
Anfangsadresse anzugeben: @L XXXX.
Es werden dabei automatisch der Autostart gesperrt und die neue
Anfangs- und Endadresse errechnet sowie angezeigt.
Diese Funktion ist nur ohne Namensignifikanz nutzbar! (bei exter-
nem Aufruf auch mit)
-Sollte bei einem File, welches mit Blockadressen aufgezeichnet
wurde, ein Lesefehler auftreten oder ein Block ueberlesen worden
sein, so wird das Einlesen unterbrochen und eine Fehlermeldung
ausgegeben. Durch kurzes Zurueckspulen und Druecken von ENTER kann
versucht werden, den fehlerhaften Block noch einmal zu lesen
(analog KC 85/1). Der Memorypointer erscheint, wenn der
Ladevorgang fortgesetzt wird.
-Files ohne Kopfblocknummern (Versionen unter 5.0) koennen ab
Version 5.8 nicht mehr gelesen werden. Es wird nur der Kopf
angezeigt und das Einlesen wird mit "bad record" unterbrochen.
-Wird ein Blockkopf mit Inhalt 0FFFFH gelesen, wird der Ladevor-
gang mit "bad record" abgebrochen.
-externer Aufruf: CALL LORUF (E000H) moeglichst ueber Sprungver-
teiler (FFF1H). Der 1.Registersatz und AF' werden zerstoert.
Parameteruebergabe:
* H(IY)=0 - Typ wird abgefragt
H(IY)=Typkennzeichen -> Typvorgabe -> keine Abfrage Typ
* A=0 - ohne signifikante Kopfkontrolle
A=4EH - mit signifik. Kopfkontrolle, Typ- &> Namenabfrage
A=41H - ohne Kopfkontrolle
* L(IY)=20H - Freigabe des Autostarts bei COM-FILE's
-Beim Laden auf eine neue Anfangsadresse muss auf Zelle 1BH die
neue Anfangsadresse uebergeben werden ( > 0FFH), ansonsten muss
die Zelle mit 0 initialisiert werden.
-Fuer den externen Aufruf wurden noch weitere Unterprogramme zu-
gaenglich gemacht:
CALL BLMK (E00CH; SPV: FFC7H) - Lesen eines Blocks
Parameteruebergabe:
Zellen 25H/26H * Kopfinhalt des zu lesenden Blocks
HL * Ladeadresse des Blocks
Return:
Zellen 25H/26H * Kopfinhalt + 20H
HL * HL:=HL+20H
CALL BSMK (E00FH; SPV: FFC4H) - Schreiben eines Blocks
Parameteruebergabe:
HL * Quelladresse Block
IX * Kopfinhalt
DE * Anzahl der Sync.-Bits
Return:
HL * HL:=HL+20H
CALL SUCHK (E012H; SPV: FFC1H) - Suchen eines Kopfblocks und
Uebergabe des Inhalts im Kopfpuffer (E0-FFH), wo er
vom aufrufenden Programm ausgewertet werden kann.
CALL AKP (E015H; SPV: FFBEH) - Aufbereitung Kopfpuffer
Parameteruebergabe wie bei SARUF
Kopfaufbau: Byte 0 - 1 Anf.adr.
2 - 3 Endadr.
4 - 5 Startadr.
6 -0BH frei fuer Zusatzinformationen
0CH Typkennzeichen
0DH-0FH 3 x 0D3H = Kopfkennzeichen
10H-1FH 16 Byte Namensblock
Hinweise, Fehler bitte an R. Brosig, W.Florin 2c, COSWIG, 8270.