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
|