По-рано тази година споделихме историята за това как да използваме NES classic тетрис Играчът достигна до „екрана за убиване“ на играта за първи път, активирайки срив след удивително 40-минутно изпълнение от 1511 реда. Сега някои играчи използват този скрийнсейвър – и някои от сложните манипулации на паметта, които позволява – за кодиране на нови поведения в негови версии тетрис Работи върху немодифицирани устройства и касети. Покрихме подобни проблеми при „изпълнение на произволен код“ в игри като Светът на Супер Марио, Хартиен МариоИ Легендата за Зелда: Окарина на времето в миналото. Основният начин за вмъкване на външен код в NES тетрис Той беше Това е публично теоретизирано поне от 2021 г Когато играчите разследваха Декомпилиран код на играта (HydrantDude, който има Навлязох по-дълбоко тетрис Катастрофа в миналотосъщо Той казва Обществото винаги е имало особено добре известен начин как да поеме пълен контрол над нещата тетрисовен).
но Скорошен видеоклип от Displaced Gamers Той пренася идеята от конкретна теория до обща реализация и навлиза в най-малки подробности за това как да получите NES тетрис За да започнете да четете таблиците с най-добри резултати на играта като инструкции към машинния код.
Забавление с контролните портове
Вземете копие на NES тетрис Най-вече възможно поради специфичния начин, по който играта се срива. Без да влизам Много подробности,срив на NES тетрис Това се случва, когато процесорът за резултат от играта отнема твърде много време, за да изчисли новия резултат между кадрите, което може да се случи след ниво 155. Когато настъпи това забавяне, част от контролния код се прекъсва от рутинната програма за запис на нов кадър, карайки го да премине към непредвидена част от паметта Произволен достъп до играта, за да търсите следващите инструкции.
Това неочаквано прекъсване обикновено кара кода да премине към първата стартираща обработка на RAM, където боклукът се чете като код и често води до бърз срив. Но играчите могат да манипулират този скок благодарение на неизвестната мистерия как да го направят тетрис Обработва възможни входове, когато се играе на японската версия на конзолата, Famicom.
За разлика от американската Nintendo Entertainment System, японската система Famicom разполага с два контролера, прикрепени към устройството. Играчите, които искат да използват контролери на трети страни, могат да ги свържат чрез него Разширителен порт В предната част на системата. на тетрис Кодът на играта чете вход от този „допълнителен“ контролен порт, който може да включва два допълнителни стандартни NES контролера С помощта на адаптер (Това е вярно, въпреки че Famicom Имам напълно различна версия на тетрис От брониран софтуер).
Както се случва, областта на RAM тетрис Употребите за обработка на тези допълнителни входове на контролера се използват и за местоположението в паметта на рутината за прескачане, която обсъдихме по-рано. По този начин, когато тази програма за прескачане бъде прекъсната от неизправност, RAM ще запази данни, представляващи бутоните, натиснати на тези контролери. Това дава на играчите потенциален начин да контролират точно къде отива кодът на играта след срив.
Кодиране в таблицата с високи оценки
За метода за контрол на скока на Displaced Gamers, играчът трябва да задържи нагоре на третия контролер и надясно, наляво и надолу на четвъртия контролер (тази последна комбинация изисква известно манипулиране на контролера, за да позволи едновременно насочване наляво и надясно). Това изпраща кода за прескачане в зоната на RAM, съдържаща имената и резултатите за списъка с най-високи резултати на играта, освобождавайки повече RAM, за да може играчът да адресира директно.
Като поставим „(G“ в целевата част на таблицата с най-високи резултати тип B, можем да принудим играта да премине към последно Областта на таблицата с високи резултати, където ще започне да чете имената и резултатите последователно като това, което Displaced Gamers нарича „гол метален“ код, като буквите и цифрите представляват кодовете за операции за NES CPU.
За съжаление има само 43 възможни символа, които могат да се използват в полето за въвеждане на име и 10 различни числа, които могат да бъдат част от висок резултат. Това означава само малка част от Налични инструкции за оперативен код за NES Те могат да бъдат „твърдо кодирани“ в таблицата с високи резултати, като се използва наличната повърхност за атака.
Въпреки тези ограничения, Displaced Gamers успя да кодира кратък кодов фрагмент за доказателство на концепцията, който може да бъде преведен в данни от таблица с висок резултат (A name of '))"-P)'
И второто място с резултат 8,575 в A-Type има голямо значение, в случай че се чудите). Тази проста рутина поставя две нули в първите две цифри на резултата на играта, намалявайки времето за обработка на резултата, което може да причини срив (въпреки че резултатът в крайна сметка отново ще достигне „опасната зона“ на срив, докато играта продължава).
Естествено, липсата на система за пестене на батерии означава, че хакерите трябва ръчно да постигат тези високи резултати (и да въвеждат тези сложни имена) всеки път, когато включат устройството. тетрис На различни акции. Освен това ограниченото пространство в таблицата с най-високи резултати оставя малко място за директно кодиране на сложни програми отгоре тетрисДействителен код. Но има начини да се преодолее това ограничение. HydrantDude Той пише За конкретен набор от имена и числа с висок резултат, които „изграждат[s] Друг Bootloader изгражда друг bootloader, който дава пълен контрол над цялата RAM.
С този вид пълен контрол геймър от по-високо ниво може теоретично да прекодира NES тетрис За пълно отстраняване на грешките при срив. Това може да бъде много полезно за играчи, които са Мъчите се да преминете ниво 255където играта всъщност се връща към тихо ниво 0. Междувременно предполагам, че винаги можете просто Следвайте преднината Светът на Супер Марио com И конвертирайте тетрис вътре Махаща птица.
More Stories
Съобщава се, че Apple работи върху 90Hz Studio Display, iMac и iPad Air
Новото музикално приложение на Nintendo е клонинг на YouTube Music
2027 Pixel Tablet ‘3’ може да има втори USB-C порт