Домой Сравнения и рейтинги Гаджеты по задачам Новый флеш-картридж DSpico наделяет линейку Nintendo DS портами USB и необычными функциями

Новый флеш-картридж DSpico наделяет линейку Nintendo DS портами USB и необычными функциями

Энтузиасты создали DSpico — открытый флеш-картридж на базе Raspberry Pi RP2040 для Nintendo DS и 3DS, который добавляет консолям порт USB-C и позволяет использовать их как геймпад, веб-камеру или микр

1
0

Новый флеш-картридж DSpico наделяет линейку Nintendo DS портами USB и необычными функциями

Консоли Nintendo DS, DSi и 3DS никогда не имели USB-порта, и вы никогда не могли физически подключить ни одну из них к компьютеру так, чтобы компьютер действительно видел устройство. Существовали самодельные приложения homebrew, способные устанавливать соединение по Wi-Fi, но этим всё и ограничивалось… до недавнего времени.

Новый флеш-картридж DSpico наделяет линейку Nintendo DS портами USB и необычными функциями

DSpico — совершенно новый флеш-картридж с открытым исходным кодом, созданный командой LNH, меняет положение дел весьма необычным образом. Он построен на базе RP2040, представляющего собой микроконтроллер Raspberry Pi и, по сути, тот самый чип, который можно найти в Raspberry Pi Pico. Рядом с ним расположен слот для карт памяти microSD, ожидаемый от флеш-картриджа, но на верхнем торце картриджа также имеется USB-порт.

Команда LNH опубликовала несколько homebrew-приложений, которые действительно задействуют этот порт, позволяя подключить один конец кабеля к вашей DS или 3DS, а другой — к ПК. Благодаря этому автору удалось превратить свою 3DS в динамик, микрофон и веб-камеру. Все это запускается на Chiscart DSpico — версии этой платы с портом USB-C, для которой удалось самостоятельно написать еще одно приложение: USB-геймпад. С его помощью 3DS определяется как игровой контроллер, который распознает Windows, и его можно использовать в Steam для игр с поддержкой контроллеров.

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

Игровые возможности и техническое устройство DSpico

DSpico — это флеш-картридж с открытым исходным кодом на базе Raspberry Pi, который, очевидно, также запускает игры. Прежде чем переходить к возможностям USB, стоит отметить, что это по-прежнему полноценный флеш-картридж, и со своей прямой задачей он справляется отлично. Вы помещаете резервные копии игр на карту microSD, картридж определяется как розничный картридж, а встроенный Pico Launcher предоставляет интерфейс для навигации.

Устройство поддерживает последовательное чтение с карт microSD со скоростью до 6 МБ/с и потребление энергии в режиме простоя около 57 мВт, что является значительным шагом вперед по сравнению эпохой R4, и при этом оно невероятно дешево. Необычным аспектом является полная открытость всего изделия: печатная плата, корпус, художественное оформление, прошивка, загрузчик, DLDI и загрузчик находятся в свободном доступе, причем аппаратное обеспечение лицензировано под CC BY-SA, а прошивка — под Zlib.

Команда LNH даже не продает его самостоятельно, что также означает, что приобретаемый вами продукт основан на открытом дизайне, а не является «официальным» товаром. Экземпляр автора поступил от Chiscart, которая взяла этот дизайн и заменила порт на USB-C.

Наличие чипа RP2040 имеет большое значение, поскольку он оснащен микроконтроллером Cortex-M0+ с 264 КБ оперативной памяти. Она скромная, но ее все же достаточно для выполнения задач, в которых Pico действительно хороша. Под капотом этот чип выполняет большой объем работы: прошивка использует блоки PIO чипа RP2040 для управления интерфейсом SDIO карты microSD на одном наборе выводов и шиной картриджа DS на другом.

На плате также присутствует порт разработки с UART, I2C, несколькими GPIO и отладкой SWD. USB-порт используется для первоначальной прошивки устройства: нужно извлечь SD-карту, подключить картридж к ПК, а затем скопировать файл UF2.

DSpico флеш-картридж Nintendo DS — иллюстрация 2 к материалу

Консоль запускает стек USB, а не картридж

Автор предполагал, что картридж сам обрабатывает USB, а консоль просто передает ему данные, но из исходного кода выяснилось, что все обстоит ровно наоборот. И все это благодаря TinyUSB — встроенной библиотеке USB, на которой построены все примеры от LNH.

TinyUSB обычно взаимодействует с USB-контроллером через драйвер контроллера устройства, и на DSpico этот драйвер работает на консоли DS, переводит низкоуровневые операции TinyUSB в пользовательские команды картриджа, которые RP2040 выполняет со своей периферией USB. Затем DS запускает остальную часть TinyUSB на своем ядре ARM7, а RP2040 транслирует вызовы к собственному USB-блоку. При этом линия прерывания картриджа, которую игра может использовать для определения готовности данных на карте, перепрофилируется под прерывание USB.

В результате, когда ядро ARM7 видит это прерывание, оно очищает очередь событий и собирает воедино такие элементы, как пакеты настройки из последовательных 32-битных операций чтения. Подключение картриджа к компьютеру означает, что перечисление, согласование дескрипторов, обработка конечных точек и классовый драйвер для имитируемого устройства выполняются на ядре ARM7TDMI, работающем на частоте 33 МГц, которое является… старым и медленным даже по стандартам 2004 года.

Эта шина изначально проектировалась исключительно для игровых картриджей, но теперь ее можно использовать для передачи видео и аудио. Картридж по сути представляет собой лишь периферийный USB-контроллер, а всем управляет именно консоль DS.

Из коробки команда LNH подготовила для DSpico четыре примера: режим массового накопителя для карты microSD картриджа, а также приложения, превращающие вашу DS в динамик, микрофон или веб-камеру. Автора удивило отсутствие примера с геймпадом, учитывая природу DS, поэтому он решил выяснить, сможет ли создать его самостоятельно. Консоль представляет собой просто корпус с крестовиной D-Pad и набором кнопок, так что это казалось логичным.

Как выяснилось, задача оказалась на удивление простой. Это стандартный HID-геймпад, созданный с использованием дескриптора отчетов TinyUSB, одного интерфейса и одной прерываемой конечной точки, которая опрашивается непрерывно.

DSpico флеш-картридж Nintendo DS — иллюстрация 3 к материалу

Интеграция DSpico и возможности аппаратного обеспечения

Устройство распознается основными платформами как стандартный контроллер, поэтому для его работы не нужны специальные драйверы, а какая-либо настройка вовсе не требуется.

Большинство кнопок стандартны, за исключением кнопок X и Y, которые могут считываться исключительно ядром Arm7, а не Arm9. Эта особенность характерна именно для линейки DS и проистекает из того факта, что консоль построена на заложенной ранее основе Game Boy Advance.

Вместо правого аналогового стика автор заставил сенсорный экран передавать значения, соответствующие аналоговому стику. Круглая падиклава (circle pad) на Nintendo 3DS в режиме DS эквивалентна не полноценному аналоговому стику, а скорее крестовине (D-Pad) в стиле Nintendo DS, однако она создает иллюзию настоящего контроллера, пусть играть в таком режиме и непросто.

Камера и микрофон задействуют аппаратное обеспечение в режиме DSi. При этом микрофон звучит действительно хорошо — значительно лучше, чем консоль 3DS имеет хоть какое-то право звучать.

Одним из первых примеров для тестирования стал тест микрофона от LNH, который превращает 3DS в USB-устройство, определяющееся в системе как монофонический аудиовход с параметрами 32 728 Гц и 16 бит через USB. Частота дискретизации сначала озадачила автора, пока не нашлся ее вероятный источник — тактовый генератор I2S консоли DSi.

Ядро Arm7 настраивает аудиокодек DSi, устанавливает PLL, активирует смещение микрофона и увеличивает предусилитель микрофона до коэффициента усиления в 40 дБ. Звучание получается на удивление хорошим, скорее напоминая полуприличный микрофон ноутбука, а не портативной игровой системы. Во время звонка в Discord друзья отметили, что звук отличается от привычного для 3DS, но не воспринимается как типичный микрофон этой консоли.

DSpico флеш-картридж Nintendo DS — иллюстрация 4 к материалу

К сожалению, Nintendo DS не оснащена необходимым TWL-кодеком, который используется в примере, поэтому подобное возможно либо на DSi, либо на Nintendo 3DS, работающей в режиме DSi. Динамик же можно использовать на любом устройстве семейства DS, равно как и функцию USB-накопителя (USB mass storage).

Ограничения интерфейса и производительность веб-камеры

Интерфейс USB работает медленно, достигая предела в 1 МБ/с. Несжатый кадр весит 96 КБ, с чем с трудом справляется шина картриджа 6,7 МГц в паре с процессором на 33 МГц. Именно из-за такой низкой скорости качество изображения в примере с веб-камерой оставляет желать лучшего. Функция работает, но приходится бороться не только с посредственным качеством аппаратной камеры 3DS, но и с целевым показателем в 10 кадров в секунду (на практике частота кадров оказывается еще ниже). Разрешение вывода составляет всего 256×192 пикселей, что соответствует нативному разрешению экрана Nintendo DS.

Таким образом, веб-камера работает кое-как, в то время как другие USB-приложения функционируют действительно очень хорошо. Эксперименты автора с созданием нативных скриншотов с экрана и их выгрузкой через картридж на компьютер уже принесли определенные результаты. Следующим шагом станет модификация нативного приложения Pico Launcher для создания пользовательских перехватов (hooks) на этапе запуска. Все это говорит о том, что у DSpico имеется огромный потенциал для дальнейшего развития.

Особенности установки и перспективы проекта

DSpico представляет собой фактически плату расширения с прямым подключением USB-C к центральному процессору консоли. Запуск DSpico на консоли 3DS сам по себе оказался непростой задачей. Устройство обладает гибридной прошивкой, которая работает на оригинальных DS и DS Lite, а также на модифицированных DSi или 3DS, но не функционирует на немодифицированных версиях этих систем. Для запуска на последних требуется специальная сборка WRFUxxed, в которой используется эксплойт в подписанном программном обеспечении WRFU Tester от Nintendo для получения полного доступа к выполнению кода в режиме DSi.

В конечном итоге получается консоль 3DS, которую ПК распознает последовательно как контроллер, веб-камеру, динамик и микрофон. Более того, весь этот код выполняется нативно на ядрах Arm7 из начала 2000-х годов, а чип RP2040 выполняет роль простого моста. Любой разработчик домашнего софта (homebrew) для Nintendo DS сможет повторить этот результат.

DSpico — один из самых интересных флеш-картриджей, с которыми приходилось сталкиваться автору, а его полностью открытый исходный код делает проект невероятно перспективным. Вряд ли кто-то бросится спешно заменять этим устройством свою привычную веб-камеру, но оно определенно открывает новые и недоступные ранее возможности для использования систем семейства DS.