Optimizavimo mirtis: kaip 40 KB pergyveno 150 GB šiuolaikinio kodo šlamštą
Šiuolaikinė vaizdo žaidimų industrija pasidavė nevaldomam techninės įrangos rijumui. Šiandienos AAA lygio projektai iš žaidėjų reikalauja 150 gigabaitų sparčiosios SSD atminties, 40 gigabaitų privalomų „pirmosios dienos“ pataisymų, branduolio lygio telemetrijos tvarkyklių bei agresyvių mikrotransakcijų parduotuvių. Ši tragedija slypi ne fotorealistinių poligonų skaičiuje, o visiškoje inžinerinės disciplinos atrofijoje. Šiuolaikiniai programuotojai nebeskaičiuoja atminties baito tikslumu – kompiuterinio kodo neefektyvumas ir atminties nutekėjimai tiesiog slepiami po brutalia vaizdo plokščių galia ir dirbtinio intelekto kadrų rekonstrukcijos algoritmais.
Palyginkite šį dekadentišką perteklių su 1985 metais. Šigeru Mijamoto (Shigeru Miyamoto) ir Takašis Tezuka (Takashi Tezuka) visą nemirtingąjį Super Mario Bros. sutalpino į lygiai 40 kilobaitų ROM kasetės mikroschemą. Kad suvoktume šį inžinerinį stebuklą šiuolaikiniame kontekste: visa Grybų Karalystė – su fizikos simuliacija, kolizijų nustatymu, personažų animacijomis, 32 pasaulių lygių geometrija ir Kodžio Kondo (Koji Kondo) garso takeliu – užima mažiau vietos nei vienas sekimo slapukas ar GDPR sutikimo lango skriptas šiuolaikiniame naujienų portale. Kasetėje nebuvo vietos tuštybei: debesys ir krūmai naudojo tą patį grafinį spraitą, atskirtą tik alternatyvia trijų spalvų palete. Tai nebuvo kompromisas; tai buvo matematinės elegancijos triumfas, ramiai pergyvenęs kelias vienkartinių žaidimų konsolių kartas.
Geležies fizika: lenktynės su elektronų spinduliu ir 128 baitai RAM
Norint suprasti ankstyvosios kartos konsolių emuliaciją, būtina pamiršti šiuolaikinę kadrų buferio (framebuffer) iliuziją. Kai Džėjus Maineris (Jay Miner) 1977 metais projektavo legendinę Atari 2600 (VCS) sistemą, silicio operatyvioji atmintis kainavo astronomines sumas. Konsolei teko vos 128 baitai operatyviosios RAM atminties (integruotos MOS 6532 RIOT mikroschemoje) ir apkarpytas MOS 6507 procesorius, veikęs 1,19 MHz dažniu. Turint 128 baitus, išsaugoti net vienos horizontalios televizoriaus ekrano linijos grafikos atmintyje buvo fiziškai neįmanoma – standartiniam NTSC kadrui vien monochrominiams taškams reikėtų tūkstančių baitų.
Inžinerinis sprendimas reikalavo grynos analoginės drąsos: lenktynių su elektronų spinduliu (racing the electron beam). Programuotojai privalėjo savo asemblerio instrukcijas idealiai sinchronizuoti su fiziniu katodinio kineskopo elektronų patrankos judėjimu. Kol magnetinė sistema kreipė elektronų pluoštą per fosforu padengtą stiklą 15,75 kHz dažniu, centrinis procesorius turėjo lygiai 76 mašininius ciklus vienai ekrano linijai: apskaičiuoti žaidimo logiką, nustatyti susidūrimus ir įrašyti duomenis tiesiai į televizoriaus sąsajos adapterio (TIA) spalvų bei spraitų registrus, kol spindulys nepasiekė matomos zonos. Vieno takto paklaida reikšdavo ekrano vaizdo plyšimą arba vertikaliosios sinchronizacijos praradimą. Atari 2600 emuliacija naršyklėje nėra paprastas kodo vykdymas – tai nenumaldomų elektronų trajektorijos dėsnių atkūrimas.
1983 metais Nintendo Entertainment System (NES) žengė milžinišką žingsnį į priekį su Ricoh 2A03 lustu (NMOS 6502 branduolys, veikiantis 1,79 MHz dažniu) ir dedikuotu vaizdo procesoriumi Ricoh 2C02 PPU, turinčiu 2 KB vidinės VRAM. Tuo tarpu 1988 metais Sega pradėjo 16 bitų revoliuciją su Genesis (Mega Drive), aprūpinta galingu 7,67 MHz Motorola 68000 CISC procesoriumi, 32 bitų vidiniais registrais, antruoju Zilog Z80 koprocesoriumi bei šešių kanalų Yamaha YM2612 FM sintezatoriumi. Šis architektūrinis šuolis perkėlė žaidimus iš primityvių registrų į tikrą kelių plokštumų aparatinį judėjimą ir dinamišką mastelį.
„Blast Processing“ melas ir 16 bitų konsolių rinkodaros karai
Dešimtojo dešimtmečio pradžioje „Sega of America“ pradėjo vieną agresyviausių ir labiausiai klaidinančių rinkodaros kampanijų skaitmeninėje istorijoje. Žaidėjams buvo kalama į galvas, kad Sega Genesis turi paslaptingą techninį pranašumą – „Blast Processing“, kurio Nintendo SNES niekada nepajėgs pasiekti. Reklaminiuose klipuose žaibiškas ežiuko Sonic bėgimas buvo priešpriešinamas lėtiems Nintendo vežimams, atvirai tyčiojantis iš konkurentų mikroschemų.
Realybėje „Blast Processing“ nebuvo jokia aparatinė mikroschema ar oficiali specifikacija. Tai tebuvo protingas programinis triukas, kurį atsitiktinai atrado programuotojas Martis Francas (Marty Franz), kurdamas Genesis vaizdo plokštės (VDP) programinę įrangą. Įprastai Genesis VDP ekrane galėjo rodyti tik 64 spalvas iš 512 atspalvių paletės. Tačiau Francas pastebėjo, kad nukreipus tiesioginę atminties prieigą (DMA) iš centrinio procesoriaus tiesiai į spalvų RAM (CRAM) vertikaliojo gesinimo impulso (V-Blank) metu, VDP apribojimus galima apeiti ir didžiuliu greičiu „įpūsti“ spalvų duomenis tiesiai į ekraną. Sega rinkodaros skyrius šį siauros magistralės triuką pavertė korporaciniu mitu. Nors pats terminas tebuvo pasaka, Genesis 7,67 MHz Motorola 68000 procesorius grynojo skaičiavimo galia iš tiesų smarkiai lenkė 3,58 MHz SNES procesorių, pelnytai užsitarnaudamas žaibiško arkadinio greičio reputaciją.
Kineskopo (CRT) linijų fizika: kodėl pliki pikseliai 4K ekranuose atrodo klaikiai
Dažnas žaidėjas, pirmą kartą paleidęs retro žaidimą moderniame 4K skystųjų kristalų (LCD) ar OLED monitoriuje, lieka nusivylęs: vaizdas atrodo šiurkštus, kampuotas, plikas ir nenatūralus. Šis vizualinis disonansas kyla todėl, kad šiuolaikiniai skaitmeniniai ekranai pikselius vaizduoja kaip tobulus, mikroskopinius kvadratėlius su peilio aštrumo briaunomis ir vienodu foniniu apšvietimu.
Tačiau 1977–1996 metų vaizdo žaidimų dailininkai niekada nepiešė personažų kvadratiniams skaitmeniniams taškams. Jie kūrė vaizdą, pasikliaudami katodinio kineskopo (CRT) optinėmis savybėmis. Kineskope elektronų spindulys sužadina fosforo taškus, skleidžiančius minkštą, tolygų Gauso kreivės švytėjimą (phosphor bloom). Horizontalios nuskaitymo linijos palieka tamsesnius tarpus (scanlines), o gretimos spalvos natūraliai susilieja, optiškai panaikindamos aštrius kontūrus ir sukurdamos gylio bei tūrio iliuziją. Mūsų integruotas CRT režimo filtras naudoja aparatiniu būdu greitinamus tiesinius gradientus ir subtilią optinę vinjetę, atkuriančią šį analoginį spindulio elgesį ir sugrąžinančią klasikinei pikselių grafikai jos tikrąją estetinę prasmę.
Palaikomos sistemos, failų formatai ir laboratorijos galimybės
Mūsų internetinė retro laboratorija užtikrina momentinį emuliavimą naršyklėje be jokių diegimų ar vėlavimų keturioms esminėms vaizdo žaidimų epochų sistemoms:
- Nintendo Entertainment System (NES, 8 bitų): Palaiko standartinius
.nesROM failus su iNES mapper atpažinimu, cikliškai tiksliu 6502 procesoriaus vykdymu ir 5 kanalų garso sinteze (du stačiakampiai kanalai, trikampė banga, triukšmo generatorius ir DPCM). Integruotoje bibliotekoje rasite tokius šedevrus kaip Battle City, Chip 'n Dale, Contra, Duck Tales 2, Darkwing Duck, Blaster Master ir Mario Bros. - Sega Genesis / Mega Drive (16 bitų): Palaiko
.gen,.mdir.binfailus, emuliuodama dviejų branduolių Motorola 68000 ir Z80 architektūrą su šešių kanalų Yamaha YM2612 FM garsu ir Texas Instruments SN76489 PSG sintezatoriumi. Žaiskite legendinius hitus: Qix Volfied, Aladdin, Mortal Kombat, Prince of Persia, Dune II ir Comix Zone. - Nintendo Game Boy ir Game Boy Color (8 bitų): Palaiko nešiojamųjų konsolių kasečių
.gbir.gbcfailus. Pasižymi taškiniu LCD ekrano atnaujinimo tikslumu, atrankinėmis spalvų paletėmis bei atminties bankų perjungimu tokiems nuotykiams kaip Pokémon, Lemmings ir The Legend of Zelda: Link's Awakening. - Atari 2600 VCS (2-oji karta): Palaiko
.a26ir.binkasečių atvaizdus iki 32 KB su realaus laiko TIA spindulio sinchronizavimu ir klasikiniais arkadiniais žaidimais: Pitfall!, Pac-Man ir Popeye.
Emuliatorius aprūpintas pažangiais įrankiais tiek patyrusiems entuziastams, tiek pradedantiesiems: dinaminis kadrų greičio reguliavimas nuo 0.25x sulėtinimo iki 2.5x turbo pagreitinimo, akimirksniu veikianti pauzė (klavišas [P]), vieno paspaudimo PNG formato ekrano nuotraukos, failų nutempimas pele (Drag and Drop) bei patogus NES valdymo pultelio schemų perjungimas (Z=A/X=B patogus išdėstymas arba originalus NES Z=B/X=A režimas).
Decentralizuoto interneto filosofija: nulis sekimo ir nulis serverio priklausomybių
Šiuolaikinis internetas dūsta po privalomų registracijų, prenumeratos barjerų ir naudotojo elgseną fiksuojančių sekiklių svoriu. Šis emuliatorius sukurtas kaip sąmoninga ideologinė priešprieša. Jis veikia su nuline išorinių resursų priklausomybe: jokių „Google Fonts“, jokių trečiųjų šalių CDN bibliotekų ir jokio skaičiavimo nuotoliniuose serveriuose.
Kai įkeliate ROM failą iš savo kietojo disko, visi duomenys išpakuojami ir apdorojami išskirtinai jūsų įrenginio operatyviojoje atmintyje (RAM) per HTML5 FileReader API ir Web Audio Worklets. Nė vienas jūsų žaidimo baitas, žaidimo laikas ar klavišų paspaudimas neiškeliauja į išorinį pasaulį. Tai greita, saugu, privatu ir ilgaamžiška – tarsi sugrįžimas į auksinę kompiuterijos erą, kai plastikinės kasetės įdėjimas garantavo akimirksniu prasidedantį, niekieno neblaškomą nuotykį.