Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| z1013:kassettenformate [2011/10/31 08:39] – [Tiny-Basic] volkerp | z1013:kassettenformate [2025/08/29 06:07] (aktuell) – 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. |
| + | |||
| + | Das Kassetten-Magnetband-Interface wurde vom [[homecomputer: | ||
| + | Das ist gut in der Monitorbeschreibung (ASM-Quellen) zu vergleichen: | ||
| 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. | 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. | ||
| Programm: | Programm: | ||
| - | <code> | + | |
| - | ---------------------------------- --------- | + | <a2s> |
| - | | vorton | + | #--------#-------#-------#-------# |
| - | ---------------------------------- --------- | + | | Vorton |
| - | </code> | + | #--------#-------#-------#-------# |
| + | </a2s> | ||
| ===== Physisches Aufzeichnungsformat ===== | ===== Physisches Aufzeichnungsformat ===== | ||
| Zeile 17: | Zeile 21: | ||
| Jeder Block hat folgenden Aufbau: | Jeder Block hat folgenden Aufbau: | ||
| - | <code> | + | <a2s> |
| - | +--------+ +-----------------+ +-------------+ +--------------+ +-----------+ | + | #--------#-----------------#-------------#--------------#------------# |
| - | | Vorton | + | | Vorton | Trennschwingung | Blocknummer | Datenbereich | Pruefsumme |
| - | +--------+ +-----------------+ +-------------+ +--------------+ +-----------+ | + | #--------#-----------------#-------------#--------------#------------# |
| - | </code> | + | </a2s> |
| - | - Vorton: 14 Vollschwingung | + | - Vorton: 14 Halbschwingung |
| - Trennschwingung: | - Trennschwingung: | ||
| - Blocknummer: | - Blocknummer: | ||
| Zeile 36: | Zeile 40: | ||
| 0-Bit: 1 Vollschwingung mit 2560 Hz (2 Phasenwechsel nach jeweils 0,39 ms) | 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) | 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, | Es werden immer vollständige Blöcke aufgezeichnet, | ||
| Zeile 42: | Zeile 50: | ||
| und dem ersten Phasenwechsel des Vortons, gibt es eine etwa 2,5 ms lange Pause. | 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 ===== | ===== Logisches Aufzeichnungsformat ===== | ||
| Zeile 55: | Zeile 64: | ||
| nicht verwendet und kann deshalb jeden beliebigen Wert enthalten. | nicht verwendet und kann deshalb jeden beliebigen Wert enthalten. | ||
| Die originalen Monitorprogramme schreiben als Blocknummer immer 0000h. | Die originalen Monitorprogramme schreiben als Blocknummer immer 0000h. | ||
| + | |||
| + | Programm: | ||
| + | |||
| + | <a2s> | ||
| + | # | ||
| + | | Vorton | Block | Block | Block | ... | Block | | ||
| + | # | ||
| + | </ | ||
| Block: | Block: | ||
| - | < | ||
| - | ------------------------------------- | ||
| - | | 0000 | word0 | ... | word15 | cks | | ||
| - | ------------------------------------- | ||
| - | </ | ||
| + | <a2s> | ||
| + | # | ||
| + | | 0000 | word0 | ... | word15 | cks | | ||
| + | # | ||
| + | </ | ||
| ==== Headersave ==== | ==== Headersave ==== | ||
| - | Beim [[z1013: | + | Beim [[z1013: |
| (Anfangs-, End- und Startadresse, | (Anfangs-, End- und Startadresse, | ||
| vorangestellt. Dieser Kopfblock und der erste nachfolgende Datenblock | vorangestellt. Dieser Kopfblock und der erste nachfolgende Datenblock | ||
| - | haben einen langen Vorton, die anderen Datenblöcke einen kurzen. | + | haben einen langen Vorton, die anderen Datenblöcke einen kurzen |
| - | <code> | + | <a2s> |
| - | --------------------------------------------------------------------------------- | + | #--------#--------#--------#-------#-------#-------# #-------# |
| + | | vorton | Header | vorton | Block | Block | Block | ... | Block | | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | Header: | ||
| + | |||
| + | < | ||
| + | # | ||
| | 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 | | ||
| - | | Programmname, | + | | |
| - | --------------------------------------------------------------------------------- | + | #-------------------------------------------------------------------------------# |
| - | </code> | + | </a2s> |
| Aufbau des Kopfblocks: | Aufbau des Kopfblocks: | ||
| Zeile 92: | Zeile 118: | ||
| | 16-31 | Dateiname, mit Leerzeichen aufgefüllt | | 16-31 | Dateiname, mit Leerzeichen aufgefüllt | ||
| - | Die Blocknummer hat nun eine inhaltliche Bedeutung, | + | Die Blocknummer hat bei Headersave |
| anhand derer man die Blockreihenfolge überprüfen kann. | anhand derer man die Blockreihenfolge überprüfen kann. | ||
| - | Als Blocknummer | + | Als Blocknummer |
| ^ Block ^ Blocknummer | ^ Block ^ Blocknummer | ||
| Zeile 103: | Zeile 129: | ||
| | ... | u.s.w. | | ... | u.s.w. | ||
| - | Die Dateianfangsadresse steht in den ersten beiden Bytes des Kopfblocks. | + | Die Blocknummer 0FFFFh wird als Endeblock erkannt. |
| - | Eine Headersave-Aufzeichnung | + | Aufgrund der Kompatibilität zum originalen Format kann eine Headersave-Aufzeichnung mit den originalen Monitorprogrammen geladen werden, wenn das Laden erst **nach** dem Kopfblock |
| - | geladen werden, wenn das Laden erst nach dem Kopfblock gestartet wird. | + | |
| - | Bei Headersave wird also ein **zusätzlicher** Kopf aufgezeichnet. Lässt man diesen Block weg, kann der Rest mit den originalen z1013-Laderoutinen eingelesen werden. Bei Headersave steht im Blockkopf die Speicheradresse des ersten Bytes im Block; also die Adresse, an die der Block (normalerweise) wieder zurückzuladen ist. FFFFh wird als Endeblock erkannt. | + | <a2s> |
| - | + | #--------#--------#--------#-------#-------#-------# | |
| - | <code> | + | |
| - | ---------------------------------------------------- | + | |
| | vorton | Header | vorton | Block | Block | Block | ... | Block | | | vorton | Header | vorton | Block | Block | Block | ... | Block | | ||
| - | ---------------------------------------------------- | + | #--------#--------#--------#-------#-------#-------# |
| - | </code> | + | ^ |
| + | | | ||
| + | hier starten | ||
| + | </a2s> | ||
| ==== Tiny-Basic ==== | ==== 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 | 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 | ||
| + | |||
| + | <a2s> | ||
| + | # | ||
| + | | vorton | Header | vorton | Block | Block | Block | ... | Block | | ||
| + | # | ||
| + | </ | ||
| Tiny-Basic-Kopf | Tiny-Basic-Kopf | ||
| - | <code> | + | <a2s> |
| - | --------------------------------------------------------------------------------- | + | #----#----#----#----#----#----#----#----#----#----#----#----#----#----#----#----# |
| | 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 | | ||
| - | | Programmname, | + | | |
| - | --------------------------------------------------------------------------------- | + | #-------------------------------------------------------------------------------# |
| - | </code> | + | </a2s> |
| ==== Weitere ==== | ==== Weitere ==== | ||
| Zeile 158: | Zeile 190: | ||
| (vp, jmue) | (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 | ||
| + | |||