Створення інструментів дослідження NES-игр. Що таке розширення файлу NES? Як відкрити файл nes на пк

Зателефонувала мені недавно сестра і запитала: “ А чи можна грати в ігри Денді на комп'ютері?”. Я звичайно розповів їй, як це зробити, а також вирішив для вас написати невелику статтю. Адже багатьом іноді хочеться ненадовго повернутися в дитинство та пограти у улюблену приставку. І для цього зовсім не обов'язково намагатися десь її знайти, а також думати, де ще взяти і картриджі з іграми.

То як же грати в Dendy на комп'ютері?

Спочатку нам потрібно скачати в інтернеті самі ігри. Всі ігри для Денді є файлом з розширенням .nes.

У вас є кілька варіантів, де взяти ігри:

1) Ви можете ввести в будь-якому пошуковику фразу "ігри для dendy" і перед вами відкриються десятки сайтів, на яких ви їх завантажуєте.

2) Можете завантажити ігри з певного сайту, який я рекомендую. Ось посилання на нього.

Даний сайт мені подобається тим, що на ньому все дуже просто і зрозуміло. Ви просто вибираєте ліворуч назву приставки (у нашому випадку Dendy) – потім переходьте до розділу “Ігри”. Тут всі іграшки відсортовані за абеткою: вибираєте необхідну літеру - знаходите гру - клацаєте мишкою за назвою (або за словом "скриншоти"). Якщо це справді та іграшка, яку ви шукали – завантажуєте її, натиснувши на посилання.

3) А ще можете завантажити прямо невелике складання найпопулярніших на мою думку ігор для Dendy, яку я зробив сам. До неї увійшли: Battle City (танчики), Battletoads & Double_Dragon (бойові жаби), Chip and Dale Rescue Rangers 2 (чіп і дейл), Darkwing Duck (чорний плащ), Double Dragon III (подвійний дракон), GALAXIAN (мухи), Jack Chan, Super Mario Bros (супер маріо), Teenage Mutant Ninja Turtles III (черепашки ніндзя), Tiny Toon Adventures (кролик):

Отже, незалежно від того, де саме ви завантажуєте гру, вона буде архівом, в якому лежить файл з розширенням NES. Раджу вам всі архіви з іграми скопіювати в одну папку і зберігати їх в ній. Особисто я створив у себе на диску Зпапку gamesі в неї зібрав усі свої улюблені ігри Dendy:

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

Програм-емуляторів приставок є чимало. Але я пропоную скористатися, мабуть, найпопулярнішою з них FCEUX. Щоб не виникало проблем із запуском ігор, краще завантажувати останню версію програми і причому з офіційного сайту. Таку версію ви можете завантажити і у мене.

Завантаживши архів із програмою, розпакуйте його кудись на комп'ютер. Я розпакував на диск З:\fceux-2.2.2. Вміст цієї папки виглядає так:

Для запуску емулятора необхідно знайти файл fceux.exeі відкрити його подвійним клацанням.

За бажанням (щоб не заходити щоразу в цю папку) ви можете створити ярлик для цього файлу на своєму робочому столі. Для цього натисніть на файл fceux.exeправою клавішею миші – виберіть “Надіслати” – “Робочий стіл (створити ярлик)”:

Отже, емулятор запущено:

Насамперед налаштуємо управління: в меню вибираємо ConfigInput:

Бачимо наступне вікно. Тут навпроти Port 1тиснемо кнопку Configure:

Тепер нам необхідно настроїти комбінацію клавіш для керування. У Денді можна грати або на клавіатурі; або якщо у вас є джойстик(А точніше геймпад), то за допомогою нього. І клавіатура, і джойстик налаштовуються однаково.

Налаштування дуже просте: клацаємо у віконці на потрібну кнопку мишкою і після цього двічітиснемо потрібну кнопку на клавіатурі (або джойстику). Потім переходимо до наступної кнопки.
Особисто я на своїй клавіатурі налаштував кнопки так:

Left, Up, Right, Down – це стрілки

Select – пробіл

Start – Enter

Turbo B та Turbo A – це клавіші Aі S

B та A – клавіші Zі X

Закінчивши налаштування всіх клавіш - виходимо звідси, натиснувши “Close”.

Ну і нарешті, тепер запускаємо гру через емулятор. Як ви пам'ятаєте, у мене всі завантажені ігри для Денді зберігаються на диску Cв папці games. До речі, емулятор FCEUX вміє відкривати ігри прямо з архіву. Деякі інші емулятори не побачать гру, якщо файл попередньо не розархівувати. Також FCEUX версії 2.2.2 відкриває і zip, і rar архіви. А ось старіші версії цієї програми rar-архіви не бачать.

Отже, в меню заходимо до FileOpen ROM:

Потім знаходимо на комп'ютері потрібну гру, виділяємо її і тиснемо "Відкрити":

Ось і все: гра запущена, і ми можемо починати грати тими клавішами, які налаштували заздалегідь:

І ще один момент: в емуляторі FCEUX є чудова функція. Зберегти”, якої так не вистачало у дитинстві. Тобто. можна зупинятись тоді, коли потрібно, і не боятися, що все ваше проходження загубиться.

Скористатися їй можна наступним чином: під час гри тиснемо в меню "File" - потім "Savestate" - "Save State":
Якщо потім нам доведеться розпочати гру з місця збереження, то запускаємо гру як завжди - потім йдемо в "File" - "Savestate" - "Load State".

Про внутрішній пристрій NES-ігор, цього разу я розповім про інструменти для досліджень, що використовуються мною.

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

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

Використання Lua-скриптів

Власне, перший спосіб, приклад якого наведено на картинці для привернення уваги - створення допоміжних інструментів за допомогою вбудованого в емулятор інтерпретатора Lua-скрипт.
На прикладі вище для дослідження гри (і просто читерського проходження, за бажання) використовується така можливість скриптів, як виведення зображень на екран поверх картинки, що відмальовується емулятором.

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

Інший приклад скрипту з виведенням на екран додаткових даних – компас до найближчого дорогоцінного каменю у «Книзі Джунглів»:

Звичайно, візуалізація інформації з оперативної пам'яті або ROM гри не єдина можливість скриптів.

Інша часто використовується можливість - логування того, що відбувається в коді гриНаприклад, шаблон скрипта для дампа розархівованих даних відразу після їх розпакування (для SMD ігор, але принцип застосовний і для NES).

Ну, і ніхто не забороняє створення на Lua-скриптах повноцінних утиліт, начебто вже включеного в емулятор редактора натиснутих клавіш TasEditor.

Також, на мою думку, недооціненою є ідея часткового переписування коду гри на скриптахколи ігрові дані трапляються скриптом на льоту для модифікації геймплею. Proof-of-concept такого скрипту, що модифікує ворогів у «New Ghostbusters 2»:

Однак, для складної обробки конкретної гри або створення нових методів хаку варто замислитись про використання наступного методу.

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

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

Один із напрямів розширення емулятора з метою покращення можливостей для реверс-інженерії – прокидання якомога більшої кількості його внутрішніх можливостей у Lua-бібліотеки. У другій статті циклу я вже показував, як за допомогою прокидання всього кількох нових функцій з'явилася можливість зробити універсальний (придатний для дослідження будь-якої гри) інструмент для дослідження.

Інший простий і корисний приклад, який поки що відсутній в останній версії емулятора – можливість модифікації із скрипту пам'яті PPU.

Модифікація емулятора також може використовуватися для того, щоб вбудувати в нього редактор для конкретної гриз можливістю на льоту запустити її та перевірити внесені зміни:

Скрипти для статичного аналізу коду гри

Попередні дві категорії модифікацій стосувалися динамічного аналізу гри під час виконання. Проте більшість дослідження – це статичний аналіз ROM-файлу гри (або дампів будь-яких даних із нього).

Основною програмою для такого аналізу коду є інтерактивний дизассемблер IDA. Він підтримує асемблер 6502, проте вимагає як плагінадля правильного завантаження файлів у форматі nes, так і набору скриптівдля автоматизації рутинних дій з перетворення завантаженого файла на зачесаний код. Набір скриптів, специфічних для дослідження NES-ігор, зібраний .

Скрипти для IDA можуть бути написані вбудованою мовою команд idc або python У будь-якому випадку найкраще відкрити їх текстовим редактором і вивчити, в більшості випадків це допомагає краще зрозуміти команди самого IDA, які стануть у нагоді в роботі з ним і навчитися писати такі скрипти самому. Це знадобиться, коли знадобиться провести кілька сотень однотипних дій, на кшталт об'єднання байт в поінтери або виділення масивів за деякими правилами.

Інструменти для статичного аналізу даних гри

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

Редактори тайлових карт

Формат зберігання графічних банків (найнижчий рівень зберігання графіки) стандартний для всіх ігор NES, тому існує безліч редакторів тайлових карток, однак, серед них я не знайшов жодної бібліотеки, яка дозволяла б рендерувати ці тайли у своєму додатку.

Такими програмами можна редагувати тайли графіки в іграх із наявністю CHR-ROM – цілими банками графіки. В інших іграх використовується CHR-RAM – відеопам'ять тайлів у них зчитується частинами з банку з даними та кодом і копіюється у відеопам'ять (при цьому іноді досить хитрими способами, але про них швидше розповідати в статті про компресію даних).

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

Як мову реалізації я використовую python за те, що на ньому можна швидко і просто перевірити будь-яку припущення, іноді навіть прямо в інтерактивному режимі.

Коррапт ROM

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

Пошук блоків

Можна також зайти з іншого боку.

Фон, який відображається на екрані, задається масивом індексів тайлів відеопам'яті за фіксованою адресою PPU – для NES існує 4 екранні сторінки, які залежно від налаштувань PPU можуть різними способами виводиться на екран. Не важливо, що саме буде на екрані, досить просто захопити якусь завантажену сторінку для аналізу.

Перша екранна сторінка (Name Table) розташована за адресами PPU $2000-$23BF. Її вміст в емуляторі FCEUXможна подивитися у вікні Debug → Name Table Viewer :

А також у вигляді байт у вікні Debug → Hex Editor, View → PPU Memory (Перейти за адресою $2000).

Тут же можна зробити дамп всієї відеопам'яті, який стане нам у нагоді для аналізу ( File → Dump to File → PPU Memory ).

Це просто масив із 960 індексів маленьких тайлів відеопам'яті розміром 8x8 пікселів. При цьому після реверсу великої кількості ігор відомо, що ігрові екрани часто описуються блоками більшого розміру, наприклад, 16x16 або 32x32 пікселів. Таким чином, якщо ми припустимо деякий розмір блоку (спершу спробуємо найстандартніші – 2x2 тайли, виділені на скріншоті червоною рамкою), то ми можемо розбити дані з екранної сторінки на ділянки, у кожному з яких виявиться опис одного блоку.

Так виходить список із всіх блоків, які присутні на екрані. Причому у нас «чисті» описи блоків, без інформації про спрайти персонажів (спрайти малюються в інший спосіб), і незалежний від анімації (анімації фону практично завжди робляться за допомогою змін палітри або самої відеопам'яті, номери тайлів у Name Table залишаються незмінними). Однак, ми не знаємо номери блоків.

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

1. Проходимо по всьому ROM і розмічаємо всі адреси, за якими виявляється якийсь блок, при цьому зберігаємо його номер (справжній номер може бути інший, нам важливо відзначити лише відмінності блоків один від одного).

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

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

Це вже непогано, але є спосіб кардинально покращити результати роботи алгоритму. Справа в тому, що існує обмежена кількість основних розмірів блоків та способів їх зберігання в ROM, і ми можемо перебрати їх усі.

Основні розміри блоків: 2x2, 4x2, 2x4 та 4x4, але у разі потреби легко додати й інші розміри.

З методом зберігання в ROM трохи хитріше, блоки можуть зберігатися як лінійно, і розбитими на частини масивами (Structure of Arrays , скорочено SoA), тобто. спочатку в ROM зберігається масив лише перших частин блоків, за ним – масиви з наступними частинами. Найчастіше такі масиви зберігаються один за одним, при цьому проміжок між початками масивів дорівнює кількості блоків. Щоб знайти в ROM такі SoA-масиви, ми повинні дізнатися про їх довжину, що можна зробити перебором всіх варіантів (часто в іграх використовується по 256 блоків, так що починати перевірку варто з цього числа і поступово його зменшувати).

Все це виглядає досить заплутано, адже ми спираємося тільки на ймовірність того, що гра використовує певний вид блоків, але на практиці утиліта знаходить блоки 80-90% перевірених ігор!

До того ж, вона дозволяє відсіяти ігри з незвичайною структурою (неблоковою), щоб уважніше їх вивчити.

Порівняння CDL-файлів

Емулятор FCEUX вміє під час емуляції кожну інструкцію відзначати, які байти були інтерпретовані як код, а які – як дані (меню Debug → Code/Data Logger... ). Ця фіча корисна сама по собі і тісно інтегрована з іншими налагоджувальними можливостями емулятора - спробуйте включити цей режим і подивитися, як змінилися інші вікна налагодження. Однак, я хочу розповісти про її одне приватне застосування. Якщо зберегти два таких cdl-файли, один ДО вчинення дії, що вивчається, а інший відразу ж після його закінчення, то різниця між двома такими файлами покаже тільки ті дані (або код), які були використані під час здійснення дії. При грамотному відсіканні можна знайти потрібні дані, лише правильно вибравши два моменти часу між вимірюваними подіями.

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

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

Теги: Додати теги

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

Пошукова система

Введіть розширення файлу

Допомога

Підказка

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

Що робити, якщо програму зі списку вже встановлено?

Часто встановлена ​​програма повинна автоматично зв'язатися з файлом NES. Якщо це не сталося, файл NES успішно можна зв'язати вручну з новою встановленою програмою. Достатньо натиснути правою кнопкою мишки на файл NES, а потім серед доступних вибрати опцію "Вибрати програму за замовчуванням". Потім необхідно вибрати опцію "Переглянути" і відшукати обраний додаток. Введені зміни необхідно затвердити за допомогою опції "OK".

Програми, які відкривають файл NES

Windows
Mac OS
Android

Чому я не можу відкрити файл NES?

Проблеми з файлами NES можуть мати також інший ґрунт. Іноді навіть встановлення на комп'ютері програмного забезпечення, яке обслуговує файли NES не вирішить проблему. Причиною неможливості відкриття, а також роботи з файлом NES може бути:

Невідповідні зв'язки файлу NES у записах реєстру
- пошкодження файлу NES, який ми відкриваємо
- інфікування файлу NES (віруси)
- надто маленький ресурс комп'ютера
- неактуальні драйвери
- усунення розширення NES із реєстру системи Windows
- незавершене встановлення програми, що обслуговує розширення NES

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

Мій комп'ютер не показує розширення файлів, що робити?

У стандартних установках Windows користувач комп'ютера не бачить розширення файлів NES. Це успішно можна змінити у налаштуваннях. Достатньо увійти в "Панель управління" та вибрати "Вигляд та персоналізація". Потім необхідно увійти в "Опції папок" і відкрити "Вид". В закладці "Вид" знаходиться опція "Укрити розширення відомих типів файлів" - необхідно вибрати цю опцію та підтвердити операцію натисканням кнопки "OK". У цей момент розширення всіх файлів, у тому числі NES, повинні з'явитися сортовані за назвою файлу.

Файл NES пошкоджено

Якщо після встановлення необхідної програми зі списку, Ви, як і раніше, не можете відкрити файл з розширенням NES, може бути його пошкодження. Рішенням може бути знаходження нової копії файлу NES, який Ви збираєтеся відкрити

Розширення файлу NES не пов'язане з відповідним додатком

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

Запис про файл NES у Реєстрі Системи Windows видалено або пошкоджено
Файл NES інфікований вірусом

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

Найкращий емулятор NES / Dendyі Famicom Disk Systemіз відкритим вихідним кодом. Підтримка збережень, джойстиків, емуляції різних контролерів, архівів (т.ч. 7z), запис movie та інше... А також має чудову сумісність. Портований під незліченну кількість систем (стара назва FCE Ultra). Має вбудовані інструменти для створення інструменту superplay.

Розмір: 8.5 MiB | Завантажень: 292188 | Завантажити

Емулятор NES / Famicom / Dendyі FDSіз відкритим вихідним кодом. Багато налаштувань, різних фільтрів, підтримка Kaillera, запуск РОМів прямий з архіву, можливість автозбереження та відмінна сумісність. Безперечно, один із найбільш наворочених та кращих емуляторів NES.

Дата: 08.06.2008 | Розмір: 1.2 MiB | Завантажень: 134522 | Завантажити

Відмінний емулятор NES / Famicomі Famicom Disk System. Підтримка великої кількості маперів, збережень, фільтрів, режиму емуляції Dendyта інших можливостей.

Непоганий емулятор NES / Dendyвід автора Project64, написаний із використанням DirectX API. Підтримує велику кількість маперів і в основному орієнтований запуск USA-ромів. Jnes має підтримку збережень, також гру через мережу через Kaillera.

Дата: 25.12.2016 | Розмір: 502 KiB | Завантажень: 62747 | Завантажити

Mednafen- це чудовий мультиплатформний емулятор, який емулює наступні платформи:

  • Atari Lynx
  • GameBoy (Color)
  • GameBoy Advance
  • Neo Geo Pocket (Color)
  • Nintendo Entertainment System/Famicom
  • PC Engine (CD)/TurboGrafx 16 (CD)/SuperGrafx
  • PC-FX
  • Sega Game Gear
  • Sega Genesis/MegaDrive
  • Sega Master System
  • Sony PlayStation
  • Super Nintendo Entertainment System/Super Famicom
  • Virtual Boy
  • WonderSwan
Якість емуляції дуже гарна.
Є підтримка графічних фільтрів.

Увага:емулятор запускається тількиз командного рядка. Але ви можете використовувати оболонку: Mednaffe або MedGui Reborn.
Для повноцінної роботи з емулятором слід ознайомитися . А також, не забуваємо про клавішу F1.

Дата: 01-09-2015 | Розмір: 17.5 MiB | Завантажень: 57456 | Завантажити

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

Виправлене складання Нестопії 1.37 (стабільною для запису мувіків). Тепер вона підтримує необмежений розмір відео дампи AVI, а також колірний простір RGB32.

Дата: 2.09.2012 | Розмір: 866 KiB | Завантажень: 5794 | Завантажити

Досить просунутий емулятор NES / Dendy з відкритим вихідним кодом для Windows. Серед його можливостей: dendy-режим (hybrid), відладчик, запис відео, налаштування колірної палітри, game genie, редактор заголовків РОМу та інше.

Дата: 2019-01-02 | Розмір: 7.1 MiB | Завантажень: 10958 | Завантажити

Емулятор NESдля Windows. Це концепт-емулятор, головною особливістю якого є зворотний перегляд ігрового процесу в реальному часі (real-time rewind).

Дата: 2012-03-12 | Розмір: 490 KiB | Завантажень: 4923 | Завантажити

Мультисистемний емуляторприставок Sega Mega Drive, Sega Master System, Sega Game Gear, Nintendo Entertainment System та аркадного автомата Sega System E. Має оригінальний 3D-інтерфейс у вигляді ігрової кімнати з ігровими автоматами, телевізорами. Також є вбудована база даних ігор та обкладинки.

Дата: 16.05.2011 | Розмір: 18.3 MiB | Завантажень: 23823 | Завантажити

Один із найстаріших, продовжують розвиток, емуляторів NES / Dendy. Має графічний інтерфейс (в DOS-стилі тому що довгий час емулятор був для DOS), можливість запису та збереження гри, створення скріншот, підтримку game genie кодів, збережень від nesticle та архівів. Для любителів та ностальгуючих.