MOD-player 3
Po pár letech od zveřejnění původní konstrukce se na internetu začaly objevovat
konstrukce tohoto přehrávadla. V jednom případě si dokonce autor dal tu práci prokousat se
nepřehledným a mizerně komentovaným kódem a přepracovat SW tak, aby byl schopen přehrávat přímo z interní FLASH.
Podobnou úpravu jsem kdysi zkoušel rovněž, ale tehdy byl ATmega32 maximum v DIL, co se běžně
dalo sehnat a oněch 27kB zbylé FLASH je na poslouchatelný MOD dost málo, takže jsem to nechal u ledu. 1. Základní vlastnosti
Všechny hodnoty platí pro AVR taktované na 20MHz, nicméně použitý ATmega644 lze značně přetaktovat. 2. Popis zapojení
Zapojení je téměř identické s původní konstrukcí. Aby taky ne - ve stolním sedimentu jsem
našel původní kontaktní pole. Sice tam bylo dost prachu a "někdo" sebral pár dost důležitých drátů, ale
nakonec jsem to s původním SW rozchodil. Přesto jsem pár změn provést musel.
K vlastnímu zapojení jen stručně: Jádrem zapojení je celkem výkonný MCU AVR ATmega644-20PU na 20MHz. Disponuje slušným množstvím FLASH (64KB) i RAM (4kB). Externí SRAM IC4 je kvůli kapacitě adresovaná SW, pomocí dvou rozšiřujících 8-bit bufferů IC2 a IC3. Zabírá to pouze dva porty (porta: adresy, portc: data) a pár řídících signálů. Paměť by měla být svižná (v mém případě to chodí na 55ns verzi).
Na těchto portech je nadrátováno také IDE rozhraní v 16-bit módu. Jeho adresace je řešena přes zbytek bufferu IC3. Zde bych upozornil, že LED D8 je občas nezbytná - některé HDD bez ní odmítají komunikovat (CF možná taky). Na stejných portech je navíc ještě HD44780 LCD a tlačítka.
Audio výstup je kvůli kvalitě zvuku 16-bit a to sériový přes SPI rozhraní. MCU na SPI rozhraní emuluje I2S sběrnici (nebo obdobu pro TDA1545 převodník). Šířka sterea je omezena analogově součtovými rezistory za operáky (digitálně by to bralo nějaký ten výkon MCU navíc). Více k tomuto audio výstupu
zde. 2.1 Taktování Použitý MCU samozřejmě chodí minimálně na 20MHz, ale při experimentování jsem zkoušel trochu přitlačit. 24MHz nebyl problém, což mě docela překvapilo. Můj prastarý ATmega32 se začal pochybně chovat už nad 18MHz, kdy program fungoval, ale jen když byl zarovnán od sudé adresy FLASH ;-). Tak jsem zkusil 27MHz a kupodivu stále bez problému. Větší krystal jsem nenašel, tak jsem ze stolních usazenin vyhrabal 32MHz oscilátor a po pár wait-cyklech navíc pro SRAM a IDE to kupodivu chodí bez obtíží. To se hodí zvlášť pro vícekanálové MODy. Nevím jestli je to náhoda nebo takhle chodí všechny novější ATmega644, takže pokud to někdo zkoušel a má podobnou zkušenost, případně odhalil nějakou skrytou nefunkčnost, nechť se ozve, docela by mě to zajímalo (můj kus je typ -20PU, série 0617). Jinak na 6V1 to jelo i na 40MHz, ale to už se nelíbilo ostatním komponentám ;-). 3. Programové vybavení
Program je opět kompletně v ASM, ale tentokrát jsem ho
pečlivě dělil do několika souborů, takže už to není jedna 10k+ řádků dlouhá nudle jako jiné moje "produkty".
Navíc jsem hojně využíval makra a komentoval, takže by kód měl být docela čitelný. 3.1 Ovládání
Ovládání by mělo být zřejmé ze schématu. V zásadě to chodí tak, že je nejřív otestována externí SRAM. Pokud je jí alespoň 64KB, tak je vše OK a pokud ne, tak program záměrně zatuhne.
Dále je testováno IDE zařízení. Pokud tam je a má správný formát (FAT16), tak přehrávač vstoupí do menu adresářů. Odtud se lze dostat buďto do menu skladeb v adresáři nebo přímo do přehrávacího módu. Pokud něco nesedí, tak přejde přehrávač do režimu, kde tahá data pouze z USARTu.
Načtení dat z USARTu lze také spustit tlačítkem COM. Sosání dat z USARTu je ukončeno, když 1,5s nic nepříjde - data lze poslat libovolným terminálem, není použita parita ani řízení toku, MCU to stíhá bez problému. 3.2 Nastavení
Na začátku hlavního modulu "m644_modplay.asm" je většina nastavení pro celý přehrávač. Stručný popis významu položek uvádí tabulka.
Další nastavení jsou roztrušena po celém souboru, ale do těch obvykle není nutné vrtat. Jediné, co stojí za zmíňku, je velikost audio FIFO. Tento buffer by měl být co největší - pokud bude přehrávač provozován s malým počtem kanálů (MAXCH), pak se uvolní nějaká ta RAM a je ho možné prodloužit. Nemůže ale být kratší než 1kB, protože je sdílen modulem "storage.asm" jako datový buffer. 3.3 Fuse bity Vzhledem k frekvenci oscilátoru by měla být naprogramovaná pojistka CKOPT (amplituda oscilátoru). To je občas nezbytné kvůli blízkosti pinů USARTu, který dost ruší. Dál by měl být vypnutý JTAG, protože jinak patřičná část portc nemá tvrdou log.1 a náběžná hrana dat je pak dlouhá - chyby při zápisu. Možná by to šlo pořešit i zvedacími rezistory, ale nezkoušel jsem. 4. Podporované efekty a formáty Dokáže přehrát nekomprimované MODy, teoreticky s libovolným počtem kanálů (pochopitleně při adekvátně nízkém vzorkování).
Efekty jsem se snažil odladit tak, aby se chovaly identicky s MP trackerem takže by to mělo znít stejně. Pokud najdete nějaký MOD, který by se výrazněji lišil, tak mi ho pošlete abych mohl poladit algoritmus. 5. ProTracker formát
Od posleně se mi podařilo sehnat poněkud detailnější dokumentaci, což je také hlavní důvod,
proč to tentokrát chodí tak dobře. Pár dokumentací ke stažení uvádí následující tabulka:
5.1 Koverze do ProTracker formátu
Protože existuje poměrně málo kvalitních vícekanálových MODů, rozhodl jsem se pro pokus s konverzí
hudby z novějších formátů. To samozřejmě naráží na několik problémů. Předně všechny novější formáty nemají nic jako
"Set volume" efekt - k tomuto účelu je vyhrazena samostatná položka každé "noty", takže paralelně s nastavením hlasitosti
může být vykonán jiný efekt. To pochopitelně znemožňuje převod do ProTrackeru, resp. jeden z efektů bude zrušen.
Tyto kolize je nutné ručně odstranit/poopravit před vlastní konverzí (vskutu zábavná práce ;-). 6. Několik nahrávek z MOD-playeru
Čistě pro představu jak to zní a vypadá v chodu přikládám následující dvě videa. V prvním jsou přehrány
nějaké ty 4-12 kanálové MODy, v dalším pak 28-kanálový soundtrack ze známého dema Dope (dle mého názoru asi nejlepší demo z oné éry). (c) 2011, Stanislav Mašláň - Všechna práva vyhrazena.
|