30/04/22

Jemná, grafická sila - Amiga, SNES, Megadrive

Amiga 500 má 7Mhz CPU, a ak necháte všetku prácu iba naňho, tak to dopadne v hre takto - ROLLING THUNDER. Je zjavné, že tie 2D "friendly" bitplány, HW sprajty, DMA, Blitter, Copper a Paula čip ako HW mixér 4 x PCM audio kanálov v amige nie sú nadarmo. Stargunner /PC/ chcel v roku 1996, to už bola amiga dávno pod kytkami, aspoň i486DX/66Mhz na prašivé rozlíšenie 320x240px a na sľubovaných 60 fps ste potrebovali zjavne Pentium, keď mám veriť odporúčaným špecifikáciam /ja som to hral na P133ke/. No a potom tu máme nintendo konzolu SNES s 3.5Mhz CPU /!!/, na ktorom v 1995 hladko bežala beštialita Rendering Ranger R² /mix Turricana a generickej SHMUP od chlapíka, vtedy 30 ročného nemca Manfreda Trenza, čo robil práve tie Turrrican hry/. Očividne pri architektúre tej konzoly mysleli na hry a nie na Excel tabuľky. No a nejaký ten špinavý HW trik /je ich tam more/, čo tá mašinka dokáže vám teraz ukážem.

Ak hovoríme o starých herných systémoch, tak tu bola snaha mať kvalitný DMA /Direct Memory Access/ systém. Kus silikónu, ktorý riadi IOP operácie nezávisle od CPU. Enormne teda šetrí pracovné cykly procáku na iné veci. SNES DMA obsluhuje na prvom mieste potreby nenásytnej grafickej karty /PPU/, ktorá veľmi intenzívne s RAM pracuje. SNES DMA má 8 kanálov a každý nezávisle presúva dáta z hlavnej RAM do registrov grafickej karty alebo naopak. Dokonca je možné využitím WRAM portu na PPU realizovať rýchle presuny iba v rámci hlavnej pracovnej "CPU" RAM /128KB pre CPU, 64 KB pre grafiku, 64KB pre audio/. A keď vám to nič nehovorí, tak to veľmi pripomína Blitter funkciu amigy /presun dát v hlavnej RAM bez asistencie CPU/.

DMA je tak rýchle preto, lebo ide o úmyselne dizajnovanú HW skratku, keď prenesenie jedného bajtu trvá iba 8 pracovných master cyklov, zatiaľ čo pri použití CPU inštrukcie /klasika ako LOAD IN. OUT/ to na SNESe trvá aj 10 krát dlhšie - dostať niečo z RAM do GPU a dokonca 56 cyklov presunúť niečo niekam v samotnej pracovnej "CPU" RAM. Rýchle a dobre navrhnuté DMA je teda alfa a omega výkonu SNES, Megadrive ale aj PlayStation 2 či PlayStation 3 /EIB zbernica, DMA SPE radiče/. Nintendo sa však s DMA svojho času pohralo ešte viac.

HDMA SNES režim. H ako horizontálny. Elektrónové vykresľovacie delo behá na CRT obrazovke po riadkov od vrchu až nadol a HDMA tento pohyb otrocky nasleduje. SNES je teda schopné modifikovať dáta /registre jeho GPU - PPU/ v každom riadku a medzi nimi bez asistencie CPU a to mi zas pripomína Copper procák amigy !! Čo s tým v hrách z praktickej stránky ? To si hneď ukážeme a budete šokovaní, čo všetko /vrátane "3D"/ to dokáže simulovať. Technická stránka veci by nebola úplna, ak by som nespomenul, že HDMA je možné kombinovať s vertikálnym IRQ /interrupt request, riadené s CPU/. Obraz je sieť pixelov v oboch osiach, takže sa žiada mať patričné schopnosti v oboch smeroch. Tretím je alfa /prekrytie vrstiev do hĺbky, SNES je extra dobre vybavené/ alebo Z-buffer na 3D mašinách, ale týmto teraz situáciu nebudem komplikovať.

 SNES - HDMA demo ukážky

Príklady /video vyššie/. Farebný gradient. Určite ste si v mnohých amiga hrách všimli duhové prechody na pozadí. Banalita. Copper amigy bez pomoci CPU mení per riadok farebné registry počas toho ako CPU a GPU vykresľujú postupne obraz. Možno dokonca takto na obraz dostať aj viac farieb, než koľko systém oficiálne podporuje. Okienkovanie. Toto sa vysvetľuje trochu krkolomnejšie, ale vedzte, že HDMA už keď tu zmenu urobí, tak tá beži po celom riadku až do konca. Čo však, ak potrebujeme, aby v polovici riadku HDMA akciu prerušilo a po mikrosekunde zas pokračovalo. Na toto slúži "maskovanie" riadku "okienkovaním" a nebudete veriť k čomu je to v hre dobré /neskôr bude herná ukážka/. Horizontálny skroling /sínusová krivka/ a mozaika, ktorá vyzerá ako "zoom" textúry v DOOM engine. To som napovedal až príliš.

SNES  - HDMA v hrách

Herná prax- video. Axelay od 00:30 - známa to SHMUP strieľačka, ktorá ohuruje zvláštným pasážami s vertikálnym skrolingom, ktoré vyzerajú ako keby pod vami rotovala paralaxne a v 3D matička zem. Zdanlivo textúra na válci. Na prvý pohľad ide o grafický mód 7 SNESu. Avšak nie je tomu tak. Tento grafický režim neumožňuje použiť naraz viac ako práve jednu jedinú vrstvu a nej už iba sprajty. Axelay používa HDMA na modifikovanie grafiky po jednotlivých scanline riadkoch a vytvára ilúziu 3D priestoru a otextúroveneho sveta a tiež to použili na tu "hmlu" na horizonte a farebné gradienty. Všetko bez asistencie CPU. Jim Power: The Lost Dimension in 3-D od 05:56 - pri boss súboji je tam bubák čo rotuje a zoomuje vo veľkom štýle, ten naozaj beží v mód 7ke, potom by ale v pozadí nemela byť žiadna ďalšia grafika, iba čierna tma. To sa zjavne nestalo. Opäť to zachránilo HDMA a dostanete tam aspoň farebný gradient alebo jednoduchú, skrolujúcu "3D" zem v ďalšom súboji. Onizuka Katsuya Super Virtual Boxing od 11:15 - úplne rafinovaná finta G. Okolo bojujúcich postáv sa točí "3D" aréna. Nemôže isť o mód 7, lebo tých vrstiev je tam príliš veľa. Takže opäť HDMA s "okienkovým" maskovaním. HDMA urobí modrý farebný gradient a potom vystrihne "diery" v riadkoch tak, aby sa zdalo, že sa gradient - aréna deformuje a rotuje v 3D. Brilantné. The Adventures of Batman And Robin od 14:39 - kopa veľmi pôsobivých 3D efektov, ktoré všetky vznikli iba vďaka šikovnej manipulácií PPU registrov via HDMA. A malé SNES demoscene demo na koniec. Je to naozaj iba zmena zopár PPU parametrov, trochu HDMA a tie gfx veci sa tam deju doslova samé a bez veľkej intervencie CPU.

Megadrive. Prišiel na trh o 2 roky skôr ako SNES a mal by byť tak o pol generáciu "zastaralejší". Má DMA, nemá HDMA režim, má však takmer 8Mhz CPU a je teda v tomto smere výrazne rýchlejši ako SNES. HDMA na SNES si mení registre v PPU /v grafickej karte/ medzi riadkami rýchlo a bez väčšej námahy. Megadrive dokáže niečo podobné so svojim VDP /to čo PPU pri SNESe/, ale potrebuje občas aj asistenciu CPU /via IRQ/, ktoré síce je rýchlejšie ako pri SNES, ale nie až tak, aby to dokázalo s tak jemnou granularitou. MD dokáže teda to isté ako SNES len trochu "hrubšie" a pomalšie. Viď mód 7 ala SNES na MD alebo Axelay skroling ala SNES aspoň v podobe grafického dema. Iba jedna veta o chystanom ZX Spectrum Next - tam sa pracuje "na všetkom". Špeciálne inštrukcie, špeciálne DMA, pseudo Blitter, IRQ, Copper režimy a spolu s fillrate väčším ako Amiga 500, SNES a Megadrive dokopy, by to malo aj niečo zaujímavé ukázať. Až to teda bude hotové. Snáď o rok. Možno.

11 comments:

  1. Ten Rolling Thunder bude asi port z Atari ST. Nemá to ani jemný scroll, přitom to by měla Amiga dávat téměř automaticky...

    ReplyDelete
    Replies
    1. ... povodne je to arcade hra co bezi na tomto - https://www.system16.com/hardware.php?id=522 .. vyslovene HW ako z "atari XL" .. hra na Atari ST tiez bezi priserne .. jeden koder z amigy povedal, ze to pouziva super na CPU zatazujuce rutiny .. proste to asi speci gfx HW uplne ignoruje.

      Delete
    2. Známe známe... běželo to v každé druhé maringotce na pouti...

      Delete
    3. ... arcade verzia bezi ako dabel, sprajty lietaju ako splasene .. tu arcade grafiku zjavne nasekali do registrov v nejakych diskret. chipoch a pri Amige to hodili na motorolu a islo sa domov a to CPU klaklo.

      Delete
  2. Určitě jeden z hlavních důvodů proč 16-bitové konzole nedokáží vykreslit více sprajtů než je "šířka obrazovky" je právě fakt, že je to vše "napevno zadrátováno" a je předem stanovena maximální propustnost a cache... Jak jsem psal v minulosti, ty konzole jsou optimalizované pro specifický typ her... Jak tam chceš dělat něco zcela odlišného tak naráz musíš kličkovat jak šílený... Mega Drivu chybí hlavně smysluplný sample playback, to jak to tam je implementováno je nedostatečné... Chybí mi konzole z 80. let co by na věci šla úplně odlišně a byla na htrhu úspěšná... jeden z kandidátů - Atari 7800 byl bohužel nedopečený (audio) a hlavně tržně zaříznutý při zrodu... Takže tu máme všemohoucí ZX Spectrum s jeho DIY filozofií LOL

    ReplyDelete
    Replies
    1. ... este aj dnes cumim na amiga bitplany, lebo to je priam drakonicke sa prispobenie maximalnej efektivite pri spracovani 2D grafiky, skrolu, vrstiev .. velmi velmi specializovane .. s uplnym vynechanim chunky modu pre 3D grafiku .. na druhej strane je PS1, kt. je primarne 3D konzola ale rafinovane je poly engine upraveny tak, aby sa vedel zmenit na elegantny quad sprite engine.

      ... ale je to ako hovoris .. v case amiga 500 nejaka 16Mhz motorala 68000 s univerzalnejsim gfx jadrom a kodovanim farieb .. s max. fillrate a DMA .. viac univerzalnejsie, jednoduchsie brute force pristup.

      ... blitter je na A500 nevyhnutny ale Amiga 030 uz vie blitovat RAM rychlejsie aj bez blitera atd. atd.

      Delete
    2. Jistě Playstation, ale to je až rok 1994... Ale teď už jinde jsme, je to jiná vesnice!

      Delete
    3. ... atari jaguar z 1993 je taky posledny "2D" vlak, kt. je ale tak univerzalny a graficka cast mocna, ze zvladne aj zakladne 3D /DOOM, flat polys, aj nieco otexturovane/ lebo gfx jadro je tak mocne a univerzalne.

      https://youtu.be/UjerLVmqc4A?t=248 - "super scaler" ala Jag .. vsetko tam je .. Jag mi vzdy prisiel ako taka mighty univerzalna vysoko taktovana "herna" i486ka s graikou na VL buse, hehe.

      Delete
    4. Jo Jaguar, ale zase se to nechytlo, a ten ovladač... A nějaké serious bugs in HW as well...

      Delete
  3. Ten Stargunner jsem hrával, na gamepadu Quickshot. Čert ví odkud jsem to vzal, asi z internetu po nějakém tehdy ještě ne googlení "pc arcade shooter" a přenášení na 20 disketách, musel to být rok 1998 a mé nové Pentium 166 MMX a S3 Trio 64 V2 DX/GX to myslím dávali full speed. Jakože nebyla to nejhorší střílečka ale na 16-bitové arkádovky jako ty od Capcomu, Irem apod. to furt nemělo...

    ReplyDelete
    Replies
    1. ... Stargunner som bral ako amiga Project X tribute, nie ako wannabe arcade hru .. ale bolo to hratelnejsie ako Project X .. hehehe .. skoda, ze neviem najst ziadne video ako to bezi na nejakej 486/50 alebo 386/40 .. na mojom pentium nebol problem ale chcem vidiet ako sa to trapilo na 386/40, ktora bezi CPU wise minimalne 10 krat nad SNES.

      Delete

**** pre vloženie hypertextového odkazu do komentára použi CSS kód: hyperlink ****