Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
z1013:software:headersave [2011/08/28 09:42] – [Laden von Programmen] volkerp | z1013:software:headersave [2019/10/28 14:30] (aktuell) – [maintape] volkerp | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
Version 5.95, entwickelt Rainer Brosig. | Version 5.95, entwickelt Rainer Brosig. | ||
- | Ausfuerliche | + | Ausführliche |
- | Anmerkungen | + | Neueinsteiger: |
- | Programmstandort: | + | **Programmstandort**:\\ |
E000H-E3FFH Start: E3EEH > | E000H-E3FFH Start: E3EEH > | ||
eigentliche SAVE-LOAD-Routine | eigentliche SAVE-LOAD-Routine | ||
Der Rest ist die Umladeroutine der Kommandoschleife | Der Rest ist die Umladeroutine der Kommandoschleife | ||
- | fuer Grundversion des Z-1013:\\ | + | für Grundversion des Z-1013:\\ |
3C00-3FFFH Start: 3FEEH > | 3C00-3FFFH Start: 3FEEH > | ||
Es gibt noch andere Generierungsvarianten des Headersaves z.B. | Es gibt noch andere Generierungsvarianten des Headersaves z.B. | ||
die im RB-Monitor, womit gleich nach Einschalten des Rechners | die im RB-Monitor, womit gleich nach Einschalten des Rechners | ||
- | das Headersave | + | das Headersave |
- | Zuerst einige | + | Zuerst einige |
Das Headersave-Programm schreibt vor dem auszuladenden Programm einen Kopf auf die Kassette, welche die Angaben: | Das Headersave-Programm schreibt vor dem auszuladenden Programm einen Kopf auf die Kassette, welche die Angaben: | ||
- | * Anfangadresse | + | * Anfangsadresse |
* Typ und Name des Programms | * Typ und Name des Programms | ||
enthalten. | enthalten. | ||
- | Diese Angaben werden beim Einladen auf den Bildschirm geschrieben. Das Programm wird in den richtigen Speicherbereich geladen. | + | Diese Angaben werden beim Einladen auf den Bildschirm geschrieben. Das Programm |
- | Der Typ C (COM-File) kann auch selbst gestartet werden. Es kann | + | wird in den richtigen Speicherbereich geladen. Der Typ C (COM-File) kann auch |
- | auch | + | selbst gestartet werden. Es kann auch |
* ein bestimmtes Programm gesucht werden, | * ein bestimmtes Programm gesucht werden, | ||
* im direkten Modus, auch mehrfach, wieder ausgeladen werden, | * im direkten Modus, auch mehrfach, wieder ausgeladen werden, | ||
* ein File verschoben geladen werden, | * ein File verschoben geladen werden, | ||
- | * das Notieren der Daten (Adressen, usw.) entfaellt. | + | * das Notieren der Daten (Adressen, usw.) entfällt. |
- | Ausserdem | + | Außerdem |
- | werden (natuerlich | + | zum Laden von Headersave-Programmen genutzt werden (natürlich |
- | Wenn im L-Modus des Monitors ein mit HEADERSAVE | + | Vorteile des HEADERSAVE' |
- | File geladen werden soll, ist > | + | ausgeladenes |
- | des zweiten KENNTON-Signals zu druecken | + | zweiten KENNTON-Signals zu drücken |
- | Letzteres ist wichtig, wenn HEADERSAVE nicht im Monitor-EPROM | + | Letzteres ist wichtig, wenn HEADERSAVE nicht im Monitor-EPROM steht und geladen |
- | steht und geladen werden muss, denn das Headersave selbst | + | werden muss, denn das Headersave selbst ist ja zu diesem Zeitpunkt noch nicht |
- | ist ja zu diesem Zeitpunkt noch nicht verfuegbar. | + | verfügbar. |
von Headersave benutzte Zellen: | von Headersave benutzte Zellen: | ||
Zeile 53: | Zeile 53: | ||
ARG 2: 1DH Endadresse File | ARG 2: 1DH Endadresse File | ||
ARG 3: 23H Startadresse File | ARG 3: 23H Startadresse File | ||
- | | + | |
Pufferbereich Kopf!!: | Pufferbereich Kopf!!: | ||
Zeile 60: | Zeile 60: | ||
* Die Original-SAVE-LOAD-Routine aus dem Monitor wird nicht benutzt. | * Die Original-SAVE-LOAD-Routine aus dem Monitor wird nicht benutzt. | ||
- | * Beim Start auf der Startadresse mit J ... wird die Kommando-schleife | + | * Beim Start auf der Startadresse mit J ... wird die Kommandoschleife |
* Die Nutzung des Headersaves wird durch ein @... Kommando eingeleitet. | * Die Nutzung des Headersaves wird durch ein @... Kommando eingeleitet. | ||
Zeile 70: | Zeile 70: | ||
Das Programm meldet sich mit der Typ-Abfrage: | Das Programm meldet sich mit der Typ-Abfrage: | ||
typ: (Hier wird ein Typ nach nachstehender Vorgabe erwartet)\\ | typ: (Hier wird ein Typ nach nachstehender Vorgabe erwartet)\\ | ||
- | filename: (Max. 16-stelliger Name, bei CP/M-Files sollte das Atr. wie im Original angegeben werden z.B: POWER.COM) | + | filename: (Max. 16-stelliger Name, bei CP/M-Files sollte das Attr. wie im Original angegeben werden z.B: POWER.COM) |
TYP: | TYP: | ||
C-COM-File (Maschinenprogramm), | C-COM-File (Maschinenprogramm), | ||
T-allgemeines Text-File | T-allgemeines Text-File | ||
- | B-BASIC-Programm | + | B-BASIC-Programm |
- | K-BASIC-Programm | + | K-BASIC-Programm |
- | L-BASIC-Programm | + | L-BASIC-Programm |
b-3-K-BASIC | b-3-K-BASIC | ||
M-Maschinenprogramm, | M-Maschinenprogramm, | ||
Zeile 90: | Zeile 90: | ||
Q-mit NSWEEP gequetschte Files | Q-mit NSWEEP gequetschte Files | ||
Space-ohne Typ | Space-ohne Typ | ||
- | X,Y,Z vorgesehen | + | X,Y,Z vorgesehen |
- | andere Typkennzeichen | + | andere Typkennzeichen |
werden, um Doppelvergaben zu verhindern. | werden, um Doppelvergaben zu verhindern. | ||
FILENAME: max. 16 Zeichen (alle, auch Space, zugelassen) | FILENAME: max. 16 Zeichen (alle, auch Space, zugelassen) | ||
- | |||
* Beim Abspeichern wird in jeden Blockkopf die physische Anfangsadresse eingetragen, | * Beim Abspeichern wird in jeden Blockkopf die physische Anfangsadresse eingetragen, | ||
* Das File bleibt trotzdem unter weglassen des Kopfblocks mit dem originalen Monitor-LOAD lesbar! (2.Kennton) | * Das File bleibt trotzdem unter weglassen des Kopfblocks mit dem originalen Monitor-LOAD lesbar! (2.Kennton) | ||
- | * Die Einfuehrung | + | * Die Einführung |
- | * Nach dem SAVE-Vorgang kann eine Verify-Funktion genutzt werden,die nur die Blockchecksummen | + | * Nach dem SAVE-Vorgang kann eine Verify-Funktion genutzt werden, die nur die Blockchecksummen |
- | * externer Aufruf: CALL SARUF (E003H), | + | * externer Aufruf: CALL SARUF (E003H), |
- | Parameteruebergabe: | + | Parameterübergabe: |
- | Zellen 1BH - Anfangadresse | + | Zellen 1BH - Anfangsadresse |
1DH - Endadresse | 1DH - Endadresse | ||
23H - Startadresse | 23H - Startadresse | ||
Akku 3AH - Wiederholen der SAVE-Funktion mit gleichen | Akku 3AH - Wiederholen der SAVE-Funktion mit gleichen | ||
- | Kopf (gilt auch fuer den Kopf eines vorangegan- | + | Kopf (gilt auch für den Kopf eines vorangegangenen |
- | | + | |
- | | + | |
sonst H(IY)=0 | sonst H(IY)=0 | ||
- | -Bei Eingabe von " | + | -Bei Eingabe von " |
- | Kopf-Parametern | + | ausgeführt. Diese können |
- | Funktion stammen (Nutzung zum schnellen Kopieren von Files). | + | schnellen Kopieren von Files). |
===== Laden von Programmen ===== | ===== Laden von Programmen ===== | ||
- | @L -Laden das naechstfolgenden | + | **@L** - Laden das nächstfolgenden |
- | Typkontrolle. | + | |
- | @LN -Laden eines Files mit Namen- und Typkontrolle. | + | **@LN** - Laden eines Files mit Namen- und Typkontrolle. |
- | | + | |
- | | + | Es gilt, dass alles signifikant ist, was eingegeben |
- | tiert, erfolgt | + | |
- | Kontrolle. Es muessen | + | |
- | | + | |
- | notwendig sind. | + | |
ACHTUNG: | ACHTUNG: | ||
- | Es muss darauf geachtet werden, dass der gewaehlte | + | |
- | auf dem Bildschirm stehen bleibt, da kein Nameneinga- | + | Es muss darauf geachtet werden, dass der gewählte |
- | bepuffer | + | bleibt, da kein Nameneingabepuffer |
Bildschirm als Puffer. | Bildschirm als Puffer. | ||
- | -Erfolgt der Aufruf mit X, z.B.: @LNX oder @LXX, wird nach dem | + | Erfolgt der Aufruf mit X, z.B.: @LNX oder @LXX, wird nach dem Laden auf einen |
- | Laden auf einen Autostart bei COM-FILE' | + | Autostart bei COM-FILE' |
- | chen ausser | + | oder " |
- | z.B.: @LLL oder @LAB, bei Namenkontrolle - @LNN oder @LNZ | + | Dieses ist von Vorteil, wenn der File nach dem Laden sofort auf Kassette kopiert |
- | o.ae.). Dieses ist von Vorteil, wenn der File nach dem Laden | + | werden soll, oder wenn z.B. im M(odify)-Modus Zellen des Files angesehen, |
- | sofort auf Kassette kopiert werden soll, oder wenn z.B. im | + | geändert oder anderweitig |
- | M(odify)-Modus Zellen des Files angesehen, | + | |
- | weitig | + | Der Rechner befindet sich so lange in einer Warteschleife, |
+ | Kopf gelesen oder mit > | ||
+ | gelingt nur bei anliegenden Signal, ansonsten mit > | ||
+ | werden angezeigt. Nach sieben Köpfen ist der gewählte | ||
+ | Bildschirmbereich gelaufen und es ist kein Laden mehr möglich. Es muss erneut | ||
+ | das Ladekommando eingegeben werden. Man sollte also wenigstens in die Nähe des | ||
+ | gesuchten Files spulen. | ||
- | -Der Rechner befindet sich so lange in einer Warteschleife, bis | + | Soll ein File auf eine andere Adresse geladen werden, als die im Kopf |
- | ein gueltiger | + | angegeben, ist es möglich, eine neue Anfangsadresse anzugeben: |
- | abgebrochen wird. Der Abbruch gelingt nur bei anliegenden Sig- | + | |
- | nal, ansonsten mit > | + | |
- | | + | |
- | | + | |
- | lich. Es muss erneut das Ladekommando eingegeben werden. | + | |
- | Man sollte also wenigstens in die Naehe des gesuchten Files | + | |
- | | + | |
- | -Soll ein File auf eine andere Adresse geladen werden, als die | + | '@L XXXX' |
- | im Kopf angegeben, ist es moeglich, eine neue Anfangsadresse | + | |
- | | + | |
- | | + | |
- | Es werden dabei automatisch der Selbststart gesperrt und die | + | Es werden dabei automatisch der Selbststart gesperrt und die neue Anfangs- und |
- | neue Anfangs- und Endadresse errechnet und angezeigt. | + | Endadresse errechnet und angezeigt. Diese Funktion ist aber nur ohne |
- | Diese Funktion ist aber nur ohne Namensignifikation nutzbar! | + | Namensignifikation nutzbar! (bei externen Aufruf auch mit). |
- | (bei externen Aufruf auch mit). | + | |
- | -Sollte bei einem File, welches mit Blockadressen | + | Sollte bei einem File, welches mit Blockadressen |
- | | + | Lesefehler auftreten, oder ein Block ueberlesen |
- | | + | Einlesen unterbrochen und eine Fehlermeldung ausgegeben. Durch kurzes |
- | Fehlermeldung ausgegeben. Durch kurzes | + | Zurückspulen und Drücken |
- | Druecken | + | Block noch einmal zu lesen (analog KC 85/1). Der Memorypointer |
- | Block noch einmal zu lesen (analog KC 85/1). Der Memorypoin- | + | der Lesevorgang fortgesetzt wird. |
- | | + | |
- | -File ohne Kopfblocknummern (HEADERSAVE-Versionen unter 5.0) | + | Files ohne Kopfblocknummern (HEADERSAVE-Versionen unter 5.0) können |
- | | + | 5.8 nicht mehr gelesen werden. Es wird nur der Kopf angezeigt und das Einlesen |
- | der Kopf angezeigt und das Einlesen wird mit "bad record" | + | wird mit "bad record" |
- | | + | in den Rechner holen, und dann mit dem neuen HEADERSAVE wieder aus- laden. (in |
- | Rechner holen, und dann mit dem neuen HEADERSAVE wieder aus- | + | der RB-Monitorversion gibt es dazu das Kommando @LA) |
- | laden. (in der RB-Monitorversion gibt es dazu das Kommando @LA) | + | |
- | -Wird ein Blockkopf mit Inhalt 0FFFFH gelesen, wird der Ladevor- | + | Wird ein Blockkopf mit Inhalt 0FFFFH gelesen, wird der Ladevorgang |
- | | + | record" |
- | -externer Aufruf : CALL LORUF (E000H), | + | externer Aufruf : **CALL LORUF** (E000H), |
- | | + | Der 1. Registersatz und AF' werden |
- | | + | |
- | + | ||
- | Parameteruebergabe: | + | |
+ | Parameterübergabe: | ||
+ | < | ||
* H(IY)=0 | * H(IY)=0 | ||
H(IY)=Typkennzeichen | H(IY)=Typkennzeichen | ||
Zeile 198: | Zeile 184: | ||
* L(IY)=20H -Freigabe des Selbststart bei COM-Files | * L(IY)=20H -Freigabe des Selbststart bei COM-Files | ||
* Zellen 1B/1CH=0 oder neue Ladeadresse | * Zellen 1B/1CH=0 oder neue Ladeadresse | ||
+ | </ | ||
+ | Beim Laden auf eine neue Anfangsadresse muss auf Zelle 1B/1CH | ||
+ | die neue Adresse übergeben werden (>0FFH), ansonsten m u s s | ||
+ | die Zelle mit 0 initialisiert werden. | ||
- | -Beim Laden auf eine neue Anfangsadresse muss auf Zelle 1B/1CH | + | ===== Externer Aufruf von Unterprogrammen ===== |
- | die neue Adresse uebergeben werden (>0FFH), ansonsten m u s s | + | |
- | die Zelle mit 0 initialisiert werden. | + | |
- | ===== Externer Aufruf von Untrprogrammen ===== | ||
- | + | -Für den externen Aufruf wurden noch weitere Unterprogramme | |
- | -Fuer den externen Aufruf wurden noch weitere Unterprogramme | + | |
- | | + | |
CALL BLMK (E00CH; SPV: FFC7H) -Lesen eines Blocks | CALL BLMK (E00CH; SPV: FFC7H) -Lesen eines Blocks | ||
- | | + | |
| | ||
| | ||
Zeile 218: | Zeile 203: | ||
| | ||
Achtung! | Achtung! | ||
- | | + | |
bei Erreichen der Gleichheit von Arg.2 und Ladeadr. | bei Erreichen der Gleichheit von Arg.2 und Ladeadr. | ||
(HL) abgebrochen! | (HL) abgebrochen! | ||
Zeile 224: | Zeile 209: | ||
CALL BSMK (E00FH; SPV: FFC4H) -Schreiben eines Blocks | CALL BSMK (E00FH; SPV: FFC4H) -Schreiben eines Blocks | ||
- | | + | |
| | ||
| | ||
Zeile 233: | Zeile 218: | ||
CALL SUCHK (E012H; SPV: FFC1H) -Suchen eines Kopfblocks | CALL SUCHK (E012H; SPV: FFC1H) -Suchen eines Kopfblocks | ||
- | Uebergabe | + | Übergabe |
vom aufrufenden Programm ausgewertet werden kann. | vom aufrufenden Programm ausgewertet werden kann. | ||
CALL AKP | CALL AKP | ||
- | Parameteruebergabe | + | Parameterübergabe |
Zeile 245: | Zeile 230: | ||
-Durch die Interpretation einer Startadresse, | -Durch die Interpretation einer Startadresse, | ||
- | von 3A00H-3AFFH liegt, als Doppelpunkt, | + | von 3A00H-3AFFH liegt, als Doppelpunkt, |
| | ||
Zeile 254: | Zeile 239: | ||
-Wird der allerletzte Fileblock falsch bzw. nicht gelesen, so | -Wird der allerletzte Fileblock falsch bzw. nicht gelesen, so | ||
| | ||
- | | + | |
zu lesen, oder mit RESET abbrechen. | zu lesen, oder mit RESET abbrechen. | ||
-Kann ein Block trotz mehrmaligen Versuchen nicht gelesen wer- | -Kann ein Block trotz mehrmaligen Versuchen nicht gelesen wer- | ||
- | den (z.B. Knick im Bandmaterial), | + | den (z.B. Knick im Bandmaterial), |
| | ||
| | ||
- | dazu das Band beim Auftreten eines solch hartnaeckigen | + | dazu das Band beim Auftreten eines solch hartnäckigen |
- | an den Anfang des Duplikats, | + | an den Anfang des Duplikats, |
- | das Einlesen, erkennbar am Memorypointer, | + | das Einlesen, erkennbar am Memorypointer, |
-Der Kopfpuffer liegt auf den Adressen E0H-FFH. Manche Programme | -Der Kopfpuffer liegt auf den Adressen E0H-FFH. Manche Programme | ||
| | ||
- | | + | |
- | | + | |
- | 100H zu verschieben und so auszulagen. Durch das Anfuegen | + | 100H zu verschieben und so auszulagern. Durch das Anfügen |
- | | + | |
- | | + | |
- | | + | |
| | ||
Zeile 282: | Zeile 265: | ||
| 2-3 | Endadresse | | | 2-3 | Endadresse | | ||
| 4-5 | Startadresse | | | 4-5 | Startadresse | | ||
- | | 6-0BH | frei fuer Zusatzinformationen | | + | | 6-0BH | frei für Zusatzinformationen | |
| 0CH | Typkennzeichen | | | 0CH | Typkennzeichen | | ||
| 0DH-0FH | 3 x 0D3H = Kopfkenzeichen\\ (An diesem D3 erkennt jedes Kopfsuchprogramm einen Kopf !!) | | | 0DH-0FH | 3 x 0D3H = Kopfkenzeichen\\ (An diesem D3 erkennt jedes Kopfsuchprogramm einen Kopf !!) | | ||
|10H-1FH | 16 Byte Namensblock | | |10H-1FH | 16 Byte Namensblock | | ||
- | Bitte nur Original-Versionen | + | |
- | weitergeben, keine geaenderten Versionen. | + | ====== maintape ====== |
+ | |||
+ | entwickelt Martin Duchrow. | ||
+ | |||
+ | Der Autor schrieb mir 2014: | ||
+ | |||
+ | maintape ist eine Verbesserung gegenüber Headersave.\\ | ||
+ | Mich störte von Anfang an, dass ich zum Finden von Programmen stets zum Kassettenanfang zurückspulen musste, um den Zählerstand auf 0000 zu stellen, damit ich anschließend bis zur markierten Stelle vorspulen konnte. Deshalb habe ich das originäre Z1013-Kasettenformat um eine Filefolgenummer ergänzt, die beim Abspeichern abgefragt und beim Laden des Z1013-Programms immer auf die aktuelle Position verweist. Meine Listen für die Programme enthielten danach nicht mehr den Stand des Kassettenlaufwerks, | ||
+ | |||
+ | Maintape ergänzt demzufolge auch die Kassettenformate des Z1013. Um kompatibel zu bleiben, habe ich den eigentlichen Teil des originären Z1013-Formats beibehalten. Nur füge ich diesem noch 8 Bit hinzu, um meine File-Folgenummer einzubringen. Das originäre L-Kommando merkt davon nichts, da der Block an dieser Stelle schon zu Ende ist und es auf den nächsten Block wartet. Ich habe nur 8 Bit und kein ganzes Byte hinzugefügt - weil es reicht das Alphabet unterzubringen und damit kein unerwünschter Zeitverzug eintritt. Der Datenbereich enthält jetzt also 32,5 Bytes bzw 16,25 Datenwörter.\\ | ||
+ | Um originäre Files mit nur 32 Datenbereichsbytes einlesen zu können, habe ich der Einfachheit halber ein zusätzliches LA-Kommando in meinen Monitor eingefügt. | ||
+ | |||
+ | Ich habe auch weitere Programme mit meinem maintape ergänzt, z.B. das Programm zum Füllen der RAM-Disk, was vorher mit dem Headersave ausgestattet war. | ||