Oznámení

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

Assembler - všeobecná logika

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

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

    Amiga - PMD 85

    Komentovat


      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 🙂
      ​​​
      Amiga - PMD 85

      Komentovat


        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... .
        Amiga - PMD 85

        Komentovat


          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 🙂
          Amiga - PMD 85

          Komentovat


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

            Amiga - PMD 85

            Komentovat


              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.

              Amiga - PMD 85

              Komentovat


                Zatím jsem na mém žihadlu A1200 s 4MB Fast RAM nespozoroval žádné zakopnutí ve zvuku.

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

                Amiga - PMD 85

                Komentovat


                  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.




                  ​​​​
                  Amiga - PMD 85

                  Komentovat


                    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 Lisiak4; 16.08.2022, 09:47:03.
                    Amiga - PMD 85

                    Komentovat


                      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.
                      Amiga - PMD 85

                      Komentovat


                        Tak základ dalšího režimu programu pracujícím s textem hotov. Již jen nějaké to lazení standardně. A standardně jsem si to i užil. Použitelná až 3.verze. Ta nejjednodušší varianta jaká mohla být. Já tu logiku chtěl mít propracovanější nicméně kvůli rychlé frekvenci přístupu k hudebním HW registrům byl ve zvuku za mně nepoužitelný (veliký) ruch. Jak jsem psal že bude má hudební rutina "komunikovat" s jiným programem tak opak je pravdou a úplně jsem ji odstavil (kolem 10 míst v programu a vše přepínám jediným bitem. 9 míst v programu patří části pro text, odstavení hudební rutiny je přímočařejší a dělám to na jednom nebo dvou místech v programu. Člověk by si řekl odstavuji hudební rutinu a takhle zasahuji do programu pro text, ano velká návaznost. To byla ale stručná závorka 🙂 ).
                        Naposledy upravil Lisiak4; 13.09.2022, 14:18:33.
                        Amiga - PMD 85

                        Komentovat


                          Tak přeci jen použita o něco propracovanější logika. Ruch ve zvuku při rychlém použití HW registru se mi podařilo odstranit. Napadla mně alternativa ponechání nastavení konstantní hlasitosti, nepoužívám ani přerušení DMA u Pauli (taky ruch ve zvuku). Napadlo mně za sampl dát 2 byte na nulové hodnotě, tedy jsem to přidal přímo do průběhu samplu v Octamedu. A když potřebuji ztlumit zvuk bez ruchu, hraju jen ty poslední 2 byte v samplu. Vypadá to dobře, tak snad se to osvědčí. S tímhle jsem se radši už ani v emulací nehrál, tedy rovno v assembleru na Amize 1200.

                          Tohle mi umožňuje pracovat se samplem bez ruchu při práci s registry při každé smyčce programu a to jsem potřeboval. Když jsem měnil hlasitost v HW registry nebo přerušil DMA u Pauli, na zvuk bez ruchu jsem potřeboval tak 3 programové smyčky co bylo pro mně nepoužitelný. Teď mi stačí 1 programová smyčka.

                          Standardně budu ještě testovat, měl jsem jednou ve zvuku chybu tak uvidím, ale bylo to při rychlém psaní textu. Tam můžu pribržďovat psaní textu. Dodělal jsem to před chvílí, prozatím s hraním se v asm stačilo
                          Amiga - PMD 85

                          Komentovat

                          Zpracovávám...
                          X