Sega картриджи своими руками

Sega картриджи своими руками

Пример в этом руководстве приведен на картридже Sega Megadrive, но основной принцип такой же и для других старых консолей, которые используют картриджи типа ROM (Read Only Memory).
Итак, картриджи можно условно разделить на две категории:

1. Классические картриджи — без возможности сохранения игрового процесса

Этот тип картриджей, безусловно, наиболее распространенный, на нем мы видим большой чип памяти MASKROM. MaskROM — Масочные ПЗУ — Это наиболее старое семейство микросхем ЭП. Информация в такую память заносится в процессе изготовления кристалла и в дальнейшем не может изменяться. Многолетняя популярность MaskROM обуславливалась низкой ценой при крупносерийном производстве.

2. Картриджи с возможностью сохранения игрового процесса:

они делятся на две подкатегории, те, которые используют системы резервного копирования путем предоставления RAM (Random Access Memory)

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

Но есть и другой реже используемый вид картриджей использующий ферромагнитный тип памяти (FRAM — в основе памяти такого типа — особые кристаллы из ферромагнетика, интегрированные в конденсатор, который обеспечивает энергонезависимость. Воздействуя элекрическим полем, поляризацию кристалла можно менять и обеспечивать два стабильных состояния — логические 0 и 1. По сравнению с другими типами памяти, FRAM отличается ускоренным доступом к данным, слабым тепловыделением, меньшим размером чипов, а также является более простой в производстве):

Такие картриджи большая редкость, их можно найти с играми: Sonic 3, Megaman, NBA Jam Tournament Edition и Wonderboy in MonsterWorld.

Подготовка всего необходимого

Итак. для наших извращений потребуется следующее:

1. Программатор который в состоянии осилить EPROM 27c322. В моем случае я использую Willem и адаптер для DIP42 Eprom 16bit:

3. Паяльник, флюс, припой и прямые руки .
4. Картридж донор — он же жертва 🙂

Подготовка ROM’а игры.

-Первое, скачать ром из интернета (кэп не спит!)

Я буду делать игру Gaiares (не использующую сохранения)!

Основная проблема многих ромов скачанных не понятно откуда — это не правильная контрольная сумма. Эмуляторам на неё чихать, а вот живой сеге — нет. Можете скачать программку FixCheckSum и перефиксать все не перефиксанное )))

Просто нажмите на Fix и исправте контрольную сумму 🙂

вставляем в адаптер:

Подключаем адаптер к программатору, программатор к компьютеру, затем выбираем тип микросхем, в нашем случае 27c322

Проверяем положение переключателей на программаторе и жмем BlankTest, что бы убедиться, что EPROM пуст

При покупке EPROM он не всегда пуст.
Убедитесь что внизу написано «Device is empty»

Теперь загружаем ROM:

и выполняем действия BYTE SWAP

это меняет каждые два байта местами, теперь игра готова для записи в EPROM. Щелкните на значок микросхемы с молнией: Program chip.

Если все пойдет хорошо должно появиться следующее сообщение:

После того, как появится это сообщение можно извлечь EPROM из программатора и залепить чем-нибудь на микросхеме окошечко ))

Теперь, когда наш Eprom запрограммирован — самое время для самого приятного.
Поскольку я записывал игру Gaiares я буду использовать плату из игры, что не поддерживает сохранений (в моем случае Экко 2).

Нам нужно отпаять MaskRom.. переворачиваем плату..

Аккуратно удаляем припой с каждой ножки микросхемы и осторожно удаляем MaskRom

Отметим, что контакты A18, A19 и A20 не совпадают с оригинальной Sega MaskRom в этом случае мы должны будем перенаправить их. Просто-напросто отогнем эти зловредные ножки EPROM

Теперь нужно найти куда паять A19, A18 и A20:
Вот распиновка картриджа:

Они соответствуют номерам для A18 В7, В8 и В9 для А19-А20.
Припаиваем три проводка и вуаля:

Все, картридж готов! Теперь остается только проверить его на консоли 🙂

Вы думали на этом все? Ничего подобного..
Даешь, так сказать, пиратство в массы! Нам нужно распечатать этикетку для коробки из под картриджа!
Найти отсканированные обложки в интернете не проблема, но основная проблема в том, что они все разного разрешения. Для решения этой проблемы вы можете скачать шаблон этикетки сеговского картирджа и используя Open Office с легкостью подогнать под него любое изображение и тут же распечатать.

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

Читайте также:  Как красиво украсить ежедневник внутри своими руками

Источник

Sega картриджи своими руками

Немного ностальгии: самодельный перезаписываемый картридж для SEGA MEGA DRIVE | GENESIS

Автор: stalker1424
Опубликовано 31.07.2020
Создано при помощи КотоРед.

И ещё раз здравствуйте. «Ещё раз» потому, что проведя за написанием этой статьи около 4,5 часов, я нажал кнопку «Ну как там?» и сайт перенаправил меня вместо страницы предварительного просмотра статьи на страницу создания новой статьи, и все мои труды не сохранились. Так что в этот раз я опишу кратко самую суть. У кого будут вопросы, спрашивайте, отвечу.

Инструкция по использованию картриджа следующая: 1) Форматируем micro-SD флешку в FAT32. Размер флешки не более 128 Гб. 2) Закидываем на флешку РОМ игры размером не более 4194304 байт (4Мб). Файл должен быть в корне диска с названием rom и расширением .bin .gen .md .32x либо .smd 3) Вставляем флешку с РОМ-ом в картридж 4) Вставляем в гнездо питания картриджа кабель питания от сеги 5) После подачи питания на картридж, не позднее 3 секунд, нужно нажать кнопку начала программирования. Если всё в порядке, начнёт моргать зелёный светодиод 6) Ждём от 8-ми минут до часа, в зависимости от размера РОМ-а игры. На программирование игры размером 512 Кб уходит около 8 минут 7) Если программирование успешно завершено, то зелёный светодиод перестанет мигать и загорится ровным светом 8) Отключаем питание, возвращаем кабель питания обратно в сегу, вставляем наш картридж в сегу и наслаждаемся игрой, ностальгируем=)

В случае какой-либо ошибки процесс программирования прерывается и начинает моргать красный светодиод. Моргает он кодом ошибки с паузами между повторениями кода в 2,5 секунды. Пауза между блинками 300мс. Количество морганий (блинков) = номеру возникшей ошибки. Ошибки могут быть следующие:

  1. 1 блинк — ошибка инициализации карты
  2. 2 блинка — ошибка запроса идентификатора микросхемы H0
  3. 3 блинка — ошибка запроса идентификатора микросхемы L0
  4. 4 блинка — ошибка запроса идентификатора микросхемы H1
  5. 5 блинков — ошибка запроса идентификатора микросхемы L1
  6. 6 блинков — ошибка запроса идентификатора микросхемы H2
  7. 7 блинков — ошибка запроса идентификатора микросхемы L2
  8. 8 блинков — ошибка запроса идентификатора микросхемы H3
  9. 9 блинков — ошибка запроса идентификатора микросхемы L3
  10. 10 блинков — ошибка стирания микросхемы H0
  11. 11 блинков — ошибка стирания микросхемы L0
  12. 12 блинков — ошибка стирания микросхемы H1
  13. 13 блинков — ошибка стирания микросхемы L1
  14. 14 блинков — ошибка стирания микросхемы H2
  15. 15 блинков — ошибка стирания микросхемы L2
  16. 16 блинков — ошибка стирания микросхемы H3
  17. 17 блинков — ошибка стирания микросхемы L3
  18. 18 блинков — ошибка программирования микросхемы H0
  19. 19 блинков — ошибка программирования микросхемы L0
  20. 20 блинков — ошибка программирования микросхемы H1
  21. 21 блинк — ошибка программирования микросхемы L1
  22. 22 блинка — ошибка программирования микросхемы H2
  23. 23 блинка — ошибка программирования микросхемы L2
  24. 24 блинка — ошибка программирования микросхемы H3
  25. 25 блинков — ошибка программирования микросхемы L3
  26. 26 блинков — ошибка монтирования карты
  27. 27 блинков — ошибка открытия файла рома
  28. 28 блинков — ошибка чтения файла рома
  29. 29 блинков — ошибра чтения свойств файла рома
  30. 30 блинков — ошибка выхода адреса записи за пределы диапазона адресов памяти микросхемы (если ром больше, чем массив памяти платы)
  31. 31 блинк — неизвестная ошибка карты SD
  32. 32 блинка — неизвестная ошибка микросхемы AM29F040

Где H0-H3 — это чипы памяти в массиве памяти, подключенные к шине данных HB. (По схеме слева-направо H0 H1 H2 H3. На печатной плате они в нижнем ряду).

Где L0-L3 — это чипы памяти в массиве памяти, подключенные к шине данных LB. (По схеме слева-направо L0 L1 L2 L3. На печатной плате они в верхнем ряду).

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

Крайне не рекомендуется отключать питание картриджа во время процесса программирования.

Картридж состоит из двух плат, схемы которых приведены ниже:

Прошивку и печатные платы DipTrace вложил. Фьюзы в микроконтроллере: L=0x1F, H=0xC7, Ext.=0xFF.

Источник

Самодельные DIY картриджи для Сеги своими руками

Для просмотра онлайн кликните на видео ⤵

Собираем КАРТРИДЖ SEGA с НУЛЯ! 16bit (feat. Cluster) #17Подробнее

[DIY] Изготовление картриджа для Денди. Пошаговая инструкция.Подробнее

Самодельные флеш картриджи Dendy, Sega, Super Nintendo от Евгения Кузнецова, почти даромПодробнее

Что умеет китайский флеш-картридж для Sega mega drive обзор и тест Flash картриджа с АлиэкспрессПодробнее

Читайте также:  Идеи мебели трансформера своими руками

✅ 218 in 1 ✨ Картридж для Сеги с Aliexpress с батарейкой !Подробнее

Коробочки для картриджей своими рукамиПодробнее

Картридж для SEGA. Программатор из DVD проигрывателя.Подробнее

Олдскульный влог: Картриджи для Sega даромПодробнее

Все виды картриджей на сегуПодробнее

Реплика картриджей Sega GenesisПодробнее

Свой картридж для Sega Mega DriveПодробнее

Картридж на Прокачку: Картонный Бокс GenesisПодробнее

SeGAmes-картриджи с батарейкой для сегиПодробнее

Самодельные картриджи денди со съёмными играми.Подробнее

Скрытые игры на картриджах и платка для игровой приставки Денди (NES) (#делаемсами)Подробнее

Самодельный картридж для приставки Денди 4 in 1 unromПодробнее

Источник

Самодельные картриджи для Dendy/Famicom

После моей статьи про дампер картриджей (которую пока что оставили на Хабре почему-то), меня очень много раз просили рассказать, как собирать и записывать картриджи для Денди/Famicom самому. Да, это очень избитая тема, даже в древних номерах журнала «Радио» про это можно было почитать, но прогресс не стоит на месте. Рассмотрим эту тему с точки зрения современных компонентов. Тем более, по-моему, она идеально подходит для изучения азов работы с ПЛИС, именно на этом я и сам учился.

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

Видео:

Статья:

Начать, наверное, нужно с того что, картриджи, которые продавались и продолжают продаваться в наших магазинах, перезаписать, увы, не получится (на самом деле некоторые можно, но об этом в другой раз). Связано это с тем, что в них установлена обычная EPROM память, которую можно записать только один раз. Однако, ничто не мешает собрать свой собственный картридж с нуля.

Напомню, что картридж включается прямо в шину CPU и в шину PPU, а соответственно в первую очередь содержит две микросхемы памяти с параллельным доступом: PRG — к ней обращается процессор, и она содержит непосредственно код игры, и CHR — с ней работает PPU (графический процессор), и она содержит изображения. При чём последняя запросто может быть не ПЗУ, а оперативной памятью, куда уже в процессе игры записываются данные.

Таким образом, самый простой картридж можно сделать из любых двух микросхем памяти с параллельным доступом, будь то хоть EPROM, хоть flash. При этом больше ничего из обвязки не нужно. Например, вот так выглядел мой первый самодельный картридж:

Микросхемы просто подключаются напрямую к соответствующим выводам на разъёме картриджа. Ноги /RD можно припаять напрямую к земле, ведь консоль всегда будет только читать данные, но я записывал данные уже после сборки картриджа, с помощью всё того же дампера, поэтому подключил все выводы как положено. Биты адреса и данных при этом перепутаны местами, но это абсолютно не имеет значения. Внизу можно увидеть перемычку, которая определяет «mirroring» — как будет зеркалироваться видеопамять: горизонтально или вертикально. Это зависит от игры, и в простейших играх определялось именно перемычкой на картридже.

И ещё очень важный момент — активировать нашу память нужно только тогда, когда консоль обращается к картриджу, иначе будет возникать конфликт на шине. Для этого у микросхем есть вывод /CE (chip enable), который включает память. Тут в ход идёт достаточно простая математика. Программная (PRG) память картриджа начинается с адреса $8000 и заканчивается $FFFF, это два в пятнадцатой степени. Графическая (CHR) память картриджа начинается с адреса $0000 и заканчивается $1FFF, имея объём в 8 килобайт, а это два в тринадцатой степени. Соответственно включать нашу память надо пятнадцатым и тринадцатым контактом на адресной шине. На разъёме картриджа уже есть специальные выводы, которые выдают необходимый нам сигнал. Более того, в случае с PRG памятью нужный нам контакт так и называется — /ROMSEL — сокращённо от ROM Select. Туда консоль выдаёт 0 вольт, когда обращается к памяти картриджа в районе между $8000 и $FFFF. Всё проще некуда.

Однако, на такой картридж можно будет записать только самые простейшие игры. Более серьёзные уже используют картриджи с мапперами, чтобы увеличить максимальный объём игры. Попробую объяснить, как они работали.

У памяти с параллельным доступом каждый бит адреса задаётся отдельным выводом у микросхемы. В разъёме для картриджа есть выводы A0-A14 (15 выводов) для PRG памяти. Это соответственно 15 бит адреса, которые дают 32768 комбинаций единиц и нолей, т.е. позволяют адресовать 32 килобайта. Для CHR памяти там соответственно выводы A0-A13, это 16384 комбинаций, т.е. 16 килобайт, но половина из них отдана памяти внутри консоли.

Читайте также:  Бигуди своими руками пошагово

Уже в восьмидесятые годы таких объёмов стало не хватать. Конечно ничто не мешает поставить в картридж память бОльшего объёма, но у такой памяти и адресных выводов больше. Не трудно посчитать, что каждый дополнительный вывод увеличивает количество возможных адресов ровно в два раза. Но куда их подключать, если количество контактов в разъёме картриджа ограничено? Вот тут на помощь и приходят мапперы, именно они управляют дополнительными выводами в зависимости от различных условий. Почти всегда такими условиями является попытка запись в PRG-область памяти картриджа. Да, в ту, куда нельзя ничего записать.

Многие игры используют для этих целей простейшие логические микросхемы. Например, в картридже у Battletoads стоит четырёхбитный счётчик 74161, который используется как триггер. При записи по любому адресу от $8000 до $FFFF он запоминает записанное значение и выдаёт его на те самые дополнительные выводы у памяти, он же переключает мирроринг.

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

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

В качестве примера возьмём самый популярный маппер — MMC3. О нём во всех подробностях можно почитать тут: wiki.nesdev.com/w/index.php/MMC3

Первым делом читаем, как происходит взаимодействием с ним. А происходит оно через запись по определённым адресам, их 8 групп: $8000-$9FFE (чётные), $8001-$9FFF (нечётные), $A000-$BFFE (чётные), $A001-$BFFF (нечётные), $C000-$DFFE (чётные), $C001-$DFFF (нечётные), $E000-$FFFE (чётные) и $E001-$FFFF (нечётные). Запись по любому адресу внутри группы равнозначна. Видите закономерность? Регистр выбирается с помощью трёх адресных бит: A0, A13 и A14, остальные же значения не имеют.

Попробуем же имитировать работу маппера с помощью ПЛИС. Код я пишу на языке Verilog. Он тут не подсвечивается, прошу прощения за это.
Сначала описываем наши регистры, которые хранят текущее состояние:

Описываем реакцию на запись по соответствующим адресам. Возрастающий сигнал /ROMSEL говорим о том что было обращение к памяти картриджа, т.е. по адресам $8000-$FFFF, нам надо реагировать именно в этот момент.

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

Где $8000 & #$40 — это у нас prg_mode, а -2 и -1 — это предпоследний и последний банк соответственно. Получается такой код:

Теперь CHR. Там такая схема:

Где $8000 & #$40 — это chr_mode. Получается так:

Режим зеркалирования описывается всего одной строкой. В зависимости от него мы замыкаем вывод картриджа CIRAM A10 либо на A10, либо на A11:

Дальше сложнее. MMC3 умеет генерировать прерывания, когда на экране рисуется определённая строка. Это весьма полезно, и игры часто это используют. Строки на экране считаются с помощью обращений к A12 у PPU. При типичных настройках сигнал на A12 переходит из логического 0 в логическую 1 ровно один раз за строку, если не считать кратковременные переходы в 0. А их надо не считать, это всё немного усложняет:

Ах да, MMC3 поддерживает ещё подключение дополнительной оперативной памяти по адресу $6000-$7FFF! Надо не забыть и это описать:

Вот и всё, наш MMC3 готов! Полный код можно посмотреть тут: https://github.com/ClusterM/nes_mappers/blob/master/4%20(MMC3)/MMC3.v
В том же репозитории есть коды многих других мапперов.

На самом деле собрать картридж для какой-то одной определённой игры весьма просто, ведь нужно будет установить только необходимые компоненты. А вот сделать универсальный картридж гораздо сложнее.Если установить ПЛИС на 128 макроячеек, flash на 512 килобайт для PRG, flash на 512 килобайт для CHR, SRAM на 32 килобайта для CHR, SRAM на 32 килобайта в качестве дополнительной памяти, питание которой поддерживается батарейкой для игр, которые умеют сохраняться, то на нём пойдёт уже около 90%-95% игр. Схема получается весьма замороченная, я долго вручную рисовал плату под всё это дело. Кстати, при выборе компонентов не стоит забывать, что у Famicom/Dendy пятивольтовые уровни. Китайцы сейчас очень часто это игнорируют.

Первая ревизия моего универсального картриджа выглядела как-то так:

Ну и программу для записи игр написал конечно же:

Как видите, всё не так сложно, если немного посидеть и разобраться в принципах работы.

Источник

Оцените статью