OldComp.cz https://oldcomp.cz/ |
|
Tvorba hudby + programování v assembleru https://oldcomp.cz/viewtopic.php?f=119&t=3537 |
Stránka 13 z 16 |
Autor: | Lisiak4 [ 07.05.2021, 23:58 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Ahoj, já to vše píšu na mobilu, myslím teď, nemám doma net v PC. Supr, již konečně vím, proč dávají $dff000 do registru. Já teď sice mám volné 4 adresové registre, byli určeny na něco jiného, to ale asi i tak nakonec bude vše jinak a zatím si ty registre nechám v záloze, je tam ještě pár otazníků, co a jak vše bude, nicméně to až někdy jindy, nicméně díky za vysvětlení . Moc se omlouvám když budu oponovat, ale opravdu nevím o tom že by volume používalo 16 bitů. Maximální volume je dekadicky 64, tedy 40 hexa. Tedy ani nejvyšší bit z 1 byte není využít a já používám bit 0-5 a tuhle hodnotu navysuji o 1. Tím se dostanu na rozsah 1 až 64 na všechny 4 kanály pomocí 3 byte. A 4.byte z Longu je v rámci dát mého formátu využit na něco jiného. Word je potřebný u frekvence (periody) a u délky samplu. Byte u volume. Pokud se tedy pletu já, tak se opět jedná o nějakou ne zcela dokumentovanou specialitu Koukal jsem opět raději na net a hledal i tu $dff0c9, nějaký 1 příklad mi to našlo, ale nejsem si jist, jestli to mělo něco s volume. Info o parametrech třeba zde: http://amiga-dev.wikidot.com/hardware:audxvol Jinak nulovou hlasitost pak dosahují ukončením DMA přenosu, tedy snad to popisují správně, já radši věci používám než je nějak přesně definuji. První kanál dám na hlasitost 0 takhle: Move.w #1,dff096 K tomu TST, že je to zbytečné používat ok. Zatím je tam nechám, ale už o tom vím a časem na to přijde řada. Tedy u datových registrů. K tomu poslednímu moveq #$0f,d0 and.b d7,d0 beq.b .skip Tohle bohužel nemůžu použít. Dlouho jsem měl a v hodně částech kódu ještě mám 1 datový registr volný v celém rozsahu, ale ne zde. V té D0 mám k dispozici jen 2 byte, tedy Moveq by mi smazalo potřebné data ve vyšších 2 byte z Longu. Ale mám k dispozici v Longu alespoň A2 a za ní jsem rád alespoň v závěru ukázanýho kódu |
Autor: | Busy [ 08.05.2021, 10:07 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Lisiak4 píše: Volume Slide Pozeram ze robis v emulatore a program pises rovno na emulovanej amige. Nezvazoval si pisat program v nejakom dobrom modernom IDE prostredi, ktore predsa len vie poskytnut podstatne vyssi komfort pre pisanie programov ?Napriklad na ZX Spektre mame vynikajuce MRS, v ktorom som napisal vsetky svoje asemblerove programy, ale aj napriek tomu som sa v roku 2010 rozhodol prejst na crossdeveloping a odvtedy programy pisem priamo na PeCedle. A rozhodne nelutujem. |
Autor: | Lisiak4 [ 08.05.2021, 15:14 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Ono je to možná tím, že pořád dělám na 1 programu od počátku co jsem se začal učit v ASM. Možná i tím, že na té Amize v emulaci je to taky celkem pohodlný. Nic zásadního mi tam nechybí. Dělával jsem v Pythonu přímo na PC a tak nějak nepozoruji rozdíl. Mně vyhovuji jednoduché věci a ty jsou většinou i tak základnější. V emulaci mám nízké rozlišení, písmo je veliké a přehledné a to je fajn. Zatím mi v Asm-Pro ve kterém dělám opravdu nic zásadního nechybí. Mám ho i na real Amize. I dnes jsem něco testoval na real železe přímo v ASM, protože nějaký expert udělal na netu článek o notách a dal notu B na klávesu Amol místo na H. Já když se k těmhle věcem vracím po roce, tak si to tak nepamatuji a klávesy (nástroj) přes mou rutinu mi hráli falešně tak jsem si udělal 3 hodinové kolečko, kde by mohla být chyba |
Autor: | Antony/DTA [ 08.05.2021, 17:22 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Lisiak4 píše: Moc se omlouvám když budu oponovat, ale opravdu nevím o tom že by volume používalo 16 bitů. Všetky HW registre sú 16-bitové, aj adresy sú rozdelené do dvoch registrov. Volume používa len 7 bitov (6-0) a 9 bitov (15-7) sa nepoužíva, je to aj v tom tvojom odkaze. Takže keď chceš zapisovať len bajt, tak musíš preskočiť prvý (nepoužitý) bajt HW registra. |
Autor: | Lisiak4 [ 08.05.2021, 18:29 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Ok, fungují obě varianty zápisu 1 byte. Jak třeba do dff0d8, tak i dff0d9. Mám tomu rozumět tak, že se do HW registru zapisuje v obráceném sledu než do registru datového, nebo adresového? |
Autor: | Lisiak4 [ 09.05.2021, 02:16 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Tak se mi povedla alespoň na 1 tónu taková sranda. Jedná se o práci s basovým nástrojem. Jde o to že zatím umím jen jednoduše loopovat nástroj. Když ale průběh začátku hraní je ve zvuku celkem důležitý a zahraje se jen jednou a pak se další část opakuje, to již neumím si tenhle údaj vzít ze samplu. Ten začátek před loopovaním je velice krátký, jeho hraní a přechod na loopováni je v rozsahu 1 řádku patternu. Mohl by jsem ten sampl natáhnout, aby jsem ho neloopoval a jeho průběh hraní bych opakoval přímo v jeho sinusovce. To bych měl tak 20 KB sampl. Žádná katastrofa, ale původní sampl má necelé kilo. Udělal jsem si tedy 2 menší sample. 1 na začátek hraní nástroje a druhý na loopování. Hodil jsem to do 4.kanalu, který vůči těm dalším dokáže pracovat s podstatně jemnějším časováním. A podařilo se mi ty sample zahrát za sebou tak rychle, že to zní jako původní 1 sampl. Porovnával jsem hraní původního samplu v Octamedu vůči mým 2 malým samplům v mé hudební rutině. Po zvukové stránce jsem neslyšel rozdíl. Minimálně v tom 1 tónu jsem oba příběhy samplů sladil. Tohle dělat na delší skladbě by byla magořina, ale těch pár tónů zkusím zvládnout. Alespoň jsem si provětral některé nově preprogramované části kódu. Vše je ok. Jen dodám že v rámci nastavení časovače je pouze 1 hodnota správně. Časovač má rozsah 5 bitů. |
Autor: | defor [ 09.05.2021, 21:35 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Lisiak4 píše: Ok, fungují obě varianty zápisu 1 byte. Jak třeba do dff0d8, tak i dff0d9. Mám tomu rozumět tak, že se do HW registru zapisuje v obráceném sledu než do registru datového, nebo adresového? Že ti přičtení (nebo odečtení) bajtu na tuto špatnou adresu funguje je v podstatě náhoda. Tedy náhoda to není, ale využíváš vlastnosti 68k procesorů, o které asi nevíš. Ale nebude to fungovat na všech Amigách (resp. nebude na některých akcelerátorech). Viz tento odkaz, kde je i vysvětlení, proč tomu tak je. https://eab.abime.net/showthread.php?p=1411756 Custom registry AUDxVOL jsou šestnáctibitové (koneckonců jako všechny ostatní) a má se k nim přistupovat čtením a zápisem v rozsahu šestnácti bitů. Když už chceš inkrementovat hlasitost přičtením bajtu, je dobré přistupovat na adresu, kde se ten bajt skutečně nachází. A ten je na AUDxVOL+1. |
Autor: | Lisiak4 [ 09.05.2021, 22:17 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Jasně, díky za info, dám tam ty devítky |
Autor: | Lisiak4 [ 18.05.2021, 01:08 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Jo a efekt arpeggio nemám v podprogramu, mám to jen jako klasický kód. |
Autor: | defor [ 18.05.2021, 09:42 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Jen pár poznámek ke zdrojáku. Opět nic důležitého. Jen pár programovacích technik a tipů. sekvence Kód: move.b #0,d2 tst.w d2 bne smp2nd1 lze přepsat na kratší Kód: eor.w #$ff,d2 bne.b smp2nd1 Instrukce moveq vždy pracuje s celým rozsahem 32 bitů. Není tedy třeba psát moveq.l. Skoky je vhodné specifikovat jako krátké osmibitové (např. bne.b nebo bne.s -- je to totéž). Jinak se to nechává na assembleru, který buď v základu vyrábí skoky šestnáctibitové (např. z bne udělá bne.w), nebo je dává na osm bitů v případě, že se zapne optimalizace. Mně se spíše osvědčilo postarat se o to sám a mít tak vše pod kontrolou. Pokud se skok do osmi bitů už nevleze, tak na to assembler upozorní. Zvaž, jestli nevyužívat lokální labels. Ta začínají tečkou. Jejich viditelnost (platnost) je vždy mezi dvěma globálními labely. Trochu to odpovídá lokální viditelnosti proměnných u vyšších jazyků (name scope). Umožňuje to mít přehlednější a kratší labely a nemuset se starat o konflikty mezi jejich jmény. Kód: mySubroutine1:
movem.l d0-a6,-(sp) ... ... .loop ; toto je lokální label platný jen mezi dvěma globálními move.w d0,d1 ... ... dbf d7,.loop movem.l (sp)+,d0-a6 rts mySubroutine2: movem.l d0-a6,-(sp) ... ... .loop ; platnost předchozího .loop zkončila s deklarací globálního labelu mySubroutine2 move.w d0,d1 ... ... dbf d7,.loop movem.l (sp)+,d0-a6 rts |
Autor: | Antony/DTA [ 18.05.2021, 13:29 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Toto mi nejak nesedí: defor píše: Kód: eor.w #$ff,d2 bne.b smp2nd1 Možno si myslel toto: Kód: and.w #$ff00,d2 bne.b smp2nd1 Ale toto celé: Kód: move.w d3,d2 move.b #0,d2 tst.w d2 bne smp2nd1 sa dá skrátiť na: Kód: cmp.w #$0100,d3
bhs.b smp2nd1 ;bcc.b |
Autor: | defor [ 18.05.2021, 15:24 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Antony/DTA píše: Toto mi nejak nesedí: Možno si myslel toto: Kód: and.w #$ff00,d2 bne.b smp2nd1 Ano, máš pravdu. Nevím, na co jsem myslel. Aspoň Lisiak vidí, že mi nesmí všechno věřit. O té další úpravě nevím. Popravdě já vůbec netuším, co přesně Lisiak v tom kódu dělá. Jestli mu jde jen o test, že v D3 je od osmého bitu ve wordu nenulové "něco", tak samozřejmě máš pravdu. |
Autor: | Lisiak4 [ 19.05.2021, 07:26 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
Všemu rozumím, díky oboum za rady |
Autor: | Lisiak4 [ 19.05.2021, 07:36 ] |
Předmět příspěvku: | Re: Tvorba hudby + programování v assembleru |
defor píše: O té další úpravě nevím. Popravdě já vůbec netuším, co přesně Lisiak v tom kódu dělá. Jestli mu jde jen o test, že v D3 je od osmého bitu ve wordu nenulové "něco", tak samozřejmě máš pravdu. Ano o to mi jde, pokud je od 8.bitu něco, nehraje se klasický tón, ale arpeggio. Arpeggio se může hrát v rámci času v celém rozsahu 1 řádku patternu, ne jenom na jeho začátku, proto se to zpracovává jinak. To na kolik časových dílů je ještě rozdělen 1 řádek patternu mám nastaveno pomocí časovače CIA. |
Stránka 13 z 16 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |