Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
z1013:kassettenformate [2011/09/18 08:42] – volkerp | z1013:kassettenformate [2022/12/27 12:32] (aktuell) – [Headersave] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Kassettenformate ====== | ====== Kassettenformate ====== | ||
- | Das Kassetten-Magnetband-Interface des Z1013 ist ein Diphase-Verfahren. Es kam speziell auf dem Z1013 zum Einsatz und ist auf anderen Computern nicht verbreitet. | + | Das Kassetten-Magnetband-Interface des Z1013 ist ein Diphase-Verfahren. |
- | Aufgezeichnet wird in Blöcken | + | Das Kassetten-Magnetband-Interface wurde vom [[homecomputer: |
+ | Das ist gut in der Monitorbeschreibung (ASM-Quellen) | ||
+ | Aufgezeichnet wird in Blöcken zu je 32 Byte. Jeder Block besteht aus einem Kopf: einem einzelnen Word 0000h, sowie den Daten; gespeichert als 10h Words. Anschließend folgt eine Prüfsumme (wieder ein Word) über den Datenblock. Tatsächlich werden also pro Block 36 Byte aufgezeichnet. | ||
- | Headersave-Kopf | + | Programm: |
- | <code> | + | <ditaa noedgesep> |
- | --------------------------------------------------------------------------------- | + | +--------+-------+-------+-------+ +-------+ |
+ | | Vorton | Block | Block | Block | ... | Block | | ||
+ | +--------+-------+-------+-------+ | ||
+ | </ | ||
+ | ===== Physisches Aufzeichnungsformat ===== | ||
+ | |||
+ | Die Aufzeichnung erfolgt in Blöcken zu je 32 Datenbytes. | ||
+ | Jeder Block hat folgenden Aufbau: | ||
+ | |||
+ | <ditaa noedgesep> | ||
+ | +--------+-----------------+-------------+--------------+------------+ | ||
+ | | Vorton | Trennschwingung | Blocknummer | Datenbereich | Pruefsumme | | ||
+ | +--------+-----------------+-------------+--------------+------------+ | ||
+ | </ | ||
+ | |||
+ | |||
+ | - Vorton: 14 Halbschwingung a 640 Hz, beim ersten Block 2000 Schwingungen | ||
+ | - Trennschwingung: | ||
+ | - Blocknummer: | ||
+ | - Datenbereich: | ||
+ | - Prüfsumme: 16-Bit-Addition über die Blocknummer und die 16 Datenwörter | ||
+ | |||
+ | Die Datenwörter sind Little-Endian-kodiert, | ||
+ | Es wird jeweils das Bit 0 zuerst gespeichert. | ||
+ | |||
+ | Bit-Codierung: | ||
+ | 0-Bit: 1 Vollschwingung mit 2560 Hz (2 Phasenwechsel nach jeweils 0,39 ms) | ||
+ | 1-Bit: 1 Halbschwingung mit 1280 Hz (1 Phasenwechsel nach 0,78 ms) | ||
+ | |||
+ | Mit Blocknummer und Prüfsumme zusammen besteht ein Block damit aus 36 Byte (= 18 Word). | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Es werden immer vollständige Blöcke aufgezeichnet, | ||
+ | auch wenn die angegeben Endadresse in der Mitte eines Blocks liegt. | ||
+ | Zwischen zwei Blöcken, d.h. zwischen dem letzten Phasenwechsel der Prüfsumme | ||
+ | und dem ersten Phasenwechsel des Vortons, gibt es eine etwa 2,5 ms lange Pause. | ||
+ | |||
+ | Damit passen ca. **400 KByte** auf eine Kassettenseite (30 min)! | ||
+ | |||
+ | ===== Logisches Aufzeichnungsformat ===== | ||
+ | |||
+ | |||
+ | ==== Original Z1013 ==== | ||
+ | |||
+ | |||
+ | Die Aufzeichnung enthält ausschließlich den zu sichernden Speicherbereich | ||
+ | ohne jegliche Verwaltungsinformationen. | ||
+ | |||
+ | Die Blocknummer wird außer zur Berechnung der Prüfsumme inhaltlich | ||
+ | nicht verwendet und kann deshalb jeden beliebigen Wert enthalten. | ||
+ | Die originalen Monitorprogramme schreiben als Blocknummer immer 0000h. | ||
+ | |||
+ | Block: | ||
+ | |||
+ | <ditaa noedgesep> | ||
+ | +------+-------+-----+--------+-----+ | ||
+ | | 0000 | word0 | ... | word15 | cks | | ||
+ | +------+-------+-----+--------+-----+ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Headersave ==== | ||
+ | |||
+ | |||
+ | Beim [[z1013: | ||
+ | (Anfangs-, End- und Startadresse, | ||
+ | vorangestellt. Dieser Kopfblock und der erste nachfolgende Datenblock | ||
+ | haben einen langen Vorton, die anderen Datenblöcke einen kurzen Vorton. | ||
+ | |||
+ | <ditaa noedgesep> | ||
+ | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ | ||
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | | ||
| | | | ||
- | --------------------------------------------------------------------------------- | + | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | | | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | | ||
- | | Namensblock | + | | |
- | --------------------------------------------------------------------------------- | + | +-------------------------------------------------------------------------------+ |
- | </code> | + | </ |
+ | |||
+ | Aufbau des Kopfblocks: | ||
+ | ^ Byte ^ Bedeutung | ||
+ | | 0, 1 | Anfangsadresse der Datei | | ||
+ | | 2, 3 | Endadresse | ||
+ | | 4, 5 | Startadresse bei Fall eines ausführbaren Programms (Dateityp: " | ||
+ | | 6-11 | frei (wird manchmal benutzt für CRC oder Autor) | ||
+ | | 12 | Dateityp (z.B. " | ||
+ | | 13-15 | Headersave-Kennung (3x D3h) | | ||
+ | | 16-31 | Dateiname, mit Leerzeichen aufgefüllt | ||
+ | |||
+ | Die Blocknummer hat bei Headersave eine inhaltliche Bedeutung, | ||
+ | anhand derer man die Blockreihenfolge überprüfen kann. | ||
+ | Als Blocknummer wird die jeweilige Blockanfangsadresse verwendet: | ||
+ | |||
+ | ^ Block ^ Blocknummer | ||
+ | | Kopfblock | ||
+ | | 1. Datenblock | Dateianfangsadresse | ||
+ | | 2. Datenblock | Dateianfangsadresse + 20h | | ||
+ | | 3. Datenblock | Dateianfangsadresse + 40h | | ||
+ | | ... | u.s.w. | ||
+ | |||
+ | Die Blocknummer 0FFFFh wird als Endeblock erkannt. | ||
+ | |||
+ | Aufgrund der Kompatibilität zum originalen Format kann eine Headersave-Aufzeichnung mit den originalen Monitorprogrammen geladen werden, wenn das Laden erst **nach** dem Kopfblock (Header) gestartet wird. | ||
+ | |||
+ | <ditaa noedgesep> | ||
+ | +--------+--------+--------+-------+-------+-------+ +-------+ | ||
+ | | vorton | Header | vorton | Block | Block | Block | ... | Block | | ||
+ | +--------+--------+--------+-------+-------+-------+ | ||
+ | ^ | ||
+ | | | ||
+ | hier starten | ||
+ | </ditaa> | ||
+ | |||
+ | ==== Tiny-Basic ==== | ||
+ | |||
+ | Auch beim **TINY-BASIC** (originales CSAVE-Kommando) wird ein zusätzlicher Header geschrieben. Dieser hat einen einfacheren Aufbau als der von Headersave. Das Tiny-BASIC-Verfahren stand Pate für das von R. Brosig entwickelte | ||
+ | |||
+ | Tiny-Basic-Kopf | ||
+ | |||
+ | <ditaa noedgesep> | ||
+ | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ | ||
+ | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | | ||
+ | | | ||
+ | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ | ||
+ | | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | | ||
+ | | Programmname, | ||
+ | +-------------------------------------------------------------------------------+ | ||
+ | </ | ||
+ | |||
+ | ==== Weitere ==== | ||
Neben dem Hausformat gibt es auch 10K-BASIC-Programme im Kassettenaufzeichnungsformat des Z9001 sowie Basicode-Programme im BASICODE3-Kassettenaufzeichnungsformat. | Neben dem Hausformat gibt es auch 10K-BASIC-Programme im Kassettenaufzeichnungsformat des Z9001 sowie Basicode-Programme im BASICODE3-Kassettenaufzeichnungsformat. | ||
- | ===== Formate der Emulatoren ===== | + | ====== Formate der Emulatoren |
- | ***.Z13** Originalformat des Z1013\\ | + | ***.z13** Originalformat des Z1013\\ |
also Bin-Datei (ohne Kopf) oder Tiny-Basic (Tiny-Basic-Programme haben Kopf ähnlich wie Headersave: nur aadr (1000), eadr und filename)\\ | also Bin-Datei (ohne Kopf) oder Tiny-Basic (Tiny-Basic-Programme haben Kopf ähnlich wie Headersave: nur aadr (1000), eadr und filename)\\ | ||
kein Headersave-Kopfblock | kein Headersave-Kopfblock | ||
- | ***.Z80** Header-Save-Programme\\ | + | ***.z80** Header-Save-Programme\\ |
32 Byte Vorblock (aadr, eadr, sadr, 6 byte frei, typ, | 32 Byte Vorblock (aadr, eadr, sadr, 6 byte frei, typ, | ||
3x 0d3h, 16 Zeichen Filename, mit Leerzeichen aufgefüllt. | 3x 0d3h, 16 Zeichen Filename, mit Leerzeichen aufgefüllt. | ||
Zeile 31: | Zeile 157: | ||
Müll, eine CRC-Summe oder andere Identifikatoren, | Müll, eine CRC-Summe oder andere Identifikatoren, | ||
+ | Sowohl bei *.z13 als auch bei *.z80 werden die Kopf-Daten der Blöcke nicht gespeichert. Die *.z13-Dateien sind damit reine Speicherdumps (außer Tiny-Basic, auch hier gibt es einen Header), bei *.z80 kommt noch der Headersave-Kopf davor. | ||
- | Sowohl bei Z13 als auch bei Z80 werden die Kopf-Daten der Blöcke nicht gespeichert. Die *.Z13-Dateien | + | Gebräuchlich sind eigentlich nur *.z80-Dateien. |
***.TAP** Arne Fitzenreiter: | ***.TAP** Arne Fitzenreiter: | ||
Zeile 39: | Zeile 166: | ||
* nur für wenige 10K-BASIC-Programme genutzt; gebräuchlicher war HSAVE (Headersave-Aufzeichnung als *.Z80-Datei) | * nur für wenige 10K-BASIC-Programme genutzt; gebräuchlicher war HSAVE (Headersave-Aufzeichnung als *.Z80-Datei) | ||
+ | (vp, jmue) | ||
+ | |||
+ | ====== Einlesen am PC ====== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Zum automatisierten Einlesen von 54 übergebenen Z1013-Kassetten habe ich Version 02/02 des Programms ein wenig modifiziert, | ||
+ | Wegen diverser Probleme mit langen Dateinamen werden als Programmnamen dabei einfach hochgezählte Nummern vergeben. Zwei kurze Perl-Programme **rename_z80.pl** und **rename_z13.pl** benennen die eingelesenen Dateien dann in einem Rutsch um und entfernen auch gleich noch Duplikate. | ||
+ | |||
+ | Nun braucht man bloß noch eine Kassette einlegen -- nach einer halben Stunde hat man 20..60 Programme eingelesen! | ||
+ | |||
+ | <WRAP clear></ | ||
+ | |||
+ | * {{: | ||
+ | |||
+ | ====== Ausgeben vom PC ====== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | <WRAP clear></ | ||
+ | |||
+ | * {{: | ||
+ | |||
+ | V0.2 2017/01/12 mit extra Swing am Ende, damit der letzte Block komplett gelesen wird\\ | ||
+ | V0.3 2017/02/15 Checkbox, um ohne Header auszugeben (orig. Z1013)\\ | ||
+ | V0.4 2017/07/21 lauffähig unter Windows 10, neues Hilfeformat | ||
+ |