S3M-player Po celkem úspěšném přepracování původního MOD-playeru je sice možné bez problému přehrávat vícekanálové trackery, ale těch kvalitních ve formátu MOD bohužel zrovna moc k dispozici není a převést do tohoto formátu novější formáty lze jen zřídka. Z toho důvodu jsem si řekl, že by nebylo od věci přepracovat loader přehrávače tak, aby byl schopen přehrát i S3M, které mají velmi podobnou strukturu. Bohužel si pánové od Future Crew (autoři formátu ScreamTracker 3) řekli, že je dobrý nápad uložit vzorky ve neznaménkovém formátu, což je přesně naopak, než u ProTrackeru. Převádět vzorky v reálném čase znamená instrukci navíc (a k tomu nějaké rozhodování MOD/S3M), takže do toho se mi moc nechtělo a převést vzorky dopředu by spolklo přes 1s/1MB a to se mi rovněž nelíbí (nesnáším přístroje s odezvou delší, než tak 100ms). Navíc je původní hlavička poměrně dost HW specifická, takže jsem se rozhodl pro možnost třetí a sice napsat prográmek, který samply konvertuje do potřebného formátu a zároveň, když už to musí být, přežvýká poněkud nestravitelnou S3M hlavičku do něčeho velmi podobného MODům. To mi velmi usnadnilo jejich načítání, protože jsem nemusel nijak extra zasahovat do původního loaderu. Vysledný formát, který jsem pracovně nazval MD3 (ModTracker 3) kombinuje jednoduchost ProTrackeru s výhodami ScreamTrackeru 3 (stereováha, komprese "notového zápisu", delší vzorky, ...). 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í Na zapojení se oproti minulé verzi moc nezměnilo. Jen analogový mixing kanálů pomocí rezistorů byl nahrazen digitálním (kvůli stereováze, která je u S3M dost využívána), takže byly odstraněny. K vlastnímu zapojení opět 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). 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 zdrojáku, 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ěl být naprogramovan fuse-bit 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í).
Dále dovede přehrát upravené S3M. K tomu účelu slouží prográmek "S3M convertor". Ten by měl
být schopen načíst libovolnou ScreamTracker 3 skladbu a převést ji do mého vlastního formátu ModTracker 3 (MD3).
Samotná převodní utilitka "s3m2md3.exe" je samozřejmě konzolovka, ale pro pohodlí jsem k ní dodělal prográmek s grafickým rozhraním
umožňující celkem snadné převedení většího množství souborů najednou.
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. Formáty
Pár dokumentací ProTrackeru a ScreamTrackeru 3 ke stažení uvádí následující tabulka:
Nejlepší "dokumentace" jsou ale zdrojáky programu MP tracker. Vlastní dekodér je sice napsán naprosto příšerně, navíc je to převzat z nějakých prehistorických přehrávačů (a upraven do C++), ale stále je to nejsnažší cesta, jak pochopit funkci a chování efektů. 6. Několik nahrávek z MOD-playeru
V následujícím videu je přehráno pár vícekanálových S3M: (c) 2011, Stanislav Mašláň - Všechna práva vyhrazena.
|