Oznámení

Sbalit
Aktuálně žádná oznámení.

Assembler - všeobecná logika

Sbalit
X
 
  • Filtr
  • Čas
  • Zobrazit
Vymazat vše
new posts

  • Lisiak
    odpověděl
    Tak dnes jsem si jen naposlouchal každý kanál v 1 patternu skladby zvlášť u mé hudební rutiny vůči hraní MODu. Došteoval jsem volume slide a myslím že je to ok. Měl jsem za to že budu efekt volume slide pro postupně zesílení hlasitosti nástroje v druhé části zesilování spíše zmírňovat ale nakonec to bylo třeba ze začátku spíše výrazněji zesilovat. To jsem samozřejmě hned slyšel při porovnání hraní MODu a mého formátu jen jsem si to špatně pamatoval .
    Prvních 5 řádku patternu jsem tedy zvolil zvýšení hlasitosti o dvojnásobek kde 1 řádek patternu byl zvýšen o hodnoty 0,2,0,2,0, celkem tedy o 4 a od 6.řádku patternu se jde stylem 0,1,0,1,0, celkem tedy o 2. Na maximální úroveň hlasitostí se dostanu tak o 7 řádku patternu dříve vůči MODu, ale zní mi to dobře, tak jsem na to již nehrabal, jedině že by si Nooly řekl tak nemám problém... .

    Samozřejmě tohle vše probíhalo již na mé A1200.

    Příště buď zapracuji na posledním nástroji v patternu nebo začnu dělat další nový režim zobrazení textu. Největší zajímavostí bude že se bude jednat o první jednoduchou komunikací mezi kódem pro text a samotnou hudební rutinou. Samozřejmě i teď je kód pro text s kódem pro hudební rutinu provázány, ale nekomunikuje to mezi sebou. Teď se bude jednat o jednoduchou komunikaci ale bude tam.

    Další zajímavostí je, že použijí celkem dobře z hudební rutiny kód pro jemnou práci se samply který mám k dispozici jen pro 1 kanál. Tohle formát MOD neumožňuje, samozřejmě v téhle situaci by daná funkce musela být doprogramována aby s hudební rutinou co hraje formát MOD spolupracovala. Já na to ale z větší části použiju můj formát. Na to co od toho potřebuji by to mělo stačit.

    Vložit komentář:


  • Lisiak
    odpověděl
    Včera jsem hodil v rámci logiky efekt volume slide na stejnou prioritu jako mají ostatní efekty. Byl na prioritě nižší jak jsem ho jen "pověsil" na časování, které pro něj nebylo primárně určeno. Teď je situace jiná, efekt má vlastní časovač a původní umístění kódu pro volume slide již nebylo zcela optimální. Udělal jsem i drobnou optimalizaci efektu, kde jsem jen prohodil dva nibble mezi sebou v rámci 2 byte a ušetřil tak jednu rotaci bitů.

    Omezení efektu od plné verze spočívá ve společné hodnotě pro zvyšování/snižování hlasu pro všechny 4 hudební kanály. Tak nějak nepočítám s tím, že by bylo nutné hrát efekt ve 2 kanálech naráz. To bych mohl, ale s nastavením stejně již zmíněné hodnoty. Je to jen o ušetření 4 bitů v registry pro 1 kanál, které mám pro tuhle funkci přiřazeny.

    Tedy pokud by se stalo, že se použije efekt a zároveň potřebuje snížit/zvýšit hlasitost (bez efektu) učinil bych tak již standardně příkazem mimo efekt volume slide...

    V nejbližší době se již pokusím o doladění zvyšování hlasitosti pomocí efektu ve skladbě. Jsem zatím spíše nakloněn nulováním časovače (můžu a nemusím) pro efekt na začátku každého řádku patternu čím na řádek patternu docílím vždy rovnoměrné zvyšování hlasitosti, co by neplatilo pokud bych časovač nevynuloval. Rovnoměrné zvyšování hlasitosti by sice bylo, ale ne v rozsahu každého řádku patternu ale rozsahu vícero řádku patternu. A já chci zkusit dorovnat nerovnoměrné zesílení hlasitostí pokud tak činíme přímo přes HW register pro hlasitost a na to se mi již zmíněný systém bude hodit asi více.

    Tedy asi nějak takhle:
    0,1,2,3,4,0,1,2,3,4 časovač rychlosti hraní skladby

    kde je
    0,1,2,3,4,0,0,0,0,0 jeden řádek patternu 0,0,0,0,0,0,1,2,3,4 druhý řádek patternu

    a tedy
    0,1,0,1,0,0,1,0,1,0 u čísla 1 je aktivní efekt volume slide
    Naposledy upravil Lisiak; 16.08.2022, 09:47:03.

    Vložit komentář:


  • Lisiak
    odpověděl
    Včera jsem konečně dokončil kód, který mi umožňuje použít efekt volume slide i při jiné rychlosti přehrávání skladby než je ta, která je dělitelná číslem 4. Ještě budou nějaké drobné změny v kódu ale již to dle prvních testů funguje.

    Pro to aby jsem nový kód mohl mít o něco kratší jsem prohodil v 1 byte vyšší a nižší 4 bity mezi sebou. Ve vyšších 4 bitech se časovač pro volume slide a ano jedná se o nejvyšší byte v adresovém registry, jinak by tohle umístění nebylo asi ideální pro časovač. V nižších 4 bitech jsou 1 bitové infornace pro aktivní funkce části kódu pracujících s textem. 1 bit byl pro aktivní vibrato to jsem ale přesunul jinam a tenhle bit si nechávám volný opět pro info, jestli bude další funkce kódu pro práci s textem aktivní.. Celkem jsem přemýšlel odkud brát další volné bity pro signalizaci nějakých funkci kódu i pro to vibrato nechtěl jsem si zaneřádit kompletně volné byte (8 bitů). U 2 bitů jsem si zabezpečil aby se mi v nich info udrželo počas celého vykonávání kódu v hudební rutině, jeden bude pro vibrato, druhý asi pro práci s textem. Napadají mně 2 věci co bych ještě mohl kód co pracuje s textem naučit. Nicméně jak bude čas a udělám nějaké drobné optimalizace a kontroly tak zapracuji opět na jednoduché (můj požadavek) skladbě od Noolyho. Nechtěl jsem již o Noolym psát ve 3.osobě. Jen jsem nevěděl jestli to o něm můžu napsat.

    Úprava volume slide mi standardně dala zabrat více než jsem čekal . Používám mírně osekanou verzí (úspora dát v registrech) ale mělo by to takhle stačit.

    Hledal jsem v včera i jednu chybu. Netrklo mně vrátit 1 hodnotu do původního stavu před její opětovným použitím. Je možný že jsem tuhle drobnost v programování ještě ani nedělal. Ono to má o něco jinou spojitost v rámci logiky a s temahle situacemi mívám standardně problém 🙂

    ​​​​​​Nooly použil efekt volume slide pro postupné zvyšování hlasu. To asi nebude primární účel efektu ale je to jeho šikovné využití. A i v mém formátu je zvyšování hlasitosti pomocí volume slide podstatně jednodušší a přehlednější než bych to dělal pomocí nastavení hlasitosti.

    Octamed a asi i jiné trackery připočítávají standardně práci s hlasitostí u volume slide elektronicky, tedy úroveň hlasitosti nemění pomocí registru ale přímo mění velikost průběhu samplů. Tedy nemám důvod si myslet něco jiného. Na Octamedu můžete jít s hlasitostí nad úroveň kterou vám umožní registr pro hlasitost. Taky efekt volume slide v nové skladbě jde v hlasitosti nepletu-li se po 1,5 násobku na řádek patternu a do HW registru pro hlasitost můžete přistupovat pouze po celém čísle.

    V téhle spojitosti mně zajímalo jak Nooly určuje strop zvyšování hlasitosti pomocí volume slide, jestli si i odzkouší jestli je s hlasitostí na maxime, ale řídí se jen sluchem. Tak jsem mu řekl že u skladby jde s volume slide na přesné maximum HW registru pro hlasitost. Pokud by šel výše, udělal bych elektronický propočet hlasitosti u samplu aby jsem se na danou úroveň hlasitosti dostal i pomocí HW registru v mé hudební rutině.

    Octamed a jiné má díky elektronickému propočtu hlasitostí rovnoměrné zesilování hlasitostí. Přímý přístup na registr hlasitosti a zvyšování hlasitosti pomocí něj takhle rovnoměrné zvyšování hlasitosti nemá. Ve skladbě se to pokusím dorovnat.




    ​​​​

    Vložit komentář:


  • Lisiak
    odpověděl
    Zatím jsem na mém žihadlu A1200 s 4MB Fast RAM nespozoroval žádné zakopnutí ve zvuku.

    Já už mlčím, už mlčím...

    Vložit komentář:


  • Lisiak
    odpověděl
    Jo a podtržítko mám v rámci hledání znaku v seznamu úplně na konci, tedy jsem z "falešné" mezery udělal hned po klasické mezeře kterou indexuji napřímo druhý nejrychleji se zpracovaný znak, protože vyhledávání znaku se provádí v seznamu od konce

    Dneska jsem nějakej ukecanej.

    Vložit komentář:


  • Lisiak
    odpověděl
    Tak asi mám "zakopnutí" ve zvuku odstraněno. Doplnil jsem celkovou logiku o stav, kdy když je mezera v textu, opustím dělání smyčky pro psaní textu v jeden moment, nechám udělal celou smyčku v programu čím si i zpracují hrající se sample. Problém ale nastal, když jsem měl v řádku pouze 2 slova, za kterými bylo hodně mezer a tedy se často opouštěl režim psaní více znaků v jeden moment. Standardně více řešení já si vybral takovou falešnou mezeru, kdy když v programu do textu napíšu podtržítko, na obrazovce se zobrazí mezera. Tím program donutím neopustit režim psaní písmen v jeden moment a dokáží v něm napsat i mezeru. Fungovalo mi to napoprvé. Samozřejmě hned jsem udělal to, že jsem všude místo mezer dal podtržítko a vždy přibližně v půlce nechal mezeru aby si program udělal celou programovou smyčku a tedy i zpracoval hrající sample. Teď si tedy můžu určit kdy se při vypisování textu na obrazovku udělá celá programová smyčka. Zatím to dělám na 2 krát, můžu to i více rozkouskovat. Text je vypisován hodně svižně a vypadá to celkem v pohodě. Alespoň dle mně.

    Samozřejmě mám obavy, že když to zakopnutí ve zvuku nebude neřízené, že bude alespoň řízené.

    Budu dál testovat...

    Vložit komentář:


  • Lisiak
    odpověděl
    Ještě taková úvaha k mým předešlým 2 dnešním příspěvkům. Co jsem si všiml, efekt zakopnutí kickbasu se neprojevuje při mazání textu kde používám relativně stejnou logiku jako při psaní více písmen v jeden moment až na jednu výjimku. Mezeru jako jediný znak neindexuji. Tedy v programu nehledám pozici znaku mezera, já ji přímo zadávám. To značně urychluje celý kód. Kdyby jsem tedy nemusel znak indexovat, zkrátil bych hodně vykonávání psaní více písmen v jeden moment a dle všeho bych předešel efektu zakopnutí. Tedy bych měl 40 byte s pozicí písmen a pak 40 byte textu. Při psaní písmene bych si jen pro jeho pozici "hrabnul" o 40 byte níže, co by nějaké zdržení bylo, ale snad menší jako hledat písmeno na vzdálenější pozici. Samozřejmě jsou k téhle logice další různé varianty.

    To nic nemění na tom že se mi to zakopnutí líbí. To mně jen tak napadají týhle věci 🙂

    Vložit komentář:


  • Lisiak
    odpověděl
    Prioritní je teď pro mně vědět na jaké rychlosti se bude hrát druhá krátká melodie. Když ji budu znát a bude to situace umožňovat, budu moci třeba zvýšit pracovní frekvencí programu i se současným časovačem v rozsahu 5 bitů, kde se současná skladba hraje pouze na rychlosti 4 (0-31). Proto jsem dělal ty manévry s rychlostmi... .

    Vložit komentář:


  • Lisiak
    odpověděl
    Tak vypisování a mazání textu za mně již svižné. Tím že hraju skladbu rychlostí 5 jsem si odrovnal funkci volume slide, protože u ní dělím číslem 4 pomocí rotace bitů a po technické stránce je tedy volume slide přístupné pouze pro hraní skladby s rychlostí násobku čísla 4, ale asi vím o úpravě a možná hodně jednoduché, jak tenhle efekt zpřístupnit i pro ostatní rychlosti třeba i 5. Teď jsem dělal hlavně to svižnější mazání textů a i drobnou optimalizaci kódu.

    Teď jsem přemýšlel co s tím občasným "zakopáváním" ve zvuku. Já vím, jak bych to spravil, zvýšil bych vnitřně rychlost hraní rutiny. To bych již šel do násobku té současné rychlosti, aby jsem se dostal i na rychlosti se kterými pracuje i klasický formát MOD. A dokonce by ta úprava ani nebyla nějak složitá, ale asi se mi to nechce dělat z důvodu, že s tím nemám nějaký problém. Mně to tam vždy spíše pobaví a tak asi napíšu v textu že jsem si toho vědom a hudební rutinu nechávám i tak na nižší frekvenci.

    Chvíli jsem se bavil na tom, jestli se zeptám na názor hudebníka, ale pak jsem si uvědomil, že již o něm vím, že má efekt zakopnutí ve skladbě rád, i když jeho efekt je řízený a je na stejném místě ve skladbě a ten můj náhodný, ale ano, když si řekne ať to odstraním, odstraním to, ale předpokládám že s tím nebude mít asi taky problém 🙂

    Již se nějakou dobu těším ještě na 1 režim zobrazování textu a myslím, že je již na to hudební rutina celkem předchystaná, jen řeším standardně věci se kterými jsem nepočítal 🙂

    Samozřejmě efekt zakopnutí kickbasu ve zvuku se projeví pouze, pokud píšu text v režimu více písmen naráz. Je to jednoduše již moc cyklů kým program pustím dál. Tam by pomohlo zvýšení frekvence pracování samotného programu, jak jsem již psal, protože moment ve kterém se samply hrají by byl přesnější.

    Hlavní časovač v hudební rutině CIA mám na hodnotě 2f56 hexa 🙂

    ​​​​​​​Čím větší je tahle hodnota tím rychlejší je hudební rutina, protože zaplňujete pomocí CIA čas, a každý čas, co se takhle musí zaplnit je čas v kódu který se dá využít i jinak 🙂
    ​​​

    Vložit komentář:


  • Lisiak
    odpověděl
    ....tak a teď si konečně můžu s programátorma, co mají hudební rutinu s CIA časováním porovnávat pinďoura na kolik kdo má nastavený časovač CIA.

    Vložit komentář:


  • Lisiak
    odpověděl
    Začal jsem si klást dotaz a co když budu chtít zahrát jinou skladbu jiným tempem? Tím že jsem časovač používal v plném rozsahu bylo nejpomalejší tempo hraní skladby právě dané. Pomaleji by to již nešlo. Podíval jsem se tedy do dokumentace Octamedu jak to dělá s tempem on. Základní rozsah má od 1 do 20 hexa. Já mám rozsah od 0 do 1F hexa. Tedy stejný jen posunutý o jedničku. Prosím já nic nekopíroval to sám! 🙂 Jednou jsem přidal časovači 1 bit, tedy jsem přešel z 4 na 5 bitů. Původní MOD hraje na rychlosti 5. Já tedy nastavil rychlost 4 a došteoval jsem hlavní časovač přímo v rutině (ne tenhle 5 bitový), ale CIA tak aby mi skladba hrála stejnou rychlostí jako originální MOD. Tím že mi vnitřně program jel 6 krát pomaleji z rychlosti 31 na 4 (0-31) tím jsem začal bojovat s rychlostí programu píšící text. Udělal jsem drobné úpravy, dal vše na maximální rychlost a celkem se povedlo. Jediné co se mi nelíbí je takový můj žertík jak mažu text a asi ho nepoužiju a udělám to jinak (chtělo by to alespoň dvojnásobní rychlost).
    Teď bych měl mít moji rutinu rychlostně nastavenou stejně jako u hraní MODu když se používá tempo v rozsahu 1 až 20 hexa na Octamedu a asi i jinde, pokud je nárůst tempa lineární.

    Sem tam mi moje rutina hudebně "zakopne" ale je to v místě kde vypisuji text jinak, ale je to třeba jednou za 10 minut a třeba se to ještě zlepší. Přeci jen stylem jakým vypisují text, že měním 2 způsoby na 1 obrazovce, to dělat nebudu. Uvidím vše testuji.

    Musel jsem doladit v mém formátu ve skladbě 1 místo, které mi začalo po úpravách dělat ve zvuku puknutí. Již to bylo na hraně a po úpravách se to projevilo. Tak jsem sampl ztlumil o 1 moment dříve.

    Zapracoval jsem i na části kódu píšící text v jeden moment. Ale není hotovo, mně teď zajímalo hlavně to tempo hraní skladby.

    Samozřejmě možnosti je víc jak zrychlit vnitřní rychlost mého programu. Zatím zůstávám u časovače na 5 bitech na rychlosti hraní skladby 4... .

    Vložit komentář:


  • Lisiak
    odpověděl
    Tak první verze psaní textu vícero písmen naráz v mém jednoduchém textovém enginu hotova. Vypsal jsem 3 řádky naráz a zvuk se u toho neškubl, vše zatím v pohodě. Celkově můj engine teď pracuje se 3 rychlostmi psaní textu. Druhá rychlost je vnitřně v programu nastavitelná, tedy má svůj vlastní časovač.

    Poslední chybu jsem odstránil tak, že jsem ji již neměl chuť hledat, pustil jsem si film Mortal Kombat 2, hned jsem ho vypnul, pustil jsem vývojové prostředí a chybu za chvíli našel, uložil verzi a pustil opět film MK2 který mi teď běží, jen tak na pozadí...

    Vložit komentář:


  • Lisiak
    odpověděl
    Tak snad problém vyřešen, testoval jsem poslední bit v Longu místo posledního bitu ve Wordu. Jsem byl již zblblej s tím, že u registru D4 pracuji s posledním byte ale v rámci čtení dat z formátu kde bit testuji pracuji jen s Wordem, tedy se 2 byte.

    Vložit komentář:


  • Lisiak
    odpověděl
    Tak hledám chybu v kódu a měl jsem za to že již mám problém vyřešen v závěru jsem jen zapomněl obnovit 1 registr tak jsem ho obnovil a chyba se opět začala projevovat. Tak jsem na zálohu 1 registru použil na test registr jiný, který se v části kódu ve kterém se hrabu vůbec nepoužívá aby jsem měl jistotu. Chyba se projevila. To jsem si řekl, to není možný. Šel jsem na kód, kde daný bit do registru dávám a byl jsem přesvědčen, že se ale nemá důvod prozatím vykonat a on se opravdu někdy vykoná. Jednoduše si mou chybou při ne zcela odšéfovaném kódu tam ten 1 bit do registru D4 vrazím hluboce přesvědčen že při daném stavu ho tam ale nedávám a pak se divím že ho tam mám a začnu hledat všude kolem co se děje, proč ho tam mám když tam ještě nemá být. Jak jsem si dal to poznámky jenom tu instrukci OR kterou tam ten 1 bit dávám tak začal být celý kód stabilní. Tak se na tu část kódu ještě musím podívat.

    Jak jsem si ten registr jen obnovil a chyba se projevila s čím jsem nepočítal a měl jsem za to že mám problém vyřešený malém mně omylo.

    Jak jsem dal ten OR dal do poznámky (přesvědčený že se ještě nemá vykonat) a začal být kód stabilní tak jsem sprostě řekl. Ty kurva jedná proč se vykonáš?

    Jeden z mých vypetejších momentů v rámci programování. Tep již mám opět v normálu.

    Vložit komentář:


  • Lisiak
    odpověděl
    To vypadá že si datový registr můžete vyblokovat i v případě, že jej v dané části kódu zrovna nepoužíváte, provedete v téhle zrovna nepoužívané části kódu rotaci, v druhé větvi programu rotaci se stejným registrem neprovedete a máte smůlu. Obě větve programu se sice vykonávají přibližně ve stejný čas, ale vždy jen jedna z daných dvou programových větví. Tímhle způsobem si vlastně můžete znepřístupnit správná data v obouch programových větvích.

    Pokud tomu všemu dobře rozumím. Asi mám další zkušenost za sebou o tom co dělat, aby jsem si data v registry sám nevyblokoval a měl přístup ke správným datům.

    No nic, budu to muset hodit do jediné programové větve.

    Ještě bych tu rotaci bitů mohl zohlednit v části programu kde ji nevykonávám. To bych se ke správným datům snad dostal. Nazval bych to lišákovo programování pomocí zrcadlového efektu.

    Vložit komentář:

Zpracovávám...
X