Spominam si, ako som na svojom prvom pocitaci – didaktiku M objavil framebuffer nahodnym zapisovanim bajtov do RAM, i aky som bol z toho sokovany.
Vdaka za super serial!
Spominam si, ako som na svojom prvom pocitaci – didaktiku M objavil framebuffer nahodnym zapisovanim bajtov do RAM, i aky som bol z toho sokovany.
Vdaka za super serial!
Doufám, že se seriál dotkne i framebufferu ZX Spectra (a klonů). Jeho velmi netradiční pojetí (prohození horní trojice bitů spodního bajtu adresy s dolní trojicí horního bajtů adresy) snad nikdo, kromě samotných autorů nepochopil. Jestli to byla chyba v návrhu ULA (a oprava byla v té době neúměrně drahá), nebo to mělo jiný záměr?
Každopádně záhada století.
To HUA: POKE 16384,170
Bude to priste. Jeste nevim presne, do jake hloubky, ale zaklady urcite. Pekne to take bylo na ZX80/81, jak ULA odpojovala CPU od sbernice.
Nevím, jak to bylo na ZX80, ale na ZX spectru, když se CPU motal adresami mezi 16384 a 32767, tak mu ULA vypínala hodiny, když zrovna potřebovala kreslit obrázek. Strašně dlouho jsem nemohl přijít na to, proč můj speedloader funguje bez problému od adresy 4e4 a po přesunu do tiskového bufferu na 23296 z něj lezly úplně divné tóny a samozřejmě nefungoval.
Na ZX80 a ZX81 se o vlastni zobrazovani dokonce staral do znacne miry samotny procesor :-). Pro ZX80 bylo typicke blikani obrazovky – kdyz se CPU zabyvala necim jinym, obraz proste nebyl. Na ZX81 prislo vylepseni – v Basicu byly 2 rezimy – FAST a SLOW. V rezimu FAST „zhasinala“ obrazovka a vypocty byly rychlejsi. V rezimu SLOW se cas CPU delil mezi uzivatelsky program a zobrazovaci system – vypocty apod. tak byly pochopitelne pomalejsi, ale obrazovka neblikala. Firma Sinclair – to byli mistri jak z minima dostat maximum. Nejen podle meho nazoru tyto veci vymysleli vynikajici inzenyri.
Vida. ZX Spectrum jsem měl docela dlouho, ale nikdy jsem si nevšiml, že by přístup do paměti na těchto adresách byl pomalejší.
Zajímalo by mne, jestli to emulátory poskytující reálnou emulaci
(jako byl kdysi známy Gutterovský emulátor pro DOS … jenž k nám distribuoval tehdejší JIMAZ… od něhož mám i zdrojáky… emuloval i poměrné délky trvání instrukcí)
nejak emulují i tento efekt..
současné emulátory zx většinou emulují vše, o čem se ví… to jest contenci pamětí, počet taktů instrukcí atd. bez toho by nešlo solidně emulovat multicolor nebo přehrávání samplů. vývoj emulace na zx je momentálně v podstatě na mrtvém bodě, není už co přidavát.
Do jaké hloubky ? No přece co nejvíce :) Zajímavé jsou hlavně různé hacky hw, kdy se sw vytvářelo něco, co podle specifikace „nešlo“. Jak na ZX (multicolor) tak na C64 (sprite multiplexy, renderovani do borderu atd.) I když ZX znám, zajímavé jsou pro mne spíš ostatní platformy, kdy si člověk přečte něco nového.
Záměr to mělo úplně jednoduchý – zrychlení výpisu znaku na obrazovku. Spectrum totiž nemá přepínání textových a grafických režimů jako jiné (mnohem dražší) mikropočítače, ale jede stále v grafickém, takže kazdé písmenko se musí na obrazovku „namalovat“. Například to 16384 je adresa prvního bytu znaku v levém hormím ruhu, druhý byte měl adresu o 256 vyšší, třetí o dalších 256… Prostě stačilo jedinou jednobytovou instrukcí přičítat jedničku k hornímu byte adresy, na kterou se mělo zapisovat, což spotřebovalo čtyři takty procesoru, na rozdíl od šestnáctibitového sčítání dvou dvouregistrů, které by trvalo třikrát déle a zabíralo o dva registry (ze sedmi) více.
Tohle jsem věděl, ale přišlo mi to, jako kanón na vrabce. Je ale možný že kdyby se to dělal stylem
LD (HL),A
ADD HL,BC //BC=32
namísto
LD (HL),A
INC H
První řešení je možná opravdu pomalejší (a žravější na registry) (i když v jedné tabulce teď čtu, že obě instrukce zaberou 8 taktů, tak nevím)
Zase komplikovanější byk výpočet počáteční adresy (a když se k tomu příchaly atributy,…)
To zdanlive nelogicke usporadani videopameti melo duvod hlavne v tom, ze to zjednodusilo logiku uvnitr ULA, ktera sahala do osmice DRAM 4116. Samotna rychlost vykreslovani znaku procesorem duvodem ani tak nebyla – ten byl ve zjednoduseni systemu, ktery obsah videopameti posilal na obrazovku. Pochopitelne pro programatora grafickych rutin to pak byla obcas trochu pakarna, nez si zvykl. Ale kdyz to clovek takrikajic dostal pod kuzi, ani mu to neprislo… Ma ZX Spectra (48gumak, 48plus, 128) jsou stale funkcni, hec. Pred 2 lety jsem pouze vymenil membrany v klavesnicich – vyrobila mne je na zakazku jedna ochotna firma :-)
Jeste jsem malem zapomel – pri uvahach je treba pamatovat na to, ze videoram ZX Spectra mela 2 casti. Vlastni bitmapu a pak tzv. atributy…
Přitom to počítání příští pozice je jen to INC D, žádný volný registr už ani nezbyl, leda by se použila druhá sada :) Ono to na pohled vypadá strašně, ale hraničí to s genialitou, jako mnoho podobných řešení na Spectru, třeba těch pár odporů zdánlivě nelogicky umístěných na datové sběrnici udělá práci za několik čipů.
Zde bude během osmi průchodů smyčkou proveden tisk znaku.
0BB7 PR-ALL-4 EX AF,AF’ Uschovej CY flag v registru F'.
LD A,(DE) Vyzvedni stávající mikrořádek.
AND B Použij masku pro OVER a výsledek
XOR (HL) XORuj s mikrořádkem.
XOR C Proveď XOR také s maskou pro INVERSE
LD (DE),A a vlož na cílovou adresu.
EX AF,AF’ Vyzvedni CY flag
JR C,#0BD3,PR-ALL-6 a skoč, je-li nastaven pro tiskárnu.
INC D Uprav cílovou adresu.
0BC1 PR-ALL-5 INC HL Posuň se na další řádek zdrojové matice.
DEC A Zmenši čítač
JR NZ,#0BB7,PR-ALL-4 a skoč zpět, pokud není nulový.
EX DE,HL HL musí obsahovat
DEC H správnou vyšší adresu znakové oblasti.
BIT 1,(IY+1) (FLAGS) Při obsluze obrazovky
CALL Z,#0BDB,PO-ATTR nastav příslušný bajt atributů.
pánové, každý přece ví, že na z80 zabere INC H 4 takty a ADD HL, BC 11 taktů ;)
Zamackl jsem slzu. Pasovane Atari2600 z NSR, muj prvni kontakt s pocitacovou hrou. Nejlepsi hra byl H.E.R.O., kterou si obcas zahraju dodnes (bud na C64, nebo v emulatoru).
H.E.R.O myslis ten typek co haze tu bombu a rozbiji zdi aby se dostal cimdal slozitejsim bludistem k tomu trosecnikovi ? :)) Tak byla fakt bomba . Ja to hral na atari 800
To je ono. Akorat to neni trosecnik, ale zasypanej hornik :-)
ja to hral poprve na Atari800XE, paradni hratelna zalezitost. jinak H.E.R.O. = Helicopter Equipped Rescue Operation. viz http://en.wikipedia.org/wiki/H.E.R.O.
jdu nastartovat emulator ;)
Tahle hra si rika o remake
Myslis s modulem GRAFIK samozrejme :-)
Ano, ten modul to pak celé posunul za hranici snů …
:-) My meli ve skole modul GRAFIK jenom v jednom iqcku, takze o nej vzdycky byla rvacka.
U ZX80 slo delat vlastne pismena o rozliseni 8X8 pixelu ne 64X48..
Zdravim, tim rozlisenim 64×48 jsem myslel grafiku vytvarenou z prvnich osmi znaku + jejich inverzi. Byly tam ruzne kombinace ctverecku o polovicni delce hrany nez mely znaky (prvni obrazek v clanku). Takze pro textovy rezim 32×24 znaku to dela 64×48 „pixelu“.
Fuha, tak práve som zistil že Atari 2600 alebo aspoň nejaký jeho klon mám doma :) dúfam že to nájdem a ešte to bude fungovať…
a velmi pekny serial, vsetky jeho casti pravidelne citam a chyba mi iba
jedno, ze to nemam ako knihu (aspon v PDF).
A teda mam otazku na redakciu, alebo autora, nebudu sa jednotlive seriali casom
vydavat ako PDF ? alebo ked to vsetko raz skonci, nebude z toho jedna velka PDF
kniha ? velmi rad by som mal nieco podobne v zbierke
Pro mě (jako autora) by to nebyl problém, ale musím se zeptat v redakci, jak je to s právy (vydavatele) a věcmi okolo.
Moc dík za super článek, udělal velkou radost. Atari 2600 mám dodneška doma, takže schéma se určitě zhodí. Tak mě napadá, neexistuje (alespoň ve schématu) funkční redukce mezi klasickým yoistickem a portem pro tuto herní konzoli? Rád bych si jej ještě zprovoznil, ale původní yoisticky jsou v totálně dezolátním stavu…
Ahoj, jestli myslíš klasické (digitální) joysticky, tak ty by měly být AFAIK úplně stejně zapojené, jako na dalších Atárkách i Commodorech, tj. čtyři „tlačítka“ pro směry + 1 fire. Takže by měl stačit jakýkoli joystick z těchto počítačů, ideálně s mikrospínači. Ale asi máš na mysli převodník „analogových“ joysticků na Atarácké že?
Ještě se k Atari 2600 dodávaly paddle, což je pouze dvojice potenciometrů (přesný rozsah nevím, používal jsem kdysi dávno potenciometry ze starých televizí, ale ty byly nelineární) doplněná o jedno tlačítko.
Kdesi jsem se dočetl že Atari měly 1MΩ a Commodore 500 kΩ, zapojení konektoru je třeba tady.
C64 ma 470k
Jo pravda, to jsem pak také zjistil když jsem ho vyráběl a sháněl potenciometry :-D Mimochodem, osobní dotaz, to vtech má či nemá něco společného s touhle firmou?
Nema, cinani mi sebrali nick, ktery pouzivam 20 let. Vim o tom :-( Jinak vtech je proste vitek ;-)
Já jsem si toho Vítka myslel, ale obávám se že byli první, tu firmu založili v Hong Kongu už v roce 1976. Ještě od nich mám Socrates, ten používal grafický čip z TI-99, hádám že se tu o něm ještě dočteme :)
No prosim. Cinani jsou proste zakerny vic, nez jsem cekal. :-)
Díky. Určitě to helpne. Pokud neseženu převodník, tak se alespoň pokusím nějaký předělat. :)
Dík. Paddle už k němu tehdy nebylo. Kupovali to mojí rodiče v bazaru, když jsem byl ještě dítko školou poviné (hergot, to to letí :), takže s tím jsem se už osobně nesetkal :)
Ale asi máš na mysli převodník „analogových“ joysticků na Atarácké že? Ano.
Možná by se víc než převodník hodilo něco stylovějšího, nebo rovnou zásuvková krabice s pěti zvonkovými tlačítky, to by byla skutečná atmosféra osmdesátých let ;-) Jeden takový tu mám, budu ho muset konečně nafotit a šoupnout na net…
Taky se jeste misto tlacitek (ja jsem pouzival ty z vlacku – 6 tlacitek vedle sebe) dala vybrakovat stara Skodovka a vzit si packu na blinkry – ta mela taky ctyri smery a dokonce jeste sla zatlacit dovnitr :-) Nj. to byly casy, kdy jsem i konektor na BT-100 vyrabel podomacku, protoze tehdejsi Tesla Eltos sice neco podobneho v nabidce mela (bezny konektor DB-9), ale tak 50 kusu pro cele Brno…
Tak framebuffer je ta paměť, kam když se píše, tak se to hned samo objevuje?? Úžasné! :-) Paráda čtení.
Nepochopil jsem výrok, že Sinclairy neuměly grafický režim. Ony ho uměly, neuměly textový režim. Jediné omezení bylo v tom, že ta grafika byla v zásadě dvoubarevná, přičemž ty dvě barvy byly pro každý čtvereček 8×8 nastavitelné z pevně dané osmibarevné palety (s volitelným blikáním a zvýrazněním jasu, dohromady 1 bajt atributů).
Máta pravdu, to je slavná grafika Spectra, tu popíšu příště.
Dneska jsem popisoval ZX80/ZX81, ten skutečně uměl jen pseudografiku, což je pochopitelné, protože by se do standardního 1kB RAM framebuffer nevešel (i když se pamět dala rozšířit na tuším až 16 kB). Speccy se svými 48 kB už bylo o jednu generaci dál, tam nebyl problém mít framebuffer 256×192 (bitová mapa) + 32×24 (atributová mapa) řízený ULou.
(jestli jsem tedy v nějaké větě náhodou napsal jen Sinclair, byla tím myšlena ZX80/81, ale mám dojem, že jsem poctivě všude psal i model – jestli ne, tak se omlouvám)
Jak vznikaly obrázky k tomuto dílu? Myslím ty s hrama, ne foto hardware. Díky
podle me jsou sejmuty z emulatoru, ty existuji jak na ZX80, tak i na ruznoroda Atarka.
To mi připomnělo jak jsem v DOSBoxu spouštěl emulátor ZX81, dokonalá binární schizofrenie :-D
Jsou to screenshoty z emulatoru Atarek. Sice mam i originalni stroje, ale na tech se screenshoty z realnych her delaji trosku sloziteji, takze z emulatoru je to jednodussi (ale vlastnictvi originalnich Atarek je dobre, minimalne se tim legalizuji ROM v emulatorech :-)
Pripomenulo mi to dve veci z mojej ZX Spectrum „kariéry“:
Hezký příklad vytváření obrazu dynamickým řízením v každém framu je Uzebox:
Běží na Atmelu, takže myslím, že se to dá nazvat soudobým hardwarem :-)
Sorry, ale atmel, je dost dalej rychlostou a moznostami oproti starym 8 bitom. To ze je tiez 8 bit nic neznamena. Atmel dokaze emulovat stary 8 bit a este aj generovat obraz – proste niekolko nasobna rychlost oproti C64, zx …
ATMega na 28 MHz je fakt dělo, ale takový 8051 na 12 MHz se celkem vyrovná Z80 na 4MHz, dokonce i dobou svého vzniku :-P