Sega MegaDrive – флэшеризация картриджа (DY2488).

Превращаем одноразовый картридж в перезаписываемый.

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

Многие новодельные картриджи для Мегадрайва построенные на масочном ПЗУ-«кляксе» имеют на плате также разведенное посадочное место для микросхемы формата SOP44, а также еще под разную мелкую логику одно или даже несколько посадочных мест. На чем сэкономили? И какой полный функционал мог быть у такого картриджа - задавался я неоднократно вопросом, а вместе с тем и мыслью о возможности установки вместо масочного ПЗУ (изящно отключив его) микросхемы флэш-ПЗУ с возможность ее программирования без выпаивания – т.е. через разъем слота.

Флэшеризация масочного картриджа – взгляд издалека.

Идея появилась в желании совместить почти «приятное с полезным», а вернее из двух ненужных финтифлюх сделать одну пригожую, да за одно: и «скил прокачать» чуток, и статью написать - ибо ничего подобного, погуглив на вскидку, найти не удалось. В роли «ненужностей» выступили несколько масочных новодельных Сега-картриджей (этак где-то 2010-х годов) с бесполезным мне контентом (который, тем более, все равно был задамплен), а также модуль со шрифтами от какого-то архаичного принтака, содержащий в себе пару микросхем флэш-ПЗУ - да не каких-нибудь, а интеловских: 16-ти битных, размером в полмегабайта каждая (PA28F400).

Экземпляр картриджа был выбран самый НЕинтересный с точки зрения контента и добротный с точки зрения разводки.

Целью стало, с минимальным вмешательством в схемотехнику, получить наиболее изящное и наименее «колхозное» решение, позволяющее использовать в качестве интерфейса программирования монтируемого флэш-ПЗУ картриджа программатор Flashkit-MD разработки krikzz, а рестайлинга и производства KY-Tech (в официальном магазине которых на алиэкспрессе я его и приобрел в паре с разработанными и изготовленными «по идентичной схеме взаимодействия» картриджами). Т.к. топология печатных плат, а вместе с этим и исходные коды к программатору как для CPLD, на которой он построен, так для компа под винду открыты – китайцам не пришлось заниматься реверс-инженерингом, а вместе с этим и нарушать авторские права. Не придется класть болт на них и мне …

Оценка схемотехники масочного картриджа DY2488.

Детальное изучение трассировки картриджа поначалу принесло некоторое разочарование, а затея чуть ли не была признана не реализуемой с учетом требования «изящности». Так как штатное «каплевидное» ПЗУ масочное (т.е. кристалл записывается еще до установки и пайки на плату) – то схемотехника платы ни разу не предусматривает возможность записи в него (даже однократной), это и понятно. Но меня интересовало больше не это: каплю и так планировалось просто отключить, что сделать легко: нужно лишь деактивировать входы выбора чипа или разрешения вывода (CE или OE). Важнее разводка посадочного места формата SOP44, которое должна занять флэшка – уж там точно не масочное ПЗУ планировалось ставить, а … Что тоже не удивительно, но печально – его должна была занять однократно программируемая во внешнем программаторе перед установкой ROM (PROM), а поэтому из 44-х ног микросхемы площадки есть лишь под 43 (нет под Vpp). Но не унываем, изучаем доку на нашу 28F400, прозваниваем и срисовываем коммутационную карту всего картриджа: если что - то и «залипуху» лишнюю прилепим или снимем, да и проводочек маленький кинуть недалече накрайняк тоже можно. А зачем две микросхемы на картридже? – а мелкая логика что делает? Но сначала по см. рисунки (по клику крупнее) и линии связи, которые вырисовались в результате.


Четырнадцатиногая логика (изначально предположив по маркировке «00») – это 74LS00, т.е. 4*2И-НЕ, ее наличие, как и наличие второго ПЗУ помимо масочной «капли», реализует схему последовательной адресации адресных пространств двух возможных микросхем ПЗУ. Причем первым (по младшим адресам) будет ПЗУ в корпусе SOP, а затем «капля». Размер ПЗУ может варьироваться от 4Мбит (512кбайт) до 8Мбит (1Мбайт) – т.е. максимальный объем картриджа 2Мбайта. Получать 1Мбайт в виде двух микросхем – было бы странным решением, т.к. его можно достичь и одной масочной «каплей». В моем же случае (не знаю истинный размер масочного ПЗУ, возможно 1Мбайт) картридж использует «каплю» лишь на полмегабайта (4Мбита).

Что нам нужно для работы с флэшкой 28F400?

Программатор-дампер Flashkit, позволяющий «внутрисхемно» программировать картриджи через штатный слотовый разъем, в качестве сигнала WE используется контакт B28 слота картриджа Сеги (сигнал #LWr) – что вполне логично и удобно: в режиме чтения картриджа в рамках его работы в приставке на этой ноге высокий уровень, гарантированно удерживающий ПЗУ в режиме чтения. Программатор же, используя эту ногу, варьирует сигналом #WE  и в соответствии с заданным алгоритмом обеспечивает возможность «записи» (передачи информации в сторону) микросхемы флэш-ПЗУ. На нашем картридже B28 не разведен от слова «совсем», не иначе как придется кидать как-то отдельный провод – тут без вариантов. А что еще нужно сделать?

Аппаратная часть - модификация картриджа.

  1. Отключаем штатную «каплю» (неразрушающим способом). Сигнал #OE просто так не отключить, он с обеих ПЗУ объединяется и кратчайшим путем уходит в слот на B16 (т.е. наоборот, не суть). Отрезать конечно можно, а вот восстановить – едвали. Не будем сразу отрезать «обратный путь». Есть еще сигнал #CE, который должен отключить микросхему даже более полно, чем #OE (отключение всего чипа, а не только его выходных буферов от шины). Тут схемотехника картриджа нам благоволит – есть два пяточка, соединенных каплей, снимаем ее: и нога #CE ROM-чипа-кляксы теперь висит в воздухе, т.е. уже явно не земля и микросхема должна быть отключена! Ан нет. Приконнектить ее к VCC на вскидку сразу изящно не получается, но можно (я подумал) поступить проще: на масочное ПЗУ ведь приходит питание (VCC) и сигнал «отсутствия сброса» (#RP), а т.к. все линии питания от слота уже отслежены, более того – одна из них уходит в микросхему через еще одну «залипуху» на контактных площадках, снимаем и ее (т.е. или обесточиваем, или загонят «каплю» в вечный сброс) … И тут уже практически чудо: почему «капля» продолжает работать? – совсем непонятно, через сигнальные ноги чтоли? Но она работает, как и прежде! Вобщем без подтягивания к питанию ноги #CE не обойтись. Но благо к питанию нам много чего еще подтягивать нужно и это упрощает задачу. Логическая единица (VCC) нам нужна еще и на #WP, и на #RP, и (как показала практика в дальнейшем) на #BYTE – а с учетом больших контактных площадок под 74LS00 завести ее на линию к #CE масочного ПЗУ оказалось можно достаточно просто и коротко.
  2. Отключаем лишние контакты от слота – B7 и B8 (отрезаем, тем более что они не используются в конкретном экземпляре картриджа). Это для масочного ПЗУ и однократки в SOP адресная линия A18 и общая A19 идущая к 74LS00 (выбирается встроенная или корпусная ПЗУ при наличии микросхемы «логики»). Для нашей устанавливаемой флэшки это соответственно #WP (которую тупо вешаем на VCC) и #WE, коммутируемую на B28 для возможности записи программатором Flashkit (на B7 и B8 они нам не нужны, при объеме в полмегабайта предустановленный контент их также не использовал – так что если что, то не теряем возможность отката). Запаиваем флэшку 28F400.
  3. Коммутрируем #CE посадочного места SOP44 на соответствующий пин слота (B17) – сделать это легко, трассировка это предусматривает: просто ставим «залипуху» в предназначенное место.
  4. Под первую ногу (Vpp) корпуса SOP контактной площадки нет, но рядом у нас вторая нога (#WP), которую мы тоже должны соединить с VCC – соединяем их каплей припоя и тут же рядом зачищаем контактную площадку, чтобы «залипуха» наша контачила и с VCC (без лишних проводов и т.п. – так по-умолчанию вторая нога SOP заведена на B7 слота, от которого мы ее отрезали).
  5. C #WE решил не колхозить, а сделать «съемное» решение. Провод нужен только на время когда картридж вставлен в программатор – поэтому и провод нужен не всегда. Разъем программатора благодаря своему конструктиву (повезло, не все они такие) позволяет заранее (перед установкой картриджа) параллельно (не касаясь соединения картриджа) подключить еще и загильзованный (для надежной многоразовой коммутации) провод. К картриджу же он у меня подключается через впаянное пин-гнездо от «цанговой» панельки.
  6. И последнее - питание. Штатное масочное ПЗУ питалось от 3.6В получаемых за счет цепочки из стабилитрона и резистора. Наша вновь установленная PA28F400 рассчитана на питание 5В (по крайней мере в режиме записи это минимум) – демонтируем указанные детали, ставим перемычку – слот Сеги штатно пятивольтовый, что нам и нужно.
  7. Вроде все. Но как показали тесты – не совсем. В SOP под ногу #BYTE также нет контактной площадки (висит в воздухе) – вероятно для однократок этого достаточно чтоб трактовать ее состояние как «1». Но для нашей флэшки - нет! Причем тут вариативность фактически сенсорная – переключается касанием пальца, но при включении пребывает чаще в «0» … Вобщем для гарантированной единицы (16-битный режим) нужно вешать ее тоже на VCC. Это пожалуй самая «колхозная» доработка, но я ее постарался спрятать. Обрезком лакированного трансформаторного провода, пропущенного под микросхемой (соответственно его диаметр не более 0.25мм) соединяем ногу #BYTE на выбор с одной из крайних ног (VCC или #RP, что по коммутации одно и тоже).
  8. Для полного феншуя (я делать не стал) – можно ногу #WE подтянуть резистором к VCC, чтоб вне программатора там единица была архи-стабильная и микросхема читалась безглючно не только всегда, но и … ваще. Но, как показали тесты: если не касаться этого контакта руками, то подтяжки не требуется, «воздух» обеспечивает достаточный высокий уровень а-ля «1». Но игры с активным чтением ROM-памяти (а не те, что копируют себя в ОЗУ и выполняются оттуда) могут зависать, если этот контакт трогать при включенной приставке. Изящного коммутационного решения установки резистора не нашел – поэтому данный пункт направил лесом (можно поставить SMD-резистор между 43 и 44 ногами флэшки). Короче, не распускаем руки и все Ok ;-)

Программная часть – последний штрих.

Проект Flashkit опенсорсный, что несомненно благо: хоть и изучение пусть простого но чужого кода да еще и без комментариев - занятие неблагодарное. Пару дней потратил, потестил – в результате объединил и сделал «мультисофтину». Старый (штатный) функционал сохранен и даже несколько причесан и облагорожен как визуально, так и чуток технологически. И самое главное – добавлена возможность работы с модифицированным картриджем DY2488 – теперь уже «flash», а вернее с микросхемой флэш-ПЗУ Intel PA28F400 на него смонтированной. Собранную версию (которую я назвал «plus») вместе с исходниками можно скачать и использовать всегда (в т.ч. вместо базовой от krikzz).

PS. Что еще добавить? Флэш-ПЗУ 28F400 весьма древнее и технологически вобщем то и не «флэш», а EEPROM – т.е. запись исключительно побайтная («пословная» в нашем случае), больше накладных расходов на управление микросхемой, нет еще и … много чего придуманного позднее. Не суть. Еще что? - как показали тесты: флага готовности байта статуса можно и не ждать – пока мы передаем программатору команду для записи следующего слова, запись текущего успевает завершиться – но все равно с учетом объема не быстро (хотя если по честному читать и ждать флаг то еще медленнее). Но этот флэш-картридж не отладочное средство, пару минут можно подождать – результат гарантирован. В исходниках закомментированы и прокомментированы разные варианты реализации записи – оставлен и скомпилирован самый шустрый и рабочий (хотя с точки зрения документации несколько «недокументированно сокращенный»).

PPS. В гугле и не только по запросу «28F400» получаешь с наибольшей релевантностью ссылки на всякие марки автомобилей … Внезапно. Просто данная микросхема памяти используется в блоках ECU многих древних авто, как оказалось. И на всяких там форумах-блогах обитатели их с умным видом пыжатся и надувают щеки в тему (и без). А еще цена микрухи 28F400 на том же алиэкспрессе непомерна высока, что видать обусловлено не столько ее раритетностью, сколько популярностью именно среди автолюбителей и расчетом на их кошельки.

MiGeRA (ноябрь 2021)

Заглавная » MegaDrive » Sega MegaDrive – флэшеризация картриджа