OldComp.cz

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


Právě je 28.03.2024, 10:44

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 38 ]  Přejít na stránku Předchozí  1, 2, 3
Autor Zpráva
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 27.01.2019, 13:26 
Offline
Kecálek

Registrován: 04.02.2016, 10:21
Příspěvky: 91
Has thanked: 7 times
Been thanked: 18 times
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á


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 30.01.2019, 12:46 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
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.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 31.01.2019, 22:27 
Offline
Kecálek

Registrován: 04.02.2016, 10:21
Příspěvky: 91
Has thanked: 7 times
Been thanked: 18 times
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 


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 01.02.2019, 14:32 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
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
        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
Dlzka rutinky: 29 bajtov (s RETurnom 30).


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 01.02.2019, 14:55 
Offline
Kecálek

Registrován: 28.10.2016, 21:03
Příspěvky: 122
Has thanked: 13 times
Been thanked: 50 times
Jsou nějaká ZX dema vidět na YT, nebo jinde online, kde se zrovna kreslení po pixelu využije?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 01.02.2019, 16:07 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
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.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 28.04.2019, 19:53 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 09.10.2013, 19:04
Příspěvky: 1403
Has thanked: 130 times
Been thanked: 71 times
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é.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 28.04.2019, 21:30 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
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.


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ů: 38 ]  Přejít na stránku Předchozí  1, 2, 3

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 5 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