Oznámení

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

Assembler - všeobecná logika

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

    Tak na reální Amize jsem měl ve zvuku v režimu kdy odstavuji hudební rutinu v samplu pořád drobné praskání ve zvuku. Nejdříve jsem měl za to, že se jedná o rychlost hraní samplu. To se nepotvrdilo. Sampl má celkem 512 bytů, já z něj cykloval 256 bytů. Pomohlo snížit ještě úsek cyklování samplu a já to rovnou nastavil na frekvenci opakování samplu která mi vyhovovala a opakuji ve výsledku 160 bytů ze samplu. Nastavoval jsem to na přesnost 10 bytů a za mně je to ok. Teď si uvědomuji, že dané praskání v samplu nezpůsobovalo dávání jeho frekvenčního průběhu na nulu a pak na jeho klasický průběh, ale rozdíl průběhu při jeho opakování. Jeho průběh má klesající charakter a ten skok v jeho vzdálenějším průběhu k jeho začátku již byl moc veliký
    Amiga - PMD 85

    Komentovat


      Tak před chvílí na mně asm vyjel s chybou co jsem nečekal, protože jsem dlouhodobě do toho kódu kde se vyskytovala nezasahoval. Tak jsem nevěděl která bije asi tak minutu. Pak jsem pochopil že PC relativní adresaci na adresu bitplanu již nestačil skok Já to měl definovaný za textem pro můj jednoduchý program co s textem pracuje. No a jak jsem text nabaloval, tak již to bylo moc... . Tak jsem vzal celý program pro Cooper a hodil ho před ten text. Již dobrý... .

      Amiga - PMD 85

      Komentovat


        Včera možná dnes, no jednoduše kolem půlnoci jsem časově synchronizoval práci textra a hudební rutiny kvůli jednomu režimu a potřeboval jsem v závěru přesně odsledovat 4 cykly, řekněme 1 cyklus tak 20 vteřin s čím jsem celkem zápasil, protože jsem vždy v jednom cyklu chytl mikrospánek, ale nakonec se povedlo. Tak jsem to mohl spokojeně vypnout. Já jsem vždy k večeru aktivnější jen tělo takhle protestuje
        Amiga - PMD 85

        Komentovat




          Jak co nejlépe pro kohokoliv podat informaci o tom, že se budou na obrazovce zobrazovat pouze data, které mají hodnotu logické 1. Data se budou zobrazovat v hexadecimální soustavě, ale tahle informace již podaná je. To je spíše info pro vás. Kde nebudou logické 1 budou mezery / mezera.
          Amiga - PMD 85

          Komentovat


            ...tedy to co jsem napsal vlastně není pořád přesné, protože mezera bude pouze za stavu kdy budeme mít vynulovaný kompletně celý 1 byte
            Amiga - PMD 85

            Komentovat


              ...tak použil jsem větu:
              Místo hodnoty 0 je použitá mezera.
              Amiga - PMD 85

              Komentovat


                Obvykle se za logickou pravdu (true) používá jakákoliv _nenulová_ hodnota. Má to tak C, C++, C# a asi i mnoho dalších procedurálních jazyků vycházejících z Algolu. Naopak nepravda (false) je definována jako nulová hodnota, bez ohledu na počet bitů.
                Ve tvém případě by to tedy mohlo být tak, že "space" je tam, kde je nula, jinak se zobrazí znak. Problém může být to, že "space" je vlastně taky znak. Ale to nemusí být v praxi potřebné.
                Pokud ale chceš mít uloženy informace true/false, že se někde něco (v prostoru) zobrazuje, ta nejúspornější varianta uložení je tzv. bitfield array - pole bitů. Například v C/C++ hodnotu true/false pro celočíselný index X získáš jako ( bitarray[ X >> 3 ] & ( 0x80 >> ( X & 7 ) ) ). Nastavit hodnotu můžeš použitím ( IsTrue ? bitarray[ X >> 3 ] |= ( 0x80 >> ( X & 7 ) ) : bitarray[ X >> 3 ] &= ~( 0x80 >> ( X & 7 ) ) ). Pro deklaraci "unsigned char* bitarray;".

                Komentovat


                  Díky za odpověď. Jsem opět o něco chytřejší. Dnes jsem provedl nějaké testy jak to vše vypadá s mezerou místo nuly a myslím že je to ok. Pro použití nuly bych musel opět drobátko nabalit kód, tak když to není nutný, nebudu to dělat.

                  Já mám 2 druhy vizuální mezery. Ta druhá mezera říká, že se má provést další veliký cyklus programu, tedy se opustí část kódu, která by se jinak opakovala. Zároveň se tahle funkce "druhé" mezery dá použít i jako časovač, aniž by jsem jej musel definovat, co je taky fajn.

                  ​​​​​ V té druhé části máš asi makra. K těm jsem se nedostal, i když princip je dle všeho jednoduchý. Dělají se tam nějaké bitové (bytové?) posuny.
                  Ale to u mně není na pořadu dne.

                  Já jen ROR, ROL, ASR, ASL...
                  Amiga - PMD 85

                  Komentovat


                    Já mám již skladbu ve 2 patternech v mém formátu nějaký pátek převedenou, ale dnes jsem se něčím zabýval a přimělo se mně to podívat na velikost 2 patternů v bytech.

                    Nesoutěžím, to není cíl, ale drobnosti jednoduše potěší.

                    Info z Eagleplayeru a pak můj skok přes 2 patterny u stejné skladby.

                    EP: 3132 bajtů, můj hudební formát 1092 bajtů (444 hexa)

                    MOD je samozřejmě komplexnější formát ale i tak jsem byl překvapen. Počítal jsem že budu celkově tak na 2 KB. Tedy 1 KB na jeden pattern.

                    Tak jen tak pro zajímavost...
                    Amiga - PMD 85

                    Komentovat


                      Já to prostě nedám a tuhle informací ze dneška pustím ven. Chtěl jsem zobrazovat můj hudební formát v reálném čase i na obrazovku, nicméně ta nízká frekvence na které běží můj program pověšený na mou hudební rutinu je tak nízká, že mi u tohohle rychlého zobrazování textu začala má A1200 pouze s Fast RAM malinko táhnout zvuk. Tenhle problém již nebudu řešit a asi zobrazím hudební formát běžným pomalejším způsobem aby to i 020ka dávala.
                      ​​​​​​
                      Někdo si může říci neúspěch. Já tohle žeru. To je boží jak to na té poddimenzované frekvenci pro vykonání programové smyčky nestíhá!

                      Samozřejmě výkonu u 020 je dost, jen jsem ji moc "přiškrtil" na rychlé zobrazování textu
                      Amiga - PMD 85

                      Komentovat


                        Autorem citovaného textu je Lisiak Přejít na původní příspěvek
                        ​​​​​​
                        Někdo si může říci neúspěch. Já tohle žeru. To je boží jak to na té poddimenzované frekvenci pro vykonání programové smyčky nestíhá!
                        Problém dle všeho vyřešen.
                        Amiga - PMD 85

                        Komentovat


                          ​​​​​​Předpokládám, že vlastnost, když máme v adresovém registru v rozsahu word nejvyšší bit na logické 1 = 8000h, se další 2 byte (druhý word z Longu nastaví na hodnotu FFFF = FFFF8000h) má opodstatnění o kterém zatím nevím... .

                          Edit: pokud do adresového registru dáváme hodnotu v rozsahu wordu...
                          Naposledy upravil Lisiak; 22.03.2023, 13:13:47.
                          Amiga - PMD 85

                          Komentovat


                            Hodnota v adresovém registru je vždy v plném rozsahu 32 bitů. Adresové registry podporují pouze aritmetické operace v plném rozsahu 32 bitů.
                            V důsledku to znamená, že jakákoliv hodnota s menším počtem bitů (8 nebo 16) použitá jako vstupní operand je automaticky rozšířená na plný rozsah 32 bitů. Hodnota vstupního operandu se vždy bere, že je se znaménkem!
                            Z tvého popisu to vypadá, jako by nebylo možné mít v adresovém registru hodnotu $8000 aniž by nebyla rozšířená na 32 bitové číslo $FFFF8000. To samozřejmě není pravda. K nastavení nebo vynulování horních 16 bitů dojde pouze při přesunu nebo při aritmetické operaci.
                            Code:
                            move.w #$8000,d0
                            move.w d0,a0
                            v A0 bude hodnota #$FFFF8000.
                            Code:
                            lea.l $8000,a0
                            Tady bude mít A0 normálně hodnotu $00008000.
                            Code:
                            moveq #-1,d0
                            add.w d0,a0
                            bude mít stejný výsledek jako
                            Code:
                            moveq #-1,d0
                            add.l d0,a0
                            Z toho vyplývají některé optimalizace. Např. je zbytečné dělat
                            Code:
                            add.l #2,a0
                            stačí
                            Code:
                            add.w #2,a0
                            Je zbytečné dělat
                            Code:
                            lea.l $4,a6
                            stačí
                            Code:
                            lea.l $4.w,a6
                            (assembler se zaplou optimalizací si toho ale asi všimne a udělá úpravu sám)
                            apod.
                            Naposledy upravil Defor; 24.03.2023, 18:48:01.

                            Komentovat


                              Díky, já LEA používám zatím jako PC relativní adresaci, vím že to byl příklad . Já řešil zacyklení celého intra a to je skok více než 2 byte. Jenže pokud chceš použít při odečtu i poslední bit ze 2 byte, jíž musíš pracovat s rozsahem Long, aby byl výsledek správný, co jsem si musel uvědomit. Na pro mně potřebný skok mi 2 byte nestačí. Tak si jen odchytnu poslední bit ze 2 byte a provedu skok přímo v kódu, aniž bych hodnotu zadával do textového enginu. Nižší hodnoty bez posledního bitu ze 2 bytu jsou již zpracovávány textovým enginem. Já si teď ověřuji, jestli mám ten skok správný. Ono nedělám skok na úplný začátek, to jen tak pro zajímavost. Kvůli tomu si ještě budu muset sesynchronizovat druhou smyčku programu s tou první.
                              Amiga - PMD 85

                              Komentovat


                                Nedá mi to a zajímá mně jak šikovně by si řešil skutečnost, že při jiném režimu zobrazování textu (znaky 1 až 9 a A až F), vůči tomu standardnímu se ti začne na A1200 hudba v tempu zpomalovat a když dáš u CIA hodnotu o 1 menší máš tempo skladby moc rychlé. Jak by si to pak přibrzdil, aniž by si přidával co i jen 1 řádek dalšího kódu? Opět jen pro zajímavost, ve skutečnosti se hodnota nastavení CIA sníží o 5, protože se dělá celkem 5 cyklů (hraje se melodie rychlostí 5). Já mám rychlost i 0, tedy v MODu je nastavení 5 a u mně 4 🙂

                                ...jen se s tebou bavím o tom co mně baví. Ono mně někdy ty řešení opravdu pobaví, minimálně v závěru.

                                ​​​​​​
                                Amiga - PMD 85

                                Komentovat

                                Zpracovávám...
                                X