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 Lisiak; 16.08.2022, 08: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 Lisiak; 13.09.2022, 13: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


                            Mám chuť sem napsat tak takový mezistav... .

                            Při rychlém vypisování textu se mi ve zvuku (při vypnuté hudební rutině) jednou za čas objevil ruch který zněl jako když jste u vinylové desky přešli jehlou gramce přes více stop. Standardně se prokázal rychlý přístup do HW registru pro zvuk. Tak jsem to ošetřil drobátko jinak, takovým kompromisem mezi obouma stavy (bez potřebného efektu / s efektem).

                            Pak jsem se vrhnul do zkoumání, jestli pokud zvukové registry ošetřim tak jak by se s nimi správně mělo počas hraní skladby pracovat, jestli dosáhnu jakéhokoliv zlepšení vůči současnému stavu hraní zvuku. (to ošetření psáno výše to byla jiná liga tam jsem s HW registry pracoval mnohonásobně rychleji) To o čem píšu teď, je časově na hraně ale už to začíná Amiga i dávat tak jsem nebyl nucen přistoupit k jinému řešení, tedy vrátit se k nejjednodušší logice programu. Já totiž to dělám drobátko po zvukové stránce prasárnu ale HW mi to za stavu kdy pracuji s 1 samplem umožňuje a pokud mi to umožňuje nemám důvod přidávat do programu instrukce navíc. Osobně to považuji za lepší řešení. Není to tedy o lenosti, já měl verze obě a vrátil jsem se k jednodušší protože stačí, alespoň zatím.

                            Pak jsem. začal řešit ještě 1 problém. Chtěl jsem hrát takové mono, tedy aby mi v levém a v pravém kanály hrálo to stejný. Někdy se mi bohužel jeden kanál vůči druhému po zvukové stránce chytl později (a to nepravidelně) co bylo ve zvuku dost slyšet. Samozřejmě jsem to zkoušel i popři z mého pohledu správné práci s HW registry. Ale ani to nepomohlo. Došel jsem k závěru, že to neovlivním. Potřeboval bych pracovat s HW registry pomaleji a to nemůžu. Rozhodl jsem se proto hrát jen 1 kanál co ničemu až tak nevadí. Je to pro mně asi lepší řešení jako hrát oba kanály s jednodušší logikou kódu a tedy i pomalejším přístupem k HW registrům. To bych mohl... .

                            Vše co sem teď píšu platí pro vypnutou hudební rutinu. V mé hudební rutině pracuj s HW registry snad standardně, tam by tohle použít nešlo co mně prozatím utvrzuje v mém správném rozhodnutí ji pro tenhle případ odstavit.

                            Pokračování příště, snad ​​​​​​​
                            Naposledy upravil Lisiak; 27.09.2022, 15:13:10.
                            Amiga - PMD 85

                            Komentovat


                              Už nějaký ten pátek mám stav, kdy v mém programu odstavym hudební rutinu a přes to pracuji se zvukem mám práci se zvukem bezproblémovou, neboli zvuk je čistý bez ruchů. Všechny registry se zvukem kompletně ošetřeny aby se s nimi pracovalo jak na úrovni mé hudební rutiny, teď již i při jejím vypnutí. To jsem již jednou měl a neměl jsem zvuk čistý, asi tomu pomohli drobné změny v logice v rámci práce se zvukem. Taky jsem trochu jinak vyřešil odstavení registru pro práci s DMA v rámci zvuku. Klasická $dff096ka, kde rozhodnutí, jestli se použije nečiní kód před tímhle registrem, ale úplně jej preskakuji a aktivaci DMA Pauli vykonám ještě před hlavní smyčkou programu. Tohle jsem si mohl dovolit díky tomu, že mám odstavenou hudební rutinu. Asi by šlo pracovat s registrem $dff096 v rámci zvuku i na 2 místech v programu současně, za podmínky, že počet taktů při použití obouch registrů bude shodný v momentě kdy je použijete, ostatní by vedlo k rozsinchronizovani zvuku.​​​​​

                              Pak jsem se zaměřil na další věci ohledně textra. Snažil jsem se logicky oddělit stav, kdy se v rámci textu pracuje s menší části obrazovky.

                              Pak jsem si všiml jedné chyby a to, že mi program v textu nezobrazuje úplně poslední řádek a to ne řádek textu, to bych viděl hned 🙂, ale poslední řádek v rozsahu výšky 1 pixelu a i to až na posledním řádku ve kterém vypisuji text. Do tohohle posledního řádku o výšce 1 pixel vypisuji asi jenom část ze znaku čárky. Chybu jsem začal hledat v pátek a dohledal ji v sobotu. To je ten můj styl, kdy nemám rád v kódu něco co nevím co přesně dělá když kód funguje "stejně" i bez jeho použití... . Neměl jsem definovanou oblast pro zobrazení, jinak se dle všeho zobrazuje menší výsek obrazovky jak je standardně zmiňované v dokumentacích. Už jsem chtěl dávat dotaz, ale měl jsem hlavu již ve srač... tak jsem to odložil, mezi tím si začal číst diskuze na EAB a já zjistil kde je problém. Vlastně to reagovalo již pouze u vynulování registru určeného pro začátek určení oblasti pro zobrazení a konečně se mi zobrazil i poslední nejnižší pixel pro vypsání textu. Hurá 🙂.
                              Ještě jsem se chtěl podívat jakou oblast mám definovat. Samozřejmě v diskuzích se střídalo pár nastavení, které se opakovali ale i tak jsem to chtěl mít více podložené že které z nich. Zabrousil jsem proto do mých PDF knih o assembleru a vsadil na mou oblíbenou polskou (ne od Zapy). Sklamala. Druhý můj tažný kůň je taková ta Italská brožurka . Tam jsem konečně porozuměl italskému normální stav na první dobrou... 🙂

                              Potřebuji v textru udělat ještě 1 věc, která má co dočinění s přechodem mezi různými režimy v programu.

                              Když se ještě vrátím k tomu nedefinování zobrazení oblasti v obraze a nezobrazování posledního pixelu co zobrazovat chcete. Vtipná to situace, skoro na zabití... 🙂
                              Naposledy upravil Lisiak; 16.10.2022, 06:45:01.
                              Amiga - PMD 85

                              Komentovat


                                Tak nějak již mám program pro vypisování textu ve stavu, kdy dělá to co jsem chtěl, popřípadě jsem se různým zkoušením musel dopracovat k z mého pohledu k nějaké nejlepší variantě, jak by co mělo fungovat.

                                Obraz je vycentrovaný, celkově posunutý o 1 pixel níže, protože ve výsledku záleží, jestli máte výšku zobrazovaného pole v sudém, nebo v lichém počtu.

                                Vrátil jsem vypisování textu funkci, že mezera nepromaže text, pokud tam nějaký je. Původně mazání mezerou bylo ku prospěchu nicméně já již můžu mazat text i jinak a teď má již nepromazávání textu mezerou své výhody.

                                V režimu odstavené hudební rutiny již dokážu mazat text velice rychle, to je vlastně předvolený režim, pokud je hudební rutina odstavena, za mně to pak vypadá dobře. To rychlé promazávání je důležité opravdu jen v tomhle režimu - z mého pohledu.

                                Vizuálně jsem zmenšil zobrazovací plochu, nelíbilo se mi psaní textu třeba jen na 3 řádky do již vytvořeného jednoduchého grafického prvku. Takhle je to za mně ok.

                                Odtestuji na real Amize, možná nějaká kontrola kódu, ale dle všeho za mně jednoduchý engine pro práci s textem hotov, pokud se nevyskytne problém, ale to budu opravovat kód a ne měnit funkcionalitu, s tou jsem alespoň já spokojen.

                                Tak doedituji skladbu a ještě kód pro zobrazení nějakého obrázku... .
                                Naposledy upravil Lisiak; 15.11.2022, 23:01:48.
                                Amiga - PMD 85

                                Komentovat

                                Zpracovávám...
                                X