OldComp.cz http://oldcomp.cz/ |
|
ASM challenge - putpixel http://oldcomp.cz/viewtopic.php?f=134&t=7117 |
Stránka 3 z 3 |
Autor: | vaclavpe [ 27.01.2019, 13:26 ] |
Předmět příspěvku: | Re: ASM challenge - putpixel |
Busy píše: PutPixel na 99 taktov (ak som dobre pocital): Edit: Doplnenie chybajuceho inc h Busy, paráda, nezkoušel jsem, ale ta rychlost je neokecatelná. Tak když to uzavřeme, máme úspornou rutinu, která je celkem rychlá, ale pak máme rutinu s velkou tabulkou, která je super rychlá |
Autor: | Busy [ 30.01.2019, 12:46 ] |
Předmět příspěvku: | Re: ASM challenge - putpixel |
Ak by niekto planoval moj putpixel realne pouzit, a nevedel by si napisat rutinku na vypocet tabulky, nech mi kludne napise. Pre zaujimavost, takto vyzera putpixel na ZX Spektre: https://busy.speccy.cz/tvorba/x02bodka.htm Je tam aj vypocet tabulky a priklad pouzitia. Rutinka na vypocet tabulky pre Sharp MZ by vyzerala podobne. |
Autor: | vaclavpe [ 31.01.2019, 22:27 ] |
Předmět příspěvku: | Re: ASM challenge - putpixel |
Tak pokud by chtěl někdo experimentovat s Busyho rutinkou, tak je níže vyzkoušená včetně generátoru tabulky. Rychlost na Sharpu včetně waitů a returnu je 114 taktů. Kód: ; putpixel od Busyho
; ld bc,x ; 0-319 ; ld l,y ; 0-199 putpixel_busy: ld h,high tabbod ld e,(hl) inc h ; + 0x100 ld d,(hl) ; v DE adresa radku inc h ; + 0x100 ld l,c ld a,(hl) ; v A je bit v bajtu VRAM inc h ; + 0x100 rr b rr l ld l,(hl) ; v L je offset v radku ld h,#00 add hl,de xor (hl) ; zachovani puvodnich pixelu ld (hl),a ret ; 114 taktu vcetne RET gen_tabbod: ; prvni cast tabulky ld HL,tabbod ld DE,#8000 ld BC,#28 ld A,#C8 ; 200 bodu gtbck1: ld (HL),E inc H ld (HL),D dec H inc HL ex DE,HL add HL,BC ex DE,HL dec A jr NZ,gtbck1 ; bity v bajtech ld HL,tabbod inc H inc H ld B,#01 gtbck2: ld (HL),B rlc B inc HL cp L ; v ACC uz je nula jr NZ,gtbck2 ; offset v radku - kazde 4B stejna hodnota ld B,#28 ; 40 bodu gtbck3: ld (HL),A inc HL ld (HL),A inc HL ld (HL),A inc HL ld (HL),A inc HL inc A djnz gtbck3 ret ORG ($ / #0100)*#0100 + #0100 ;ALIGN #0100 tabbod: ; ds 0x400 |
Autor: | Busy [ 01.02.2019, 14:32 ] |
Předmět příspěvku: | Re: ASM challenge - putpixel |
Nedalo mi a skusil som aj ja napisat generator tabulky pre Sharp na sposob toho co pouzivam v demach pre ZX: Kód: makbod ld de,#8000 ;; Zaciatok videoramky Dlzka rutinky: 29 bajtov (s RETurnom 30).
ld bc,40 ;; Velkost pixeloveho riadku v bajtoch ld a,#01 ;; Bitova maska pre pixely ld l,b ;; Adresa tabulky - nizsi bajt bodlop ld h,high tabbod ;; Adresa tabulky - vyssi bajt ld (hl),e ;; Nizsi bajt adresy pixeloveho riadku podla Y inc h ld (hl),d ;; Vyssi bajt adresy pixeloveho riadku podla Y inc h ld (hl),a ;; Bitova maska pixelu v bajte videoramky podla X inc h ld (hl),l ;; Offset bajtu videoramky na pixelovom riadku podla X srl (hl) ;; ziskame vydelenim nizsieho bajtu styrmi srl (hl) rlca ;; Rotacia bitovej masky na dalsi pixel ex de,hl add hl,bc ;; Pripocitanie 40 k adrese pixeloveho riadku ex de,hl inc l ;; Ideme na dalsiu polozku v tabulke jr nz,bodlop ;; A opakujeme pre celu tabulku ret ALIGN #0100 tabbod ds 0x400 |
Autor: | lukz [ 01.02.2019, 14:55 ] |
Předmět příspěvku: | Re: ASM challenge - putpixel |
Jsou nějaká ZX dema vidět na YT, nebo jinde online, kde se zrovna kreslení po pixelu využije? |
Autor: | Busy [ 01.02.2019, 16:07 ] |
Předmět příspěvku: | Re: ASM challenge - putpixel |
lukz píše: Jsou nějaká ZX dema vidět na YT, nebo jinde online, kde se zrovna kreslení po pixelu využije? Urcite ano, je ich kopec. Napriklad:Demo Back to the Gemba: https://www.youtube.com/watch?v=RI-8YPfXAgA Zaujimave su tu styri efekty s animovanymi hribami (casy vo videu: 1:08, 1:52, 3:06 a 3:46). Kedze hriby sa vseliako dynamicky menia, nie je mozne ich mat ulozene ako hotovu bitmapu. Namiesto toho su ulozene "vektorovo", t.j. ako mnozina suradnic vsetkych bodov z ktorych sa skladaju. Pre kazdu fazu animacie sa vsetky suradnice bodov vhodne prepocitanu (posunu, zvecsia, zarotuju) a nasledne sa kazdy bod z kazdeho hribu vykresluje podobnou PutPixel rutinkou. Demo Micro https://www.youtube.com/watch?v=LBj_Zm9-XMc Tu nie je priamo PutPixel, ale podobny princip je pouzity pri kresleni ciar (efekty s animovanymi ciarami su vo videu od casov 0:45 a 1:28) Interpolator na kreslenie ciar nepracuje klasickym obvyklym sposobom (t.j. vypocet suradnic pixelov a volanie PutPixel), ale hned na zaciatku si pomocou uz znamej 1kB tabulky vypocita presnu polohu prveho pixela, a polohy nasledujucich pixelov ciary pocita uz priamo zmenou adresy do videoramky a bitovej masky. Ak sa treba pohnut vlavo/vpravo tak len zarotuje masku pixelu (popr. ak treba inc/dekrementne adresu) a ak treba ist zvislym smerom, tak len upravi adresu do videoramky. Vdaka tomuto dokaze kreslit ciary rychlostou 50 tisic pixelov za sekundu. Zasluhu na tejto rychlosti ma prave aj tato tabulka, vdaka ktorej sa pri velkom pocte kratkych ciar nemusi zdrzovat s inak dost komplikovanym prepoctom suradnic na adresu a bitovu masku pixela. |
Autor: | Milsa [ 28.04.2019, 19:53 ] |
Předmět příspěvku: | Re: ASM challenge - putpixel |
Nechcem byť zlý, ale nechýba vám tam nejaký ten OUT na aktiváciu režimu grafiky? Je síce pravda, že sa dá nastaviť prepínač na MZ-800, ale funguje to aj pri volaní z monitora? Nemám overené. |
Autor: | Busy [ 28.04.2019, 21:30 ] |
Předmět příspěvku: | Re: ASM challenge - putpixel |
Milsa píše: Nechcem byť zlý, ale nechýba vám tam nejaký ten OUT na aktiváciu režimu grafiky? Je síce pravda, že sa dá nastaviť prepínač na MZ-800, ale funguje to aj pri volaní z monitora? Nemám overené. Tak samozrejme na systemoch, ktore maju konfigurovatelnu grafiku, sa predpoklada, ze pozadovany graficky rezim je pred zavolanim rutinky uz nastaveny. Rutinka riesi len samotne kreslene pixela, nie nastavenie grafickeho rezimu.
|
Stránka 3 z 3 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |