Žiadne retro, prudko progresívny rock@roll. Kúzlo FPGA. Aj váš AMD Ryzen alebo i9ka si v prototypovom štádiu prešiel touto fázou a je možné ju použiť aj ako definitívu. Ale poporiadku. ZX Spectrum Next - oficiálna kickstarter stránka. Speccy, ZXS, 48K alebo "gumák" je archaický stroj, ktorý sa nikdy nemal stať herným gigantom, zakladateľom iks herných žánrov, nesmrteľnou legendou ale zadarilo sa a prerazil. Košatý príbeh, nie však dnes. Dnes sa totiž snažíme tuto mašinku zachrániť pre večnosť tak, že ju implementujeme do FPGA v podobe ZXN alias ZX Spectrum Next, lebo viete, všetky tie viac ako 35 rokov staré matičné dosky, čipy, kondenzátory, rezistory majú svoju ohraničenú životnosť.
FPGA /Field programmable gate array/ - po slovensky pole logických členov programovateľné užívateľom nie je nič iné ako všeobecný "procesor" bez identity. Ak doňho nenahrajte HW konfiguráciu príslušného čipu je ničim, ak to urobíte môže byť hocičím. Motorola CPU pre amigu, DSP atari falcona, zvukovka SNESu, ten 8 jadrový intel alebo celé to naše ZX Spectrum. Geniálne a reprogramovateľné. Reprogramovateľné a teda si danú HD konfiguráciu ladíme do halelúja. A pretože ZX Spectrum Next je FPGA projekt, tak presne to aj urobíme. Ideme sa v tom vŕtať a vylepšovať. Pokec hlavne o grafike.
Originálne ZX Spectrum – to iba jedno grafické rozlíšenie 256x192 pixel, paleta s 15 farbami. Každý pixel obrazovky však nemôžu mať slobodne jednu z tých pätnástich, namiesto toho je frame rozdelený do 32x24 buniek, každá 8x8 pixel, kde každý tento „atribút“ môže mať naraz v tomto štvorčeku iba 2 farby, ak tam skúsite dať tretiu, tak premaže jednu z tých dvoch a vyzerá to hrozne. Matematicky ide o 6144 bajtov pre pixel grid a 768 bajtov pre „farbu“ a máte video frame v jednej 8KB mem banke. RAM bola vtedy veľmi drahá. Geniálne, rýchle a povestné atribútové kolízie ako bónus.
Iba jedna vrstva grafiky, žiadne HW
sprajty, žiadne scroll registre, teda zabudnite na super plynulý HW skrolling po X/Y
osi či diagonále, žiadne DMA, blitter, copper, proste nič. Všetko ťahá
ako krava pluh softvérovo 8 bit Zilog CPU na 3.5Mhz a je neuveriteľne veľmi náročené z toho dostať dobrú farebnú grafiku bez artefaktov a s aspoň
12.5fps skrolingom, teda ¼ PAL 50Hz frame času. Grafiku by som skôr
definoval ako tile-map based, než bitmap based. Vysvetlíme neskôr.
ZX Spectrum Next /specnext/ – jedna z prvých
verzií jeho nového grafického FPGA jadra priniesla ďalšiu
vrstvu grafiky nazvanú Layer 2 /legacy mód nech je Layer 1/. L2 je plne bitmapová mapa, žiadne bitplán blbosti ala amiga, full frame veľkosti 256x192 pixel s 256 paletou, kde každý
bod môže niesť ľubovoľnú farbu z tejto 8 bit palety. Z 6912
bajtov pôvodnej
grafiky je však zrazu 49 152
bajtov /staré speccy gumák má presne toľko pamäte pre všetko: kód, audio, grafika/. Tento 8 násobný nárast dát je
ohromný vo svete osembitov a CPU to len tak bez pomoci nezvládne a kdeže je ešte double buffering teda
2x48KB. Monštruózne.
Museli teda pribudnúť HW scroll registre, neskôr aj špeciálne nové inštrukcie /niečo ako MMX ala pentium/, DMA – priamy prístup do pamäte bez asistencie CPU a
pôvodný kmitočet CPU sa z 3.5Mhz navýšil na 7Mhz. A verte mi, že to len tak tak stačilo. Jadro sa teda ladilo ďalej. Paleta išla z 256
na 512 farieb /9 bit/ a CPU na kombinovaný 14/7Mhz režim.
HW Sprajty. Veľká zmena. Sprite
engine zvládal 64 x 256 farebných HW sprajtov o veľkosti 16x16 pixel naraz na ploche, tvrdý limit 12 sprajtov na scanline riadok. Sprite pixel výkon
na štandardný 256 pixelový riadok bol teda iba 192 sprite pixelov /12x16/, sprajty nevedeli pokryť celú jeho šírku. K sprajtom sa neskôr
dopracovala schopnosť ich zrkadlenia, farebného offsetu a rotácie
okolo osi po 90 stupňoch bez asistencie CPU. Ešte neskôr aj rozšírená
kontrola nad line-interuptom.
staré, neaktuálne ZXN jadro - obligátne Shadow of the Beast tech demátko
/mixuje L2 v popredí a Low Res layer v pozadi/
/mixuje L2 v popredí a Low Res layer v pozadi/
Keď sa to všetko nahádzalo na
plochu, tak to už vyzeralo ako malá amiga ale malo to kopu hrubých
hrán a príliš veľa brute force prístupu, aj niekoľko
drakonických obmedzení na strane sprite enginu /12 HW sprajtov na
scanline im prišlo málo, amiga má 8 a megadrive zas 20/. Ukážka HW a softvérových sprajtov specnextu naraz, aby sa obišiel HW limit na scanline.
Nakódoval sa tam aj copper procesor
ala amiga. Ide o zvláštnú vecičku, ktorá bez asistencie CPU vie
per scanline alebo uprostred neho meniť napríklad aj tie grafické informácie. Umožňuje
teda mať na ploche grafiku v rôznom rozlíšení, rôznej
palete, sprite multiplexor /jeden sprite „rozmnožíte viacnásobne
po celej ploche“/ a mnoho mnoho ďalšieho. Spolu s DMA vie do systému pustiť aj plne digitalizovaný audio stream /bežné nekomprimované PC WAVko, ZXN je defaultne nalepené na úložisko v podobe SD flash karty, na MG pásky zabudnite/.
Chvíľu bol pokoj a
potom prebral nad jadrom kontrolu iný človiečik dev tímu, ďaleko talentovanejší a sprite
engine sa kompletne prepracoval. Z 64 HW sprajtov je ich zrazu 128 !!, schopnosť mixovať 4 bit a 8 bit sprajty, teda 16 a 256 farebné, HW škálovanie
veľkosti sprajtov 2-4-8 krát po oboch osiach, otravný sprite limit na riadok
technicky padol !!, po novom scanline znesie aj 100ku sprajtov, teda
1600 pixelov na 192 pixelový riadok, čo je už vysoko prevysoko nad
možnosti akejkoľvek nenaturbenej amigy vátane Sega Megadrive.
novšie "2.x" jadro - mohutné scroll paralaxy, všetko čo vidíte sú vlastne sprajty,
tie vrstvy, stovky a stovky sprajtov
tie vrstvy, stovky a stovky sprajtov
Sprajty inak vedia
lietať po väčšom priestore než základných 256x192, konkrétne 320x256 a nový engine z
nich umožňuje urobiť aj niekoľko celo-obrazových vrstiev grafiky. Takže sa
blíži mohutné paralaxovanie. Malé zmeny sa robili aj na starej
legacy "atribútovej" grafike, proto-verzia HW skrolingu, tiež špeciálne
inštrukcie pre zrýchlenie vykresľovania grafiky, extra ULA Next paleta a
špecialny lores mód 128x96 /Radastan, to aby sme boli kompatibilný so
všetkým možným už vymysleným/.
Nezastavujeme, ešte
to chce riadne máknuť. Bitmap grafika s
48 kilovým videobufferom je príliš ťažkotonážna, takže tu bol
veľký tlak na tile-map based grafiku. Teda obrazovka, grafika
vytvorená z dlaždíc /v prípade specnext tu je priestor na 512 tiles plus rotácie, mirror, offset/ z ktorých si
tu hernú grafiku poskladáte ako to robil NES, SNES, Megadrive. Celý tile-map frame má do 12 kilo, je extrémne
rýchly a môžte ho kombinovať s bitmap based L2 vrstvou. V čiste
tile-map móde sa vyšplháte až do hires rozlíšenia 640x256
pixelov, jednotlivé dlaždice majú každá vlastnú 15 farebnú vlastnú paletu + alfa z celkových 512 farieb /a copper procák vám dokáže tých 512 farieb dostať naraz na ploche, žiaden problém/. Už to nie je amiga, či megadrive ale
plne vybavený, malý domáci arkáde systém.
Koniec ? Absolútne
nie. Najnovšie, ešte experimentálne, "3.x" jadro je tak čerstvé, že nie je ani
zdokumentované. Ide však
o totálne prepracovanie všetkého doterajšieho so
stovkou úprav. Napríklad takt CPU je už
plných 14/14Mhz /border, plocha/, DMA detto na 14MHz, bitmap grafika už môže ísť aj
do 320x256 rozlíšenia bez sprite trikov /dobre pre adventúrky ako Monkey Island/,
nové špeciálne tile-map módy. Stará grafika, tá originálna, má
už aj jemný HW
pixel scroll. Copper procák išiel z 14 na 28Mhz a dáva tuším
20MIPS, takže rýchlosť svetla. A špeciálna pozornosť venovaná
návrhu spojenia - zbernice medzi specnext jadrom a vnútornou „turbo kartou“
ležiacou na akceleračnom porte. Niečo ako tie 030/50ky pri tých starých
amigách pod padacími dvierkami. V specnext tam je štandardne RaspPi Zero na 1GHz s vlastnou 512
mega RAM a so slušnou OGL 3D grafikou. Možnosti totálne nekonečné. Najnovšie sa to dá použiť aj jako zvukovka /amiga, PC, C64 audio formáty,
mp3, ogg .. čo len chcete/ a mixuje sa to podľa voľby ku vlastnej zvukovke specnextu /9 kanálový AY čip/.
Celý projekt teda
začal jako klasické ZX Spectrum v FPGA forme s diskrétnymi úpravami /statická 256 grafika v pozadí/ a po 2
rokoch bavkania prevalcoval postupne Atari ST, AMIGA 500, Megadrive a
je to dnes technicky mladší brat Neo Geo. Z podstaty FPGA vyplýva, že sa mašina môže a bude ladiť ďalej, hlavne DMA radič potrebuje ešte trochu pomôcť. Zoznam požiadavok vývojárov je tiež dosť dlhý. Kapacita FPGA alebo jeho vlastnej BRAM nie je nekonečná, niekde sa proste zastaviť nakoniec musíte. Nepýtajte sa ma na reálne, hrateľné ukážky /WIP port z PC/. Systém je objektívne báječne výkonný /CPU, GPU, RAM, SD mechanika/ a hra ktorá ho plne vyťaži preto zákonite bude drahá na človekohodiny a kapitál. Veľkosť uživateľskej základňe je na rečnícku otázku. Štandardné limitujúce faktory. SpecNext zvládne Metal Slug klony, Turricana, Raymana, Dune 2 dokonca aj jednoduché 3D veci alebo nejakého FPS Wolfika, Ultimu Underworld v "malom okne", kto ich však urobí, že áno.
FPGA scéna je dnes mimoriadne silná. Viď Megadrive v tomto formáte, Amiga Vampire, MISTer. Pred sekundou pribudol aj "Gameboy". Dostatočné veľké FPGA, ktoré kapacitne pokryje všetky vaše potreby aj s prislušnou matičnou doskou a konektormi máte za cca 130 euro. Na opačnom konci máte super high end za 31 000+ euro. Učiť sa špeciálny programovací jazyk začnite už dnes /VHDL, Verilog/.
Konečne odpoveď na otázku - SW alebo HW ? Laickým konzumentom je to šumafuk. Purista a nerd volí FPGA. Duch hardvéru je pomocou FPGA zachytený najviac podobne originálu. Praktické hľadisko vyzerá následovne. Na HW emuláciu Spektra alebo SNES na 3.5Mhz vám stačí FPGA čo žerie 2-4 watty a beží na 3.5Mhz. Na 7 megahertzovú amigu rovnako taktované FPGA. Rozumiete. Výrobca to vyrába na 28nm procese /na 7nm to tak skoro nebude a na 14nm si to môže dovoliť iba Intel a je to drahé/. Ak si pozriete PCB specnext uvidíte, že to FPGA tam leží nahé, ani len ten pasív, pliešok hliníkový, nič. Nenáročné. Pri SW emulácii to chce aspoň 45-65 wattové niečo od Intel/AMD so sakra vysokým výkonom na jedno vlákno a patričné chladenie. Osobne vidím ako súperov v hobby segmente dva tábory - FPGA /HW emulácia/ a šikovné RaspPI /SW emulácia/. Pikoška - RaspPI Zero /utiahne hravo Quake 3/, ktoré sa nachádza vnútri specnext ani omylom nestačí na jeho úplnú a presnú emuláciu v reálnom čase.
No comments:
Post a Comment
**** pre vloženie hypertextového odkazu do komentára použi CSS kód: hyperlink ****