Toto je starší verze dokumentu!
Přehrávač LnxTracker pro Z80
Jako další můj projekt je LnxTrackem hudební editor, ve kterém se dá vytvářet hudba a zvukové efekty pro zvukové čipy AY (např. ZX Spectrum 128) a SAA (např. SamCoupé). LnxTracker podporuje také hudební interface SAAY! (1x AY + 1x SAA), TurboSound B/C (2x AY) a TurboSound Easy (2x AY + 1x SAA). Dá se v něm tedy vytvářet hudba hrající ve 3 až 12 kanálů současně. Aby mohla být hudba přehrávána na reálném stroji, potřebuje právě tuto hudební rutinu LnxTrackerEngine (dále jen LTEN).
LTEN se skládá ze tří hlavních částí. První zpracovává posloupnost hudby, Patterny a určuje ve kterém kanálu se bude přehrávat jaký sampl a s jakými parametry. Kanály jsou pevně rozdělené tak, že kanál 0-2 je první AY čip, 3-5 je druhý AY čip (TurboSound) a kanály 6-11 jsou SAA. Druhá část se stará o přehrávání samplů na čipech AY a třetí poslední část se stará o přehrávání samplů na čipu SAA-1099.
LTEN se ovládá pomocí nadefinovaných návěstí, začínající vždy „mus.“. Návěstí mají tyto základní funkce:
Návěstí | Funkce |
---|---|
mus.load_play | Inicializuje spuštění hudby |
mus.stop | Zastaví právě přehrávanou hudbu a stiší všechny kanály |
mus.Patterns | Volá se při přerušení. Zpracuje přehrávanou hudbu |
mus.int_AY | Volá se při přerušení. Přehrává samply na čipu AY |
mus.int_TS | Volá se při přerušení. Přehrává samply na dvou čipech AY (TurboSound) |
mus.int_SAA | Volá se při přerušení. Přehrává samply na čipu SAA |
mus.int_All | Volá se při přerušení. Přehrává samply na dvou čipech AY a jednom SAA |
Dále mají rozšířené funkce:
mus.GetChan | Vrací adresu objektu pro konkrétní kanál |
mus.module_smp | Zde se ukládá adresa dat všech Samplů použitých v hudbě |
mus.module_effects | Zde se ukládá adresa dat všech Samplů použitých jako zvukové efekty |
mus.PlaySmp | Spustí v určeném kanále určený Sampl |
mus.PlayEffect | Spustí v určeném kanále určený zvukový efekt |
Jak ovládat rutinu
Jako první je potřeba zajistit pravidelné volání rutin při přerušení. Volat při přerušení by se měla neustále, i když nic nepřehrává. V závislosti na tom jaké rutiny se budou volat, rozhodne se kompiler které části kodu z přehrávací rutiny vloží. Takže pokud se bude volat jen část pro AY, nepřikompilují se rutiny pro SAA.
org 50000 ; od adresy 50000 ;volaná rutina při přerušení pro konfiguraci SAAY! (1x AY + 1x SAA) INT push_all ; Makro - push všech registru ; (AF, BC, DE, HL, AF', BC', DE', HL', IX, IY) call mus.Patterns ; Spracování Hudby / Patternů call mus.int_AY ; Přehrávání zvuků na AY call mus.int_SAA ; Přehrávání zvuků na SAA pop_all ; Makro - pop všech registrů ret
Při přerušení se dají volat tyto rutiny:
Návěstí | Funkce |
---|---|
mus.Patterns | Spracování Hudby / Patternů - musí se volat jako první |
mus.int_AY | Zpracování samplu pro AY |
mus.int_SAA | Zpracování samplu pro SAA |
mus.int_TS | Spracování samplu pro TurboSound |
mus.int_All | Spracování samplu pro TurboSound a SAA |
Příklady: Vždy nejprve zavoláme mus.Patterns která spracuje hudbu. Pokud budeme hudbu chtít přehrávat na AY a SAA současně (SAAY!), musí se zavolat mus.int_AY a poté mus.int_SAA. Pokud budeme chtít používat TurboSound, musíme volat mus.int_TS, ten obslouží obě AY. Pokud budeme chtít používat jen SAA, stačí volat mus.int_SAA.
Když máme zajištěné pravidelné volání při přerušení, můžeme spustit hudbu. Do registru DE dáme adresu exportovaných dat z LnxTrackeru a zavoláme mus.LoadPlay. Tato funkce také inicializuje SAA1099, který inicializaci vyžaduje. Hudba by měla začít hrát. Pokud jí chceme ukončit, zavoláme mus.Stop.