|
|
![]() |
Sega – Mega WiFi.Флэш-картридж с беспроводной перезаписью и/или выход Мегадрайва в локалку и Интернет. Если начать повествование с конца, или именно последовательно раскрывать причинно-следственную цепочку событий … Дело было так: решив в очередной раз заказать печатных плат (не суть подо что) у уже проверенного качеством/исполнительностью/доставкой производителя – обратил внимание на предлагаемую им немалую скидку на другую услугу: сборку изделия на изготовленной плате (т.е. осуществление заводской сборки роботом на изготовленной тамже печатной плате проекта, из деталей, которые также будут приобретены без твоего участия). Т.е. тебе нужно лишь скинуть на завод трассировку (для изготовления печатной платы) и документацию по размещению компонентов на плате вместе с перечнем устанавливаемых компонентов, оплатить … и ждать готовый собранный девайс. Паять ничего не нужно будет! «Неспортивно»? – возможно, зато гарантированное качество, минимизация временных затрат на устранение технических ошибок сборки и отладку, обусловленную этим. Да и в целом возможно получить «на выходе» изделие в масштабах недоступное для ручной пайки (чисто из-за геометрических размеров компонентов, их ножек и т.п.). А уж тем более если есть желание/необходимость изготовления нескольких экземпляров … Вобщем решил «обкатать» технологию для себя в части дальнейшего использования к своим проектам/разработкам. Но для начала, подумал, что нужно взять уже отлаженный «чужой» проект – чтоб в случае чего не совсем «деньги на ветер». Да и своего сколь-либо серьезного проекта для изготовления/тиражирования под рукой не было – да еще и курс бакса был невысокий, хотелось воспользоваться типа случаем. Вот так и получилось – что решил запузырить и запрячь китайский завод на изготовление картриджей Mega WiFi второй редакции (Rev.B – его точно врукопашку паять не будешь в отличии от первой редакции). Теперь зайдем с другой стороны. Откуда и почему именно Mega WiFi? Впервые обнаружил в сети я проект Mega WiFi уже давно, немногим после его появления вероятно. Потом не однократно обращал на него внимание вновь и даже писал свои мысли о нем в приватных беседах c друзьями-единомышленниками в части Мегадрайв-хобби. Но внимания и интереса, достаточного для инициации его воспроизведения «в железе» не набиралось. В первую очередь сомнения были на предмет того, что мне с ним делать потом? Ведь для запуска контента на приставке у меня уже есть несколько разных эвердрайвов, а функционал сетевого взаимодействия меня не привлекал на столько чтобы его прям-таки не хватало. Но более всего останавливало то, что не хотелось, собрав некую поделку «чужого» изобретения - остаться с ней один-на-один. Ведь как практика показывает, что многие, на первый взгляд интересные и достойные внимания авторские разработки, так и остаются если даже не на стадии определенной незавершенности - то без дальнейшей поддержки уж наверняка не только со стороны автора, но и со стороны комьюнити. А оставаться с чужим детищем в «полу-недоразвитом» состоянии, также как и брать на свои плечи его развитие – зачастую не хочется совсем. Если уж самому что и тащить – то и с нуля разрабатывать нужно, чтоб не плеваться потом на мудачество автора, изобразившего «этакое», не вписывающееся в твое представление о прекрасном и изящном (в части технического искусства и его реализации). Но в случае с Mega WiFi, спустя несколько лет, время показало, что его автор не только не забросил свой проект, а и со стороны комьюнити проект получил не бог-весть какую, но всеже поддержку. Вдобавок здесь, от автора мы получаем в виде опенсорса не просто набор неких примеров кода – а вполне неплохо задокументированное API, чувствуется что человек душу вложил и не бросает дело рук своих. Также недавно он выпустил обновленную аппаратную версию реализации картриджа Mega WiFi (Rev.B). Поддержка комьюнити софтом хоть и не велика, но проект mega-drive-midi-interface, поддерживающий железо Mega WiFi для реализации канала связи с компом – весомый аргумент для имения в своей коллекции этого изделия. Итак, критическая масса достигнута. Хочу Mega WiFi! Отправка проекта на завод и взаимодействие с ним в процессе – тема отдельного как минимум абзаца. Возможно, расскажу-допишу потом. А пока, в вернее теперь, когда уже все сделано и приехало – сразу переходим к делу! Инициализация чистого заводского картриджа Mega WiFi.Качество изготовления и сборки, без преувеличения, просто идеальное! Осталось только «вдохнуть жизнь» в девственно чистую девайсину – т.е. «прошить» её. Начинаем рассматривать-изучать где/что/куда … Т.е. что и куда собственно «вдыхать» ;-). Как зачастую в случае с опенсорсными проектами есть вариант не только самому из исходников собрать бинарники для его заливки, но и воспользоваться уже готовой «релизной» сборкой (хоть возможно и не самой свежей). С Мегавайфаем на первый взгляд аналогично – находим и вооружаемся бинарниками, изучаем архитектуру устройства в целом для понимания того каким инструментарием будем его шить … Разумеется, я несколько ранее еще до получения, взглянул не только в краткое авторское «хау-ту», но и на принципиальную схему. Т.к. автор в описании предлагает воспользоваться для первичной инициации устройства еще и программатором также его собственной разработки, который мне совершенно собирать не хотелось и вцелом не планировалось ни разу. Зачем? – коль есть FlashKit, есть исходники … нужно будет – скрестим/наколдуем чего-нибудь! С такой мыслью я навскидку и забросил раздумья об ините железа до прихода готовых картриджей с завода. Но вот картриджи пришли, и нужно было от мыслей переходить к делу. Чуток лирики: Mega WiFi картридж состоит фактически словно из двух независимых частей: 1. Обычного Мегадрайв-картриджа с «большой» микросхемой памяти (на 8МБайт) и линейной адресацией (впрочем «несчастливые» обладатели Sega-CD, нежелающие по религиозным соображениям его отключать ни в коем случае – могут перестановкой перемычки-залипухи кастрировать емкость флэш-картриджа Мегавайфая на половину, до классического размера). 2. Собственно «WiFi-адаптера» - роль которого в нашем случае выполняет модуль, являющийся по сути однокристальной ЭВМ, а именно модели ESP32-C3 в классическом исполнении с 4Мбайтной флэшкой в своем составе. Мелкая рассыпуха на плате, помимо избыточной (фэншуйной) развязки уровней сигналов, обеспечивает также дешифрацию адресных и разрешающих сигналов со стороны Мегадрайва, позволяя общаться программе на стороне Мегадрайва с WiFi-адаптером через классическое окно в диапазоне 0xA130xx. Разумеется, т.к. взаимодействие с системой на модуле ESP32 происходит через интерфейс UART – на картридже также установлена микросхема-мост из параллельного интерфейса в последовательный. А, собственно, и всё! Итого, соответственно, требуется два независимых шага для инициализации и приведение устройства к изящному пользовательскому функционалу, предусмотренному разработчиком: Шаг 1 – Записать загрузчик в «картридж мегадрайва»Тут нам автор Мегавайфая предлагает воспользоваться интерфейсом-программатором его же разработки. Только ради одной данной цели конструировать его так себе затея – FlashKit вполне подойдет. Конечно, использовать его нужно будет с моей управляющей софтиной, которую для данной цели я решился-таки зарелизить до версии 1.0.3.5, добавив в нее сначала возможность заливки 8-мегабайных картриджей с байпассным алгоритмом записи (до этой версии был вариант только в пословном режиме, т.к. поддержка 8Мбайт была лишь под этой кнопкой). А чуть позже подумал, что ждать пока будет производиться обнуление полного образа, когда реально требуется записать лишь 256 байт плюс 64 килобайта – затея так себе, и добавил еще одну кнопочку исключительно для данной цели (шьются только два блока, да и стирать всю микросхему необязательно: соответствующую галку можно снять). Образ того в память картриджа что шьем можно взять уже собранный (для Rev.B – версия 1.1), или собрать самому из исходников (при помощи предлагаемого докер-контейнера это достаточно быстро и просто). Оба варианта приводят к навскидку одинаковому результату, хоть и контрольные суммы разные … Шаг 2 – Записать в модуль ESP32, необходимое для его работы …И тут нам автор также предлагает воспользоваться все тем же его программатором и зашить ESP-ху через разъем слота картриджа. Изначально виделся логичным путь дополнить управляющую софтину к Флэшкиту, то тема эта если не столько трудозатратная, сколько обременительная. Обратил на себя усбишный разъем на плате Мегавайфая – по схеме он подключен к нативному интерфейсу модуля. Гугление привело к пониманию что существует фирменная тулза в бинарном виде под винду, позволяющая через этот интерфейс прошить память установленную в модуле. Для этого нам нужны скомпилированные бинарники прошивки. На текущий момент этот вариант успешно оттестирован и доступен для повторения благодаря наличию прошивки под ESP32-C3 (представленной по ссылке выше), которую мне пришлось таки собрать из исходников самому. Да, автор Мегавайфая толи по лени и распиздяйству, толи принципиально в качестве начального «порога вхождения», толи … вобщем выложил лишь бинарники собранные на первую аппаратную версию Mega WiFi, где был установлен модуль ESP8266. Путем заливки «в лоб» бинарников этой прошивки в ESP32-C3 - нихрена не работает, что не удивительно само-по-себе, но удивительно то что автор, представив новую версию железа, не только не выложил соответствующей собранной прошивки (не позаботился о простоте ее сборки), но даже и не указал на необходимость этого шага. «Отправил юзверя в свободное плавание», так сказать. Благо сомнений в качестве заводского изготовления картриджа не было, и причину того что мегадрай-софт в упор не видел WiFi-адаптера почти однозначно было основание списать на несовместимость выложенной в прошивки для модуля ESP. Собираем прошивку из исходников соответствующим тулчейном (esp-idf, состоящим преимущественно из кучи питоновских скриптов), причем определённой версии - 5.3.1 (не последней, а указанной в исходниках более древней). Поднял я всю эту ботву исключительно под виндой (без всяких виртуалок и wsl-ей). Причем собрать тупо по инструкции с сайта автора тоже не получится – нужно было погуглив понять, что дело не в как-таковых ошибках (и пытаться пофиксить исходники или еще чего), а что не хватает указания платформы сборки (ESP32-C3) либо через параметр (запускаем сначала idf.py set-target esp32c3, а лишь потом idf.py build), либо через редактирование конфига (мэйк-файла). Т.е. типа нас проверяют на «минимальный пороговый уровень скиллованности» … Залить в ESP собранную прошивку можно как скриптом из тулчейна, в одну команду (навскидку и аоумолчанию так idf.py flash, или с полным описанием python -m esptool --chip esp32c3 -b 460800 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_size 4MB --flash_freq 80m 0x0 build\bootloader\bootloader.bin 0x8000 build\partition_table\partition-table.bin 0xe000 build\ota_data_initial.bin 0x10000 build\mw-fw-rtos.bin); либо вытащить из него собранные бинарники получившейся прошивки для последующей их заливки фирменной тулзой (о чем писал выше и приводил ссылку на архив). Скриншот дает подсказку что и куда должно быть записано, также учитываем аппаратную составляющую модуля (в моем случае под металлической крышкой кварц на 40MHz и память подключённая в режиме QPI – это можно узнать из даташита соответствующего маркировке модуля). Как-то так. Далее. Разумеется «прошивку» ESP32 можно и модернизировать и дополнить, да и просто заменить (а не оставаться в рамках алгоритмов, реализованных в загрузчике и/или задокументированных для использования WiFi-соединения в самописных приложениях пользователя-разработчика) – но пока мы повторяем то, что нам предлагается как «готовое решение» без вмешательств. Использование проинициализированного картриджа Mega WiFi.Для «конечного пользователя» (не программиста), который держит в руках полностью готовый к эксплуатации Мегавайфай; как и для гика, который наконец-таки завершил свои труды по созданию и «пуско-наладке» данного изделия и теперь тоже может с удовлетворением вздохнуть и почувствовать себя пользователем – потребуется лишь утилита wflash. Дополнительных же аппаратных средств не потребуется вовсе (не считая WiFi точки доступа). Основная модель использования картриджа Mega WiFi – это его беспроводное (через сеть) программирование как «одно-игрового картриджа». Для последующего запуска записанной ранее игры – сетевое соединение, разумеется, не потребуется (в случае если это обычная сеговская гейма или софтина, а не специально созданная для использования сетевых возможностей Мегавайфая). При загрузке мы всегда первым видим меню загрузчика, из которого можем как выбрать непосредственно запуск записанной ранее программы, так и произвести настройку устройства, посмотреть информацию о его железе и «прошитом» софте (тем самым бегло убедившись в общей исправности устройства), либо же перевести его в режим ожидания связи с хостом для приема и прошивки нового контента (игры). Загрузчик занимает последние 64кБ, а прошивальщик автоматически патчит таблицу векторов в начале адресного пространства (для передачи управления загрузчику при запуске). Для сохранения работоспособности такой модели требуется чтобы в полезной нагрузке (дампе игры) этот самый хвост не использовался, что при линейной адресации картриджа Mega WiFi (по-умолчанию) не является проблемой (даже «увесистые» более чем шестиметровые хаки популярных игр оставляют требуемое место с лихвой). В случае же если вы решили кастрировать (штатным джампером) Мегавайфай до классических четырех метров … то смотрите и учитывайте указанный нюанс. На что обратить внимание в меню загрузчика? Настроек немного – основное это конфигурирование профилей доступа к WiFi-сети. Всего предусмотрено три ячейки, но первая зачастую используется в режиме «по-умолчанию» в «специализированном» софте под Мегавайфай, авторы которого поленились делать возможность селекции выбора профилей. Указанные профили хранятся в памяти модуля ESP. Часовой пояс тоже актуально выбирать лишь для целей его дальнейшего применения (формально часы тикают внутри ESP модуля автономно, но без энергонезависимости). Утилита wflash (mw-wf-cli) доступна в собранном виде, интерфейс у нее черезпеньколодный и люто неудобный – хотя понятно что к автору без претензий, это просто пример, да еще и с исходником … но несмотря на определенные пояснения автора а также наличие докер-контейнера для его сборки – компиляция не оказалась тривиальной задачей (для меня по крайней мере). Я долго материл автора, какого рожна он так фанатеет по фреймворку Qt и опенсорсным нативным компиляторам - при наличии если даже не Visual Studio (ввиду ее условной «платности»), то хотя бы среды Visual Code … Вобщем было бы здорово, если бы кто-нибудь переписал/адаптировал эту тулзу под сборку в нормальной/популярной среде без всяких хитрых изъёбств. А пока же остается только запускать готовый экзешник wflash.exe c опцией -Q и юзать худо-бедно какой-то гуй, благо хоть вцелом рабочий (хотя и тормозной и зависающий в конце операционного цикла при некоторых действиях). У wflash еще есть вроде и консольный режим, но за отсутствием встроенного хелпа, вызываемого классическими опциями-параметрами – как воспользоваться им: не разобрался (в исходники глядел, и опции там указаны вроде как, только экзешник словно не выводит в консоль инфу …). Обобщим.В любом случае Mega WiFi оказался для меня штукой более интересной, чем я изначально думал. Рад что появилась еще одна поляна для Мегадрайв-творчества. Однако рекомендовать Мегавайфай как перезаписываемый картридж исключительно для запуска готового контента едвали можно не только по причине цены его изготовления, наверняка превосходящей цену покупки реплики Эвердрайва MD, с которой игры запускать и проще, и удобнее, и кстати быстрее (это вторая причина). Из того что в первую очередь хотелось бы реализовать/увидеть в рамках сетевых функций Мегавайфая – это модификации/патчи классических игрушек под Мегадрайв на предмет сохранения таблиц рекордов через Интернет на облачном сервисе (например, для Devil Crash). PS. А вот с совместимостью, по результатам тестирования всей партии Мегавайфаев на всей моей коллекции боевых и музейных Мегадрайвов, оказался … Вобщем то и тестирование такое я затеял не любопытства праздного ради, а для локализации понимания причины ряда нюансов технически на первый взгляд навскидку необъяснимых. То, что микросхемы памяти на разных картриджах имеют различное время полного стирания массива при одинаковом содержимом – это конечно странно, но не критично. А вот то, что загрузчик следует записывать после команды стирания сектора под ним (а не всей микросхемы) – это уже интереснее и непонятнее, причем не на всех экземплярах картриджа такой нюанс имеет место быть. Шаманство? А на какой консоли я тестировал картриджи? (спросят меня возможно - ведь до сих пор я так и не сказал). В основном на тюнингованном экземпляре с платой VA0 и процом m68010 (моя основная боевая машина), а для того чтобы исключить сомнения во влиянии нетипового проца – еще под рукой есть «максимально рассыпушный» клон на плате К1127С. На последнем стабильность, а вернее работоспособность как-таковая, картриджа Mega WiFi: «так себе». Даже не важно какой экземпляр ты взял и какой набор прошивок залил: при обращении к модулю ESP - система наглухо виснет! Попробуем другие приставки? Отчего бы и нет. И вот тут результаты еще более печальные (не для меня конечно, а для автора Мегавайфая например, ну и возможно для комьюнити вцелом). Короче не на одной однокристаллке картридж Mega WiFi даже не стартует, от слова совсем! А это и весь мой парк на базе SM801 (а не только самой первой, описанной в материале), и 580G, а также и лютый новодел SG68. Получается, что из клонов успешно переваривает Мегавайфай в полной мере лишь изделие-закос под VA5 (в части «рассыпчатости») с маркировкой на плате WB-S1 – т.е. собранное на серии «SE», не зря я его в свое время в статье назвал лучшим клоном, не ошибся. А в чем причина несовместимости? Ну в случае с платой на серии «TA» (K1127C) вероятно нужно смотреть в аппаратную сторону реализации объвязки для доступа к регистрам с адресами 0xA13xxx (где окно моста в ESP-модуль), а в случае с однокристаллками всеми – не иначе опять излишнее мудрствование разработчика и непомерное увлечение конверторами уровней сигнальных линий дает свой негативный эффект (если в случае сигналов к ESP применение конвертеров хоть как-то обосновано, то микросхему памяти нужно вешать НАПРЯМУЮ! – как я это сделал в смоем проекте картриджа). Вотъ. MiGeRA (май-июнь 2025) |