Nostalgicky jsem zavzpomínal na své jinoštví. Nejvíce mne bavila hra Tirnanog. Bohužel jsem nevyluštil všechny její hádanky. Zato jsem analyzoval její strojový kód, díky čemuž jsem prošel některými zamčenými dveřmi i bez klíče :-).
Názory k článku
Grafika na osmibitových počítačích firmy Sinclair
Re: skvělý článek
celé vláknojojo, měto připomnělo, že pořád ještě mám komentovanej výpis romky http://kabinet.cz/…age00057.htm – pro většího nadšence je stále k dispozici, vyhodit je mi to líto :-)
Re: skvělý článek
celé vláknoObávám se, že mám úplně stejný. Kámoš mi to tiskl na „traktoru“ s průklepem, a pak jsme to pracně rozdělovali od sebe (já dostal kopii :o) a doma se to sešilo. To byly časy – to se nevrátí …
Re: skvělý článek
celé vláknoA nechces to naskenovat a vyhodit na web?
Re: skvělý článek
celé vláknoKdyž to budu chtít na webu, nemusí to po nocích skenovat, stačí dotaz do oblíbeného fulltextového vyhledávače a mám to hotovo za pět sekund. Je libo v češtině nebo v angličtině? :-)
souhlas
celé vláknojo jo cely serial je super
Prokladane radkovani
celé vláknoPokud se nemylim, v clanku neni zminka o prokladanem radkovani ZX Spectra, tj. v pameti byl ulozen 1., pak 9., 17. … mikroradek az po 1/3 (?) obrazovky a nasledne 2., 10., 18., … pak stejnym zpusobem dalsi dve retiny obrazovky. Mam takovy dojem, ze toto bylo kvuli nejakym kolizim ULA s mikroprocesorem, ale tim uz si nejsem jisty.
Re: Prokladane radkovani
celé vláknoNiekto tvrdí, že je to kvôli rýchlejšiemu prístupu do videopamäti – spodný bajt pixelovej aj atribútovej adresy sa rovnajú a ULA nemusí toľko meniť CAS. Všeobecná zhoda je ale skôr v tom, že takéto organizovanie videopamäti umožňuje písať rýchlejšie rutiny, keď prechod na ďalší pixelový riadok je možné urobiť iba inkrementovaním horného bajtu adresy (síce iba v rámci „znakového“ riadku, ale využívajú to aj rutiny ROM).
Re: Prokladane radkovani
celé vláknoNo rychlejhší, jak se to veme. Pro ULUu určitě, pro programétora grafiky to byla pohroma. Např. vypočítat polohu bodu na obrazovce. Některé demo rutiny to dokonce myslím řešily tabulkou adres pro jednotlivé body, či spíše řádky. Ale co s tím někteří dokázali, nad tím mi tůstávál stát ..... rozum. Největší frajeřinou byly border-efekty, čili třeba běžící text v okraji obrazovky, kde se dala pouze měnit barva. Rychlou změnou barev v průběhu vykreslování paprsku na televizi se tam v podstatě dalo „kreslit“ :o)) No na mém Didaktiku M to většinou nefičelo, protože obvod ULA byl nahrazen jiným, my mu říkali pracovně ČULA, a takto přesné časování nesedělo s paprskem obrazovky :o(
Re: Prokladane radkovani
celé vlákno_mj ma pravdu. Pokud mate adresu do videopameti v HL, pak je skutecne snazsi a rychlejsi dat INC H nez nahravat obsah H do A, abyste mohl pricist 32. Pocitani polohy bodu na obrazovce se nepouziva tak casto, vetsinou spis potrebujete posunout to, ceho adresu uz stejne nekde mate.
Re: Prokladane radkovani
celé vláknoTo je sice všechno moc pěkné, ale nějak to neřeší přechod mezi třetinami obrazovky. Co s tím?
Re: Prokladane radkovani
celé vláknoNa toto mi kedysi Raxoft poslal (listom, vtedy sme ešte písali listy, hehe) geniálne krátku rutinu myslím od TRC (Tomáš Rylek), keby som zalovil v krabici s poštou, tak to možno nájdem… možno to skúsim. :-)
Re: Prokladane radkovani
celé vláknoNikdy jsem to neřešil, ale jen tak narychlo z hlavy jsem vymyslel následující:
add h ; zvýšení mikrořádky
ld a, h
and a, 7 ; test na přetečení mikrořádky
ret nz ; návrat, pokud nedošlo k přetečení
ld a, 20h
add a, l ; zvýšení řádky, test na přetečení třetiny
ret c ; návrat, pokud došlo k přetečení
ld a, h ; snížení hodnoty třetiny, když přetekla mikrořádka a nepřetekla řádka
sub a, 8
ret ; šlus
Princip je v tom, že adresace je normální, jen tři horní bity registru L jsou prohozené se třemi dolními bity registru H. Je možné, že to jde ještě jednodušeji, ale zatím mě nenapadlo jak. Těším se na vaše vylepšení! ;-)
Re: Prokladane radkovani
celé vláknoJeště poznámka: samozřejmě, že instrukce sub a,8 neexistuje, takže konec má vypadat následovně:
ret c
ld a,h
sub 8
ld h, a
ret
Re: Prokladane radkovani
celé vláknoHmm, mohlo to byť niečo také, veru…
Ale zistil som, že neviem kde mám starú poštu.
Re: Prokladane radkovani
celé vláknoTak na to si přesně vzpomínám. Jako zázrak potom působily rutinky UPHL a DOWNHL z knihy Assembler Z80 od George K, které právě řešily přechod adresy jednoho pixelového řádku (uložená v registru HL) na následující.
Co se týče border efektů, ty na „emku“ opravdu neběžely korektně. Ale mám pocit, že to bylo hlavně proto, že CPU tohoto Didaktiku (tuším nějaký Intel 8080) běželo na 4MHz, což rozhodilo časování (dělané většinou syncvhronizací s přerušením – halt – a prokládáním programu nicnedělajícími instrukcemi – nop, or a, ld a,a ap.)
Ještě si pamatuju na český program (nevzpomenu si na jméno), který jsem viděl v jednom čísle Proxima magazínu – uměl tzv. Hi-Color obrázky, tj. časováním obcházel omezení dvou barev na 8×8 a umožňoval dvě barvy na 1×8 bodů. Fullscreen obrázek sice žral téměř všechen procesorový čas, ale zbylo něco málo třebas na scrollující text a přehrávání hudby přes AY.
Re: Prokladane radkovani
celé vláknoad Emko: ono to bylo asi obojím – Emko mělo nedělenou RAM v 8×64kb čipech, takže se CPU haltoval nezávisle na tom, jestli se zrovna pohyboval v horní nebo dolní paměti. Spolu s těmi 4MHz to znamenalo, že v program dolní paměti běžel rychleji a v horní zas pomaleji, než na originálu.
Re: Prokladane radkovani
celé vláknoKde jste proboha vzali ty 4MHz???? Mělo normálně 3.5, dokonce tam mám originál Zilog CPU. Kdyby tam dali intel 8080 tak vám tam nic nepoběží, protože zilog Z80 a klony měly rozšířenou instrukční sadu. Kompatibilita pouze směrem dolů k intelu 8080, né naopak. Problém byl skutečně pouze ten nový zákaznický obvod.
Re: Prokladane radkovani
celé vláknoDovolím si drobné upřesnění. 8 jednobitových pamětí měl Didaktik M model 1990, model 1991 měl dvě čtyřbitové.
Re: Prokladane radkovani
celé vláknoNo Intel 8080 to urcite nebol. To by na tom skoro nic nebezalo, kedze original mal procesor Z80 a kompatibilita bola len v smere z Intel 8080 na Z80 ale nie uz opacne.
Bol to procesor z byvaleho vychodneho nemecka a mal oznacenie U880D a bola to kopia Z80 ale dobra kopia, tu by som problem nevidel. Skor to bolo tou pamatou.
Re: Prokladane radkovani
celé vláknoJsem si téměř jistý, že didaktik m neměl originál Z80 CPU, ale nějaký kompatibilní klon (možná kompatibilní klon inteláckého klonu). Ale tou frekvencí 4MHz jsem si naprosto jistý. Mimochodem, tyto údaje jsou k holdedání v originální příručce, kterou bohužel nemohu dohledat.
CPU v Didaktiku M - oprava
celé vláknoTak jsem se tím trochu vrtal a je to takhle
- Didaktik měl CPU na 4MHz
- Byl to klon procesoru Z80A, v dokumentaci se však uvádělo, že je to odvozenina/následovník Intelu 8008/8080 (asi aby se neřeklo, že je to klon Z80)
- Jiný ULA než originální ZXS – „čtvercový“ obraz 4:3, není rozdíl mezi rychlou (horní) a pomalou (dolní) RAM.
- Díky noriginálnímu procesoru prý několik málo instrukcí trvalo jiný počet taktů (toto zatím nemám ověřeno)
Re: CPU v Didaktiku M - oprava
celé vláknoFrekvenci 4 MHz (a ruskou ULA) měly Didaktiky M a Kompakt, původní Gama s originální ULA od Ferranti jela na 3,5 MHz stejně jako Speccy. Já mám v jednom Didaktiku NEC D780 a v druhém Z8400, mám pocit že přímo od Zilogu, ale už je to pár let co jsem ho měl rozšroubovaný, takže to nevím přesně. A aby to s těmi odvozeninami bylo úplně přesné, tak Z80 nevychází přímo z 8080, ale z jeho nástupce 8085 ;-)
Re: Prokladane radkovani
celé vláknoad emko: afaik bylo delane podle pocitace ‚mistrum‘ (odtud to ‚m‘), ktery byl popsany v amaru. mistrum resilo kolize mezi cpu a ula jinak nez originalni zx spectrum, takze casovani ve druhe ctvrtine ram bylo jine.
Re: Prokladane radkovani
celé vláknoAk niekto potreboval prevádzať súradnice pixelu na adresu, tak zle rozmýšľal. Ani v dnešnej dobe nikto neprogramuje celú grafiku cez PutPixel. Bolo potrebné prepnúť na vyššiu úroveň predstavivosti a písať rutiny priamo pre pamäťový model ZX. Dali sa tak napísať rýchle rutiny pre vykreslovanie čiar aj spritov. To je pre hru hlavné, nie je porebné kresliť nejaké bodky. Myslím že ku koncu éry DM som to tiež dostal do krvi a nebol to problém. Dnes by som už asi na vlastné programy pozeral ako puk a zrejme sa mi asi aj tak nič už nezachovalo :(
Re: Prokladane radkovani
celé vláknotato „finta“ s INC H je dobra max pro kresleni znaku .. a koho zajima rychlost v „textoveho rezimu“.. Pro jakoukoli grafiku je to ale naprosto k nicemu, protoze to neni universalni ale plati to jen v ramci kazde tretiny obrazovky..
Takze uprimne doufam v to co se tvrdilo, ze to je kvuli rychlemu vykleslovani ULA (pixel i atribut maji stejnou pulku adresy)
no ale co, aspon to nebyla takova nuda neco kreslit ;)
Re: Prokladane radkovani
celé vláknoŘekněmež, že framebuffer je na adrese 0 (BIT 14 = 1, BIT 15 = 0, neuvažuji
BIT 0–4 = sloupec (s)
BIT 5–7 = řádek v třetině ®
BIT 8–10 = řádek ve znaku (m)
BIT 11–12 = číslo třetinky (t)
Jak to přepočteme na adresu atributů? Atributy začínají na adrese 6144 (BIT 11=1, BIT 12 =1). Mapování tedy bude takovéto:
0 1 0 1 1 0 t t | r r r s s s s s
ULA tedy nemá o nic lehčí práci, než jen brát jiný bity. Pokud bych totiž měl běžné mapování ttrrrmmmsssss, pak udelat z toho 110ttrrrsssss je otázkou posunu pěti bitů o tři pozice. Místo toho tedy posouváme jen 2 bity. Posun se přitom zadrátuje velice snadno, prostě jen přepojíme piny.
Důvody je třeba hledat v ROMce. Pro výpočet adresy znaku a atributů stačí následující.
- Spočítat pozici jako r * 32 + s.
- pro adresu bitové masky udělat 3× posun doleve (implementoval se tuším přes 3× ADD H,H)
- pro adresu atributů přidat ty dvě jedničky.
- pro každý mikrořádek pak stačí INC H
Zase, kdyby to bylo ve formě ttrrrmmmsssss, pak je to ještě jednodušší, protože by se do H strčil řádek a do L sloupec. Výpočet attributové oblasti však bude náročnější, i posun o mikrořádek už nebude triviální.
Já sám osobně zastávám spíš názor nechtěné chyby, tedy někdo při návrhu ULA někde otočil číslování a ROMka se pak přizpůsobila dané chybě, protože cokoliv jiného by vyšlo dražší.
Re: Prokladane radkovani
celé vláknoJa mam jeste matnou vzpominku, ze to mozna nejak souviselo s kolizi ULA a refreshem DRAM procesorem – ze refresh se delal linearne a tak ULA musela chodit nelinearne, aby se nikdy nepotkali na moc dlouho…
Re: Prokladane radkovani
celé vláknoAno, mam dojem, ze prave toto byl duvod pro to rozdeleni pameti. Ale pri natahovani obrazku to vypadalo docela efektne :-)
Mimochodem, uplne stejnou veci trpi i CGA (radky nejsou adresovany linearne) a tam je to uplne zbytecne, slo by to odstranit prohozenim dvou vodicu.
Re: Prokladane radkovani
celé vláknoto je blbost, refresh tam byl 7bitovy, tedy cpu refreshuje najednou vsechny adresy, jejichz spodnich 7 bitu odpovida obsahu 7 bitu r-registru z80.
btw, synchronizace ula s cpu se da i rozbit a to tak, ze se do i registru da hodnota ukazujici do druhe ctvrtiny ram. tim se lehce naboura zobrazovani (rozjede se o 1 byte).
podle me je geometrie obrazu dana casovanim (256 bodu na radek, z toho 192 ovladatelnych, zbytek border atd..). a sekvence adresovani je optimalizace, aby byl hw co nejlevnejsi.
Re: Prokladane radkovani
celé vláknoNebyl on registr I v Z80 použit pro vektorová přerušení?
IM 0 – při přerušení RST 38 IM 1 – při přerušení přečte datovou sběrnici a data interpretuje jako instrukci IM 2 – přečte datovou sběrnici a byte spoji s hodnotou I registru, Výsledkem je adresa, ze které vyzvedne dvobajtové číslo, jenž obsahuje adresu obslužné rutiny.
Škoda, že změna vektoru přerušení neumožnila změnit chování instrukcí RST.
Re: Prokladane radkovani
celé vláknoZ80 mela jak registr I (interrupt), tak i registr R (refresh, ten se automaticky inkrementoval po skoro kazde instrukci a tak vlastne obcerstvoval DRAM pameti dummy ctenim, u slozitejsich instrukci s prefixem se jeho hodnota zvysila o 2).
Mikroprocesor ihned po nacteni kazde instrukce tento registrovy par zapsal na adresovou sbernici a skutecne – pokud I prekrocilo 64, tak to ULA zmatlo a vynechal jeden byte (mozna i atribut??? – fixme), takze obrazovka byla „zasnezena“.
Re: Prokladane radkovani
celé vláknoAha, teď to chápu, tady něco o tom píší.
Re: Prokladane radkovani
celé vláknoAk si dobre pamätám, tak ZX , alebo aspoň DM používali statické pamäti, takže precesor ani nikto iný nemusel refreshovať pamäť a R register bol jednoducho len featura procesora Z80, a na SM sa používal akurát na „generovanie“ náhodných čísel.
Re: Prokladane radkovani
celé vláknoTo si pamatujes spatne. Spectrum i Didaktik meli DRAM, ktere se museli refreshovat.
Re: Prokladane radkovani
celé vláknoAha tak ale stále som presvedčený, že so niekde čítal že o refresh sa procesor nestará (aspoň na DM), aj keď má na to register, zrejme to robila ULA.
Re: Prokladane radkovani
celé vláknoProhodil jsi IM0 a IM1. Problém je ale v tom, že Z80 na adresovou sběrnici v době refeshe neposílá jenom obsah registru R, který je 8bitový a počítá jenom 7bitově, ale na vyšší bajt posílá registr I.
Re: Prokladane radkovani
celé vláknoNeviem, či som nejako takto nechcene neprišiel na „efekt“, kedy bol okolo všetkého akoby „šum“, že riadky trochu lietali vľavo-vpravo. Muselo to byť niečo veľmi krátke, lebo viem že som to mal hneď v BASICovom loaderi a že Raxoft mi písal že to nie je celkom korektné a môže byť na inom počítači (klon) problém, alebo s nejakou perifériou, alebo tak čosi.
Re: Prokladane radkovani
celé vláknoSkutečně není, bude to uvedeno příště (v rámci multicolor režimů) i s vysvětlením časování při vykreslování, tj. přesně jakým způsobem se vykreslilo celých 312,5 obrazových řádků na televizi. Pěkně to popsal jeden autor emulátoru Speccyho, ten s tím docela bojoval.
Prince of persia na ZX spectrum
celé vláknoNo koukal jsem jak puk
Re: Prince of persia na ZX spectrum
celé vláknoJeště si zkus vyhledat Doom for ZX Spectrum. Tedy, on ten engine vypadá spíš Wolfensteinovsky (vše v jedné rovině atd.), ale stejně je moc pěkný, co všechno lidi dokážou ze starých osmibitů vymáčknout.
Re: Prince of persia na ZX spectrum
celé vláknoPred dvema dny jsem shlednul lonske demo Edge Of Disgrace pro C64. Absolutne nechapu. Co mne pobavilo, ze na stejne party byla i Music Compo a vyhral Jeroen Tel. 8bit porad zije, i kdyz to zni jako blbina.
Doplnění - zachránil jsem z Flashky část textu :-)
celé vláknoJeště přidávám malé doplnění ke kapitole o ZX80 a ZX81. Podařilo se
mi zachránit další tři odstavce, které se mi záhadně „ztratily“
z Flashky (nějaký noname výrobce), samozřejmě až po vydání článku
:-(
Při generování obrazu na ZX81 se využívala velmi úzká spolupráce
mikroprocesoru Z80 s čipem ULA (Uncommitted Logic Array) vyrobeným
speciálně pro tyto počítače firmou Ferranti. Konkrétně se využívalo
specifické vlastnosti mikroprocesoru Z80, který v režimu HALT (zastavení a
čekání na přerušení) nezastavil zcela svou činnost, ale neustále
opakoval instrukce NOP (tuto instrukci již známe, značí no-operation),
během nichž se neustále měnil obsah registru R (refresh counter).
Mikroprocesor také sloužil pro generování adres znaků, které se měly
zobrazit na obrazovce. Použitá technika byla zajímavá: mikroprocesor skočil
(instrukcí JMP) na začátek řádku v obrazové paměti a snažil se, jak je
to běžné, načítat instrukční kódy jednotlivých instrukcí. Ovšem tento
stav byl zachycen ULA (jednalo se o adresu zvětšenou o 32768, tj.
s nastaveným nejvyšším bitem). Mikroprocesor postupně na adresovou
sběrnici posílal zvyšující se adresy a paměť (zcela běžně) na datovou
sběrnici posílala kódy jednotlivých znaků, co znak to jeden byte. Tyto byty
nikdy nebyly mikroprocesorem přečteny: ULA je „ukradla“ (a využila),
zatímco všechny vodiče datové sběrnice nastavila na logickou nulu.
Mikroprocesor tedy ve skutečnosti přečetl místo kódu znaku (který by
pravděpodobně nedávat jako kód instrukce smysl) byte s hodnotou 0, což
v instrukční sadě Z80 značí NOP. Jediný kód, který ULA z datové
sběrnice neodstranila, byl kód pro novou řádku (NEWLINE) zakódovaný do
čísla 118, což je (jistě ne náhodou :-)) operační kód instrukce HALT.
Od této chvíle je mikroprocesor zastaven (provádí NOP a zvyšuje obsah
registru R) až do chvíle, kdy obsah registru R přeteče z maximální
hodnoty do nuly. V této chvíli se vygeneruje přerušení a činnost
mikroprocesoru může pokračovat. Čip ULA se interně stará
o zpracovávání jednotlivých znaků. Adresy znaků jsou generovány pomocí
mikroprocesoru (viz odstavec výše), ULA v každých čtyřech taktech
vygeneruje osm pixelů. ULA obsahuje vnitřní čítač použitý pro načtení
korektního bytu z paměti ROM, která obsahuje bitové mapy znaků – adresa
dodaná CPU je s obsahem tohoto čítače zkombinována a výsledkem je adresa
konkrétního jednoho řádku bitové mapy znaku, který je načten z ROM do
ULA, konkrétně do posuvného registru, ze kterého jsou jednotlivé bity
vysouvány a použity pro generování video signálu.
Mazani obrazovky
celé vláknojeste si pamatuji na trik pro rychle mazani obrazovky (nebo vynulovani kusu pameti). Stack pointer se da na konec vymazavane oblasti, do registru HL 0, a pak se registr HL uklada opakovane na stack. Bylo to mnohem rychlejsi nez LDIR.
Re: Mazani obrazovky
celé vláknoJo, takto som vo svojom deme riešil „každý riadok iná dvojica farieb“ (čiže časovanie atď), ale nestihol som to na celú šírku, myslím že niekto iný áno, hoci netuším ako.
Myslím, že keby Sirovi Sinclairovi v roku 1982 ukázali nejaké Spectrum demo z roku 2000, tak odpadne. ;-)
Re: Mazani obrazovky
celé vláknoto se asi stihnout neda, pouziva se trik, kdy liche radky jsou plne (FFh) a sude prazdne a attributy se nastavuji pro dvojici radku.
Re: Mazani obrazovky
celé vlákno… preto som v tom deme („Out of Time“) mal cez farebné pruhy čierny nápis „Out of Time“, vysprejovaný joystickom v Art Studiu. :-)
vadny SAM coupe
celé vláknoNeznate/nevite nahodou kde by mi spravili muj vadny SAM coupe. CPU a RAM jede, nejede grafika. Je to nostalgie, ale chtel bych aby byl ok. Diky za pripadne info.
Re: vadny SAM coupe
celé vláknoja zas mam Spectrum+ a potrebuji opravit folii pod klavesnici (klasika, ta odejde vzdy jako prvni a pak tlacitka prestanou fungovat).
Re: vadny SAM coupe
celé vláknoNajdete si kontakt na http://www.ttklavesnice.cz/ a napiste jim. Folie maji doslova za babku. Hlavne zapomente na zlatokopy na aukru, tady nakoupi folii za 120 a na aukru ji prodavaji za 500.
Re: vadny SAM coupe
celé vláknoKlávesnice do pluska nestojí 120, ale dvojnásob plus 100Kč poštovné, takže kupovat kusy už zas tak výhodné není. 120 + poštovné stojí klávesnice do Gumáka, tak je o jednu vrstvu tlačítek jednodušší.
Re: vadny SAM coupe
celé vláknoTaky zde: http://www.sintech-shop.cz/shop.php?…
Re: vadny SAM coupe
celé vláknoTo je s velkou pravdepodobnosti vadny ASIC, ktery neni dostupny a nema zatim nahradu. S popisem chyby grafiky se muzes ozvat na sam.coupe@centrum.cz.
sam.speccy.cz
Re: vadny SAM coupe
celé vláknoDiky moc. Zkusim to.
Hudba z Důma
celé vláknoNedokázal by někdo poradit, zdali se nedá z toho Dooma nějakým způsobem dostat ta hudba? Tajle se dá stáhnout: http://www.users.zetnet.co.uk/…ews/doom.htm
GPL hra pro ZX Spectrum
celé vláknoJsem napsal GPL hru v assembleru http://ronja.twibright.com/jswx.php
Re: GPL hra pro ZX Spectrum
celé vláknoGPL softwaru existuje víc
http://demfir.sourceforge.net/ (pro DivIDE) http://ci5.speccy.cz/mdos3/ (pro DivIDE) http://cygnus.speccy.cz/ (sekce utility)
A kdyby někdo hledal manuály – výše třeba výpis ROM, tak nejlepší o kterém vím je zde http://softhouse.speccy.cz/docs.htm plus další dokumentace ve skvělém zpracování.
Re: GPL hra pro ZX Spectrum
celé vláknoJo, jenže Karel toho Jet Set Willyho vytvořil už někdy v 90. letech, odhaduju kolem 1994 nebo tak, takže by se to mohlo možná stát prvním GPL programem pro Spectrum vůbec.
Re: GPL hra pro ZX Spectrum
celé vláknoLen poopravím link, lebo z organizačných dôvodov som dokumenty presunul na http://softhouse.speccy.cz/dokumenty.htm

