OldComp.cz

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


Právě je 28.03.2024, 12:31

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 20 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
 Předmět příspěvku: Emulácia grafiky MZ-800
PříspěvekNapsal: 22.12.2014, 00:26 
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
Prípadné otázky ohľadne grafiky budem dávať sem, aby som nevytváral nové vlákna.

Chystám sa dorobiť emuláciu grafky v módoch MZ-800 na mojom emulátore. Narazil som však na jednu vec, ktorá mi nie je úplne jasná.

Podľa toho čo čítam v Poznámkach od Odehnala a Veverku na strane 59 by mali byť módy zápisu SINGLE a OR to isté alebo sa mýlim a je tam predsa len nejaký rozdiel?

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 22.12.2014, 01:07 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Milsa radeji vzdy posli i odkaz na dokument. Mozna ne kazdy ho ma. Je to http://www.8bity.cz/files/Sharp/Sharp_M ... everka.pdf

Rozdil je ten ze pri SINGLE se zapisuji do Vram i nuly a pri OR se zapisuji jen jednicky. Pri OR nevynulujes nejaky bod.

Ono to funguje obecne tak ze se prectou data z video ram, nasledne se provede prislusna logicka funkce a pak se zapisi do vram.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 22.12.2014, 02:03 
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
Áno, máš pravdu, to som si neuvedomil. Ja som sa pozeral len na to, čo sa pošle na port, lenže tu sa vykonávajú logické operácie s tým, čo sa pošle do pamäte od 8000h.

Ale celkom mi nie je jasné postup, čo robiť, aby som dosiahol, napr., body s farbami od 0 do 15 vedľa seba. Predpokladám, že SINGLE sa dá použíť iba pri prvom zápise do jedného bajtu vo VRAM, čiže, ak chcem do rady farby 0-15, čiže 16 bodov vedľa seba, nemôžem použiť tento postup:
1. SINGLE 0001
2. LD (8000h),80h
3. SINGLE 0010
4. LD (8000h),40h
5. SINGLE 0011
6. LD (8000h),20h
atď.

Pretože pri tomto postupe by každý nasledujúci bod vymazal ten predchádzajúci až kým by som pri farbe 8 neprišiel do bajtu 8001h a potom by sa mazalo v tom bajte.

Takže by som mal použiť tento postup:
1. OR 0001
2. LD (8000h),80h
3. OR 0010
4. LD (8000h),40h
5. OR 0011
6. LD (8000h),20h
atď.

Samozrejme bavíme sa o vopred vyčistenej obrazovke (čierna farba).

No a v tomto prípade by sa dal použiť aj PSET a obrazovka by nemusela byť vyčistená. Chápem tomu správne? Samozrejme tiež by to muselo ísť v cykle po jednom bode.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 22.12.2014, 03:23 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Ahoj Milsa

Skoda ze si ted rychle nepamatuji kde jsem psal rychly navod na grafiku. Budu opravdu muset prejit na Wiki a tam to psat nebo na svoje stranky.

Vidim ze jsi nepochopil jak funguji ramce (frame). Pro zacatek se domluvme ze budeme diskutovat pouze o rezimu 320x200x16 barev. Tento ma 4 ramce. Ty se musis rozhodnout co chces kreslit. Pro vykresleni uz hotoveho obrazku je nejlepsi Single, pro nakresleni cary zase PSET. Duvod je ten ze obrazek nakreslis tak ze naplnis 4x 8KB pamet. Pro caru kdyz ma porad stejnou barvu je lepsi PSET, protoze nemusis porad prepinat ramce. Obrazek ktery ma 16 barev by jsi pres PSET musel vykreslovat 16x8KB. Je dobre pri tom se divat i do dokumentace http://www.sharpmz.org/mz-800/download/ ... manual.pdf . Take je dobre si rici ze pro zacatek si nebudes hrat s pallete registrem a nechas ho v beznem nastaveni a to je ze mas 16 ruznych barev.

Budu pouzivat tvuj zjednoduseny zapis instrukci.
Pak muzes udelat to co chces tak ze:
SINGLE 0001b
LD (8000h),0101 0101b
LD (8001h),0101 0101b
SINGLE 0010b
LD (8000h),0011 0011b
LD (8001h),0011 0011b
SINGLE 0100b
LD (8000h),0000 1111b
LD (8001h),0000 1111b
SINGLE 1000b
LD (8000h),0000 0000b
LD (8001h),1111 1111b
A toto nakresli 16 bodu a kazdy v jine barve. Vsimni si ze na jeden bod potrebujes 4 zapisy. Do kazdeho ramce presne jeden.

Milsa ty delas v programu to ze neco nakreslis a vzapeti to prekreslis. Dej si bacha jak nastavujes pomoci 1 s jakym ramcem chces pracovat. Mas pravo pracovat soucasne s vice ramci, viz nasledne smazani obrazovky. Urcite pro binarni soustavu napis na konci b.

Jinak napr. pro smazani obrazovky aby byla cerna muzes udelat to ze nastavis SINGLE 1111b a celou jednu 8KB pamet vynulujes. To muzes rychle udelat ze zasobnik nastavis na 0a000h, do HL das 0 a pak udelas treba 32x za sebou PUSH HL a toto das do nejakeho cyklu, napr. DJNZ a nechas to 128x opakovat. Zalezi zda ti jde o rychlost nebo o kompaktnost programu, podle toho se v programu pouzije vice nebo mene push hl za sebou.

Smazani obrazovky udelas stejne rychle i pres PSET - proste vyberes cernou barvu (same nuly) a uplne stejne zaplnis pamet.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 22.12.2014, 12:04 
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
Pôjdem od konca. Mazal by som tak, že:
1. SINGLE 1111b
2. LD HL,8000h
3. LD (HL),00h
4. LD DE,8001h
5. LD BC,1FFFh
6. LDIR
Tuším je to na cykly mierne pomalšie ako cez PUSH, ale prehľadnejšie.

Teraz to kreslenie. Rovinám chápem, len ma mýli to, že keď mám bajt, tak musím dávať pozor na to, čo ukladám, lebo si vymažem starší zápis.

Ako potom kresliť čiaru (napr. v BASICu), keď sa kreslí bod po bode a nesmie sa vymazať jej okolie? Povedzme máme červené pozadie a do toho idem kresliť zelenú čiaru od 4,0 do 12,0, čiže začnem v polovici prvého bajtu a končím v polovici druhého bajtu.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 22.12.2014, 14:07 
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
Takže keď tak nad tým rozmýšľam, tak PSET je vhodný na čiary, lebo 0 nemení obsah VRAM a tiež aj na to moje vykreslenie farieb po bodoch. Samozrejme, pri SINGLE by to bolo jednochšie, ale pozerám sa na to z hľadiska BASICu, ktorý by to nedokázal urobiť cez SINGLE.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 22.12.2014, 17:52 
Offline
Radil

Registrován: 08.10.2013, 18:00
Příspěvky: 296
Has thanked: 12 times
Been thanked: 228 times
Milsa píše:
6. LDIR
Tuším je to na cykly mierne pomalšie ako cez PUSH, ale prehľadnejšie.
Bacha na to, mírně pomalejší LDIR tady znamená cca 3,8x pomalejší než PUSH ! Tedy smazání obrazovky za 48ms nebo 13ms, to je sakra rozdíl.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 22.12.2014, 17:56 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Milsa ta tvoje rutinka je spravne. Snad bych jen vymenil 3. LD (HL),00h za ld (hl),l.

Jinak kdyz nechces nebo nemuzes pouzit zasobnik tak rychle neco vyplnis:
ld hl,08000h
ld b,128
xor a
label1:
rept 16
ld (hl),a ; celkem 13 taktu
inc hl
endm
djnz label1

Kazdy takt se pocita. A ono je to opravdu znat i tech blbych 8 taktu.
------

Jinak tu cervenou caru nakreslis

PSET cervena_barva
LD (8000h),0000 1111b
LD (8001h),1111 0000b

---------

Urcite se zajimej i o cteni. Tam je hezky videt rozdil mezi "barvou" a "ramcem". Kdyz budes "hledat" barvu pres "barvu", treba tim ze se zeptas jaka barva je v bode uplne vlevo nahore, tak musis az 16x projit vsechny kombinace barev (na kazdou se dotazat) nez budes vedet ktera tam je. Kdyz to budes delat pres ramce tak musis precist 4x bajt z kazdeho ramce a pak vis jaka barva tam je - takze cteni barvy z obrazovky je ve vetsine pripadu rychlejsi pres ramce.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 22.12.2014, 18:51 
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
Tá čiara mi je jasná, že sa dá aj tak. Mne skôr išlo o to, keby mám algoritmus, ktorý kreslí od do (samozrejme tam musí byť PSET). Tam sa nemôžem spoliehať na to, že nasledujúci bod bude v tom istom bajte. Zápis do VRAM mám už implementované, ale bez skrolovania. Ešte mi ostáva čítanie. Teraz pred Vianocami je ale plno inej roboty, takže neviem, či sa dnes už k tomu dostanem. Pečieme, upratujeme, atď.

Mám však jednu otázku, ktorej odpoveď mi nie je celkom jasná. Čo znamená, že sa uplatňuje skrol? Zapíšem cez SINGLE v móde 302x200 pri 4 farbách do roviny 1 a 2 a v scroll bite bude 0, to znamená, že sa uvažuje so skrolom. Znamená to teda ktorú z týchto dvoch možností?
1. že fyzická adresa bude prepočítaná na adresu po skrole a teda hoci zapíšem do ľavého horného rohu, tak sa mi bod zobrazí vľavo v strede (a aj uloží na posunutú adresu), lebo mám nastavený skrol?
2. že fyzická adresa bude stále tá istá, ale keďže mám nastavený skrol, bod uvidím naľavo v strede?

Ide mi totiž o to, či musím fyzickú adresu pri zápise prepočítavať alebo v tomto dokumente (Poznámky Odehnal-Veverka, link vyššie) chcú len poukázať na to, že treba pri zápise zohľadňovať to, že sa používa skrol, aby programátor nebol prekvapený, že sa mu body zobrazujú inde ako pôvodne zamýšľal?

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 23.12.2014, 15:02 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Milsa na algoristmus kresleni cary bych navrhoval udelat jine vlakno. Ale pro emulator to nema cenu diskutovat.

Nejak jsem nepochopil tvuj priklad. Kdyz se budeme bavit o rezimu DMD0 a DMD1, tak kdyz vyberes DMD0 a nastavis B/A na 0 tak budes zapisovat barvu do rovin 1 a 2 a scroll bude uplatnovan. Pri nastaveni B/A na 1 tak se budou zapisovat data do rovin 3 a 4 ale scroll se neuplatni - take tyto roviny se nezobrazuji. Muzes to vyuzit tak ze si pripravis obrazek, pak rychle vynulujes ofset scrollu a prepnes na DMD1 a tim zacnes zobrazovat ten druhy obrazek. Jak se prepnes do DMD1 tak ten bit B/A presne opacne zajistuje scroll - takze pri log1 se dela scroll a pri log0 se nedela.

Milsa scroll funguje tak ze programator napr. odroluje 8 mikro radku nahoru a posledni radek smaze a prepise. Takze on v hlavni rutince se odkazuje stale na posledni 25 textovy radek a vubec ho nemusi zajimat ktera realna pametova adresa to prave je. Ta se samozrejme meni po kazdem odrolovani. Takto rychle muze zobrazovat znaky na obrazovku. Kdyz by jsi se z nejakeho duvodu se rozhodl ze vynulujes scroll registr tak se ti ukazi prave adresy na obrazovce.

Mozna bych pouzival termin - logicka adresa jako adresa kam cpu uklada data a po pripadnem offsetu scroll registru se z toho udela fyzicka adresa.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 23.12.2014, 20:47 
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
Nejde mi o kreslenie čiar, to na emuláciu naozaj nemá vliv. Išlo mi len o pochopenie ako kresliť a neprepísať susediace body v jednom bajte. To už chápem, takže to riešiť nemusíme.

Pri skrole mi ide o toto:
Mám vynulovaný skrol. Uložím na adresu 8000h. Reálne to bude na 8000h v ovinách 1 a 2, keďže sa bavíme o 4 farbách a zápise pri DMD 0 do rovín 1 a 2. Tu sa skrol uplatňuje, ale bol vynulovaný. Teraz nastavím skrol tak, že bude posúvať obrazovku o jeden textový riadok nižšie. Takže posun na 8040h. Teraz uložím tiež na adresu 8000h. Keďže sa uplatňuje skrol, uloží sa to na akú reálnu adresu v rovine 1 a 2? Bude to na adrese 8000h, ale vidieť to budem o textový riadok nižšie, čiže 8040h alebo sa to uloží rovno na 8040h, keďže sa uplatňuje skrol? Ja si skôr myslím, že to bude na 8000h, ale kvôli uplatneniu skrolu to uvidím inde. To znamená, že ak prepnem režím DMD na 1, tak sa začne uplatňovať skrol pre zmenu v rovinách 3 a 4 a posunutý bude obraz tam a údaje v rovinách 1 a 2 budú na 8000h, tak ako som ich zadával.

No neviem, či mi rozumieš, skúsim sa opýtať inak: Ak ukladám na 8000h, ukladám na reálnu adresu alebo logickú po prepočítaní skrolu a v skutočnosti to nemusí byť vôbec 8000h?

Ako sa tak nad tým zamýšľam, tak podľa toho čo píšeš, tak sa ukladá tak ako to vidím na obrazovke a ono si mnou uvedenú adresu prepočíta na skutočnú, dúfam, že tomu už rozumiem.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 23.12.2014, 22:01 
Offline
Pan Generální

Registrován: 19.07.2013, 15:54
Příspěvky: 2723
Has thanked: 144 times
Been thanked: 422 times
Nejdrive si musime jeste ujasnit par veci. Mluvime o rozliseni 320x200 bodu a tak 320/8=40 bajtu/znaku na radek; To je 28h a ne 40h.

Uvazujme ze cela obrazovka je nastavena na scroll - ne jen podmnozina obrazovky, proste rotujeme celou obrazovku. Take si radeji precti originalni techncky navod. To ze Scroll NEMUZE mit jen cislo vetsi nez 125 co se pise v poznamkach je blbost.

Kdyz nakreslis dejme tomu 8 cervenych bodu na adresu 08000h na cernou obrazovku pri scroll=0 a nasledne posunes scroll tak ze tam das cislo 5 tak se stane to ze tato nulta radka (pocitejme od nuly jako spravni programatori :-) ) bude videt na 199 radce - posledni mikroradka na obrazovce. Rotuje se smerem nahoru, co "zmizne" nahore se da dolu. Kdyz nasledne do 08000h zapises treba modrou tecku tak se to realne zapise na fyzickou adresu ve video ram 08000h+40. Ale ty to opet uvidis v levem hornim bode. Pak vynulujes scroll registr a najednou uvidis na prvni radce tu cervenou linku a na dalsim radku tu modrou tecku.

Jeste pro doplneni - vzdy ukladas na logickou adresu - nikdy ne na fyzickou. Samozrejme kdyz je scroll na nule tak je to stejne.
Take kdyz ukladas do video ram co se nezobrazuje tak se take uklada na fyzickou adresu - v tom pripade ze neuplatnuje scroll.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 23.12.2014, 22:11 
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
Áno s tým prepočtom 40h som sa pomýlil, ale pochopil si ma správne. Takže už mám v skrole jasno. Ďakujem.

Skúšal som na Batman1.mzf (zobrazí obrázok a nahráva ďalšiu časť), že ako sa mi grafika v DMD 2 zobrazí. Vyzerá, že niečo mi už funguje (tam skrol netreba), ale niečo tam ešte nie je v poriadku, lebo obrázok síce poznať, ale je roztrasený ako huspenina. Hádam to čoskoro vyladím. Mal by som spraviť výstup do PNG z emulátora, aby som sem mohol občas hodiť ako postupujem.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 23.12.2014, 22:34 
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
Takto to vyzerá, už to nie je ako huspenina, ale nechápem, čo má za následok, že sa to zle zobrazuje. Paletou to nebude, keďže zmeniť treba viac než 4 farby. Niekde mám ako keby pozadie vymenené s popredím, lenže netuším prečo, keďže Sharp nie je ako Spectrum. Možno dopracovaním zvyšku grafiky sa niečo upraví (teraz mám implementovaný len zápis).


Přílohy:
test.png
test.png [ 16.08 KiB | Zobrazeno 15615 krát ]

_________________
Sharp MZ-821
Milsa MZ-841
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Emulácia grafiky MZ-800
PříspěvekNapsal: 26.12.2014, 18:38 
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
Antiriad mi úvodný obrázok ukáže (Anti-Scr.mzf), ale Batman stále vyzerá takto. Vlk_qapl sa dokonca spustí, obrázok vykreslí síce bez bieleho pozadia (zrejme tým, že ešte nemám implementovanú paletu). Nerozumiem, kde môže byť v tom batmanovi problém.

No a emulátor som prekopal z čistého OOP na klasický kód s unitami. Rýchlosť sa mi zvýšila v kľude v monitore z cca (450 % (450 preto, lebo po doprogramovaní grafiky muselo pár inline direktív skončiť, čo malo za následok zníženie pôvodnej rýchlosti 570 %) na 789 %).

No a mám tam zrejme ešte nejakú chybu, lebo po spustení Vlka alebo Flappyho sa mi sekne emulátor, takže zrejme niekde nejaký chybný prístup k objektu.

_________________
Sharp MZ-821
Milsa MZ-841


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