OldComp.cz https://oldcomp.cz/ |
|
Fraktály na MZ-800 https://oldcomp.cz/viewtopic.php?f=134&t=6503 |
Stránka 1 z 1 |
Autor: | Mikes21 [ 13.07.2018, 13:46 ] |
Předmět příspěvku: | Re: Fraktály na MZ-800 |
Diky za 'nakopnuti' Zkusim to pres vikend spustit tak, aby se to pocitalo pres BASIC upraveny pro vypocty pres ALU v unikarte. Jsem zvedav, o kolik se to zrychli. Jakou mas predstavu o tom prepsani do asembleru? Bude to pouzivat vypocty z BASICu? Pak by jsme to mohli spojit dohromady. Kresleni a pocitani cyklu v as. a vypocty pres ALU. |
Autor: | faraon [ 13.07.2018, 17:39 ] |
Předmět příspěvku: | Re: Fraktály na MZ-800 |
Tak na to zrychlení jsem hodně zvědavý! |
Autor: | uunek [ 13.07.2018, 19:13 ] |
Předmět příspěvku: | Re: Fraktály na MZ-800 |
Ja taky. |
Autor: | berk [ 13.07.2018, 21:50 ] |
Předmět příspěvku: | Re: Fraktály na MZ-800 |
Mimochodem za objevením fraktálu bylo něco hlubšího. Mandlbrot se snažil matematicky popsat tvary a zákony v přírodě. Doporučuji shlédnutí pořadu Tajný život chaosu (viděl jsem nedávno na Zoomu). Je to o schopnosti hmoty se samoorganizovat, je tam o Turingovi a Mandlbrotovi a dalších. |
Autor: | lukz [ 14.07.2018, 10:50 ] |
Předmět příspěvku: | Re: Fraktály na MZ-800 |
Mikes21 píše: Bude to pouzivat vypocty z BASICu? To by byla také možná cesta. Já spíš chci zkusit něco, co se projeví i na standardním Sharpu bez unikarty.
|
Autor: | lukz [ 14.07.2018, 18:06 ] |
Předmět příspěvku: | Re: Fraktály na MZ-800 |
Na 8 bitech je BASIC obvykle implementován formou interpretru. Hlavním důvodem je nejspíš umožnit interaktivní použití - je možné udělat v programu drobnou změnu a rovnou ho spustit, bez toho, že by se musel celý program překládat. Takový interpretr musí při běhu programu stále dokola analyzovat, co program vlastně znamená, tedy kromě vlastního provádění instrukcí je tam ještě režie navíc. Za jednoduchost použití prostředí se platí určitým zpomalením. Když chceme něco ze ztracené rychlosti získat zpět, jedna z možností, kterou máme, je zapomenout, že nějaký BASIC je k dispozici a napsat si vše od základu s použitím pouze instrukční sady procesoru. Napíšeme si tedy vlastní program pro výpočet, a určíme si, jakou formou mu může být předán vstup a jak bude dostupný výstup. Pro náš případ kreslení fraktálu si připravíme výpočetní rutinu, která bude umístěna od adresy 0fe0dh. Jako vstup bude mít jednobajtovou hodnotu cnt, počítající iterace, a čtyři dvoubajtové hodnoty - z0, z1, c0, c1. Ty odpovídají proměnným X, Y, C, D v minule uvedeném BASICovém programu. Vše je shrnuto v následující tabulce, s uvedením adres v paměti: 0fe00h cnt, počítadlo iterací 0fe01h z0, hodnota aktuální iterace 0fe03h z1 0fe05h c0, počáteční hodnota 0fe07h c1 0fe09h pracovní prostor 0fe0dh výpočetní rutina BASIC nám musí umožnit vložit strojový program do paměti, nastavit mu parametry, spustit ho, a přečíst výsledek. Příkazy potřebné pro toto vše najdeme v manuálu k počítači, v části 6.7 Machine Language Control Statements. PEEK pro čtení výsledku výpočtu POKE pro vložení programu, nastavení vstupu USR pro spuštění výpočtu LIMIT pro vyhrazení paměti použité rutinou Kód rutiny je tvořen posloupností bajtů, tak jak je dostaneme z překladače asembleru. Pokud bychom chtěli tyto bajty interpretovat jako znaky, budou mezi nimi i některé netisknutelné znaky. Takové znaky nemůžeme zadat z klávesnice. Pro snadné zadání programu z klávesnice si tedy zvolíme, že jeden znak ponese pouze 5 bitů z kódu programu. Na to nám stačí znaky A-Z a symboly @[\]^_. V případě počítače MZ-800 ovšem místo _ bude znak šipka vlevo. BASIC pro tento počítač totiž přiřadil znak šipky vlevo ke kódu, který v ASCII odpovídá znaku _. To by mělo být vše, co je potřeba znát, aby byl zhruba jasný princip upraveného programu. Program si uvedeme ve formě screenshotu, aby byly lépe patrné Sharp znaky, které je potřeba zadat, především zmíněná šipka vlevo. Příloha: Frac1-list.png [ 3.18 KiB | Zobrazeno 11239 krát ] Po spuštění programu je vidět, že kreslení probíhá výrazně rychleji. Program kreslí stejný fraktál, jako minule uvedený program v BASICu. Asi po čtyřech minutách je výsledek takovýto. Příloha: Frac1-4.png [ 3.29 KiB | Zobrazeno 11239 krát ] Celý obrázek se vykreslí za 39 minut, a vypadá takto. Příloha: Můžeme modifikovat parametry programu, a vykreslit pohled na jinou část Mandelbortovy množiny. 9 FORK=0TO1:FORJ=KTO199STEP2:Y=(J*.005-1.15)*2:X=-1.34*2:FORI=0TO319:X=X+.01 A výsledkem bude toto: [limit 3 soubory, viz další příspěvek] Vidíme tedy, že jsme získali zpět část rychlosti, ale stále si zachovali možnost snadné změny parametrů programu v prostředí BASICu. Experiment byl úspěšný. |
Autor: | lukz [ 14.07.2018, 18:10 ] | ||
Předmět příspěvku: | Re: Fraktály na MZ-800 | ||
Fraktál po změně parametrů
|
Autor: | Mikes21 [ 14.07.2018, 20:03 ] |
Předmět příspěvku: | Re: Fraktály na MZ-800 |
Pustil jsem to pres noc, ale nedojelo mi to. Druhy run probehl za 3:46:20. Cekal jsem trochu min, ale zase ten vypocet je spise jen samy cyklus. Vypocty pres ALU jsou jen zakladni matika a te tam zase tolik neni. Nevim, co by s tim slo delat, aby ALU fakt vyrazne pomohla. |
Autor: | lukz [ 17.07.2018, 11:42 ] | ||
Předmět příspěvku: | Re: Fraktály na MZ-800 | ||
Ještě si můžeme zobrazit Juliovu množinu, příbuznou k Mandelbrotově, kterou vypočítáme podle velice podobného předpisu. Vyberme si třeba předpis f(z)= z^2 + c, kde c= -0.105 + .93i Rozdíl je v tom, že u Mandelbrotovy množiny jsou hodnoty z a c nastaveny podle právě zkoumaného bodu, kdežto u Juliovy množiny je hodnota c pevně zvolená a z je nastaveno podle právě zkoumaného bodu. Program pro vykreslení: Kód: 8 INIT"CRT:M2":TI$="000000 V příloze je výsledek.
10 F.K=0TO1:F.J=KTO199STEP2:F.I=0TO319:X=I*.011-1.76:Y=J*.011-1.1:C=-.105:D=.93 11 F.E=15TO39:S=X*X:T=Y*Y:Y=2*X*Y+D:X=S-T+C 12 IFS+T>4:SET[E AND15]I,J:E=39 13 N.:N.:N.:N.:?TI$
|
Autor: | lukz [ 18.07.2018, 13:16 ] |
Předmět příspěvku: | Re: Fraktály na MZ-800 |
Také kreslení Juliovy množiny můžeme urychlit. Použijeme velice podobný program ve strojovém kódu, který vložíme od adresy 0fe0dh. Obsah paměti by měl být následující: Kód: FE00 2A 01 FE Pro zápis dat z BASICu opět použijeme kódování, kde jeden znak kóduje pět bitů. Screenshot se zápisem programu je zde:FE10 44 4D CD 4F FE 22 09 FE 2A 03 FE 44 4D 54 5D CD FE20 4F FE EB 29 ED 4B 01 FE CD 4F FE ED 4B 07 FE 09 FE30 22 03 FE 2A 09 FE E5 B7 ED 52 ED 4B 05 FE 09 22 FE40 01 FE E1 19 7C FE 10 D0 21 00 FE 34 20 BF C9 D5 FE50 50 59 CB 7A 28 0B 06 02 E5 97 67 6F ED 52 D1 10 FE60 F7 29 29 EB 7C 4D 21 00 00 06 0D CB 2C CB 1D 1F FE70 CB 19 30 01 19 10 F4 D1 C9 Příloha: Frac3-list.png [ 3.31 KiB | Zobrazeno 11050 krát ] Obrázek se vygeneruje asi po 35 minutách a vypadá takto: Příloha:
|
Stránka 1 z 1 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |