Преношење Куакеа на Гаме Бои Адванце би изгледало немогуће, али Ранди Линден је успео да то изведе. Ево како.
Гаме Бои Адванце је ручна играћа конзола коју је креирао Нинтендо. Објављен је у Јапану 2001. године и служио је као наследник Гаме Бои Цолор-а. Имао је АРМ7ТДМИ такта 16,78 МХз, 32 кб интерне радне РАМ-а, 256 кб екстерне РАМ-а и 96 кб ВРАМ-а. Није најмоћнија машина, али постоји много игара за ручни рачунар које многи држе у лепом сећању. Једна игра која никада није угледала светлост дана за овај уређај била је прототип порта Куакеа, игре коју је развио ид Софтваре која је помогла да се дефинише жанр пуцачина из првог лица који данас познајемо.
Куаке је невероватно детаљна игра са фантастичним звучним записом и игром која изазива зависност, и баш као и ДООМ, портована је на практично сваки уређај којег можете да замислите. Његов порт за Гаме Бои Адванце је посебно невероватан јер изворно не подржава 3Д графику, а Нинтендо је посебно рекламирао ручни уређај као дводимензионално искуство играња. То ипак није спречило Рендија Линдена да развије сопствену луку.
Ако нисте упознати са Линденом, он је најпознатији по томе што је програмер оба блеема! (ПлаиСтатион емулатор) и СНЕС порт за ДООМ, достигнуће које је Џон Ромеро, суоснивач ид Софтваре-а, једном рекао у интервјуу за Схацкневс није мислио да је могуће. Линденова стручност у развоју је доказала да ако ће неко моћи да оствари Куаке на Гаме Бои Адванце-у, то је вероватно он.
Ова лука је изашла на видело захваљујући Линденовом сопственом издању кроз пројекат Форест оф Иллусион. Форест оф Иллусион је пројекат који има за циљ очување историје Нинтендоових игара, а Линден посегнуо како би дистрибуирао копију Куаке порта који је пронашао на флеш картици од 256 МБ у својој поседовање.
Желели бисмо да се захвалимо Рендију Линдену што је посветио време да одговори на наша питања и обезбеди техничку тачност овог чланка. Такође желимо да се захвалимо Модерн Винтаге Гамер јер нам је дозволио да користимо све потребне фотографије из његовог видеа. Овај порт нема званичну везу са ид Софтваре-ом или ЗениМак-ом и развијен је као соло пројекат од стране Линдена.
Куаке-ов Гаме Бои Адванце порт
Технички гледано, чудо је да Куаке може чак и да достигне ниво који ради на Гаме Бои Адванце. Ради са добром брзином кадрова и одржава исправно осветљење и палету боја оригиналне Куаке игре. Све је 3Д, укључујући оружје и чудовишта. Игре на Гаме Бои Адванце-у су постигле 3Д графику обично кроз спријтове, али ово је била права ствар. Не користи бацање зрака на начин на који су то радиле друге 3Д игре на ручном уређају, а чак постиже поенту светлосни ефекти на унапред приказаним објектима помоћу трика промене палете да би се постигла илузија динамике осветљење.
Да будемо јасни, овај порт није потпуна игра, и то је прототип који је Линден намеравао да пренесе на ид Софтваре након што буде завршен да би био направљен за објављивање. Међутим, популарност Гаме Бои Адванце-а почела је да опада, а уместо тога, прилагођени мотор који је написао Линден касније је постао мотор друге игре коју је Линден у потпуности развио - Цибоид. Линден нам каже да је „велики део кода“ и даље оригинални АРМ код из верзије Гаме Бои Адванце. Ако желите да испробате Цибоид, старија верзија је доступна у Гоогле Плаи продавници, али званични АПК се сада дистрибуира на Амазон Апп Сторе пошто игра има много 32-битног кода ниског нивоа.
Цена: бесплатно.
3.3.
Линден је такође поделио са нама видео снимак свог кода који ради на иПод Видео-у, који је служио као једна од најранијих верзија Цибоида. Направљен је на истом коду мотора који је коришћен за његов Куаке порт на Гаме Бои Адванце.
Порт Куаке за Гаме Бои Адванце не садржи ниједну званичну имовину игре, као што Линден није контактирали или ид Софтваре или ЗениМак о дистрибуцији Е1М1 верзије која садржи званични Куаке средства.
Игра која се тренутно дистрибуира је такође верзија за отклањање грешака. Држање тастера Р при покретању ће довести играча право на другу мапу игре, а држање лево на Д-паду ће их довести до треће. Замена мапа се такође може приступити када играч умре, а чудовишта неће напасти играча све док играч први не пуца на њих.
Што се тиче музике, демо користи јавне .С3М датотеке, а миксер звука рукује и стерео музиком и звучним ефектима.
Техничке границе
Постојале су бројне границе када је у питању Гаме Бои Адванце због којих је ово била тешка лука. Неке од највећих препрека биле су ниска брзина такта, недостатак 3Д графичких могућности ручног уређаја и недостатак јединице с помичним зарезом (ФПУ). Било је доста других на путу, али то су биле посебне болне тачке које ми је Линден навео као проблематичне. Пре него што уђемо у то, важно је разумети изглед Гаме Бои Адванце.
Гаме Бои Адванце има три сета РАМ-а – један је интерни радни РАМ (ИВРАМ), други је спољни радни РАМ (ЕВРАМ), а трећи је видео РАМ (ВРАМ). 32 кб ИВРАМ-а се користи за складиштење АРМ инструкција за брзо извршавање, док је 256 кб ЕВРАМ-а оптимално за чување инструкција само за палац и мањих комада података. Као Родриго Копети примећује, ЕВРАМ може бити до шест пута спорији за приступ од ИВРАМ-а. Већина меморије у облику ЕВРАМ-а доступна је само преко 16-битне магистрале, упркос томе што се Гаме Бои Адванце продаје као 32-битни ручни рачунар. ИВРАМ-у се могло приступити преко 32-битне магистрале. ВРАМ на Гаме Бои Адванце-у има 96 кб, и иако је првенствено за складиштење графичких података, налази се у меморијској мапи ЦПУ-а и може се користити и као нормална меморија.
Палац инструкције су подскуп 32-битних АРМ инструкција и представљају скуп инструкција кодираних у 16-битне речи. Имају све предности 32-битних инструкција без заузимања толико простора, што их чини ефикасним за оптимизован развој. То значи да иако је ЕВРАМ спорији за приступ, Тхумб инструкције које су ефикасне често и даље могу завршити једнако брзо као и АРМ инструкције које се чувају у ИВРАМ-у, иако је лоша страна инструкција Тхумб то што понекад не постоји баш Тхумб еквивалент АРМ инструкције коју желите извршити. ЕВРАМ је коришћен за чување излаза логике 3Д математичке трансформације која је у основи била листа ивица полигона које су затим скениране линију по линију помоћу кода за растеризацију.
Како ми Линден каже, најкомплекснији и најтежи део читавог порта био је сцанлине рендерер. Састоји се од преко 10.000 линија високо оптимизованог АРМ склопног кода који је дизајниран да увуче скуп пиксела у ВРАМ. Рендерер за скенирање је искористио већину ИВРАМ-а од 32 кб. Ивице најближе камери су активне и приказане, а у суштини је то велико стабло бинарног партиционисања простора (БСП). ВРАМ је коришћен за складиштење резултата полигоналне трансформације у ивичне табеле јер није било довољно ИВРАМ-а, али је ВРАМ на Гаме Бои Адванце-у и даље бржи од ЕВРАМ-а. Графика је такође сачувана и приказана овде.
Провео је доста времена фокусирајући се на оптимизације како би осигурао да је у стању да добије најбрже могуће време извршења. Три ствари које је урадио да би убрзао то време извршења су следеће:
- Само-модификовао је код пре него што је извршен, тако да је било потребно мање инструкција
- Користио је низ табела за тражење ствари као што су реципрочни, синусни, косинусни, тангентни итд.
- Променио ЦПУ „режим“ да би добио приступ додатним регистрима (који су као „променљиве“) без потребе за чувањем и враћањем вредности регистара.
Пребацивање ЦПУ режима ради добијања додатних регистара је невероватно паметан маневар који омогућава брз приступ вредностима близу ЦПУ-а тако да се оне могу преузети у једном циклусу такта. Као што ми Линден каже, било је могуће променити регистре и добити вредност у једном циклусу такта, за разлику од чувања вредности у РАМ меморији Гаме Бои Адванце-а, што траје дуже. Сам ЦПУ је процесор од 16,78 МХз, што значи да може да изврши 16780000 циклуса у секунди. То звучи много, али када треба да израчунате и нацртате сваки пиксел на екрану, они се брзо сабирају и постаје важно да обријете што више операција.
Горе је листа општих регистара АРМ7ТДМИ чипсета који се налази унутар Гаме Бои Адванце. Типично, програмери би икада приступили регистрима само у режиму „Систем и корисник“ и прибегли коришћењу нормалних променљивих ван тога. Међутим, користио је регистре у свих седам модова чипсета, а најбољи део у томе је да преклопни режими и даље задржавају вредности у регистрима осталих режима, тако да је могао да прелази између њих.
Забавно, Линден је такође поменуо како је његов метод промене банке открио грешку у емулатору Нанобои Адванце. Како се испоставило, тај емулатор није подржавао коришћење других режима ЦПУ-а за чување у регистрима и пребацивање, а његов Куаке демо је била прва позната игра која је то заиста урадила.
Линден је са нама поделио фотографију неких белешки које је направио и објаснио како је оптимизовао своје прорачуне са покретним зарезом у недостатку одговарајућег ФПУ-а.
Горња слика је она коју је Линден поделио са нама из својих белешки, а оно што је посебно интересантно је „разне инструкције АРМ циклуса се рачунају“. Осмислио је начин да оптимизује циклусе за прорачуне како би могао да смањи број циклуса такта за прорачун. Како ми је то описао, 8-битни број се може помножити у једном циклусу такта, 16-битни број у два циклуса такта, 32-битни број у три такта и 64-битни број у четири циклуса такта. .
„Постојале су две или три фазе извршења [у АРМ процесору]. Рецимо, на пример, помножим регистар један са регистром два и ставим резултат у регистар три. Да сам знао да је регистар два 16-битни број уместо да кажем помножи регистар један са регистром два, окренуо бих га и рекао бих помножити регистар два са регистром један јер би ми то уштедело сат циклус."
Рекао ми је да је разлог зашто је то урадио да би истиснуо сваки део перформанси из Гаме Боиа Унапред, пошто се циклус часовника сачуван ту и тамо заиста сабира када се врши много прорачуна изведена. Што се тиче кода који се сам мења, замолио сам Линдена да то објасни.
„Програм долази из [складишта], преноси велики блок програма у интерну РАМ меморију за извршење јер је бржи. Сваки приступ РАМ-у је много, много спорији, тако да радим ДМА [директан приступ меморији] великог блока из РОМ-а у РАМ, а затим мењам стварни програмски код. На пример, АРМ има могућност да помера операнде лево или десно или може да маскира одређене битове као део скупа инструкција. Инструкција одређује које битове ћете маскирати или за колико битова ћете померити. Дакле, генерисао бих код који би модификовао оно што је управо требало да буде извршено на основу тога колико битова треба да померим. Други пример је у вези са 3Д множењем матрице. Ту је укључена читава гомила множења. Генерисао бих стварне инструкције које врше множење у интерној РАМ меморији, а затим их извршио тако да је код на неки начин направио своје делове док је био покренут."
Само-модификујући код има своје недостатке, посебно када је у питању отклањање грешака. Такође уклања потребу за инструкцијама гранања, где би код скочио на другу секвенцу извршавања и може лишити главну нит драгоценог времена израчунавања. Линден нам је такође рекао да су табеле за тражење савршено поравнате у РОМ-у тако да су савршени вишекратник осмобитне вредности померене улево. Величина табеле за тражење је огромна и не уклапа се у РАМ, а поравнање такође избегава потребу за додатном инструкцијом за учитавање да би се добила основна адреса табеле.
Све у свему, коначни прототип је развијен током скоро две године.
Будућност Куаке луке Ренди Линдена
Питао сам Линдена шта ће се догодити са будућношћу Куаке луке, а он ми је рекао да ставља разматра могућност да питате ЗениМак и ид Софтваре о објављивању верзије са званичним Куаке-ом средства. Такође ми је рекао да ће у неком тренутку објавити изворни код, али тренутно се не гради јер захтева старији рачунар.
Питао сам Линдена зашто је одабрао Куаке, а он ми је рекао да воли игру и да воли изазов да је ово „немогући пројекат“, јер је то било иза његовог ДООМ фор СНЕС порта. Такође је напоменуо да иако не верује да је цела игра могла бити портована због ограничења простора, велика већина игре је могла бити у истом мотору.
Ако сте заинтересовани да погледате Куаке за Гаме Бои Адванце, обавезно погледајте његово издање на Форест оф Иллусион, које можете погледати у наставку.
Преузмите из Форест оф Иллусион