Uživatelské nástroje

Nástroje pro tento web


Postranní lišta



LnxTracker
Hlavní okno
Použití naší hudby v ASM projektu

2019/07/17 09:42 · lanex
lnxtracker:export

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í.

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:

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.

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.


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

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.
lnxtracker/export.txt · Poslední úprava: 2019/07/23 11:16 autor: lanex