Прокачуємо NES Classic Mini

geektimes.ru нещодавно була стаття про те, що «умільці» зламали NES Classic Mini. Однак, там навіть не згадали про те, що це зробили росіяни. Ні, не я, а людина під ніком madmonkey. Я відразу ж вирішив написати програму під Windows з дружнім інтерфейсом, щоб це можна було робити в пару кліків. У цій статті я хочу розповісти більш детально про суть «злому», про те, як NES Mini все влаштовано, і про труднощі, з якими довелося зіткнутися.

І так, я знову пропоную свій виклад у двох варіантах: відео і традиційна текстова стаття. Кому як більше подобається.

Відео


Стаття
Введення
NES Classic Mini. Вона ж NES Classic Edition в США. Досить спірна штука. З одного боку це просто емулятор на лінуксі, який представляє хіба що колекційну цінність, та набагато краще купити яку-небудь Raspberry-Pi. Навіть офіційний сайт нам каже, що це в першу чергу просто хороший подарунок для колекціонерів і гравців, нічого більше.

З іншого боку, це все-таки готове рішення, яке має звичний дизайн, оригінальні контролери і працює прямо з коробки на сучасних телевізорах, що ще потрібно пересічному користувачеві?

Суперечок на цю тему багато, але з одним згодні всі — вбудованих тридцяти ігор явно мало. Хай там зібрані і найвідоміші хіти, але дуже не вистачає можливості додавати або, що було б логічно, докуповувати інші ігри. Особливо для жителів Росії, де в 90ті панувало піратство, і популярні у нас були зовсім інші ігри. Пірати не завозили до нас багато хіти, зате познайомили нас, наприклад, Battle City, яка за межами Японії офіційно не виходила, але в Росії стала напевно навіть більш впізнаваною, ніж Маріо.

Після виходу консолі було багато спроб виправити цю ситуацію, я теж намагався це зробити, але моїх мізків і знань Linux явно не вистачало. Так, я розібрав консоль і подпаялся до UART висновків, але туди мовить тільки завантажувач консолі Linux там немає. Так, за інструкціями з Інтернету я зміг запустити на ній власну збірку Linux, але доступу до внутрішньої NAND-пам'яті таким чином я не отримав.

Так і припадала пилом у мене ця консоль без діла, поки в один прекрасний день чоловік під ніком madmonkey не зламав NES Mini. Найцікавіше, що для злому не потрібно нічого ні ми, ні розбирати. Все робиться через підключення консолі через micro-USB роз'єм, який призначається для харчування. Робиться це звичайним micro-USB кабелем, який йде в комплекті. Справа в тому, що NES Mini побудована на основі процесора від Allwinner, а у них передбачений так званий FEL режим, який використовується для налагодження і прошивки по USB. На різних пристроях в цей режим можна перейти по-різному, і у випадку з NES Mini потрібно просто натиснути кнопку RESET під час включення. Зробивши це, можна з допомогою спеціальної програми читати оперативну пам'ять, писати її і запускати код на виконання.

Як працює «злом»?
Грубо кажучи, захисту-то ніякої немає, якщо не вважати той факт, що більша частина NAND зашифрована, але ключ при цьому лежить у відкритому вигляді в незашифрованому частині пам'яті. При цьому на офіційному сайті Nintendo можна знайти вихідні коди завантажувача. Так, згідно з ліцензією GPL Nintendo зобов'язана викладати вихідні коди своїх розробок. Так madmonkey зміг скомпілювати завантажувач, завантажити його в оперативну пам'ять NES Mini, запустити на виконання, прочитати ядро Linux разом з чином RAM-диска і точно таким же способом записати його назад. Далі справа техніки. Madmonkey накидав програму під назвою «hakchi», яка дозволяє прочитати ядро Linux, пропатчити його і зашити назад, в результаті з'являється можливість додавати свої ігри.

Мені відразу ж стало цікаво розібратися, як це працює, щоб навчитися чомусь новому і, бути може, якось удосконалити. Але це виявилося не так просто. Я напевно цілий день витратив, вивчаючи його скрипти, при цьому огризався і гарчав на рідних і близьких при найменшій спробі мене відволікти. Але врешті-решт розібрався. Для мене стало відкриттям, що в Linux можна монтувати одну директорію поверх іншої. Саме монтувати, а не створювати симлинки. Ігри знаходяться на розділі, який доступний тільки для читання. Але при цьому у NES Mini є відносно величезний розділ розміром у 300 мегабайт, який доступний для запису, в ньому вона зберігає збереження ігор і налаштування. Скрипти madmonkey створюють на цьому розділі директорію під ігри, копіюють туди вміст оригінальної директорії і монтують нашу директорію поверх оригінальної на ранньому етапі завантаження системи. У підсумку папка з іграми стає доступна для запису, а оригінальні файли залишаються в цілості й схоронності, що важливо, і оболонка не помічає, що директорію підмінили. Аналогічно можна підмінити і системні файли, відкривши доступ до консолі через UART, що нарешті дозволяє поглянути на всю файлову систему і полегшує налагодження.

Що всередині?
Незабаром я написав простеньку програму, яка через hexdump по UART проводу викачує всю файлову систему. Це досить повільний процес, але дуже вже хотілося подивитися, що там є.

Як я вже сказав, ігри лежать в спеціальній директорії, для кожної гри там окрема піддиректорія з обкладинкою, конфіг і власне ROM'ом гри. Найцікавіше, що ROM'и ці в звичайному ".nes" форматі, і вони ні на байт не відрізняються від тих Romів, які легко можна знайти в Інтернеті. Ви скажете: “Ну і що? Ігри ж однакові, з чого їм відрізнятися?"

Та справа в тому, що формат iNES був розроблений піратами, які першими почали дамп картриджі і писати емулятори. У заголовку iNES файлів використовується нумерація мапперов, яка теж була розроблена піратами. Тут я випав в осад. Ні, я звичайно розумію, що Nintendo простіше завантажити свої ж ігри з Інтернету, ніж шукати десь у себе в архівах прошивки картриджів 30-річної давності. Але я зовсім не думав, що вони так і зроблять. Виходить, Nintendo продає нам піратські копії своїх же власних ігор? Незабаром мені розповіли, що це практикувалося ще на Nintendo Wii. Так і в новинах виявляється є вже невелика галас про це.

Як би там не було, нам це тільки на руку. Якщо NES Mini використовує піратський формат зберігання ігор, значить на ній можна запускати піратські копії ігор з Інтернету без особливих модифікацій. Це, знову ж таки, зробив madmonkey. Я ще дивувався — як же NES Mini визначає маппер гри. Мені тоді і в голову не могло прийти, що з піратських заголовків.

Розробка hakchi2
Але повернемося до того, що я вирішив написати просту і зручну програму для закачування ігор в NES Mini. Аналог тієї, що зробив madmonkey, але таку, щоб, вибачте за каламбур, навіть мавпа могла розібратися. З назвами у мене дуже туго, і саме його програма називається hakchi, то нехай моя називається hakchi2. Як би дивно це не було. Ідеальний інтерфейс я бачив для себе так: зліва повинен бути список ігор з галочками, праворуч — налаштування виділеної гри. Внизу кнопки додати ігор і прошити. Так натиснути кудись не туди або заплутатися буде просто неможливо.



Що ж стосується того, що у програми «під капотом», вона виконує три основні дії:

  • Дампит ядро Linux з NES Mini. Для цього через FEL-режим в оперативну пам'ять консолі завантажується u-boot, йому дається команда на читання даних з пам'яті NAND знову ж таки в оперативну пам'ять, а потім за допомогою того ж FEL ядро читається звідти на комп'ютер.
  • Прошиває в NES Mini модифіковане ядро. Модифікація нам потрібна тільки одна — щоб при завантаженні запускався наш скрипт, якщо він існує. Відповідно це потрібно виконати всього один раз. Процес запису ядра в NAND пам'ять виконується за тим же принципом, що і читання, тільки навпаки.
  • Збирає модифіковане ядро зі скриптами та іграми, але не прошиває його, а завантажує в оперативну пам'ять і виконує. Скрипти при цьому монтують потрібні розділи, записують нові ігри, після чого вимикають консоль.
Для розбирання і зборки ядра я як і madmonkey використовую вже готові програми з набору Android Kitchen. Тобто просто запускаю чужі виконувані файли з потрібними параметрами і в потрібному порядку.

А от сам процес читання і запису пам'яті дещо складніше, і тут краще працювати безпосередньо. Є готові бібліотеки на Сі, а я пишу на C#. Звичайно можна було написати врапперов для unmanaged коду, але я погуглив опис FEL протоколу і вирішив написати свою власну бібліотеку з нуля. Нічого складного там немає, і воно незабаром навіть запрацювало, на мій подив.

Для роботи з Rom я використав уже готові свої ж бібліотеки. Досвідченим шляхом з'ясував, які маппери підтримує вбудований в NES Mini емулятор, щоб програма відразу отсеивала ігри, які не запустяться. До речі, якщо не знаєте, що означає слово «маппер» в даному контексті, почитайте мою статтю про дампинг картриджів NES/Famicom/Dendy.

Потім я зробив можливість змінювати ігор різні параметри, додав можливість вибирати обкладинки і автоматично їх пережимати, додав кнопку для автоматичного пошуку обкладинок в Google, в останній момент вирішив все-таки додати ще й російську мову крім мого кривого англійської. І ось у такому вигляді виклав все це справа в мережу, назвавши версією 2.0. Тому що «hakchi2».

Начебто у мене дійсно вийшло зробити все так, щоб програму можна було користуватися взагалі без будь-якої інструкції, вона сама запам'ятовує, сдампил користувач ядро, прошив він модифіковане ядро, сама каже, що в який момент робити. І hakchi2 дійсно дуже швидко набрала популярність, незважаючи на те, що на неї лаялися багато антивіруси з-за утиліт і драйверів в тому ж архіві. Багато боялися стати частиною російської ботнету.

Найбільш цікаві проблеми і завдання

Windows і установка драйверів

Найскладнішою проблемою на початковому етапі для мене стала установка драйвера. Якщо вже я зважився зробити програму простий, драйвер повинен встановлюватися максимально легко. Мені зовсім не хотілося давати користувачам складні інструкції або посилати їх на якийсь сайт качати окрему утиліту. Я кажу про Zadig.

image

Це відмінний додаток для простої і швидкої установки популярних базових USB драйверів, в нашому випадку це WinUSB. До речі кажучи, не розумію, чому користувачеві потрібно виконувати купу складних дій, і Windows вимагає від розробника цифрового підпису, коли потрібно встановити драйвер безпосередньо від Microsoft. На щастя, у Zadig відкритий вихідний код, та ще й з консольної версією в прикладах. Я швидко зробив з неї простеньку програму, яка при запуску відразу ставить драйвер.

Тонкощі FEL протоколу

Чи варто говорити, скільки багів спливло в перший час… Найбільше я промучився з помилкою «pipe read error», яка виникала в момент, коли не виходило ініціалізувати пристрій після запуску коду в пам'яті на виконання. Однак, вона виникала не кожен раз, а абсолютно випадково, із-за чого я багато разів помилково вважав, що нарешті знайшов хоч якусь закономірність. Але ні, помилка виникала абсолютно випадково. І найбільше мене напружило те, що якщо в момент, коли NES Mini переставала відповідати моїй програмі, запустити оригінальну hakchi від madmonkey, то консоль виходила зі ступору і продовжувала працювати. Тобто madmonkey у себе якимось чином правильно проводить ініціалізацію, а у мене що-то неправильно. Але скільки я не вивчав його вихідні коди, нічого особливого я там не побачив. У підсумку я знайшов програму, яка перехоплює і показує USB трафік і почав порівнювати всі побайтово.

Ось приклад того, як повинна проводитися ініціалізація/верифікація:



У мене виникала проблема саме на другому кроці при отриманні відповіді. Чомусь приходили зовсім не ті дані, що я очікував. Виявилося, що моя помилка була в тому, що в цьому випадку я намагався виконати ініціалізацію заново з самого початку. Програма від madmonkey (точніше бібліотека fel_lib) ж в такому випадку повторює, починаючи відразу з другого кроку, після чого пристрій починає нормально відповідати. Шаманство якесь, але помилка зникла назавжди.

«LED-bug», як прозвали його іноземці

Однак, крім цього я зіткнувся з набагато більш дивним багом. Напевно, це самий дивний і неочевидый баг за все моє життя. Скрипти для копіювання ігор по закінченні процесу вимикають консоль, тому треба дочекатися, поки світлодіод згасне. Але дуже багато людей скаржилися, що світлодіод не гасне навіть через півгодини. Люди на форумах ділилися своїм досвідом. У кого-то все ідеально працює, а у кого-то світлодіод не гасне. Хтось вважає, що існують різні версії консолей, у кого-то все починало працювати на іншому комп'ютері. Десятки людей намагалися знайти хоч якусь закономірність. Знову ж таки було багато різних ілюзій, але врешті-решт знайшовся чоловік, який знайшов 100% вірну закономірність. Спочатку я не повірив, але всі в один голос почали це підтверджувати.

Моя програма не працює, якщо її розпакувати winrar'ом, але працює, якщо розпакувати 7zip'ом. Як таке може бути?

Виявляється, деякі версії WinRAR'а при певних умовах не зберігають атрибути файлів при розпакуванні, а коли ми під Windows збираємо RAM-диск для ядра Linux, симлинки обов'язково повинні мати атрибут «системний». Самому мені навіть в голову не могло прийти, що проблема в архіваторі, тим більше я сам winrar'ом користуюся. Незабаром я додав в програму перевірку атрибут файлів, і проблема зникла назавжди. Правда, під Windows 10 іноді чомусь не виходить змінити атрибути, але тепер про це хоча б пишеться помилка.

Шрифти

На цьому етапі програма стала вже цілком стабільною, але був ще цілий ряд проблем, які стосувалися самої консолі і її оболонки.

Почати я вирішила з шрифтів. Проблема в тому, що оригінальні шрифти в NES Mini містять тільки потрібні символи і назви багатьох доданих ігор виводилися некоректно.



Ця задача здавалася цілком розв'язною з першого погляду, адже прямо в директорії з іграми лежать файли «title.fnt» і «copyright.fnt», і треба просто їх змінити або замінити. Однак, ні один редактор шрифтів не погодився їх відкривати, потрібно зрозуміти, що це за формат.

Якщо поміняти ці файли місцями, текст у назві ігор стає маленького розміру.



Виходить, шрифт растровий, а не векторний, і в ньому символи містяться у вигляді малюнків. Якщо відкрити файл в шістнадцятковому редакторі, то можна побачити, що кожен шрифт недалеко від початку містить сигнатуру «BMF».



Гугление за запитом «BMF font» призвело сайт, де була як утиліта для генерації шрифтів, так і докладний опис формату, що я відразу ж кинувся читати. Так, кожен файл повинен містити сигнатуру BMF, але на самому початку файлу. У разі ж NES Mini перед ним йшли ще якісь 9 байт, в різних файлах вони були різними (крім першого байта). Я понадіявся, що вони не потрібні або несуттєві, але при зміні будь-якого з них, консоль просто не запускалася, демонструючи чорний екран. Виходить, що треба обов'язково зрозуміти сенс цих дев'яти байт. Перший — завжди одиниця. Потім два байти — це якісь значення, потім два нуля. Знову два байти — значення і знову — два нуля. Після цього вже йшли дані шрифту. Я відразу ж подумав, що ці пари схожі на два 32-бітних числа. Подивився перше, порівняв з розміром файлу, ніяких закономірностей не побачив. Аналогічно з другим, але потім я вирішив їх скласти і отримав точний розмір файлу без цього заголовку. Виходить, ці числа говорять нам про розміри якихось секцій у файлі. Я відмотав файл на значення, вказане в перших чотирьох байтах і побачив заголовок PNG файлу.



Я витяг його звідти і так, це картинка з усіма символами.



Логічно, адже програма для генерації шрифтів дає на виході кілька файлів. У NES Mini ж вони просто об'єднані в один. Я аналогічно зібрав разом заголовок і файли згенерованого шрифту, скинув результат на NES Mini і відсутні символи з'явилися.



Здавалося б, тепер все тепер повинні бути задоволені, але скоро мені почали писати японські власники Famicom Mini, скаржилися на те, що у них зникли всі ієрогліфи. Я їм ввічливо пояснив, що з японським у мене погано, точніше зовсім ніяк. Але не полінувався розповісти, що я з'ясував, та як самим згенерувати шрифт. Незабаром мені прислали японський шрифт, і я включив його в дистрибутив.



Скрипти без проблем визначають регіон консолі, щоб вибрати з двох шрифтів. Спасибі японцеві під ніком xsnake. Зараз народ вже розібрався і почав активно викладати різні шрифти, навіть Comic Sans є, куди ж без нього.

Модифікація драйвера ігрового контролера



Люди продовжували просити якийсь нереальний функціонал. Багатьом не вистачало можливості натиснути кнопку RESET, тобто вийти в меню, не випускаючи контролера з рук. Я відразу ж сказав, що це неможливо. Исходников емулятора у мене немає, поміняти функціональність кнопок немає можливості, але незабаром я зрозумів, що якщо підключити Classic Controller від Wii (вони сумісні), на якому більше кнопок, кнопка HOME працює саме як вихід в меню. Тобто в коді емулятора це передбачено. При цьому емулятор використовує бібліотеку SDL2, у якій відкритий вихідний код, але перезбирати і замінювати таку величезну бібліотеку заради такої простої функції якось не круто. Я знову почав дивитися у вихідні коди, які надає сама Nintendo, і побачив там вихідний код драйвера контролера. Та це ж саме те, що потрібно! Внутрішнє кодове ім'я контролера, до речі, «Clovercon». Від слова «clover» (конюшина). Аналогічно і називається оболонка на NES Min — Clover, а назва самої моделі консолі — CLV-001. Думаю, тепер всім зрозуміло, що значить це «CLV».

Код драйвера дуже простий, і я швидко знайшов, куди вставити всього один рядок:

if (down && select) home = 1;

Скомпілював драйвер я без особливих проблем, що дивно, адже з Linux'ом я погано дружу, а тут раптом скомпілював модуль ядра, але зрадів я рано. Утиліта insmod відмовлялася завантажувати цей модуль. Після недовгого гугления я зрозумів, що це з-за того, що не збігається «vermagic». Це рядок всередині модуля, яка описує версію ядра Linux і параметри, з якими воно збиралося. Робиться це банально для того, щоб переконатися в бінарної сумісності. Коротше кажучи, збирати драйвер треба з тими ж параметрами ядра, при яких збиралося ядро NES Mini. А звідки мені знати? Так, Nintendo виклала на своєму сайті і вихідні коди ядра, але там немає файлу з налаштуваннями. Я довго мучився, змінюючи різні параметри ядра, з рядка vermagic було приблизно ясно, чого не вистачає або що зайве.

Однак коли рядка vermagic збіглися і модуль завантажився, система відмовлялася реагувати на натискання кнопок. При цьому налагодити його було неможливо, т. к. kprint в ядрі NES Mini був вирізаний, як і буфер dmesg. У підсумку я вже майже здався, втративши всяку надію, але заліз в розділ «Kernel hacking» і почав знімати всі галочки поспіль.



Досвідчені користувачів linux мене напевно засміють, але в підсумку раптово драйвер заробив. Я свого добився, комбінація down+select стала відкривати меню.

Правда, люди незабаром почали просити зробити можливість вибирати комбінацію кнопок. Здавалося б, як? Адже вони зашиті у бінарники драйвера, але я просто додав в код текстовий рядок, з якої драйвер бере комбінацію, а перед завантаженням в консоль моя програма знаходить цю рядок і змінює значення.

volatile char MAGIC_BUTTONS[] = "MAGIC_BUTTONS:00100100";

Головне — не забути про директиву «volatile», щоб компілятор розумів, що рядок може змінюватися «із зовні», і що вирізати код перевірки не потрібно.

Все це мало б величезний сенс, якщо б Nintendo не зробила такий короткий провід у контролерів. Подовжувач тепер просто необхідний.

Незабаром з'явилися і люди, які почали просити турбо-кнопки. Я завжди вважав їх чітерство, до якого нас привчили з дитинства, адже в Росії оригінальні контролери практично ніхто ніколи не бачив. І я ігнорував ці прохання, поки вони не почали надходити від іноземців. Думаю, тут розповідати особливо нічого, просто чергова модифікація драйвера. Тепер можна на секунду затиснути select+A або select+B, щоб активувати турбо на відповідній кнопці. У випадку ж з Classic Controller'ом кнопки X і Y відразу ж працюють як турбо A і турбо B.

Подолання обмежень

Що ж стосується обмеження на кількість ігор, тут все не зовсім зрозуміло. Справа в тому, що в NES Mini без проблем можна залити приблизно 97 ігор, але при цьому перестають працювати збереження. І чим менше ігор в меню, тим більше збережень можна зробити, але справа зовсім не в обмеженнях розміру flash-пам'яті, місця на розділі ще дуже багато. Схоже, що оболонка не може або не намагається отримати стільки оперативної пам'яті, щоб завантажити всі зображення, адже кожна збережена гра супроводжується скріншотом, і якщо порахувати загальну кількість ігор, розмір їх обкладинок, розмір скріншотів і врахувати, що в пам'яті все це зберігається швидше за все в стислому вигляді, виходить досить велике число.

Спочатку я думав, що з цим доведеться миритися. Тим більше я поняття не маю, що за ігри туди можна завантажувати в такій кількості, для себе-то я тридцять штук насилу наберу, і половина з них вже встановлена в консолі, але народ дуже страждав і просив. І тут я згадав, що для кожної гри в конфіги вказаний шлях до емулятора і параметри командного рядка.



Так адже можна запустити не тільки емулятор, але і будь-який скрипт, що не заважає запустити скрипт, який буде монтувати іншу директорію з іграми, що для користувача буде виглядати як папки. Спробував — вийшло!



У підсумку я зміг записати аж 600 ігор за раз. Моя програма автоматично розбиває їх на папки, сортуючи за алфавітом. При такому підході і збереження продовжують працювати повноцінно, та нічого не гальмує. Хочу ще зробити можливість вибирати алгоритм генерації дерева папок і можливість змінювати їх картинки, але в цей момент я подумав, що пора б зупинитися і зняти нарешті-то про це все відео, та написати цю статтю.

Цікаві особливості
За цей місяць було додано і багато інших різних функцій на зразок підтримки Game Genie чит-кодів і автоматичного заповнення інформації про іграх, зараз вже все і не пригадаєш.
Було знайдено і багато багів, цікавих особливостей.

Наприклад, консоль відмовляється запускатися, якщо серед ігор є хоч одна, в назві якої поспіль йдуть апостроф і будь-яка цифра. Довелося ввести перевірку на це.

Незвичайні спецефекти в іграх — це насправді захист від нападів епілепсії, яка включається параметром командного рядка.

До речі, у вбудованого емулятора і багато інших параметрів, він охоче сам виводить їх. Правда, чомусь вони не всі працюють. Наприклад, емуляцію PAL не виходить включити при всьому бажанні. І так, європейська версія консолі містить американські версії ігор. І BIOS для Famicom Disk System там теж є, хоч гри для неї і виходили тільки в Японії. Так що вони теж запускаються.

З картриджних ж ігор підтримується не дуже багато мапперов, але всі найпопулярніші на місці:

  • 0 (NROM) — найпростіші ігри без маппера, наприклад Ice Climber, Pac-Man, і т. п.
  • 1 (MMC1) — багато хороших ігор, другий по популярності маппер.
  • 2 (UxROM — UNROM/UOROM) — ігри на зразок Castlevania, Contra, Duck Tales і т. п.
  • 3 (CNROM) — багато простих ігор, але з великим об'ємом графіки
  • 4 (MMC3) — найпопулярніший маппер, дуже багато ігор
  • 5 (MMC5) — дуже складний і самий наворочений маппер, дивно, що є його підтримка, адже начебто під нього немає ні однієї гри в стандартному надоре
  • 7 (AxROM — ANROM/AMROM/etc.) — простий маппер, який використовується іграми на зразок Battletoads.
  • 9 (MMC2) — використовується тільки грою Punch Out!!
  • 10 (MMC4) — використовується тільки кількома японськими іграми
  • 86 — рідкісний маппер, мало де використовується
  • 87 — рідкісний маппер, мало де використовується
  • 184 — рідкісний маппер, мало де використовується
Однак, мене продовжують завалювати листами з проханнями додати в програму підтримку того чи іншого маппера, не розуміючи, що це не від мене залежить. Хоча в теорії цілком можливо скомпілювати під NES Mini інший емулятор, але я залишу цю затію людям розумніший.

Серед оригінальних ігор є одна прихована. Точніше це не гра, а виробничі тести, щось на зразок сервісного меню. Бути може, якийсь хитрою комбінацією можна отримати до нього доступ без танців з бубном.

CaH4e3 (відомий в певних колах ромхакер) вже почав розбирати файл емулятора. Кумедний факт — в ньому заховане повідомлення від розробників. Точніше від якогось капітана Ханафуда.



Насправді ханафуда — це гральні карти, які Nintendo випускала в позаминулому столітті. Санчез каже, що на цей текст є покажчики, тобто якийсь код його використовує. Цілком можливо, що це робоча пасхалка.

Ще з забавного: якщо в директорії з будь-якою грою створити папку «pixelart» і покласти туди будь-яку PNG картинку, вона буде показуватися на тлі під час простою консолі. Тут краще подивитися відео з початку статті, щоб зрозуміти, про що йдеться.

Та й взагалі, в пам'яті консолі повно різних картинок, звуків і скриптів, які можна редагувати. Так при бажанні цілком реально сильно прокачати свою консоль.

Підсумки
Мабуть, це перший злом консолі, який приносить видавцям прибуток, а не збитки. Адже, ігри окремо вони не продають, а саму консоль тепер просто змітають з полиць магазинів. Таке враження, що Nintendo сиділи і з нетерпінням чекали, коли ж її зламають вже, тому і не робили ніяких захисту. Так що сподіваюся, вони не поставлять мені страйк. І не засудять, тим більше незаконного я ніби як нічого не роблю, поки не поширюю гри.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.