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, Comix Zone, Road Rash ir Earthworm Jim. - 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).
Kaip ir iš kur gauti žaidimų ROM failus?
Norint žaisti bet kurį mėgstamą klasikinį žaidimą mūsų emuliatoriuje, tereikia atitinkamo formato ROM failo. Jei neturite savo originalių kasečių skaitmeninių atsarginių kopijų, patikimi ir ilgametę istoriją turintys retro archyvai siūlo tūkstančius legalių retro žaidimų atvaizdų:
- NES (8 bitų): emu-land.net NES / Dendy ROMs – tūkstančiai 8 bitų kasečių žaidimų (
.nes). - Sega Genesis / Mega Drive (16 bitų): emu-land.net Sega Genesis ROMs – 16 bitų arkadiniai perlai (
.bin,.gen,.md). - Game Boy ir Game Boy Color: emu-land.net Game Boy Color Games – nešiojamų konsolių legendos (
.gb,.gbc). - Atari 2600: emu-land.net Atari 2600 ROMs – antrosios kartos pionieriai (
.a26).
Paprasta žaidimo paleidimo eiga:
- Atverkite pasirinktą katalogą paspaudę vieną iš aukščiau esančių nuorodų ir susiraskite norimą žaidimą.
- Paspauskite mygtuką „Download“ – į jūsų įrenginį atsiųs žaidimo archyvą (dažniausiai
.zipformatu). - Išpakuokite (unzip) atsiųstą failą savo telefone ar kompiuteryje – viduje rasite grynąjį ROM failą (pvz.,
zaidimas.nes,zaidimas.bin,zaidimas.genarzaidimas.gb). - Mūsų emuliatoriaus viršuje spauskite „Pasirinkti failą“ arba tiesiog nutempkite išpakuotą failą į įkėlimo lauką – žaidimas pasileis akimirksniu!
Geltonų kasečių era: „Zhiliton“, „Dendy“, „Pegasus“, „Micro Genius“ ir „Terminator“ fenomenas Lietuvoje
Daugumai Lietuvos ir Rytų Europos vaikų dešimtajame dešimtmetyje žodis „Nintendo“ buvo beveik negirdėtas. Oficialios japoniškos Famicom ar vakarietiškos pilkosios NES konsolės dėl ekonominės blokados ir laukinio kapitalizmo pradžios kainavo neįsivaizduojamas sumas. Vietoj jų turgavietes (nuo Vilniaus Gariūnų iki Kauno Aleksoto) užtvindė legendiniai 8 bitų aparatiniai klonai (angl. famiclones), tapę ištisos kartos vaikystės simboliu.
Lietuvoje didžiausiu kultu tapo garsusis „Zhiliton“ (ypač futuristinis, juodas, kosminį laivą primenantis modelis Zhiliton 938). Pavadinimas „Žilitonas“ mūsų šalyje tapo bendriniu žodžiu – juo buvo vadinama absoliučiai bet kokia prie televizoriaus jungiama žaidimų konsolė, lygiai taip pat, kaip kaimyninėse šalyse dominavo drambliuko simboliu pažymėtas „Dendy“ (dažnai rašytas ir kaip Dandy – kompanijos „Steepler“ hitas su modeliais Dendy Classic bei Dendy Junior). Lenkijoje karaliavo legendinis „Pegasus“ (modeliai MT-777DX bei IQ-502), o pagrindinę techninę įrangą daugumai šių klonų gamino Taivano gigantas „Micro Genius“ (modeliai IQ-501, IQ-502, IQ-701). Vakarų Europoje ir Ispanijoje dominavo „NASA“ (garsusis NASA NS-90AP) bei „Creation“ (TP-505), Lotynų Amerikoje – „Family Game“ (Electrolab, Froggy), o vėliau visas turgavietes užkariavo „Ending-Man Terminator“ (Terminator 2 / Terminator 3, savo korpusu įžūliai kopijavęs juodąją Sega Mega Drive).
Kartu su šiomis konsolėmis klestėjo visa neoficiali 8 bitų kultūra:
- Legendinės geltonos kasetės: Ryškiai geltono (rečiau mėlyno ar žalio) pigaus plastiko korpusai su rėkiančiomis etiketėmis ir pasakiškais pažadais: „9999 in 1“, „300 in 1“ ar „9999999 in 1“. Realybėje kasetėje būdavo vos keli tie patys žaidimai (Super Mario Bros., Duck Hunt, Galaxian, Wild Gunman), padauginti per tūkstančius eilučių su skirtingais pradžios lygiais ar personažų spalvų paletėmis.
- Kultiniai turgaviečių hitai: Kiekvienas pultelio savininkas mintinai mokėjo nemirtinguosius „Tankiukus“ (Battle City), „Kontrą“ (Contra), Chip 'n Dale, Darkwing Duck, Adventure Island, Lode Runner bei Circus Charlie.
- Šviesos pistoletas (Zapper): Prijungiamas pistoletas, su kuriuo prie kineskopinio „Šilelio“ ar „Tauro“ televizoriaus buvo medžiojamos antys (Duck Hunt), o šuniui piktdžiugiškai kikojant iš po krūmų, vaikai kęsdavo neapsakomas emocijas.
- Klaviatūriniai mokomieji klonai: Tokie modeliai kaip „Subor“ (Сюбор SB-225) ar vėlesni Kenga, Bitman bei PolyStation (su tariamu CD dangteliu, po kuriuo slėpėsi kasetės lizdas), kuriuos tėvai pirkdavo „mokslams ir programavimui“, tačiau 99% laiko jie tarnavo vieninteliam tikslui – beatodairiškam žaidimui.
Mūsų internetinis emuliatorius palaiko visų šių aparatinių klonų ir originalios Famicom / NES architektūros ROM failus. Viskas, kuo džiaugėtės pūsdami dulkes iš geltonųjų kasečių kontaktų prieš trisdešimt metų, dabar pasileidžia tiesiog vienu pelės spragtelėjimu ar piršto prilietimu.
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į.