Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » wav-dateien erzeugen » Themenansicht

Autor Thread - Seiten: -1-
000
20.09.2010, 15:05 Uhr
funkheld



so, jetzt bin ich schon wieder neugierig.
ich habe für meinem "MPF1" ein programm mit gb32-basic geschrieben um eine kompilierte bin-datei(z80) in eine wav-datei umzuwandeln(32000hz 8bit/mono).
klappt wunderbar, der "MPF1" hat auch nur 2kb speicher.

ich denke so etwas ist auch für den j1013 möglich für das format von diesem monitor : Monitorprogramm 2.02 .

wer kann mir die flanken nennen in ms für die datenaufzeichnung fon binärdateien und wie sehen die vorspanndaten aus usw.


gruss
peter
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
20.09.2010, 21:34 Uhr
jmueller



Vor fast 20 Jahren hatte ich das Format mal analysiert
und auf dem Atari ST implementiert,
um damit Dateien vom Atari auf den Z1013 übertragen zu können.
Was ich davon noch weiß, möchte ich dir gern mitteilen:

Also eine auf Kassette gespeicherte Datei besteht aus Blöcken.
Jeder Block besteht aus:
1. Vorton (bzw. Synchronisationston)
2. Trennschwingung
3. 2 Bytes Blocknummer bzw. Blockadresse
4. 32 Nutzbytes
5. 2 Bytes Prüfsumme (einfache Addition der vorherigen 34 Bytes)

Beim ersten Block ist der Vorton überlicherweise 1 bis 3 Sekunden lang,
bei den weiteren Blöcken nur ganz kurz (praktich nicht einzeln hörbar).

Das originale Monitorprogramm schreibt die Blockanfangsadresse
in das Feld Blocknummer (oder wie man das Feld auch immer bezeichnen soll).
Diese Blocknummer bzw. Blockanfangsadresse wird beim Laden
jedoch nicht ausgewertet. Man gibt ja die Ladeadresse eh manuell vor.

Dieses originale Z1013-Kassettenaufzeichnungsverfahren wurde später
zum Headersave-Format weiterentwickelt,
aber nicht vom Hersteller, sondern von einem Computerclub.
Die 4K-Monitorprogramme sowie mein 2K-Monitorprogramm (JM 1992)
beherrschen dieses Headersave-Format.
Dabei wird vor die Datei ein Kopfblock mit Adressen,
Dateityp und Dateiname gesetzt.
Der Vorblock sowie der erste Datenblock haben einen langen Vorton,
d.h.man kann diese beiden Teile akustisch gut auseinanderhalten.
Damit ist es möglich, eine Headersave-Datei auch mit dem originalen
Monitorprogramm einzulesen.
Man startet (Drücken der Enter-Taste) ganz einfach das Einlesen
erst nach dem Vorblock.

Ich glaube noch zu wissen, dass beim Headersave-Format
in das Feld Blocknummer nicht mehr die Blockanfangsadresse,
sondern eine echte Blocknummer hineingeschrieben wird
(0: Vorblock, 1: erster Datenblock usw).
Diese werden beim Einlesen auch geprüft,
d.h. man kann auch zurückspulen, wenn ein Block nicht gelesen werden konnte,
und versucht es nochmal.

Die Frequenzen für Vorton, Trennschwingung, 0-Bit und 1-Bit
weiß ich leider nicht mehr.
Die müsstest du dir selbst ermitteln,
z.B. durch Auszählen der Taktzyklen der Block-Save-Routine
(habe ich damals auch so gemacht).

Hier ist der Quellcode zum speichern eines Blocks:

Quellcode:
LD   DE,<laenge_vorton>   ; 2000h bzw. 0Dh
BSMK:  LD   B,70H
L40:   DJNZ L40
       CALL L56
       DEC  DE
       LD   A,E
       OR   D
       JR   NZ,BSMK
       LD   C,2
L41:   LD   B,35H
L42:   DJNZ L42
       CALL L56
       DEC  C
       JR   NZ,L41
       PUSH IX
       POP  DE
       LD   B,12H
L43:   DJNZ L43
       CALL L49
       LD   B,0FH
L44:   DJNZ L44
       LD   C,10H
L45:   LD   E,(HL)
       INC  HL
       LD   D,(HL)
       ADD  IX,DE
       INC  HL
       PUSH BC
       CALL L49
       POP  BC
       DEC  C
       JR   Z,L47
       LD   B,0EH
L46:   DJNZ L46
       JR   L45
L47:   PUSH IX
       POP  DE
       LD   B,10H
L48:   DJNZ L48
       CALL L49
       RET
L49:   LD   C,10H
L50:   SRL  D
       RR   E
       JR   NC,L52
       LD   B,3
L51:   DJNZ L51
       NOP
       JR   L53
L52:   CALL L56
L53:   LD   B,19H
L54:   DJNZ L54
       CALL L56
       DEC  C
       RET  Z
       LD   B,15H
L55:   DJNZ L55
       JR   L50
L56:   IN   A,(2)
       XOR  80H
       OUT  (2),A
       RET

L56 erzeugt einen Phasenwechsel am Kassettenrecorderanschluss.


MfG
Jens
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
20.09.2010, 23:14 Uhr
funkheld



na , danke für die info.

da werde ich mich mal ran machen.

gruss
peter
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
21.09.2010, 07:57 Uhr
jmueller



Als ich mir den Quellcode nochmal genauer angeschaut habe,
ist mir ein kleiner Fehler in meiner Beschreibung aufgefallen:
Die Daten werden wortweise (je 2 Bytes) geschrieben,
und die Prüfsumme wird auch durch wortweise Addition
der vorherigen 17 Datenworte ermittelt.
Also:
1. Vorton
2. Trennschwingung
3. 1 Wort Blocknummer
4. 16 Worte Nutzdaten (32 Bytes)
5. 1 Wort Prüfsumme

Jens


Quellcode:
;--- Vorton
       LD   DE,<laenge_vorton>   ; 2000h bzw. 0Dh
BSMK:  LD   B,70H
L40:   DJNZ L40
       CALL L56
       DEC  DE
       LD   A,E
       OR   D
       JR   NZ,BSMK

;--- Trennschwingung
       LD   C,2
L41:   LD   B,35H
L42:   DJNZ L42
       CALL L56
       DEC  C
       JR   NZ,L41

;--- Blocknummer schreiben (bzw. was auch immer in IX steht)
       PUSH IX
       POP  DE
       LD   B,12H
L43:   DJNZ L43
       CALL L49

;--- 16 Datenworte schreiben
       LD   B,0FH
L44:   DJNZ L44
       LD   C,10H
L45:   LD   E,(HL)
       INC  HL
       LD   D,(HL)
       ADD  IX,DE     ;Datenwort auf Pruefsumme addieren
       INC  HL
       PUSH BC
       CALL L49
       POP  BC
       DEC  C
       JR   Z,L47
       LD   B,0EH
L46:   DJNZ L46
       JR   L45

;--- Pruefsumme schreiben
L47:   PUSH IX
       POP  DE
       LD   B,10H
L48:   DJNZ L48
       CALL L49
       RET

; --- Wort schreiben
L49:   LD   C,10H
L50:   SRL  D
       RR   E
       JR   NC,L52
       LD   B,3
L51:   DJNZ L51
       NOP
       JR   L53
L52:   CALL L56
L53:   LD   B,19H
L54:   DJNZ L54
       CALL L56
       DEC  C
       RET  Z
       LD   B,15H
L55:   DJNZ L55
       JR   L50

;--- Phasenwechsel erzeugen
L56:   IN   A,(2)
       XOR  80H
       OUT  (2),A
       RET


Dieser Beitrag wurde am 21.09.2010 um 08:02 Uhr von jmueller editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek