Как записать игры для денди на флешку

Обновлено: 07.07.2024

Smart TV и Android TV Box это удивительные устройства, которое дают практически неограниченные возможности. В этот раз, я вам покажу как из любого Smart TV/TV Box сделать игровую приставку (Sega, Sega Dreamcast, Dandy, NES, Sony PlayStation, и пр.) без дополнительного оборудования.

Для того, чтоб получить игровую приставку на обычном железе от ТВ нам не нужно менять прошивки, танцевать с бубном… На самом деле всё намного проще! Эта инструкция подходит для всех устройств и неважно какая у вас модель телевизора или приставки.

Устанавливаем Kodi

Тем, кто знаком с медиацентром Kodi будет немного проще, а остальные, кто еще не знает, это универсальное кроссплатформенное приложение, которое дает возможность смотреть IPTV, фильмы, видеохостинг и все остальное.

Для начала установите приложение и для удобства включите русский язык. Как это сделать, я подробно показывал тут:

Устанавливаем эмуляторы

Спешу обрадовать, установить эмулятор так же просто и быстро как установить сам «Коди», кроме того, не нужно даже ничего скачивать, всё уже встроено. Давайте перейдем:

  1. Откройте настройки.
  2. Нажмите дополнения и перейдите в раздел «Установить из репозитория».
  3. Выберите «Игровые дополнения»



затем раздел «Эмуляторы»:

  1. Выберите нужный Вам эмулятор и установите его. Рассмотрим на примере «Sega» Вы можете установить любой другой.

Устанавливаем игры

После того, как мы все настроили и подготовили, распакуйте архив с играми и загрузите его к вам на Smart TV или TV Box при помощи флешки. Теперь откройте главный экран «Kodi» и выберите раздел «Игры» нажав на него:


Нужно выбрать нашу папку с играми, поэтому нажимаем «Добавить игру…». В открывшемся окне нажмите обзор, затем найдите вашу папку с играми. Когда вы откроете папку, она окажется пустая, и это нормально. Нажмите «OK», после чего ещё раз «OK». Готово, по завершению вас перебросит назад в меню, в котором будет ваша папка с играми.

Запускаем игру

Чтоб запустить установленную игру, вам достаточно нажать на неё после чего, приложение спросит при помощи какого эмулятора открыть. Выберите тот, который установили:


Так же, «Коди» предложит вам другой эмулятор, который тоже может открыть этот файл. Если ваш некорректно открывает файл, установите другой, который предлагает система.

Готово, играем, наслаждаемся!

Настройка геймпада (джойстика)

Геймпад нужно настраивать только после того, как Вы установили нужный вам эмулятор. Медиацентр имеет встроенные драйвера и умеет работать практически со всеми известными джойстиками.

Чтоб настроить геймпад, откройте «Настройки», затем «Система». Подключите ваше устройство и перейдите в раздел «Ввод», после «Настройка подключенных контроллеров»:


Выберите тип вашего джойстика и настройте значения кнопок:


На этом всё. Как видите, всё просто до безобразия. А Вы думали, что ваш Smart TV способен быть игровой приставкой?

Если у Вас остались какие-то вопросы, пишите в комментарии и вместе мы всё решим.

Favorite

В закладки

Как установить и рубиться в старые игры на любой TV-приставке. Или даже на самом телевизоре

Игры того времени были довольно сложными и увлекательными, не то что современные донатные помойки или простые аркады по подписке Apple.

Сыграть в любимые игры детства и немного поностальгировать можно практически на любой современной ТВ-приставке и некоторых моделях Smart TV. Сейчас расскажем, что скачать и как настроить.

Что для этого нужно

🕹 геймпад для удобного управления. Здесь упираемся исключительно в возможности подключения к вашей приставке. Для бокса со свободным USB-портом подойдет любой проводной USB-джойстик, приставка с Bluetooth справится с беспроводным геймпадом. Практически любая ТВ-приставка на Android сможет работать с радиоджойстиком через внешний приемник.

⌚ 15 минут на настройку и загрузку игр.

Как все настроить


1. Устанавливаем на приставку приложение KODI. Это бесплатный многофункциональный медиакомбайн, который работает практически на любой платформе. Он пригодится для удобной каталогизации фильмов и сериалов, просмотра контента с сетевого накопителя, трансляции IPTV и, разумеется, для запуска ретро игр.

На чистом Android или Android TV достаточно загрузить приложение из Google Play Store, при использовании Raspberry Pi или Windows-компьютера нужно скачать соответствующую версию с сайта разработчиков.

Вот способ установки KODI на Apple TV 4:

Есть и другой вариант установки с использованием Xcode и аккаунтом разработчика.

2. Запускаем KODI и производим процедуру первоначальной настройки. Потребуется выбрать часовой пояс, язык интерфейса и еще несколько опций.

wp-image-1055467
wp-image-1055468
wp-image-1055469
wp-image-1055470

wp-image-1055474
wp-image-1055475
wp-image-1055472
wp-image-1055473

5. Соглашаемся на установку выбранного эмулятора и необходимых для его работы дополнений.

7. Файлы с расширением *.nes или *.gen извлекаем из архива и копируем на приставку любым удобным способом. Это можно сделать через сетевую папку, SMB-протокол или флешку.

8. Запускаем установленный на приставке эмулятор и указываем путь к скопированным на нее играм.

wp-image-1055479
wp-image-1055478
wp-image-1055477
wp-image-1055476

9. Остается лишь настроить подключенный геймпад в параметрах эмулятора. Это будет предложено сделать при первом запуске либо можно будет сделать в настройках.

10. Теперь можете играть в старые игры из детства на большом экране телевизора.

Разумеется, таким способом можно запускать игры с других консолей и игровых платформ. Для этого придется подобрать подходящий эмулятор и соответствующие ромы.

Данный способ является наиболее удобным, ведь для игры не требуется установка отдельных приложений (KODI чаще всего и так используется на тв-боксе). Кроме этого данный медиакомбайн поддерживает практически все современные геймпады и позволяет переназначить любые клавиши на них.

Пишите, какие игры вы первым делом протестировали на своей ТВ-приставке.

(26 голосов, общий рейтинг: 4.58 из 5)

Favorite

В закладки

Артём Суровцев

Люблю технологии и все, что с ними связано. Верю, что величайшие открытия человечества еще впереди!

Ни для кого не секрет, что сейчас можно легко скачать эмулятор почти любой игровой консоли 80х-90х и поиграть в классические игры на компьютере, телефоне и многих других платформах. В сети легко можно найти и ROM'ы этих самых игр. Зачастую люди качают их и даже не задумываются, каким же образом кто-то однажды прочитал их из картриджа. В этой статье я и постараюсь рассказать, как же это делалось в случае с NES/Famicom, которая у нас была больше известна как «Денди», и покажу, как можно сделать это самостоятельно.

image

Сразу должен сказать, что меня тут уговорили сниматься в целом многосерийном шоу на тему того, как устроены и работают игровые консоли. Поэтому публикация сегодня сразу в двух вариантах: в виде видео и по старинке в виде статьи. Кому как больше нравится, тем более целевая аудитория у каждого варианта явно разная. В статье я постараюсь раскрыть больше технических подробностей, когда видео несёт более развлекательный характер.

Видео:

Статья:

Итак, как же работает картридж у Famicom? Многие сразу же скажут, что это просто ROM-память с параллельным доступом, и ничего сложного в её чтении быть не должно, но это не совсем так. Во-первых, в картридже сразу два типа памяти: с кодом игры, и с изображениями из игры. Каждая из них включается прямо в шину данных консоли. Первая — параллельно с оперативной памятью и процессором (CPU), а вторая параллельно с видеопамятью и видеочипом (PPU). Таким образом картридж является чем-то вроде оперативной памяти, куда уже загружена игра.

Рассмотрим же распиновку слота картриджа, и как он работает.

image


Вид на консоль сверху. Слева — передняя часть.

→ CPU A0-A14 — контакты, через которые задаётся адрес для чтения CPU памяти
CPU D0-D7 — контакты, через которые мы передаём данные CPU памяти
→ PPU A0-A13 — контакты, через которые задаётся адрес для чтения PPU памяти
PPU D0-D7 — контакты, через которые мы передаём данные PPU памяти
→ M2 — местный clock-сигнал, принимает высокий уровень, когда идёт обращение к CPU памяти
→ /ROMSEL — логический NAND между M2 и CPU A15, который недоступен напрямую
→ CPU R/W — определяет, тип операции: высокий уровень — чтение, низкий — запись
← /IRQ — позволяет картриджу генерировать прерывание, внутри консоли подтянут к +5В
→ PPU /RD — принимает низкий уровень, когда консоль читает PPU память
→ PPU /WR — принимает низкий уровень, когда консоль пишет в PPU память
→ PPU /A13 — просто напросто инвертированный сигнал от PPU A13
← CIRAM A10 — позволяет картриджу определять принцип зеркалирования видеопамяти в консоли
← CIRAM /CE — при низком уровне включает видеопамять внутри консоли
→ Звук (вход) — тут в картридж идёт звук с аудиочипа
← Звук (вход) — тут из картриджа идёт звук в том виде, в каком мы его уже слышим
* Земля и питание — без комментариев, напряжение 5 вольт

Теперь подробнее, немного технической информации.

CPU память консоли лежит в диапазоне между 0 и $FFFF (16 бит адресации). К картриджу обычно относятся адреса $8000-$FFFF. Обратите внимание, что при этом у нас нет контакта CPU A15, который должен отвечать на старший разряд адреса. Вместо него есть /ROMSEL, который принимает низкий уровень только в случае, когда M2 и теоретический CPU A15 одновременно принимают высокий уровень. Т.е. когда консоль читает или пишет в адреса $8000-$FFFF. Поэтому обычно его можно напрямую подключить к /CE ноге ROM-памяти. Чтение или запись выбираются через CPU R/W. Зачем нужна запись в картридж? Да много зачем, но об этом ниже.

PPU память имеет адреса от 0 до $3FFF (14 бит адресации), к картриджу при этом обычно относится 0-$1FFF. Именно в этом диапазоне хранятся изображения, и это может быть как ROM, так и RAM, но картридж сам определяет, какие адреса относятся к нему, а какие к внутренней части консоли, именно для этого используется CIRAM /CE. Обычно (почти всегда) его замыкают напрямую на PPU /A13, т.е. память консоли активируется, когда A13 равно единице — в диапазоне от $2000 до $3FFF. Обратите внимание, что внутри Famicom и NES памяти ниже $2000 и нет вовсе, она обязана быть в картридже. У PPU используются отдельные контакты для чтения и записи: PPU /RD и PPU /WR. Отдельно стоит сказать про CIRAM A10 — этот контакт определяет, как зеркалируется память в диапазоне между $2000 и $2FFF внутри консоли. Обычно это важно определить в зависимости от того, как в игре происходит движение — вертикально или горизонтально. В старых играх это было жёстко задано перемычкой на плате, в более новых обычно может меняться программно во время игры.

Да, в оригинальном Фамикоме были ещё аудиовход и аудиовыход, что позволяло картриджу быть дополнительным источником звука. Использовалось это редко, но позволяло сделать музыку в играх гораздо приятнее за счёт дополнительных синтезаторов звука. В NES этих контактов уже не было. В современных китайских «Денди» и прочих клонах их тоже не припаивают. Само собой, звуковой чип из картриджа никак не сдампить.

У NES принцип работы не отличается, хотя там у картриджей уже 72 контакта: несколько идут напрямую в гнездо снизу консоли (ни разу не использовалось ни в одной игре), плюс четыре идут на чип для защиты от пиратства.

Перейдём к практике.

Итак, вроде ничего особо сложного нет. Надо просто как-то прочитать все данные по всем адресам и сохранить их в NES-файл. Для этого я решил взять два микроконтроллера ATMEGA64. Да, это очень избыточно, но мне просто нужно огромное количество ног – у картриджа их всё-таки 60. Хотя CPU и PPU память не нужно читать одновременно, и их можно было бы подключить к одним и тем же ногам, но для первого эксперимента я решил их изолировать. Тем более так гораздо проще разводить плату, двустороннюю делать мне совсем не хотелось.

image

Слот для картриджей можно и купить, это стандартный краевой разъём на 60 ног, но он почему-то везде был только под заказ, поэтому я просто выпаял его из дешёвой новодельной денди.

После сборки и печати корпуса устройство получилось таким:

image

Не буду вдаваться в подробности прошивки, выше уже изложены принципы работы с памятью, а исходники будут в конце статьи.

Всё ли так просто? Увы, на самом деле нет. Жизненный срок у NES и Famicom был достаточно долгим, и разработчики игр очень быстро (уже в 85м году) столкнулись с тем, что при таком подходе в картридж можно впихнуть очень мало информации. И вовсе не из-за его малого объема, а из-за того, что адресное пространство для кода ограничивалось этими самыми $8000-$FFFF, а это всего-то 32 килобайта. В такой размер вписывались только самые простейшие игры типа «Battle City», «Ice Climber», «Duck Hunt», «Tetris», «Lode Runner». Проще говоря, всё то, что мы привыкли видеть на сборниках типа «9999999 in 1» с повторяющимися играми.

Так в картриджи начали ставить мапперы.

image

Это такие микросхемы, которые отвечают за переключение банков памяти, в результате чего появилась возможность существенно расширить адресное пространство. Представьте, что по какому-то адресу хранится код первого уровня игры. Вы его проходите, маппер переключает банк памяти, и в результате абсолютно по тому же самому адресу считывается уже код не первого, а второго уровня. Аналогично и с видеопамятью.

Получается, что чтобы сдампить картридж, нужно заранее знать, какой в нём стоит маппер, и какие команды надо посылать ему для переключения банков памяти. И всё это всё равно было бы легко, если бы во всех картриджах стоял одинаковый маппер, ну или если бы их было всего несколько. Но существует несколько сотен разных мапперов и способов их подключения. Иногда обходились простой логической схемой, а иногда ставили очень навороченные микросхемы с кучей регистров и дополнительных функций. При этом не редкостью было, что брали какой-то популярный маппер, но подключали его необычным образом, что в корне меняло принципы взаимодействия с ним.

Первопроходцам приходилось дампить первый банк памяти, дизассемблировать его и заниматься реверс-инжинирингом, чтобы понять, как же получить доступ к оставшейся части данных. При этом в заголовке NES-файла указывается общепринятый номер маппера, а полноценный эмулятор должен эмулировать не только саму консоль, но и весь этот зоопарк железа, которое ставили в картриджи. Получается, что теоретически может появиться картридж, который не только сложно будет сдампить, но и который не будет эмулироваться ни одним существующим эмулятором. Далеко ходить не надо: внутри популярных у нас пиратских многоигровых картриджей что только не стоит. А китайцы до сих пор выпускают новые игры на своём собственном железе, в котором разобраться стало ещё сложнее.

К слову, в картриджах чего только не было. Помимо ROM-памяти и мапперов туда ставили и дополнительную оперативную память (иногда с батарейкой для возможности сохраняться в игре), всякие счётчики времени, описанные выше синтезаторы звука и многое другое вплоть до модема. Увы, у нас в стране в девяностые лицензионных картриджей было днём с огнём не сыскать, а пираты не сильно заморачивались, и игры с такими наворотами тут не продавались.

image

У каждого реализованы методы для дампинга данных. Вот как выглядит метод чтения программной памяти игры на MMC3 маппере:

Я решил попробовать побыть на месте первопроходцев и сдампить картридж вот с таким необычным меню:


Для этого я прочитал сначала картридж так, как если бы там не было маппера, запустил его на эмуляторе и начал дизассемблировать. Вскоре я нашёл нужную мне инструкцию:


После этого я прочитал картридж снова, предварительно выполнив запись по адресу $B600, и получил уже вполне работоспособный ROM. Само собой, игры в нём не запускаются, ведь для этого нужно снова переключать банки памяти. И даже если я прослежу, что же происходит в момент выбора игры в меню, и прочитаю весь картридж, эмулятор скорее всего никак не сможет всё это запустить.

Ещё мне в руки попал лицензионный картридж одной из самых культовых игр тех времён — «The Legend of Zelda». Он без проблем работает и с дампером, и с Фамикомом через простой пассивный переходник. Делать дамп этой игры смысла нет, она заинтересовала меня другим. В этом картридже стоит дополнительная RAM память и батарейка, что позволяет сохраняться в игре. Лежит эта память в диапазоне $6000-$7FFF. Я попробовал её прочитать и скормить эмулятору. Он без проблем её понял. После этого я ради эксперимента решил увеличить в ней число сердечек и записать назад в картридж. Сработало.


Получилась забавная возможность переносить сохранения между эмулятором и реальной консолью.

Многие наверное спросят, зачем я вообще за это взялся, когда почти любой ROM можно найти в сети. Да банально из любопытства и самообразования. Было интересно посмотреть, что происходит внутри этих картриджей, и как всё это работает. К тому же им можно как читать, так и записывать картриджи. Но об этом в следующий раз.


Помню в детстве всегда было интересно, как же эти картриджи работают, и можно ли самому записывать в них игры? А не так давно на ютубе увидел видео где рассказывалось о самодельном картридже. Меня это заинтересовало, почитал форумы, посмотрел схемы, вроде все понятно и платы не сложные, но не было чем программировать параллельные микросхемы памяти.

Через некоторое время я собрал программатор EzoFlash, который подключался к LPT порту и мог много чего программировать, это клон Willem-а и работает с его софтом. Но так и не успев ни чего запрограммировать и протестировать подвернулся по дешёвке сам Willem. Так эти прогеры скучали пока я не насобирал старых памятушек для проб и сборки картриджа.

И вот настал момент записать память 27С040, это 512кбайт память. И тут я выясняю, что программатор Willem, купленный за недорого, малость подпаленный :(. Благо при сборке EzoFlash я разобрался с тестированием данного программатора и быстро нашел выгоревший смд транзистор на плате, он коммутировал питание микросхемы памяти, после его замены все стало записывать нормально и можно было приступать к созданию платы картриджа.

Вот тут было немного сложно, дело в том, что игры для денди делятся на категории, каждая категория игр работает на картридже со своей схемой, а схема в свою очередь зависит от используемого маппера памяти. Маппер, это грубо говоря микросхема, которая делит память картриджа на страницы по 16кбайт, поскольку 8 ми битный процессор больше не в состоянии переварить в связи с нехваткой адресного пространства. Вот тут то маппер и помогает с расширением адресного пространства. Мапперов целое множество, некоторые специализированные и стоят дорого, но благо есть китайские клоны, некоторые могут заменить микросхемы обычной логики.

В моем случае я создавал картридж для игры Battletoads & Double Dragon, она в качестве маппера использует логику HC161, это бинарный счетчик. Игре необходимо 256кбайт памяти, но если мы берем ПЗУ на 512кбайт памяти и просто перемычкой переключаем старший бит адреса в 0 или 1, то получаем возможность выбрать с какой половиной памяти работать. Таким образом можно в одну ПЗУ записать 2 игры и выбирать в какую хотим играть. Также выбор игры можно сделать по нажатию на ресет, но эта опция требует одну дополнительную микросхему и не всегда корректно отрабатывает, на разных приставках может работать по разному.

Схему брал ТУТ, HC02 выкинул из схемы, и поставил перемычку на адрес А18, печатку перерисовывал сам, брал ТУТ.

Читайте также: