Приставки > Картриджи / диски
[SMD] 8-in-1 многоигровка с меню
(1/1)
JRBVZ:
Небольшое руководство по созданию картриджа, содержащего 8 игр с встроенным меню выбора и встраиванию кода меню в другую игру с помощью hex редактора.
В приложенном файле Rambo-menu-short.bin игра Rambo 3 расположена в первых 256Кб, код меню во вторых 256Кб начиная с адреса 40000. Редактируемый список игр находится по адресу 41140. Список из 7 добавляемых игр должен быть подобран таким образом, чтобы все они были одинаковые по объему, напр. все 512KB, 1MB, 2MB, 4MB. Также надо учитывать какую память вы сможете использовать при создании многоигровки 512КВх8=4МВ (S29GL32), 8МБ(S29GL64), 16MB (S29GL128), 32MB (S29GL256).
Минимальный порядок действий будет выглядеть следующим образом:
1. Подбираем 7 игр одинакового размера по объему,
2. С помощью hex редактора редактируем список игр по адресу 41140,
3. Если нужно, увеличиваем файл Rambo-menu-short.bin до размера подобранных игр, заполняя пустое пространство FF,
4. С помощью того же hex редактора собираем все игры в один файл, выставляя их по порядку как в меню. Важно, чтобы первым всегда был файл Rambo-menu-short.bin, несмотря на то, что в списке меню Rambo 3 на последнем месте. В качестве альтернативы hex редактору можно использовать программу Megadrive Rom Maker, либо другой удобный способ,
5. Выполняем swap bin и записываем на флэшку,
6. Собираем картридж по схеме с 74HC174 и играем.

Чтобы игра Rambo 3 не повторялась в каждой восьмиигровке, попробуем встроить код меню в другую игру - возьмем Contra - Hard Corps. Весь код меню занимает 4704 байта, нам надо найти в коде игры неиспользуемое пространство не менее данного размера, как правило такие участки заполнены FF. Посмотрев с конца файла, я выбрал участок, начинающийся с адреса 1FBF00. Сюда и вставляем код меню из Rambo-menu-short.bin начиная с адреса 40000 и до 4125F.

Теперь идем в самое начало файла Contra - Hard Corps и смотрим, что записано по адресам 05, 06, 07 – 000200, запомним данное значение, оно нам еще понадобится. Теперь вместо него пишем адрес начала кода меню 1FBF00.

Теперь при старте многоигровка будет показывать меню. Далее перемещаемся к адресу 1FC7B4 и вместо 0D7E пишем адрес который мы заменили в начале файла 0200.

Всё, теперь при выборе восьмого пункта меню у нас будет запускаться Contra - Hard Corps. Т.к. мы внесли изменения в код игры, необходимо исправить контрольную сумму с помощью Megadrive Rom Maker или Sega Genesis ROM Analyzer, после чего можно проверить работу меню в эмуляторе и собирать многоигровку.
Для переключения игр в картридже используется 74HC174 (74LS174). Контакты разъема соединяем с HC174: А17 (VA1) – 3 нога (D0), А15 (VA2) – 4 нога (D1), А13 (VA3) – 6 нога (D3), В27 (VRES) – 1 нога (Mr), B31 (TIME) – 9 нога (Cp). Выводы HC174 соединяем со старшими адресами флэш-памяти, например, для S29GL64: 2 нога (Q0) – 9 нога (А19), 5 нога (Q1) – 10 нога (А20), 7 нога (Q2) – 13 нога (А21). Выводы 10-15 HC174 не задействованы (возможно входы D3, D4, D5 надо притянуть к земле, пусть меня знающие люди поправят).

PS спасибо DrMefistO за Smd IDA Tools, благодаря которым я разобрался в модификации исходного меню, для меня это был первый опыт в работе с дизассемблером.
negativ72rus:
А в каком эмуле лучше проверить работу меню? В GENS не работает.
Или я как-то не так собрал файл?
Rumata:
Меню работает в любом эмуляторе. В смысле запускается. Переключение игр ни в каком эмуляторе работать не будет.
negativ72rus:

--- Цитата: Rumata от 02 Март 2023, 10:28:54 ---Меню работает в любом эмуляторе. В смысле запускается. Переключение игр ни в каком эмуляторе работать не будет.

--- Конец цитаты ---
а, теперь понятно. спасибо )
hot:

--- Цитата: negativ72rus от 02 Март 2023, 08:53:30 ---А в каком эмуле лучше проверить работу меню? В GENS не работает.
--- Конец цитаты ---
В Genesis Plus GX. Меню работает. Все игры запустились. Единственное, что при сбросе Genesis Plus GX сбрасывает именно в последнюю запущенную игру, а не в меню со списком игр. Как будто soft reset срабатывает. Надо останавливать эмуляцию и запускать ром заново, чтобы попасть в меню.

На клоне с SM-801 с флеш-картриджа ни одна игра кроме Рембо не запустилась, ресет выкидывает в меню со списком игр "8 in 1".
Rumata:
Запускается только восьмая игра, та, что стоит в нулевом банке



Не забудь имена игр вписать
Rumata:

--- Цитата: hot от 02 Март 2023, 10:57:00 ---На клоне с SM-801 с флеш-картриджа ни одна игра кроме Рембо не запустилась
--- Конец цитаты ---
И не должна!!!
Это сборка с аппаратным переключением страниц, она работает только на железе, приведённом выше
negativ72rus:

--- Цитата: Rumata от 02 Март 2023, 10:57:42 ---Не забудь имена игр вписать

--- Конец цитаты ---
Если Вы мне, то да, я помню об этом. Хотел по быстрому проверить, и только потом дочитал топик до конца, про аппаратное переключение банков )
Yoti:

--- Цитата: JRBVZ от 01 Март 2023, 11:41:57 ---Весь код меню занимает 4704 байта
--- Конец цитаты ---
А исходный код меню имеется в наличии?
JRBVZ:
Если только у китайцев  :D
Rumata:

--- Цитата: Yoti от 02 Март 2023, 16:51:46 ---А исходный код меню имеется в наличии?
--- Конец цитаты ---
Дизасм, батенька, только дизасм
Навигация
Главная страница сообщений

Перейти к полной версии