OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů
Právě je 10.10.2024, 13:57

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 18 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
PříspěvekNapsal: 24.01.2019, 19:07 
Offline
Prvnička

Registrován: 06.12.2016, 11:34
Příspěvky: 10
Has thanked: 0 time
Been thanked: 0 time
Ahoj všem,

po 27 letech jsem objevil magnetofonovou kazetu se záznamem mých výtvorů na osmibitovém stroji PLAN80A.

Původní počítač už nemám, pokoušel jsem se to dekódovat pomocí PMD 85 PTP Manager od pana Bórika, ale neúspěšně.

Mátě někdo zkušenosti s touto věcí?

Vzorek záznamu je tady: https://drive.google.com/open?id=128eX3 ... bBv1dWEP-r

Díky za pomoc.

Tonda


Nahoru
 Profil  
 
PříspěvekNapsal: 24.01.2019, 22:39 
Offline
Pan Generální
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 2089
Bydliště: Most, Praha
Has thanked: 944 times
Been thanked: 740 times
Možná naemulovat dekódování podle výpisu zdrojáku ovládacího programu magnetofonu? http://www.sapi.cz/plan80/data/1d_lst.php

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
PříspěvekNapsal: 25.01.2019, 10:36 
Offline
Prvnička

Registrován: 06.12.2016, 11:34
Příspěvky: 10
Has thanked: 0 time
Been thanked: 0 time
Panda38 píše:
Možná naemulovat dekódování podle výpisu zdrojáku ovládacího programu magnetofonu? http://www.sapi.cz/plan80/data/1d_lst.php

Děkuji Vám za odpověď. Samotná emulace ovládacího programu stačit nebude, v procesu zpracování byl zařazen i poměrně sofistikovaný hardware - v kontextu tehdejší doby samozřejmě: http://sapi.cz/plan80/prilohy.php#odkazs11

rombor píše:
kunc75 píše:
Původní počítač už nemám, pokoušel jsem se to dekódovat pomocí PMD 85 PTP Manager od pana Bórika, ale neúspěšně.
Nuž, toto PTP Manager ani prečítať nemohol. Už podľa posluchu je jasné, že to nie je záznam, ktorý by sa podobal záznamu z PMD 85.

I Vám děkuji za odpověď, tudy tedy cesta nevede, alespoň jsem ušetřen dalších marných pokusů. Vycházel jsem z informací o PLAN80A, kde byla zmiňována určitá kompatibilita s PMD85.


Nahoru
 Profil  
 
PříspěvekNapsal: 25.01.2019, 14:07 
Offline
Pan Generální
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 2089
Bydliště: Most, Praha
Has thanked: 944 times
Been thanked: 740 times
Ten hardware není nic zázračného, nedělá nic zvláštního. Dělá zjednodušeně jenom to, že 512 kHz dělí děličkami na volitelnou záznamovou rychlost 600 až 4800 Baud, datovým vstupem přepíná mezi úzkým a širokým pulsem a přes Frame se software synchronizuje zda byl puls odeslaný. Přes odporový převodník dělá buď digitální nebo analogový výstup. Stačí tedy jen v záznamu rozlišit 0 a 1 podle širokého a úzkého pulzu (mezery se mohou ignorovat, 1 bit je 1 puls, úzký impuls je "1", široký "0") a podle zdrojáku jen detekovat způsob formátování dat. Ve zdrojáku funkce BYTOUT dělá zápis 1 bajtu na kazetu, z toho se může vyjít (start bit, 8 datových bitů v pořadí od nižších bitů k vyšším, 2 stop bity). Funkce WRBUF zapisuje 1 blok dat - mezera z "1", 3x preamble 10h, data bloku, název 10 znaků, číslo bloku, číslo souboru, kontrolní součet, preamble 10h, koncová 0, mezera z "1".
Příloha:
pulzy.PNG
pulzy.PNG [ 20.84 KiB | Zobrazeno 16339 krát ]

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
PříspěvekNapsal: 25.01.2019, 19:50 
Offline
Kecka

Registrován: 08.06.2016, 18:25
Příspěvky: 48
Has thanked: 5 times
Been thanked: 21 times
Panda38 to popsal tak dobře, že jsem zkusil napsat program na převod toho zvuku na bajty a hele co mi z toho vypadlo...
Vypadá to na program v BASICU, kde místo příkazu jsou jednobajtové tokeny. Ale kvalita toho zvuku je hrozná, takže rozluštění bitu 0/1 je někdy problematické...


Přílohy:
kazeta.png
kazeta.png [ 39.51 KiB | Zobrazeno 16302 krát ]

_________________
http://maximalne.8u.cz
Nahoru
 Profil  
 
PříspěvekNapsal: 26.01.2019, 12:17 
Offline
Pan Generální
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 2089
Bydliště: Most, Praha
Has thanked: 944 times
Been thanked: 740 times
Možná kolísá rychlost záznamu a muselo by se průběžně synchronizovat na šířky pulzů.

Jestli jsem správně pochopil výpis Tiny Basicu (možná že ne), měl by řádek programu začínat číslem řádku v binární formě (2 bajty) a za ním řádek programu v textově formě ukončený jedním CR (0Dh).

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
PříspěvekNapsal: 26.01.2019, 12:38 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1588
Bydliště: u Prahy
Has thanked: 47 times
Been thanked: 406 times
Panda38 píše:
Jestli jsem správně pochopil výpis Tiny Basicu (možná že ne), měl by řádek programu začínat číslem řádku v binární formě (2 bajty) a za ním řádek programu v textově formě ukončený jedním CR (0Dh).

A tokeny nejsou, příkazy jsou jako normální text, ale lze je zkracovat tečkou.
P. ve výpisu je tedy PRINT.

Vypadá to, že se občas přečte špatně bit (VINUTI MA ZAVITU, zAVITU, ...).


Nahoru
 Profil  
 
PříspěvekNapsal: 26.01.2019, 15:22 
Offline
Prvnička

Registrován: 06.12.2016, 11:34
Příspěvky: 10
Has thanked: 0 time
Been thanked: 0 time
Potvrzuji, že se jedná o programy psané v PLAN80A TINY BASIC V3Q. Vliv kolísání rychlosti záznamu, resp. synchronizace se záznamem nejspíš musela být nějak softwarově ošetřena, neboť si matně vzpomínám, že když jsem nahrával programy z kazety do počítače, kolísání bylo slyšitelné, ale nahrávání neklopýtlo a bylo vždycky v pořádku. Je to přece jen skoro 30 let, možná za tu dobu pásek degradoval.

Obdivuji přehled Panda38 a schopnosti zdenek6, na základě dostupných informací záznam dekódovat.

zdenek6, pokud je to možné, mohl bych poprosit o poskytnutí PLAN80Mgf.EXE?

Děkuji.


Nahoru
 Profil  
 
PříspěvekNapsal: 26.01.2019, 20:57 
Offline
Kecka

Registrován: 08.06.2016, 18:25
Příspěvky: 48
Has thanked: 5 times
Been thanked: 21 times
Citace:
A tokeny nejsou, příkazy jsou jako normální text, ale lze je zkracovat tečkou.

No jo, tokeny tam samozřejmě nejsou, zmátlo mě to zkracování příkazů, přitom hned vedle je GOTO/IF...
Zapracoval jsem na detekci bitu: záznam je rozdělen do bloků a u každého používám úvodní posloupnost jedniček ("pilotní tón") pro určení správné prahové hodnoty, kdy to je jednička a kdy nula.
Program nakonec umí převést celý wav soubor do textových souborů se zdrojovým kódem v BASICu. Samozřejmě si ho nenechám pro sebe, stáhnout se dá zde: http://maximalne.8u.cz/plan80a-analyzator-zvukoveho-zaznamu/
Tak snad poslouží dobře.

Mimochodem, jaké kazetopáskové zařízení bylo použito?

_________________
http://maximalne.8u.cz


Nahoru
 Profil  
 
PříspěvekNapsal: 26.01.2019, 22:42 
Offline
Kecálek

Registrován: 28.10.2016, 21:03
Příspěvky: 122
Has thanked: 13 times
Been thanked: 50 times
Tak když to mělo podle popisu Panda38 chodit, tak jsem si to zkusil taky, a vážně z toho něco leze. Ale v některých místech se mi to nechytá, buď tam přebývají nebo chybí bity. Taková místa jsou označená dvojicí znaků [] (tj. tyhle znaky v původních datech nejsou).

Vzal jsem část z toho záznamu, kde výsledek vypadal smysluplně, a pak jsem ho ručně rozdělil na řádky, jestli tam bude nějak líp vidět struktura. Potvrdilo se, že bloky začínají 3x znakem 10h, ale pak, kde mají začínat data, tak je jeden znak 'A' 41h, nebo někdy 04h. To už tam možná dává samotný Basic. A možná by to šlo ještě někde dohledat, pokud od toho Basicu je zdroják.

Každopádně na nějaké restaurování by to asi chtělo lépe sejmout ta data do počítače. V některých místech je signál silný, ale jinde je mnohem slabší, a tam to asi bude dělat problém. I když to jsem podrobně nezkoumal, kde jsou ty problémy, jestli to jsou zrovna ta místa potichu. Ono se v tom dá dost špatně vyznat (myslím vykoukat okem jednotlivé bajty v těch datech zvuku, to mi teda zatím nejde).
Kód:
\x10\x10\x10A
$!\x04
\x0a\x00CLS\x0d
\x14\x00CURS 8,2:P.*1," VYPOCET TRANSFORMATORU "\x0d
\x1e\x00P.:P."ZADEJ ROZMERY STREDNIHO SLOUPKU (V MM)"\x0d
(\x00P.:INPUT A,B\x0d
2\x00P.:P."ZADEJ VYSTUPNI NAPETI (VE V)"\x0d
<\x00P.:INPUT U\x0d
F\x00S=A*B:C=S/10:P=C*C*10\x0d
P\x00N=4500/S\x0d
Z\x00R=N*220\x0d
d\x00K=N*U+N*U/10\x0d
n\x00I=P/220\x0d
x\x00Y=P/U-(P/U)/10\x0f
\x82\x00
TRAFO\xa0\x00\x00[]\x00[]\x01\xc0\x10\x00[]\xfe[]\xff[]\xff[]
\x10\x10\x10A
CURS 0,13\x0d
\x8c\x00E=P/1000:F=E*1000\x0d
\x96\x00G=(P-F)/100\x0d
\xa0\x00P."MAXIMALNI VYKON TRAFA JE ",#1,E,".",#1,G," W."\x0d
\xb4\x00P.:P."PRIMARNI VINUTI MA ",#1,R," ZAVITU"\x0d
\xbe\x00P."DRATEM O PRUMERU ",\x0d
\xc8\x00IF I<13 P."0.08",:GOTO300\x0d
\xd2\x00IF I<21 P."0.1",:GOTO300\x0d
\xdc\x00IF I<46 P."0.15",:GOTO300\x0d
\xe6\x00IF I<
TRAFO\xa0\x00\x00\x00\x00\x00\x03\x01\x91\x10\x00[]\xfc[]\xff[]
\x10\x10\x10A
81 P."0.2",:GOTO300\x0d
\xf0\x00IF I<181 P."0.3",:GOTO300\x0d
,\x01P." MM."\x0d
6\x01P.:P."SEKUNDARNI VINUTI MA ",#1,K," ZAVITU"\x0d
@\x01P."DRATEM O PRUMERU ",\x0d
\x90\x01IF Y<13 P."0.08",:GOTO500\x0d
\x9a\x01IF Y<21 P."0.1",:GOTO500\x0d
\xa4\x01IF Y<46 P."0.15",:GOTO500\x0d
\xae\x01IF Y<81 P."0.2",:GOTO500\x0d
\xb8\x01IF Y<181 P."0
TRAFO\xa0\x00[]\x00[]\x00[]\x10\x00[]\xfc[]\xfe[]
\x10\x10\x10A
.3",:GOTO500\x0d
\xc2\x01IF Y<321 P."0.4",:GOTO500\x0d
\xcc\x01IF Y<501 P."0.5",:GOTO500\x0d
\xd6\x01IF Y<1281 P."0.8",:GOTO500\x0d
\xe0\x01IF Y<2401 P."1",:GOTO500\x0d
\xea\x01P."VETSIM NEZ 1 MM.":GOTO510\x0d
\xf4\x01P." MM."\x0d
\xfe\x01P.:P."MAXIMANI SEKUNDARNI PROUD JE ",#1,Y," MA."\x0d
\x03\x02P.:P.:FOR J=0TO43\x0d
\x08\x02P."*",\x0d
\x12\x02BEEP1:
TRAFO\xa0\x00\x00[]\x00\x00\x05\x01\x0f\x10\x00[]\xf8[]\xff[]
\x10\x10\x10\x04
NEXT J\x0d
\x1c\x02IF INCHAR =0 GOTO 540\x0d
&\x02GOTO10\x0d
\x1a\x00


Upraveno: několik málo míst s [] už nahoře zmizelo


Nahoru
 Profil  
 
PříspěvekNapsal: 27.01.2019, 00:48 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1588
Bydliště: u Prahy
Has thanked: 47 times
Been thanked: 406 times
Citace:
buď tam přebývají nebo chybí bity.

Zdá se mi, že nechybí nebo nepřebávají, spíš se bit načte nesprávně (1 místo 0).
Na několika místech je viditelně třeba zbytečně nahozený nejvyšší bit ve znaku.

Citace:
Každopádně na nějaké restaurování by to asi chtělo lépe sejmout ta data do počítače.


Pro Apple II vznikl software, který má upravovat kvalitu nasnímaného wavu. Něco podobného by se hodilo i pro rekonstrukce na ostatních počítačích.
Program není dlouhý, třeba by si ho někdo zvládl upravit.
https://github.com/cmosher01/Apple-II-Cassette-Recover/wiki


Nahoru
 Profil  
 
PříspěvekNapsal: 27.01.2019, 01:27 
Offline
Pan Generální
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 2089
Bydliště: Most, Praha
Has thanked: 944 times
Been thanked: 740 times
To už vypadá hodně dobře. Ještě změnit binární číslo řádku na čitelnou formu a odstranit hlavičky bloků:
Kód:
10 CLS
20 CURS 8,2:P.*1," VYPOCET TRANSFORMATORU "
30 P.:P."ZADEJ ROZMERY STREDNIHO SLOUPKU (V MM)"
40 P.:INPUT A,B
50 P.:P."ZADEJ VYSTUPNI NAPETI (VE V)"
60 P.:INPUT U
70 S=A*B:C=S/10:P=C*C*10
80 N=4500/S
90 R=N*220
100 K=N*U+N*U/10
110 I=P/220
120 Y=P/U-(P/U)/10
130 CURS 0,13
140 E=P/1000:F=E*1000
150 G=(P-F)/100
160 P."MAXIMALNI VYKON TRAFA JE ",#1,E,".",#1,G," W."
180 P.:P."PRIMARNI VINUTI MA ",#1,R," ZAVITU"
190 P."DRATEM O PRUMERU ",
200 IF I<13 P."0.08",:GOTO300
210 IF I<21 P."0.1",:GOTO300
220 IF I<46 P."0.15",:GOTO300
230 IF I<81 P."0.2",:GOTO300
240 IF I<181 P."0.3",:GOTO300
300 P." MM."
310 P.:P."SEKUNDARNI VINUTI MA ",#1,K," ZAVITU"
320 P."DRATEM O PRUMERU ",
400 IF Y<13 P."0.08",:GOTO500
410 IF Y<21 P."0.1",:GOTO500
420 IF Y<46 P."0.15",:GOTO500
430 IF Y<81 P."0.2",:GOTO500
440 IF Y<181 P."0.3",:GOTO500
450 IF Y<321 P."0.4",:GOTO500
460 IF Y<501 P."0.5",:GOTO500
470 IF Y<1281 P."0.8",:GOTO500
480 IF Y<2401 P."1",:GOTO500
490 P."VETSIM NEZ 1 MM.":GOTO510
500 P." MM."
510 P.:P."MAXIMANI SEKUNDARNI PROUD JE ",#1,Y," MA."
515 P.:P.:FOR J=0TO43
520 P."*",
530 BEEP1:NEXT J
540 IF INCHAR =0 GOTO 540
550 GOTO10

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
PříspěvekNapsal: 27.01.2019, 16:55 
Offline
Kecálek

Registrován: 28.10.2016, 21:03
Příspěvky: 122
Has thanked: 13 times
Been thanked: 50 times
Pro doplnění ještě obrázek, jak vypadá signál ve wavu. Je tam jakýsi patrný rozdíl mezi šířkou 0 a 1 pulzu, ale jsou si dosti podobné.


Přílohy:
plan-mgf.png
plan-mgf.png [ 3.85 KiB | Zobrazeno 9731 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 28.01.2019, 18:59 
Offline
Radil

Registrován: 24.12.2014, 16:11
Příspěvky: 432
Has thanked: 37 times
Been thanked: 101 times
Dělal jsem nějaké pokusy s kazetami ze ZX Spectra. Formát záznamu je sice odlišný, nicméně i zde dlouhá vlna=1, krátká vlna=0

Takže:
Téměř vždy signál plave, tj. kolísá mu ss složka. I když signál je víceméně symetrický vůči vodorovné ose. Důvod je jednoduchý, signálová cesta mgf je kapacitně vázaná s poměrně velkými kapacitami, aby stroj přenášel dobře i basy. Používá se přeci primárně na muziku. A kondenzátory se nabíjejí a vybíjejí.
Je tedy nutné udělat kruhový buffer, vzorky z wavu do něj zapisovat, průběžně vyhodnocovat minimální a maximální vzorek a z nich průměr. A proti tomu průměru vstupní signál testovat.

Zde je příslušný kousek z mého emulátoru Ondry v Javě.
první funkce je konstruktor, který inicializuje buffer
do druhé se vstupuje s 8bit vzorkem bez znaménka a výstupem je obdélník. Z toho se pak v emulátoru detekují hrany signálu.
Kód:
public class TapeSignalProc {
   
    private final int init = 128;
   
    private int buff[];
    private int buffsize;
    private int head;
    private int min, max, avg;
   
    public TapeSignalProc(int size) {
        buffsize = size;
        buff = new int[size];
        head = 0;
        for(int n=0; n<buffsize; n++) {
            buff[n] = init;
        }
    }
   
    public boolean addSample(int sample) {
        buff[head] = sample;
        max = init;
        min = init;
        for(int n=0; n<buffsize; n++) {
            if (buff[head] > max) {
                max = buff[head];
            }
            if (buff[head] < min) {
                min = buff[head];
            }
            head++;
            if (head==buffsize) {
                head = 0;
            }
           
        }
        head++;
        if (head==buffsize) {
            head = 0;
        }
           
        avg = (min + max) / 2
        return (sample > avg);
    }
}


Tenhle kousek kódu spolu s běžným měřením intervalu mezi hranami mi v Ondrovi přečetl zatím všechny wavy, co mi lidi poslali. Tedy pokud neměly vyloženě výpadek.

Jak z oscilogramu vyplývá, tak okolní bity se někdy docela ovlivňují, je to vidět třeba na sekvenci 101. Magnetický záznam je také od přírody dosti kmitočtově závislý, zvláště, když má někdo blbě seřízenou kolmost hlavy.

Stálo by za to vyvinout nějaký adaptabilní algoritmus, který by opravdu nějak analyzoval ty vlnovky. Jelikož všechny počítače jsou v podstatě o vzdálenosti hran v signálu, udělat něco univerzálního, do čeho by lezl wav a z něj by lezl soubor, kde jsou vzdálenosti mezi hranami. No a k tomu už je sranda udělat programy pro jednotlivé počítače.

Takhle je to udělané i v signálovém procesoru, co zpracovává signál z hlaviček ve skutečném HDD.

Možná by tu někdo dokázal rozpracovat takový algoritmus...


Nahoru
 Profil  
 
PříspěvekNapsal: 28.01.2019, 19:03 
Offline
Pan Generální
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 2089
Bydliště: Most, Praha
Has thanked: 944 times
Been thanked: 740 times
Brát za průchod nulou střed mezi špičkami vypadá být dobrá metoda. Jen v bufferu rozlišit kdy se mění křivka na opačný směr, aby se vyhodnotila jen 1 hrana - tedy jen sledovat znaménko rozdílu sousedních vzorků. Tj.:
- hledám maximum
- rozdíl je negativní?
- uchovám maximum a jeho čas
- hledám minimum
- rozdíl je pozitivní?
- uchovám minimum a jeho čas
- z rozdílu minima a maxima interpoluji přesný čas středu mezi nimi, to je 1 hrana signálu
Rozdíl vzorků na hraně považovat za platný jen pokud dosáhne nějaké minimální hodnoty, aby se tím odfiltrovaly malé šumy. Na hledání minima a maxima signálu není potřeba kruhový buffer, jen si uchovávat dosaženou nejlepší nalezenou hodnotu hranice a její čas.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 18 ]  Přejít na stránku 1, 2  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz