Jen pripomenu hlavni duvod, proc jsem zacal delat hudebni rutinu s mym hudebnim formatem. Jednoduse jsem to vnimal jako moc novych informaci, aby jsem se zacal ucit assembler, se kterym jsem nemel zadne zkusenosti a jeste u toho studovat hudebni format MOD, ktery jsem taky neznal stejne jako jsem nemel zkusenost s nacitanim dat z nejakeho externiho souboru, z MODu.
Chtel jsem si nejdrive z MODu vzit pouze data k samotne skladbe v ramci patternu ze skladby a ze si ostatni udelam po svem. Tak jsem vytvoril novy soubor a dal jsem si do nej casovac CIA, pointre na sample do sladby a udelal prvni kod, kde se mi zpracuji data zatim jen z patternu, tedy z casti dat z MODu ktere jsou urcena pro hrani tonu jednotlive skladby. Zatim jen cisti kod, ktery nemel ani pouzite HW registre. Nejmin mi sedelo zpracovani dat pro hrajici sampel, kde je 1 bajt rozdeleny na 2 casti, jen jsem premyslel, jak to zpracovat alepson trochu elegantne = co nejstrožeji. Já bych treba Lower four bits of sample number prohodil s Effect command a pak bych udelal rotaci doleva o 4 bity v 4 bajtech s tim ze bych jeste Lower four bits prohodil s Upper four bits of sample number, ale ok. Ve formátu MOD maji bity pro Effect command vetsi prioritu nez bity pro cislo hrajiciho samplu.
Struktura formatu MOD pro data z patternu:
Pek jsem ale zacal resit, jak lepe zpracovat pocet pointrů na jednotlive sample, pokud by jsem to delal sam a nebral tyhle data primo z MODu, protoze zatim u mne mel kazdy sampel skladby svuj vlastni pointer, neboli ukazatel na misto v pameti, kde se sampel nachazi a odkud jej číst. Pri vicero skladbach by to jiz slo do poctu, ktery se mi moc nelibil hlavne kdyby meli skladby vetší počty samplů. Tedy maúriklad 7 skladeb po 20 samplech by bylo 140 pointru v pameti na jednotlive sample a to se mi moc nelibi. Tyhle pointre by museli byt zvlast zadany primo v kodu a to samostatne, neboli zatim neznam zpusob, jak to udelat jinak a zatim se domnivam, ze bych to musel rešit nejakou komunikaci pomoci systemu, co je pro mne vyšší divčí (je to na mně moc). Nepovedlo se mi v kodu...
incdir "DH1:MOD T02X3/"
incbin "T02X3.MOD"
nacist samotny MOD jinak nez takhle. Chtel jsem u "incbin" mit moznost zadat retezec textu s nazvem modu treba z datoveho registru, nebo z pointru v pameti, kde by byl tenhle retezec textu s nazev souboru, tedy MODu. Tedy se mi soubor podarilo nacist jen s primym zadanim: incbin "T02X3.MOD"
Počet pointrů na sampel bych snizil, kdyby jsem mel sample nahrane za sebou a pro vsechny sample ve skladbe bych tedy mel celkem 4 pointre v pameti (4 hudebni kanaly). To by byl jiz stav lepsi a pro mne prijatelny.
To mne nakonec dovedlo k zaveru, ze tohle vse je jiz v samotnem MODu a ze bude nejlepsi nacist rovnou cely MOD a z neho si konretni sample nacist, co by celou situaci rešilo. Tedy jsem zkušebne zadal:
incbin "DH1:MOD T02X3/T02X3.MOD"
a navýšill pointer (ukazatel) v pameti na tenhle MOD o 1084 bajtu, co je misto, kde v MODu zacinaji data patternu MODu a porovnal tyhle data s datami z meho programku v C# kde mam taky jen data z patternu. Ty 4 bajty byly shodné... .
Tak fajn, budu tedy načítat celý MOD

Vložit komentář: