OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 20:16

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 4 ] 
Autor Zpráva
PříspěvekNapsal: 15.09.2017, 13:11 
Offline
Nemluva

Registrován: 15.09.2017, 12:35
Příspěvky: 4
Has thanked: 0 time
Been thanked: 0 time
Ahoj, snažím se napsat generátor wav souboru se signálem, který by umělo přečíst ATARI800 s kazeťákem. Samozřejmě znám utilitky cas2wav a wav2cas, ale 1. nelíbí se mi, 2. učím se psát v Go, 3. chci :)
Mám následující setup: notebook se zvukovkou -> kazetový adaptér do auta -> Kazeťák XC12 -> ATARI 800XE (Game System verze)
WAVka, vygenerovaná pomocí cas2wav to čte na jedničku, ale mnou vygenerovaný wav to nechytá - nemám ani "prdící zpětnou vazbu" od Atarka, v repráku slyším jen samotný signál.
Pro upřesnění: jak můžete vidět, do prvního vygenerovaného záznamu cpu nesmyslná data, ale to by mělo být jedno - jakmile se jedná o validní formát ATARI záznamu, tak by ho měl systém dekodovat, zaprdět si do repráku a pak případně vyhodit ERROR, ale tak daleko se nedostanu, někde je chyba, ale nevím kde.
Porovnával jsem i vizuálně můj i cas2wav signál v Audacity a zdá se mi to OK, amplituda stejná, minimálně 2 markery a control byte na začátku záznamu vypadá na chlup stejně, zní to taky dost podobně. Cas2wav má viditelnou jednu odlišnost - a to, že při každé změně tónu resetuje periodu signálu, to jsem taky zkoušel a nezabralo to.

Jestli se někdo chcete mrknout, tak tady je zdroják. Nebojte se Go, pochopí ho každý, kdo kdy v něčem programoval.

https://gist.github.com/koubas/86d805bb ... 5ad6b9898e

Jestli se někdo chytá, ale nechce se mu to buildit, můžu sem hodit i ukázkové wavy


Nahoru
 Profil  
 
PříspěvekNapsal: 15.09.2017, 20:40 
Offline
Profík
Uživatelský avatar

Registrován: 31.08.2014, 16:27
Příspěvky: 994
Bydliště: Praha
Has thanked: 63 times
Been thanked: 373 times
Ahoj Koubasi,

hlavní problém je v tom, že máš před kazetovým souborem příliš krátký zaváděcí tón - pouze 3 sekundy.
Kód:
waveform, phase := tone(freqMark, 3, 0)

Atari potřebuje aspoň 10 sekund (přibližně). Standardní délka zaváděcího tónu je 20 sekund.

Po prodloužení zaváděcího tónu na 20 sekund už Atari aspoň pípne.
Kód:
waveform, phase := tone(freqMark, 20, 0)

Meziblokové mezery jsou v pořádku (0,25s), stejně tak struktura záznamu.

Tak, na hlavní dotaz jsem odpověděl, teď si dovolím přidat několik poznámek.

CAS2WAV a WAV2CAS jsou zastaralé projekty. Nástupcem je projekt A8CAS. Vím, že si generování signálu chceš naprogramovat v Go, ale proč se třeba aspoň neinspirovat nějakým modernějším projektem. Navíc je tam ke stažení emulátor, který umí číst WAVE soubory. Ale i nejnovější verze emulátoru Altirra to umí.

Podívat se můžeš i do projektu Turgen System, zejména do třídy turgen.generator.FSKGenerator. Řešení je (na rozdíl od projektu A8CAS) založeno na použití předem spočítané sinové tabulky. Za cenu 12 KB paměti je generování signálu velmi rychlé.

Časem určitě budeš chtít přidat i podporu 3sekundových meziblokových mezer a podporu částečně zaplněných bloků ($FA).

Ještě přikládám lehce pozměněnou verzi programu. Ta vygeneruje WAV soubor, který lze úspěšně načíst příkazem ENTER"C:" v BASICu a pak i vylistovat a spustit. Mezibloková mezera je zvětšena na 3 sekundy, tak to vyžadují programy v BASICu zaváděné příkazem ENTER.


P.S. To je na Go hezké, že funkce umí vracet více hodnot. Já se v Javě musím obtěžovat s návrhovým vzorem "přepravka".


Přílohy:
atari-cas.zip [1.75 KiB]
465 krát
Nahoru
 Profil  
 
PříspěvekNapsal: 16.09.2017, 09:12 
Offline
Nemluva

Registrován: 15.09.2017, 12:35
Příspěvky: 4
Has thanked: 0 time
Been thanked: 0 time
Díky! Já tušil, že to je nějaká blbost, nad tím jsem vůbec nepřemejšlel, protože jsem asi z TURBa zvyklej, že když "seekuju" magneťákem a trefím se zlomek sekundy před hlavičku, tak jí to stejně přečte :)
Taky díky za tip, o A8CAS jsem zavadil a nějak mu nevěnoval pozornost, určitě využiju, ale hrát si s vlastním kódem budu dál :)
Různé mezery a pod. jsem si nastudoval, ale nemohl jsem se dostat přes tuhle kravinu, teď začne ta hlavní sranda :)
Jo, Go se mi začíná docela líbit. Jelikož je tohle můj první program po hello worldu, tak si ještě trochu sedá struktura kódu, třeba mám špatný pocit z toho, jak náhodně mixuju definice proměnných přes var a pomocí :=.
Těch několik návratových hodnot se mi hned zalíbilo, protože se mi to zdá míň "magické", než upravovat globální, nebo ukazatelem předanou proměnnou (což v Go ještě ani neumím :))
Termín "Návrhový vzor 'přepravka'" jsem docela často slýchal na bývalém pracovišti, my se známe, nebo to byl míň lokální termín, než jsem si myslel? :)


Nahoru
 Profil  
 
PříspěvekNapsal: 16.09.2017, 10:10 
Offline
Profík
Uživatelský avatar

Registrován: 31.08.2014, 16:27
Příspěvky: 994
Bydliště: Praha
Has thanked: 63 times
Been thanked: 373 times
Rudolf Pecinovský takto přeložil návrhový vzor Crate ve své knize Návrhové vzory a tak tím mohl "zaplevelit" českou vývojářskou scénu.

To se mi na turbu také libí, že zavaděče zarputile hledají začátek záznamu dokud nějaký nenajdou a nevzdají to po určeném čase. Ovšem také mají svoje minimální nároky. Buď 256 pulzů u Turba 2000 (0,19 s) nebo kolem 1000 pulzů (0,73 s) u zavaděčů Universal Turbo (potřebují správně naměřit přenosovou rychlost).


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ů: 4 ] 

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 6 návštevní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