====== Použití naší hudby v ASM projektu ====== LnxTracker neexportuje samotnou přehrávací rutinu, která by se nahrála do ZX Spectra a jen spustila. Exportují se pouze hudební data, která se připojí k přehrávací rutině v Assembler editoru obsaženou v LnxSpectrum emulátoru. LnxTracker zatím neobsahuje kompiler takového kódu. ===== Export z LnxTrackeru ===== V našem prvním příkladu si ukážeme základní použití naší hudby v našem ASM projektu. Testovací skladba se bude přehrávat na čipu AY a SAA současně (celkem 9 kanálů, režim SAAY). Jako první si vyexportujem soubor s naší skladbou z LnxTrackeru. Použijeme typ ''Music'', což je jeden soubor, kompletní balíček který obsahuje vše potřebné pro přehrávání. Získáme tím soubor BIN, který můžeme použít v našem ASM projektu. Nepoužité samply a patterny se do BIN souboru neukládají. {{ :lnxtracker:lnxtracker_export2.jpg?nolink |}} ===== LnxSpectrum assembler ===== Nyní se přesuneme do Assembler editoru v ZX Spectrum emulátoru LnxSpectrum. V ASM editoru založíme nový prázdný projekt. Poté připojíme do ASM projektu námi vyexportovaný soubor BIN z LnxTrackeru: {{ :lnxtracker:lnxtracker_export3.jpg?nolink |}} Následně připojíme naše data do ASM projektu a také přilinkujeme hudební rutinu pomocí ''include''. Přehrávací rutina je součástí vnitřní knihovny kompileru. Napíšeme tento kód: org 50000 include "LnxTrackerEngine.slb" ;hudební rutina LnxTrackeru include "TestMusic.bin" ;naše exportovaná data z LnxTrackeru Stiskněte dole tlačítko **Build**. Přepneme vlevo dole Tab z **Regions** na **Labels** (seznam návěstí), a do okna **Filter** zapíšeme "mus.". Tím si zobrazíme jen návěstí z hudební rutiny. {{ :lnxtracker:lnxtracker_export4.jpg?nolink |}} Pro náš základní příklad potřebujeme 4. Jsou to: * mus.LoadPlay (Inicializuje skladbu a následně spustí) * mus.int_Patterns (Přerušení pro přehrávání skladby) * mus.int_AY (Přerušení pro ovládání AY čipu) * mus.int_SAA (Přerušení pro ovládání SAA čipu) Pro správný chod hudební rutiny je potřeba některé části volat 50x za sekundu, ideálně při každém přerušení. Tyto rutiny by se měly volat neustále, i když žádná skladba aktuálně není přehrávána. Je to ''mus.int_Patterns'', který se stará o přehrávání skladby, a dále ''mus.int_AY'' a ''mus.int_SAA'', které se starají o přehrávání zvuků na čipech. ---- {{:info.png?nolink&64 |}}//Pokud naše skladba má hrát pouze na čipu AY, použijeme pouze ''mus.int_AY''. Pokud má hrát pouze čip SAA, použijeme pouze ''mus.int_SAA''. Pokud je skladba jak pro čip AY, tak pro čip SAA, musíme volat oba. Pokud některé nepoužijeme, výsledný program se nám o něco zkrátí, protože se do projektu nebudou tyto rutiny připojovat.// ---- Za ORG 50000 doplníme tento kód: ld de,hudba ;Adresa našich hudebních dat call mus.LoadPlay ;a inicializujeme skladbu a spustíme přehrávání ei ;Povolíme přerušení loop call mus.int_Patterns;Zpracujeme skladbu call mus.int_AY ;Zpracujeme AY čip call mus.int_SAA ;Zpracujeme SAA čip halt ;a počkáme na další přerušení. jr loop ;vše opakujeme Nyní stiskneme dole tlačítko **Start** a náš program se spustí. Jako první po spuštění se do registru DE uloží adresa našich dat exportovaných z LnxTrackeru. Zavolá se ''mus.LoadPlay'' rutina, ta inicializuje naší skladbu a spustí její přehrávání. O ostatní se již postará přerušení, které jsem v našem případě nasimuloval smyčkou s instrukcí ''halt''. Ta bude stále dokola volat 50x za sekundu potřebné rutiny... a už to hraje! :-D {{ :lnxtracker:lnxtracker_export5.jpg?nolink |}} ===== Popis návěstí hudební rutiny ===== ^Návěstí ^Typ ^Popis ^ |mus.LoadPlay |Call |Inicializuje a spustí přehrávání hudby. V registru DE musí být adresa dat exportovaných z LnxTrackeru. | |mus.Load |Call |Inicializuje hudbu k přehrávání. V registru DE musí být adresa dat exportovaných z LnxTrackeru. | |mus.Play |Call |Spustí přehrávání hudby, inicializovanou pomocí ''mus.Load''. | |mus.Stop |Call |Zastaví přehrávání hudby. | |mus.module_smp |Word |Zde se nachází adresa sady samplů pro hudbu. | |mus.PlaySmp |Call |Spustí sampl z registru L, v IX musí být adresa na ''SampleInfoBlok'', viz. ''mus.GetChan''. | |mus.module_effect |Word |Zde se nachází adresa sady samplů pro efekty. | |mus.PlayEffect |Call |Spustí efekt z registru L, v IX musí být adresa na ''SampleInfoBlok'', viz. ''mus.GetChan''. | |mus.SampleStop |Call |Zastaví přehrávání samplů (jednorázově). Typické použití: Po zastavení přehrávání hudby samply dozní, ale některé můžou mít smyčku a zní stále dokola. Tímto tomu zamezíme. | |mus.GetChan |Call |V HL i IX vrací adresu na ''SampleInfoBlok'' konkrétního kanálu z registru A (0-11). 0-2 je AY1, 3-5 je AY2 (TS), 6-11 je SAA. Tato hodnota se již dále nemění, není potřeba jí zjišťovat znovu a znovu. | |mus.int_Patterns |Call 50x |Rutina starajicí se o přehrávání hudby. Volá se 50x za sekundu. | |mus.int_TS |Call 50x |Rutina starajicí se o TurboSound (2xAY), volá se 50x za sekundu. | |mus.int_AY |Call 50x |Rutina starajicí se o AY, volá se 50x za sekundu. | |mus.int_SAA |Call 50x |Rutina starajicí se o SAA, volá se 50x za sekundu. | |mus.int_All |Call 50x |Rutina starajicí se o všechny čipy, 2xAY a SAA, volá se 50x za sekundu. |