OldComp.cz

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


Právě je 28.03.2024, 16:52

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 
Autor Zpráva
 Předmět příspěvku: Dokumentace k zobrazování
PříspěvekNapsal: 26.01.2022, 20:32 
Offline
Kecka

Registrován: 29.11.2021, 03:10
Příspěvky: 57
Has thanked: 36 times
Been thanked: 12 times
Sháním podrobnou (ale srozumitelnou) dokumentaci k zobrazování na počítačích ZX81 a ZX80.

Jde o to, že jsem už někdy před 30 lety začal dělat různé emulátory a pak jednou někdy před 10 lety se stalo, že jsem si chtěl naemulovat něco netradičního a výběr padl právě na tohle. (Zvažoval jsem dělat na Amstrad CPC, ale jak ty počítače z praxe vůbec neznám, změnil jsem nakonec plán na něco jednoduššího.) Takže mám funkční emulátor, je to nomrálně program pro Windows, funguje a jde v něm spustit Basic i do něj nahrát různé programy/hry. Mám tam 16 KB RAM, na tom většina softwaru jede, umím i tisknout na tiskárně z Basicu apod. :-)

Ale některé hry na ZX81 nefungují a četl jsem, že to používá nějakou "high resolution" grafiku. Já jsem ty počítače nikdy v reálu neviděl ani z dálky a naemuloval jsem to prostě podle dostupných informací tak, že si čtu, co je v paměti za text. No a ten napíšu na obrazovku tím fontem z ROM. Takže pokud programy používají standardní způsob zobrazování, fungují přesně. I různé hry. Ale právě nevím, co ty ostatní, co za finty se používalo a rád bych našel nějakou podrobnější dokumentaci. Nebo někoho, kdo mi to vysvětlí. Předpokládám, že to asi nějak průběžně přepíná adresu videoram (nebo jak se tomu vlastně říká), ale jak přesně to dělá a jak je vůbec možné, že takové věci ZX81 stíhá, to netuším. K tématu jsem našel jen nějaký manuál od jiného softwarového emulátoru, kde jen zmiňovali, že pro nějaké nejtypičtější skupiny her mají skenování paměti, kterým to high res kreslení poznají a pak se přepnou do režimu kompatibilního s tou hrou. To mi přišlo taky jako dost lišácké, protože tímto způsobem ten emulátor zprovoznili na dost starých počítačích, kde by to jinak nemělo šanci stíhat. Ale já bych možná mohl tu emulaci udělat i nějak víc přesně, dnešní PC nemá s rychlstí moc problém. :-)

A ať nezakládám další vlákno pro každý detail, rád bych se ještě zeptal, jaké byly obvyklé velikosti RAM a na kterých konkrétních programech to můžu zkoušet. Chci to dělat minimalisticky bez složitých konfigurací, takže mám zatím vždy 16KB a při čtení zbytku adres vracím vždy FF hex, což se zatím osvědčilo, ale třeba jsou i nějaké další typické velikosti. A potřeboval bych právě i vědět, na čem se to dá dobře testovat. :-)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Dokumentace k zobrazování
PříspěvekNapsal: 26.01.2022, 21:14 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1508
Bydliště: u Prahy
Has thanked: 44 times
Been thanked: 380 times
Fungování zobrazování jsem popisoval v ZX Magazínu 2/2004-4/2005.
http://zxm.cz/zxm/2004-4-2005-2.pdf
Grafiku je možné generovat tak, že
1) se přistránkuje RAM místo ROM, v ní je upravený font
2) něco jako "multicolor" - po vykreslení každého mikrořádku změním kódy znaků v řádku, další mikrořádek se tak kreslí z jiných předloh (podobně, jako na Spectru po vykreslení mikrořádku měním v multicoloru obsah atrinutů).
Lze taky měnit adresu začátku videoRAM (proměnná DEFILE) nebo registr I (ukazatel bázové adresy fontu)
Protože ROM neobsahuje všech 256 kombinací, je tato metoda trochu limitovaná, a vyžaduje načasování.
3) lze zkombinovat oboje (vlastní display file a RAM).
Příklad hi-res rutiny zde: http://www.pictureviewerpro.com/hosting/zx81/download/zx81/highres.txt


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Dokumentace k zobrazování
PříspěvekNapsal: 27.01.2022, 20:47 
Offline
Kecka

Registrován: 29.11.2021, 03:10
Příspěvky: 57
Has thanked: 36 times
Been thanked: 12 times
Díky moc! Při prvním čtení mi z toho šla hlava kolem, celkem žasnu na tím, jak tohle někdo dokázal vymyslet v době, kdy neexistoval google ani stackoverflow, vlatně ještě nebylo moc jiných počítačobvých řešeníl, ze kterých by se dalo inspirovat... Prostudoval jsem ten zdroják a přečetl ten článek ZXM pak ještě jednou a doufám, že už to tedy chápu. :-)

Podle těch popisů bych rád zkusil udělat opravdovou emulaci - čili jako že ke skutečné emulaci CPU, kterou mám, bych chtěl udělat skutečnou emulaci toho pomocného čipu. Abych se nemusel snažit nic skenovat v paměti, jak bylo popsáno u toho emulátoru zmíněného v textu článku, ale že bych prostě sledoval ty bity A15, D6, řádkování by řídil signál MI a vertikální retraci signál NMI. Pro emulátor ale potřebuju znát ještě víc podrobností, tak bych si dovolil pár doplňujících dotazů:

- Co ten počítač vidí při čtení/zápisu dat nad 32768? Je tam totéž co v dolní polovině paměti? Má od 32768 opět ROM a od 49152 RAM?
- Co se stane, když už jsme nakreslili 192 řádků obrazu a paprsek je někde v dolní části a já udělám instrukci CALL 32768? CPU uvidí skutečné instrukce, nebo opět jen nuly? Ale obraz už je nakreslený, takže bude ten čip dál něoc kreslit? A co když udlěám CALL 49152, opět až dole po nakreslení všech 192 linek obrazu, bude se něco dál kreslit, bude CPU vykonávat ty instrukce z RAM, nebo ani jedno z toho?
- Co omezuje výšku obrazu na 192 řádků? Je to nějak hardwarově limitované, nebo je to jen softwarová záležitost. Nejsou nějaké hry s vyšším obrazem?
- Jak je tne obraz fyzicky velký na displeji? Třeba v porovnání se ZX Spektrem, které má celkem maxivní border ze všech stran, je to stejné? Nebo je tento obraz širší, když takt CPU je trošičku pomalejší?
- Znaková sada musí být pouze v ROM? Co když registr I > 64, co se zobrazuje? Vždycky ROM a ty další adresní bity se ignorují?
- A jak je to s tom znakovou sadou vlastně řešeno na sběrnici? Je CS signál pro čtení znakové sady z ROM řízen linkou A13=0 nebo A14=0? Nebo ten čip má vlastní řízení paměti ROM a je to na sběrnici pomocí rezistorů oddělené od CPU? Viděl jsem, že to největší rozšíření RAM na 56KB je řešení jako dva samostanté čipy - jeden sedí na původní pozici RAM a druhý sedí na ROM a psali tam něco jako, že díky tomu ta druhá část RAM jde použít i pro znakovou sadu. Opět se ptám - čím je toto dané v tom počítači? Je ta sběrnice oddělená na dvě poloviny, kde ROM je v jedné a RAM ve druhé? Nebo je to adresováno čistě podle toho signálu A14 nebo A13? Když si dám RAM do sekce 8192-16383, tak v ní automaticky můžu mít znakovou sadu?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Dokumentace k zobrazování
PříspěvekNapsal: 28.01.2022, 05:10 
Offline
Kecka

Registrován: 29.11.2021, 03:10
Příspěvky: 57
Has thanked: 36 times
Been thanked: 12 times
Podle toho, co jsem našel na netu v diskuzích a taky ve zdrojácích EightyOne:
- Jakmile je A15=1 a D6=0, tak čip vždycky kreslí 8 pixelů a podvrhává nuly čili NOP do CPU, takže obrazovka může být i větší než obvyklých 256x192 pixelů
- Bit A15 nehraje při adresování roli, takže datově je horní půlka paměti stejná jako dolní
- Na adresách > 32K nejde nikdy spouštět kód (jde to jedině s "M1not" úpravou pro 32K RAM)
- Pokud je RAM 1K, tak se opakuje 16x v prostoru 16-32K a pak znovu 48-64K
- Pokud je RAM 16k, opakuje se na 48-64K
- EightyOne u ZX80 při čtení adres 4-8K nechává datovou sběrnici "plavat" a ROM zrcadlí zase až na 8-12K
- EightyOne zrcadlenou paměť neumí zapisovat, jen ji tam čte - tohle mě překvapilo a vrtá mi to hlavou
- Datová sběrnice je rozpůlená, jak jsem předpokládal, a znaková sada musí být v ROM (nebo v RAM sedící na ROM čipu na adresách 8-16K)

Ještě nevím, co se děje, když I>64, předpokládám, že se prostě bity 5-7 ignorují.
A pokud bych chtěl emulovat 48K nebo 56K RAM, tak bych prostě asi neudělal to zrcadlení a neřešil, že nevím přesně, jak je to zapojené hardwarově. Tam se pak možná liší jednotlivá řešení v tom, jestli se kreslení aktivuje i při A14=0,A15=1 nebo jen A14=A15=1. To druhé, jestli správně chápu, je ta M1not úprava a tu tam asi lidi mívají, protože jinak se musí kód programu i videoram vlézt mezi 16-32K adresy.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Dokumentace k zobrazování
PříspěvekNapsal: 28.01.2022, 16:58 
Offline
Kecka

Registrován: 29.11.2021, 03:10
Příspěvky: 57
Has thanked: 36 times
Been thanked: 12 times
A co ještě taky není jasné z dokumentace, nebo jsem přehlédl, je otázka, jestli ZX81 má ten obraz pravidelný (zhruba 50 Hz), nebo jestli na to kašle a udělá si vertical retrace kdykoliv se mu chce. Já tohle zatím na žádném jiném počítači neviděl, ale tady se mi zdá, že ROM má kód na čtení klávesnice udělaný tak, že když přijde klávesa a jde se zpracovávat, tak se prostě pak kašle na displej a udělá se vertical retrace a nečeká se na to, až je ten správný čas. Displejům je to zřejmě jedno a při tak vysoké frekvenci to člověk okem nevidí... A ptám se na to proto, že v emulátoru pochopitelně nemám retraci, musím si ji udělat sám a podle toho začít časovat další snímek, abych poznal, na kterém PAL řádku vlastně jsem, když budu něco kreslit.

A s tím souvisí i další věc: Jak to vlastně všechno dělal ZX80, když tam není ten NMI generátor? V tom mám taky celkem zmatky. Zajímavé je, že když jsem prostě naemuloval to chování bitů A15 a D6, tak oba ty počítače krásně fungují i bez ostatních věcí. Obraz kreslím, jak už jsem asi psal výše, prostě tak, že se dívám do videoram, co tam je za text, a píšu to tak na obrazovku tehdy, když se mi chce, nezávisle na časování ZX81. :-) Takže teď mám zmatek v tom, proč mi ten emulátor vlastně už teď dobře funguje, když ta implementace časování podle mě není dostatečná. :-D


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Dokumentace k zobrazování
PříspěvekNapsal: 28.01.2022, 18:00 
Offline
Óm Nejvyšší

Registrován: 16.06.2014, 12:23
Příspěvky: 3676
Bydliště: Jesenice u Prahy
Has thanked: 28 times
Been thanked: 280 times
Když ZX81 v SLOW modu nezobrazuje, tak tam tiká od HSYC NMI a to odměřuje vertikální časování.

Zobrazování je to bohovsky složité, aby něco ušetřili v ULA, ale tam to není vůbec zapotřebí.

_________________
Diagnóza: Touretteův syndrom, Koprolálie, Dyslexie, Obsedantně kompulzivní porucha.
Kalkulačky: Privileg PR56, TI51-III, TI57, TI58, TI59, TI83, TI-83 Premium CE, TI89
Počítadla: BOBO64, ZX48 plus, DG-88, Didaktik-M, C16, C64C, Amiga 500+, MZ800, MUPID C2A2


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ů: 6 ] 

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