OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 20:04

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 87 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6  Další
Autor Zpráva
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 15.08.2016, 17:22 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
PS: Když se vrátím k tomu dělení, použil a vystačil jsem si s dělením pomocí rotací bitů.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 18.10.2016, 19:01 
Offline
Radil
Uživatelský avatar

Registrován: 12.05.2013, 20:32
Příspěvky: 457
Bydliště: Kladno
Has thanked: 46 times
Been thanked: 118 times
K tomu StackPointeru. SP je register (ukazatel) A7. A má stejné vlastnosti a možnosti jako jeho kolegové A0-A6. Nevýhodou A7 je právě to, že se používá jako SP. Tedy k ukládání návratových adres instrukcí typu JSR a hlavně návratových adres z přerušeni. Funkci LIFO umějí všechny registry A0-A7. A jestli se nepletu, od modelu 68020 se dají registry An používat stejně jako registry Dn. Jen to stojí tuším o 4 takty déle.

_________________
>>eLeMeNt, MB03+, Amiga 1200, ZX Spectrum 128 +2A, ZX Spectrum+, Didaktik Gama, LnxSpectrum, LnxTracker, LnxAmigaImageConvertor, https://www.ilnx.cz <<


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 18.10.2016, 21:13 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
OK, jsem před optimalizací části kódu pro výběr frekvence (děsná programová nudle) v mé hudební rutině. A když se nezadaří tak tam ty správné frekvence nasypu i takhle a nechám to na příště. Měla by na to stačit logika vysokoúrovňového jazyku (na které je založen zatím celý program), tak jsem zvědav, jestli se pletu nebo nepletu :).

edit: tedy ne frekvence, ale periody

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 25.10.2016, 22:38 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Některé věci beru jako samozřejmost a později začnu přemýšlet. Mám v hlavě 2 různé varianty napsání 1 části kódu.

Teď k tomu co mne zajímá.

Klasické registre Amigy jsou 32 bitové. Pokud u programování třeba do registru d0 zapisuji hodnotu, kde je zapsaná hodnota která se bude zapisovat do registru d0? Mám tomu rozumět tak, že registr d0 má ve skutečnosti dva 32 bitové registre? Jeden pro hodnotu, kterou chceme zapisovat a druhý pro samotné zapsání téhle hodnoty? Tedy jeden pro číslo 1 a druhý, kam se číslo 1 zapíše? V programe zapíšu 00000001 do d0. D0 má 32 bitů, číslo 1 i s nulami před ním má taky rozsah 32 bitů. Tedy i v rámci způsobu zápisu čísla 1 se pracuje přímo s datovým registrem? Nebo se to číslo 1 zapisuje do paměti? Proč se ptám, stavím "proti" tomu co jsem teď napsal přímý zápis do paměti pomocí pseudoinstrukce DC. Přímá práce s registry by měla být rychlejší jako práce s pamětí, na to by ale číslo 1 nemělo být v paměti uloženo ne?

move.L #1,d0

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 26.10.2016, 09:35 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
Vubec jsem nepochopil dotaz...
Zkusim se na to podivat z pohledu uvedene instrukce "move.L #1,d0": procesor nacte instrukcni kod (16 bitu), kde zjisti, ze nasleduje dalsich 32 bitu dat. Tato data nacte a ulozi to uvedeneho registru, ktery ma prave 32 bitu pro ukladana data. Cislo je tedy ulozene v "pameti programu" a nacita se automaticky zpracovanim uvedene instrukce.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 26.10.2016, 15:07 
Offline
Kecálek
Uživatelský avatar

Registrován: 13.05.2013, 06:28
Příspěvky: 231
Bydliště: Handlova
Has thanked: 118 times
Been thanked: 44 times
Ak som to pochopil tak chces pouzit "self modifying code" ?
Takze move.l #$ffffffff,d0

mozes zapisat ako

dc.w $203c
dc.l $ffffffff

_________________
MiST | Amiga 600 Furia II | Amiga 1200 ACA1231 | Sharp MZ800 | ZX Spectrum 48k | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 26.10.2016, 15:08 
Offline
Kecálek
Uživatelský avatar

Registrován: 13.05.2013, 06:28
Příspěvky: 231
Bydliště: Handlova
Has thanked: 118 times
Been thanked: 44 times
Tu je aj kodovanie pre MOVE / MOVEA

Obrázek

_________________
MiST | Amiga 600 Furia II | Amiga 1200 ACA1231 | Sharp MZ800 | ZX Spectrum 48k | Didaktik M | Didaktik Gama | C64 U1541II | Atari 800XL | Atari 130XE U1MB+SIDE2.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 26.10.2016, 18:18 
Offline
Radil
Uživatelský avatar

Registrován: 12.05.2013, 20:32
Příspěvky: 457
Bydliště: Kladno
Has thanked: 46 times
Been thanked: 118 times
Ještě doplnění. Obsah registrů se neukládá nikam do RAM počítače. Registry mají vlastní paměť uvnitř procesoru. A není to ani Cache. Proto není pochyb u instrukce typu move.l #nnnnnnnn, D0 kam data půjdou. Nemusí znát žadnou další 32b adresu do RAM v počítači kam by data měla jít. To mu totiž říkají jasně 3 bity přímo v instrukci (kam s daty do interní RAM Cpu).

_________________
>>eLeMeNt, MB03+, Amiga 1200, ZX Spectrum 128 +2A, ZX Spectrum+, Didaktik Gama, LnxSpectrum, LnxTracker, LnxAmigaImageConvertor, https://www.ilnx.cz <<


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 26.10.2016, 21:05 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Ďakujem za odpoveďe, zatiaľ mi to stačí tak, že to číslo je uložené v EAMS, EARS, čo by mohla byť tá vlastná pamať. Išlo mi skor o nejaký HW priestor, kďe to číslo je, aby som si to vedel lepšie predstaviť. Tak snáď si to možem takto vysvetľovať, že to číslo ide z programu práve sem. Pokiaľ je to takto správne, tak si potom aj viem predstaviť rýchlejšiu prácu při použití samotného registru, ako pri použití aj pamaťe počítača.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 02.11.2016, 15:19 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
je takováhle subrutinka normální, nebo se jí mám snažit vyhýbat a mám si tu úsporu 1 řádku na vícero místech odpustit? :)

Kód:
swapujemeo100sest
       swap d2
       swap d3
       rts


:mrgreen: :lol:

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 02.11.2016, 15:35 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Asi tu subrutinku nepoužiju a bude jednoduše o pár řádku více a asi spíše něco málo ušetřím na skoku na tu pidi subrutinku, ale klidne něco napište, vaše názory mne zajímají! :D

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 02.11.2016, 15:57 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
SWAP i RTS jsou 16-bitove instrukce. U JST zalezi na formatu parametru.
Pokud do programu vlozim 2xSWAP, jsou to 4 obsazene byty.
JSR zabere IMHO minimalne 4 byty (pokud neni adresa v nekterem registru).
Pouzitim sbrutiny se tedy neusetri ani prostor, ani cas vykonani... To by ta subrutina musela umet neco vic ;-)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 02.11.2016, 16:11 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Ja používám PC relativní skok, tedy BSR. Co je úspornější než JSR, pokud se nepletu. U JSR se navíc používají relokační tabulky pokud se nepletu. JSR používám pouze na práci se systémem, třeba na odstavení systému :lol:.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 02.11.2016, 18:21 
Offline
Kecálek

Registrován: 07.05.2014, 12:10
Příspěvky: 197
Bydliště: Jbc
Has thanked: 0 time
Been thanked: 39 times
BSR muze byt 2 byty pro skok +-127, 4byty nebo 6 bytu pro delsi skoky. U vetsi aplikace bude BSR casteji 4-bytovy, stejne jako 2xSWAP...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Amiga Assembler 68000/020
PříspěvekNapsal: 02.11.2016, 19:17 
Offline
Radil
Uživatelský avatar

Registrován: 12.05.2013, 20:32
Příspěvky: 457
Bydliště: Kladno
Has thanked: 46 times
Been thanked: 118 times
Lisiak4 píše:
je takováhle subrutinka normální, nebo se jí mám snažit vyhýbat a mám si tu úsporu 1 řádku na vícero místech odpustit? :)

Kód:
swapujemeo100sest
       swap d2
       swap d3
       rts


:mrgreen: :lol:

Občas jsem z tvých dotazů trochu na vážkách, o co ti vlastně v nich jde :lol: nic ve zlym samozřejmě...

_________________
>>eLeMeNt, MB03+, Amiga 1200, ZX Spectrum 128 +2A, ZX Spectrum+, Didaktik Gama, LnxSpectrum, LnxTracker, LnxAmigaImageConvertor, https://www.ilnx.cz <<


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 87 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 8 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz