Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
z1013:kassettenformate [2011/10/31 11:57] – [Einlesen am PC] volkerpz1013: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. <del>Es kam speziell auf dem Z1013 zum Einsatz und ist auf anderen Computern nicht verbreitet.</del> 
 + 
 +Das Kassetten-Magnetband-Interface wurde vom [[homecomputer:poly880|]] übernommen, nur mit anderer Bitrate. 
 +Das ist gut in der Monitorbeschreibung (ASM-Quellen) zu vergleichen: Es ist derselbe Code! Später wurde das Verfahren auch beim AC1 (SCCH) als "Turbo" verwendet (wieder andere Bautrate).((Vielen Dank an Johann Spannenkrebs für den Hinweis))
  
 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> 
-----------------------------------     --------- 
-| vorton | Block | Block | Block | ... | Block | 
-----------------------------------     --------- 
-</code> 
  
 +<ditaa noedgesep>
 ++--------+-------+-------+-------+     +-------+
 +| Vorton | Block | Block | Block | ... | Block |
 ++--------+-------+-------+-------+     +-------+
 +</ditaa>
 ===== Physisches Aufzeichnungsformat ===== ===== Physisches Aufzeichnungsformat =====
  
Zeile 17: Zeile 20:
 Jeder Block hat folgenden Aufbau: Jeder Block hat folgenden Aufbau:
  
-<code+<ditaa noedgesep
-+--------+-----------------+-------------+--------------+-----------+ ++--------+-----------------+-------------+--------------+------------+ 
-| Vorton | Trennschwingung | Blocknummer | Datenbereich | | Prüfsumme +| Vorton | Trennschwingung | Blocknummer | Datenbereich | Pruefsumme 
-+--------+-----------------+-------------+--------------+ +-----------+ ++--------+-----------------+-------------+--------------+------------+ 
-</code>+</ditaa>
  
  
-  - Vorton: 14 Vollschwingung a 640 Hz, beim ersten Block ca. 2000 Schwingungen+  - Vorton: 14 Halbschwingung a 640 Hz, beim ersten Block 2000 Schwingungen
   - Trennschwingung: 1 Vollschwingung a 1280 Hz   - Trennschwingung: 1 Vollschwingung a 1280 Hz
   - Blocknummer: 16 Bit, Bedeutung siehe "logisches Aufzeichnungsformat"   - Blocknummer: 16 Bit, Bedeutung siehe "logisches Aufzeichnungsformat"
Zeile 36: Zeile 39:
 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).
 +
 +{{:z1013:z1013_tape_block.png?300|ein Block}} {{:z1013:z1013_tape_block2.png?300|Blocknummer (von Headersave)}}
  
 Es werden immer vollständige Blöcke aufgezeichnet, Es werden immer vollständige Blöcke aufgezeichnet,
Zeile 58: Zeile 65:
  
 Block: Block:
-<code+ 
--------------------------------------+<ditaa noedgesep
 ++------+-------+-----+--------+-----+
 | 0000 | word0 | ... | word15 | cks |  | 0000 | word0 | ... | word15 | cks | 
-------------------------------------- ++------+-------+-----+--------+-----+ 
-</code>+</ditaa>
  
  
Zeile 68: Zeile 76:
  
  
-Beim [[z1013:software:headersave|]]-Format wird ein Kopfblock mit Verwaltungsinformationen+Beim [[z1013:software:headersave|]]-Format wird ein **zusätzlicher** Kopfblock mit Verwaltungsinformationen
 (Anfangs-, End- und Startadresse, Dateityp, Headersave-Kennung, Dateiname)  (Anfangs-, End- und Startadresse, Dateityp, Headersave-Kennung, Dateiname) 
 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 Vorton.
  
-<code+<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 |
 |   aadr  |   eadr  |  sadr          frei/Autor/CRC       | Typ| D3 | D3 | D3 | |   aadr  |   eadr  |  sadr          frei/Autor/CRC       | Typ| D3 | D3 | D3 |
----------------------------------------------------------------------------------++----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
 | 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, mit Leerzeichen aufgefüllt                 +|                      Programmname, mit Leerzeichen aufgefuellt                
---------------------------------------------------------------------------------- ++-------------------------------------------------------------------------------+ 
-</code>+</ditaa>
  
 Aufbau des Kopfblocks: Aufbau des Kopfblocks:
Zeile 93: Zeile 101:
 | 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 eine inhaltliche Bedeutung,
 anhand derer man die Blockreihenfolge überprüfen kann. anhand derer man die Blockreihenfolge überprüfen kann.
-Als Blocknummer wir die jeweilige Blockanfangsadresse verwendet:+Als Blocknummer wird die jeweilige Blockanfangsadresse verwendet:
  
 ^ Block         ^ Blocknummer                            | ^ Block         ^ Blocknummer                            |
Zeile 104: Zeile 112:
 | ...           | 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 kann mit den originalen Monitorprogrammen +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.
-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. +<ditaa noedgesep
- ++--------+--------+--------+-------+-------+-------    +-------+
-<code+
-----------------------------------------------------     ---------+
 | vorton | Header | vorton | Block | Block | Block | ... | Block | | vorton | Header | vorton | Block | Block | Block | ... | Block |
-----------------------------------------------------     --------- ++--------+--------+--------+-------+-------+-------    +-------
-</code>  +                    ^ 
 +                    | 
 +                    hier starten 
 +</ditaa>  
  
 ==== Tiny-Basic ==== ==== Tiny-Basic ====
Zeile 123: Zeile 131:
 Tiny-Basic-Kopf Tiny-Basic-Kopf
  
-<code+<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 |
 |   aadr  |   eadr  |                         alles 00                          | |   aadr  |   eadr  |                         alles 00                          |
----------------------------------------------------------------------------------++----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
 | 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, mit Leerzeichen aufgefüllt                 +|                      Programmname, mit Leerzeichen aufgefuellt                
---------------------------------------------------------------------------------- ++-------------------------------------------------------------------------------+ 
-</code>+</ditaa>
  
 ==== Weitere ==== ==== Weitere ====
Zeile 165: Zeile 173:
  
 Zum automatisierten Einlesen von 54 übergebenen Z1013-Kassetten habe ich Version 02/02 des Programms ein wenig modifiziert, so dass "automatisch speichern" auch wirklich funktioniert. Zum automatisierten Einlesen von 54 übergebenen Z1013-Kassetten habe ich Version 02/02 des Programms ein wenig modifiziert, so dass "automatisch speichern" auch wirklich funktioniert.
-Wegen diverser Probleme mit langen Dateinamen werden als Programmnamen dabei einfach hochgezählte Nummern vergeben. Ein kurzes Perl-Programm **rename_z80.pl** benennt die eingelesenen Dateien dann in einem Rutsch um und entfernt auch gleich noch Duplikate.+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! Nun braucht man bloß noch eine Kassette einlegen -- nach einer halben Stunde hat man 20..60 Programme eingelesen!
 +
 +<WRAP clear></WRAP>
 +
 +  * {{:z1013:kcload_auto.zip|}} + Perl-Programme
 +
 +====== Ausgeben vom PC ======
 +
 +{{:z1013:zsave.jpg?300 |}} Zum Ausgeben von .Z80-Headersave-Dateien auf den Z1013 müssen die Binärdaten wieder in Audiosignale zurückverwandelt werden. Im obigen KCLOAD funktioniert bei mir unter Windows 7 die Audio-Ausgabe gar nicht mehr; unter Windows 98 funktioniert die Audioausgabe, allerdings gibt KCLOAD keinen Headersave-Vorblock aus. Deshalb gibt es ein kleines 32-Bit-Programm **ZSAVE** von mir. Über Speichern kann das Audiosignal als WAV-Datei gespeichert werden.
 +
 +<WRAP clear></WRAP>
 +
 +  * {{:z1013:zsave.rar|}} Programm incl. Quellen (Delphi 10.2 Starter)\\ 
 +
 +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 
 +
  • z1013/kassettenformate.1320062234.txt.gz
  • Zuletzt geändert: 2011/10/31 11:57
  • von volkerp