MOD-player 2

[eng]

   Rozdíl proti původní konstrukci je v rozšíření o IDE rozhraní, které umožňuje připojit CompactFlash kartu nebo HDD. CF karty jsem zkoušel 2 (8 a 32MB) a obě funovaly bez problému. HDD/CF je adresována v LBA módu (kdo by se také dnes obtěžoval s CHS adresováním) a je možné adresovat až 128MB paměti, což je akorát pro maximální počet skladeb (255) o velikosti až 0,5MB. Dále jsem přidal převodník USART/USB FT232BM, který umožňuje nahrávat skladby rychlostí 1,25Mbit/s, což je proti původním 115,2kbit/s příjemná změna. Lze ho sice vypustit a provozovat zařízení přes normální COM port s převodníkem MAX232 jako u první verze, ale při 115,2kbit/s trvá pěkně dlouho, než se skladba nahraje.


Základní parametry

Vzorkování: 22321.42 Hz
Počet kanálů: 4 (mix do 2)
Nástrojů (vzorků): 15 nebo 31
Způsob převzorkování: lineární interpolace
Max. skladeb: 255, max. 128MB

Popis zapojení

   Původně jsem chtěl přejít k MCU ATmega64, ale nakonec se ukázalo, že pro řízení IDE stačí i ATmega32. Pro IDE stačí pouze 8 nebo 16 datových vodičů, 3 adresové a 2 hodinové pro zápis a čtení. V přehrávači používám 16-ti bitovou komunikaci. D0-D7 jsou připojeny na portc, D8-D15 na porta. 3 piny pro výběr interních registrů CF/HDD jsou připojeny na nevyužité piny rozšiřujícího střadače IC3. SRAM zůstala zapojená jako v minulé konstrukci, ale odstranil jsem zálohovací baterii, protože už lze skladbu uložit. Ostatní se od minule nezměnilo.



   Převodník FT232BM je zapojen v nejjednodušším možném zapojení a je napájen z USB portu. Z přehrávače je napájena jen jeho výstupní část (prakticky jen budič pinu TX). Ovladače tohoto převodníku si můžete stáhnout na stránkách výrobce FTDI. Ve Win se zařízení tváří jako další COM port, takže se s ním pracuje jako u minulého přehrávače.
   Ze schématu je stejně jako minule nutné vybrat variantu pro DAC TDA1543 nebo TDA1545. Převodník se rovněž musí vybrat v programu.

Ovládání

   Po zapnutí se na LCD vypíše označení zařízení připojeného na IDE, následně počet cylindrů/hlav/sektorů a spočítaná velikost paměťového média. Pokud na IDE není připojeno žádné zařízení nebo se nehlásí, lze do přehrávače pouze nahrávat skladby pře USB a přehrávat je. Pokud je připojeno, ale poprvé, nabídnou se možnosti Znovu (zkusit znovu načíst alok. tabulku), Format (vytvoří prázdnou alokační tabulku) nebo bez HDD/CF (jako když se nic nepřipojí). Vždy před zobrazením tohoto menu je přes USART odeslána alokační tabulka. Pokud se formátování podaří nebo pokud už bylo provedeno dříve, vypíše se počet skladeb a kolik místa zabírají. Pak se přehrává první skladba z CF/HDD nebo se čeká na data z COM (vlastně USB - trochu nezvyk :-).
   Skladba se nahrává stejně jako u minulé verze - do 2s po stisku tlačítka COM musí přijít první data z USB. Pokud se příjem podaří, začne se přehrávat. Skladbu lze z RAM na CF/HDD uložit stiskem tlačítka SAVE. Pokud uložit jde, tak se uloží, pokud ne, vypíše se patřičné chybové hlášení.
   Přehrávač jsem doplnil i o funkci mazání tlačítkem MAZAT. Po stisku tohoto tlačítka se objeví menu mazat Skladbu (smaže skladbu, která se právě přehrává), Vse (vymaze vsechny skladby - formátování), Info (vypíše některé informace o skladbě a paměti) a Nic (ven z menu).
   Tlačítka SKLADBA +/- vybírají skladbu, LIST +/- posouvá skladbu vpřed/vzad. PAUSE nečekaně pozastaví přehrávání.

Program pro jednočip

   Program je napsán kompletně v assembleru a zatím má něco přes 4600 řádků, po přeložení skoro 9,5kB. I pro program platí totéž co u minulé verze.
   Změna nastala pouze v odstranění načítání z externí paměti (EPROM) a nahrazení IDE rozhraním. Souborový systém FAT16/32 jsem zatím nijak nezkoumal a bytvořil jsem si vlastní souborový systém. Soubory MOD jsou relativně malé, takže není problém je nahrávat přes USB a není tak třeba mít paměť naformátovanou tak, aby se s nídalo pracovat v PC. Na začátku alokační tabulky je uložen řetězec "Tab0", podle kterého přehrávač určuje, zda je paměť naformátovaná. Tabulka je složena z 255 buněk (pro každou skladbu 1 buňka) a spolu s řetězcem "Tab0" je uložena v prvních 2 sektorech. Každá buňka obsahuje 2 16-bit čísla, která udávají začátek a konec skladby ve čtveřicích sektorů (čtveřice proto, aby 16 bitů mohlo adresovat 128MB paměti (2^16*4*512=128MB)). Buňky (a tedy i skladby) jsou řazeny podle obsahu buněk - umístění dat. Tak lze velmi jednoduše zjistit, kde je v paměti mezera a uložit do ní skladbu (pokud se vejde). Výsledkem této metody je, že se skladby řadí celkem náhodně (obzvlášť po mazání), ale to je celkem jedno. Po smazání skladby je mezera v alokační tabulce odstraněna. Pokud se mají data zapisovat mezi již nahrané skladby, vytvoří se v patřičném místě tabulky mezera a uloží se začátek a konec skladby. Můj souborový systém zatím neumožňuje fragmentovat soubory. Výsledkem je, že po mazání sice zůstávají mezi skladbami mezery, ale pokud se do nich skladba nevejde, tak toto místo již nelze využít. Proto taky nutně nemusí sedět údaj o volné paměti.
   Stejně jako u minulé verze se musí v kódu vybrat varianta pro TDA1543 nebo TDA1545 (je to hned na začátku). Úplně na konci kódu jsou tabulky všech editovatelných textů. Nastavit se dá ještě přenosová rychlost USARTu. Standardně je nastavená na 1,25Mbit/s, což je maximum, co lze nastavit u ATmega32 na 20MHz a FT232BM zároveň. Pro snížení na jinou hodnotu stačí změnit číslo v inicializaci.
Zdrojový kód a překlad do HEX (pro TDA1545 i TDA1543) v zipu.

Historie verzí

12.7.2005 - V první verzi jsem nějak zapomněl vyzkoušet, jestli přehrávač funguje bez CF/HDD. Samozřejmě nefungoval - zasekl se po nahrání dat, takže jsem to opravil. Mimo to jsem přidal pár instrukcí, bez kterých to snad ani nemohlo fungovat :-).
17.7.2005 - Opět odstraněno pár chybek, díky kterým pravidelně při práci s LCD nepřecházela RAM do vysoké impedance, takže mezi portc a daty RAM tekly celkem vysoke proudy (nicměně pro MCU je proud RAM jen jako další zvedací odpor). Další podstatná změna spočívá v úpravě algoritmu pro vlastní generování zvuku. Každý nástroj je nyní plynule ukončen (plynulé snížení hlasitosti na 0) a nový nástroj není spuštěn s plnou hlasitostí, ale zase plynule. Tím se odstranila většina lupání při přechodech z nástroje na nástroj. V některých skladbách to bohužel nefunguje, ale to by mohlo být i programem, kterým byly vytvořeny. Tak například MPtracker v případě, že do něj nahrajete nástroj s lichým počtem vzorků, tak ho uloží celý. Problém ale je, že v hlavičce je délka děléná 2x, takže je poslední vzorek dat ignorován a je přidán na začatek dalšího nástroje. Poslední vzorek dalšího nástroje je zase ognorován atd. Pokud se tohle stane u všech 31 nástrojů, tak poslední má na začátku 30 samplů předchozího a s tím prostě nic udělat nejde. Ale co by zase člověk chtěl zadarmo.
3.8.2005 - Na MCU fóru jsem se dočetl, že některé HDD potřebují před prvním čtením / zápisem sektorů nastavit fyzickou geometrii disku. K tomuto účelu slouží instrukce "Set Drive Parameters" (91h). Stačí nastavit 2 parametry - do registru "Sector Count" se nahraje počet sektorů na stopu a do registru "SDH" počet hlav - 1. Oba údaje lze přečíst z identifikačního bloku. Výsledkem tedy je, že už by měly fungovat všechny HDD. Všech 5, co mám doma jsem vyzkoušel a fungují perfektně.

Podporované efekty a formáty

   Dokáže přehrát nekomprimované 4 kanálové MODy s 31 nebo 15 nástroji. 4-kanálové MODy s 31 nástroji mají od bytu 1080 text "M.K.", "M!K!" nebo "FLT4" (jiné jsou vyhodnoceny jako 15 nástrojů a pokud to tak není, budou se přehrávat nesmysly).


Podporované efekty
0 Arpeggio plně funkční
1 Portamento up většinou plně funkční
2 Portamento down většinou plně funkční
3 Tone-portamento plně funkční
4 Vibrato zatím není
5 Tone-portamneto + Volume slide plně funkční
6 Vibrato + Volume slide Vibrato není, Volume slide plně funkční
7 Tremolo zatím není
8 Panning (stereováha) není a nebude, použitý algoritmus neumožňuje
9 Nastevení ofsetu vzorku plně funkční
A Volume slide plně funkční
B Skok na jiný list záměrně není - používá se pro cyklení skladeb
C Nastav hlasitost plně funkční
D Skok v listu funkční, ale jen zalomí list, neskáče v listu
E0 Nastav filtr nevím co to je - v MPtrackeru to nic nedělá
E1 Portamento up jemně funguje, ale ne přesně
E2 Portamento down jemně funguje, ale ne přesně
E3 Glissandro není a nebude, nepoužívá se
E4 Vibrato waveform zatím není
E5 Fine-tune zatím není
E6 Pattern loop zatím není
E7 Tremolo waveform zatím není
E9 Retrig note není a nebude - nevím co to je
EA Volume slide up jemně plně funkční
EB Volume slide down jemně plně funkční
EC Cut note není a nebude, nevím jak přesně to funguje
ED Note delay není a nebude, nevím jak přesně to funguje
EE Pattern delay zatím není
EF Invert loop není a nebude
F Set speed/tempo plně funkční

Několik nahrávek z MOD-playeru

   V ZIPech je vždy nahrávka ve formátu MP3 a originální skladba. Soubory mají každý asi 700kB a jsou 1 minutu dlouhé.
dragonsfunk.zip
severalkbytes.zip
tarsnareslider.zip
mrazikv2.zip

(c) 2005, Stanislav Mašláň - využití programu ke komerčním účelům bez souhlasu autora není dovoleno.

Poslední aktualizace: 17.7.2005