OldComp.cz

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


Právě je 29.03.2024, 08:24

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  Další
Autor Zpráva
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 24.01.2019, 21:15 
Offline
Kecálek

Registrován: 04.02.2016, 10:21
Příspěvky: 91
Has thanked: 7 times
Been thanked: 18 times
Lanex píše:
Jenže to je pro ZX Spectrum nepoužitelný... :booo: Ale podmínky pro Sharp to splňuje.
Jinak já naměřil od Pixel až po vykonání RET 179 taktů... můžete mi poslat BIN soubor vámi zkompilovaný, který má těch 187 taktů? Chtěl bych udělat rozborku kde se vzalo těch 8 taktů navíc...
No já to neměřím ručně, ale nechávám to na debuggeru v emulátoru. Takže tam může být chybka. Kroky jsou zapsané PO vykonání instrukce. Vypadá, že set 0,(HL) je v emulátoru delší o 5 taktů (chybu napráším). Ale jinak nevím, kde ty tři takty přebývají.
Kód:
21A7:      label putpixel3
21A7:60      LD H, B   ; 4
21A8:69      LD L, C   ; 8
21A9:29      ADD HL, HL   ; 19
21AA:29      ADD HL, HL   ; 30
21AB:09      ADD HL, BC   ; 41
21AC:29      ADD HL, HL   ; 52
21AD:29      ADD HL, HL   ; 63
21AE:29      ADD HL, HL   ; 74
21AF:7B      LD A, E   ; 78
21B0:87      ADD A, A   ; 82
21B1:87      ADD A, A   ; 86
21B2:F6E3   OR E3   ; 93
21B4:87      ADD A, A   ; 97
21B5:32C321   LD (21C3), A   ; 110
21B8:37      SCF   ; 114
21B9:CB1A   RR D   ; 122
21BB:CB1B   RR E   ; 130
21BD:CB3B   SRL E   ; 138
21BF:CB3B   SRL E   ; 146
21C1:19      ADD HL, DE   ; 157
21C2:      label .set_pixel
21C2:CBC6   SET 0, (HL)   ; 177
21C4:C9      RET   ; 187


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 24.01.2019, 21:37 
Offline
Radil

Registrován: 18.10.2014, 23:10
Příspěvky: 377
Has thanked: 28 times
Been thanked: 120 times
Tá inštrukcia SCF sa môže vynechať (mal som to za bodkočiarkou), Cy zostane nastavený od inštrukcie ADD A,A.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 24.01.2019, 21:47 
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
vaclavpe píše:
Vypadá, že set 0,(HL) je v emulátoru delší o 5 taktů (chybu napráším). Ale jinak nevím, kde ty tři takty přebývají.

Pravda bude někde uprostřed... tobě to 5 přidává, a mě 3 ubírá :mrgreen:

PS: je... zrovná vyšla nová verze LnxSpectrum a světe div se, je to tam opravené! A pak že náhody neexistují.... :mrgreen:

_________________
>>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: ASM challenge - putpixel
PříspěvekNapsal: 24.01.2019, 21:59 
Offline
Kecálek

Registrován: 04.02.2016, 10:21
Příspěvky: 91
Has thanked: 7 times
Been thanked: 18 times
Lanex píše:
vaclavpe píše:
Vypadá, že set 0,(HL) je v emulátoru delší o 5 taktů (chybu napráším). Ale jinak nevím, kde ty tři takty přebývají.

Pravda bude někde uprostřed... tobě to 5 přidává, a mě 3 ubírá :mrgreen:

Tak pravda je taková, že při zápisu do VRAM MZ-800 se přidávají timeouty, v tomto případě 5 taktů. Na což jsem zapomněl. Pokud se píše do obyč RAM, tak je počet taktů správný, tedy 15.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 25.01.2019, 00:03 
Offline
Kecálek

Registrován: 10.10.2014, 10:40
Příspěvky: 89
Has thanked: 3 times
Been thanked: 48 times
vaclavpe píše:
Vypadá, že set 0,(HL) je v emulátoru delší o 5 taktů (chybu napráším)


Jednou ze zaludnosti Sharpa jsou WAIT signaly, ktere jsou obcas posilany do Z80 ;-)

MZ-700:

S VRAM lze svobodne pracovat jen tehdy, pokud je VBLN. Signal VBLN zacina tusim 5px pred zacatkem praveho borderu a konci 5 px pred koncem leveho borderu. Toto plati pro vsechny obrazove radky, bez ohledu na to, zda se paprsek nachazi v hornim, ci dolnim borderu, nebo zda prave prechazi na zacatek noveho snimku.

Pokud se pokusite cist z VRAM v dobe, kdy se paprsek nachazi v kreslici oblasti, tak si za to vyslouzite WAIT, ktery trva az do zacatku VBLN.

Pokud se pokusite zapsat do VRAM v dobe, kdy se kresli, tak zapis prvniho bajtu bude ulozen do latche bez jakekoliv penalizace, nicmene pokud se pokusite o dalsi zapis drive, nez zacalo VBLN, tak budete odmeneni WAITem...

Jedina vec, u ktere si nevybavuju, zda ji mam nejak zmerenou je situace, kdy zapisem ulozite bajt do latche a pak se hned pokusite cist z VRAM. V takovem pripade samozrejme dojde k WAITu, ale nevim, zda se pak operace cteni vykona ihned se zacatkem VBLN, nebo zda tam pribude jeste nejaka dalsi prodleva pro ten zapis.

MZ800:

V tomto rezimu lze do VRAM svobodne kdykoliv zapisovat, ale cteni muze byt odmeneno WAITem v zavislosti na pixelclk. Moje definice toho jak je WAIT aplikovan je zde https://sourceforge.net/p/mz800emu/code ... 800.h#l170
Uvedene hodnoty jsou v taktech GDG (5 GDG taktu = 1 CPU takt)

Dalsi necekane WAITy na vas mohou cihat pri praci s PSG, nebo s Unikartou - ty druhe zminene jsem vsak do sveho emulatoru neimplementoval.

BTW (tohle uz nijak nesouvisi s temi WAITy): kdyz si v mem emulatoru otevrete samostatny disassembler pameti - v okne debuggeru to je tusim posledni ikona vpravo dole, tak tam mate moznost zapnout si do vypisu instrukci i poznamku s informaci o poctu CPU taktu.

Michal


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 25.01.2019, 01:45 
Offline
Site Admin
Uživatelský avatar

Registrován: 11.05.2013, 23:48
Příspěvky: 10111
Bydliště: Praha
Has thanked: 1953 times
Been thanked: 1517 times
Já nevím, zda si to uvědomujete, ale pomáháte plnit zadání, které dal Václavovi Steve Balmergů - rozchodit Windows10 na nejrozšířenějším compu ever, MZ800. Prostě Mikrosoft pomrkává zpět po osmibitech, bo ví, že je v nich síla. A ten jeden bod, to je promile loga Mikrosoftu :-)

_________________
Amiga/Amstrad/Atari/Commodore/Mac/Nintendo/PS/PC/Sega/Tandy/ZX


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

Registrován: 24.05.2018, 22:32
Příspěvky: 1972
Bydliště: Most, Praha
Has thanked: 864 times
Been thanked: 697 times
Myslím že ne promile loga. V rámci miniaturizace to je celé nové logo M$, na které už mají zaregistrovaný trademark. Nově teď na vykreslení kteréhokoliv pixelu bude potřeba licence od M$.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 25.01.2019, 13:40 
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
PutPixel na 99 taktov (ak som dobre pocital):
Kód:
;; Vstup: L = Y   0..199
;;       BC = X   0..319

        ld      h,high tabbod
        ld      e,(hl)
        inc     h
        ld      d,(hl)
        inc     h
        ld      l,c
        ld      a,(hl)
        inc     h
        rr      b
        rr      l
        ld      l,(hl)
        ld      h,#00
        add     hl,de
        xor     (hl)
        ld      (hl),a

        ALIGN   #0100
tabbod  ds      0x400
Tabbod je kilobajtova predpocitana tabulka na rychly prevod suradnic na bitovu masku a adresu do videoramky.

Edit: Doplnenie chybajuceho inc h


Naposledy upravil Busy dne 25.01.2019, 14:21, celkově upraveno 1

Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 25.01.2019, 14:11 
Offline
Stydlín

Registrován: 03.01.2014, 08:12
Příspěvky: 8
Bydliště: Ostrava
Has thanked: 11 times
Been thanked: 4 times
Nechybi 'inc h' pred 'ld l,(hl)' ?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 25.01.2019, 14:22 
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
magad píše:
Nechybi 'inc h' pred 'ld l,(hl)' ?
Ano, mas pravdu, opravil som to. Takze dokopy 99 taktov.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 25.01.2019, 15:16 
Offline
Kecálek

Registrován: 28.10.2016, 21:03
Příspěvky: 122
Has thanked: 13 times
Been thanked: 50 times
Busy píše:
PutPixel na 99 taktov (ak som dobre pocital):

Velice pěkné. Ještě doplním, že to, jakou barvou se kreslí, se určuje pomocí speciálního registru WR (dostupný přes out (0cch),a). A, jak byla zadána tato soutěž, o ten se nemusíme starat, můžeme předpokládat, že je nastaven tak, jak je potřeba. Ten registr kromě barvy určuje také mód zápisu, a jeden z módů je, že se ovlivní pouze pixely na místech, kde je zapisovaný bit s hodnotou 1, ostatní pixely jsou beze změny. Takže instrukci xor tady
Kód:
        ; xor     (hl)
        ld      (hl),a

můžeme vynechat, pokud tam byla jen pro přečtení ostatních pixelů, jak si myslím.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 25.01.2019, 15:18 
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:
Takže instrukci xor tady
Kód:
        ; xor     (hl)
        ld      (hl),a
můžeme vynechat, pokud tam byla jen pro přečtení ostatních pixelů, jak si myslím.
Ano, presne tak. Takze vysledna rychlost bez xoru je 92 taktov. Vdaka za optimalizaciu ! :thumbup:


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 25.01.2019, 19:53 
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
Busy opět dokázal že je bezkonkurenční programátor na Z80. V taktech bych tohle fakt nečekal. Je teda potřeba připočítat i takty instrukce RET. I tak je to naprosto zdrcujicí výsledek. Ale taky by šlo tento kód označit za meganejvícnehospodárný k paměti. Vlastní kód je krátký, ale tabulka je krutá. Spousta nevyužitých a ztracených bajtů. Spláchlo se tam do záchodu spoustu tak hodně nedostatkové RAM. Nicméně... zadání splněno. :like:
Ps: ta nevyužita/spláchnutá RAM v tabulce se dá využít jinak, třeba krátké subrutiny. Busy by to určitě využil, mozek na to evidentně má ;)

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


Naposledy upravil Lanex dne 25.01.2019, 20:19, celkově upraveno 4

Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 25.01.2019, 19:59 
Offline
Radil

Registrován: 18.10.2014, 23:10
Příspěvky: 377
Has thanked: 28 times
Been thanked: 120 times
Keď sa namiesto inštrukcie RR B použije SRL B, tak sa potom môže nahradiť LD H,#00 inštrukciou LD H,B. To je asi -3 takty.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ASM challenge - putpixel
PříspěvekNapsal: 26.01.2019, 22:57 
Offline
Radil
Uživatelský avatar

Registrován: 19.07.2013, 14:21
Příspěvky: 258
Bydliště: Košice
Has thanked: 143 times
Been thanked: 380 times
Lanex píše:
Ale taky by šlo tento kód označit za meganejvícnehospodárný k paměti. Vlastní kód je krátký, ale tabulka je krutá. Spousta nevyužitých a ztracených bajtů. Spláchlo se tam do záchodu spoustu tak hodně nedostatkové RAM.
Ale kdeze. Pamate je hromada, prebytok a treba ju vyuzit do posledneho bajtu. Okamzite, ked zacnes na Speccy robit programky, ktore pracuju s grafikou, tak zistis, ze najvacsi problem je do tych necelych 71 tisic taktov napisat nieco, co nakrmi 6144 bajtov obrazovky. Preto sa rutinky nas demomakerov pohybuju v desiatkach taktov a kilobajtoch tabuliek. :dwi:
(sorry za OT, mizim)


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