Приставки > Картриджи / диски
"Многоигровки" на Sega Mega Drive
Talking_Sword:
--- Цитата: Guyver(X.B.M.) от 07 Июнь 2023, 17:31:40 ---Может, это:
--- Конец цитаты ---
Я почему-то подумал про это, но как я уже говорил, строки после 121-ой не отображаются, так что эта надпись все равно не будет выводится, так что неизвестно, что они там имели в виду под этим "Flappy". Но это не важно, просто странная находка в ROM-е.
--- Цитата: Rumata от 07 Июнь 2023, 17:34:14 ---Дык матчасть учи.
При обращении к диапазону адресов $A130xx формируется сигнал /TIME, который служит стробом записи в регистр. Первые два байта фиксированы, для выбора страницы используется только последний байт.
--- Конец цитаты ---
Про данный диапазон адресов знаю, но не подумал, что данный байт нужно каждый раз повторять для каждой игры. Неужели нельзя было нигде захардкодить? А в "таблице" перечислять лишь те байты, которые действительно будут записываться в 74HC174. Сразу говорю, не спорю с вами, просто не сразу дошло. Вообще, не силен в программировании, может так просто легче программу писать. Мне в принципе без разницы, нужен байт 0xA1, просто не буду его менять.
--- Цитата: godun от 07 Июнь 2023, 18:18:48 ---может это поможет и будет так проще? https://team-europe.blogspot.com/2020/10/tl866iiplus-adapter-2-msp55lv100s.html
--- Конец цитаты ---
Видел это еще в 2021 году. Он не умеет записывать. Только дампить. К тому же, TL866IIPlus не поддерживает MSP55LV100S. К тому же, у меня нет этого TL866IIPlus, покупать жаба душит.
godun:
--- Цитата: mutabor от 07 Июнь 2023, 20:50:46 ---А дампером, как дендивские, эти карики не шьются?
--- Конец цитаты ---
я уже выше думал про такой вариант. но наверно нужно обучить софт этому. он наврено не поймет что он туда шьет? он же вроде как маппер определяет ?
Добавлено позже:
--- Цитата: Talking_Sword от 07 Июнь 2023, 20:53:29 ---Он не умеет записывать.
--- Конец цитаты ---
хм, както это не учел
--- Цитата: Talking_Sword от 07 Июнь 2023, 20:53:29 ---TL866IIPlus не поддерживает MSP55LV100S
--- Конец цитаты ---
и не нужно. ты читаешь как другую микру
--- Цитата: Talking_Sword от 07 Июнь 2023, 20:53:29 ---у меня нет этого TL866IIPlus, покупать жаба душит
--- Конец цитаты ---
ты щас серьезно? 1,5-2 тыс жалко за такой прогер? а на что ты рассчитываешь? виллем и то дороже бывает :)
Rumata:
--- Цитата: Talking_Sword от 07 Июнь 2023, 20:53:29 ---Неужели нельзя было нигде захардкодить?
--- Конец цитаты ---
В смысле поставить на плату картриджа пяток дополнительных микросхем?
/TIME формируется железом приставки, что сильно упрощает жизнь.
Sharpnull:
--- Цитата: Talking_Sword от 07 Июнь 2023, 20:53:29 ---Про данный диапазон адресов знаю, но не подумал, что данный байт нужно каждый раз повторять для каждой игры. Неужели нельзя было нигде захардкодить?
--- Конец цитаты ---
Можно, но так чуть проще программировать и в HEX ром удобно смотреть по 8 байт. UPD2: Забыл про выравнивание при чтении, придётся читать по 1 байту, поэтому это неудобно и проще расположить по 8 байт, которые всегда выровнены до чётных адресов. UPD3: Ещё можно читать не по 1 байту, но делать проверку :)
Интересно, что 4 нуля после каждого значения для маппера - это адрес начала кода игры, но, если нули, то обычный адрес указанный в роме игры. При этом значение для маппера составное, например для $A13130, делается маска #$A130FF (т. е. 0xA13130 & 0xA130FF == 0xA13030) и туда записывается "((значение&0xFFFF)>>1) & 0x3FF" (т. е. ((0xA13130&0xFFFF)>>1)&0x3FF == 0x98). UPD: Хотя вы знаете же.
UPD4: Указание адреса начала кода игры можно использовать так: сделать хак игры, например на выбор уровня, и в конце рома при переходе на нужный адрес будет активация, тогда будет как в многоигровках на NES с одной игрой и разными начальными параметрами.
Talking_Sword:
--- Цитата: godun от 07 Июнь 2023, 20:54:10 ---и не нужно. ты читаешь как другую микру
--- Конец цитаты ---
Ну так считать мало, нужно еще перезаписать. Смотрел код программы Burn2Slot - она вроде как может работать с MSP55LV100S, но до конца не уверен.
--- Цитата: godun от 07 Июнь 2023, 20:54:10 ---ты щас серьезно? 1,5-2 тыс жалко за такой прогер? а на что ты рассчитываешь? виллем и то дороже бывает :)
--- Конец цитаты ---
Да жалко. Да и где его можно найти за 1.5-2 тыс. Вместо Willem можно собрать EzoFlash, правда, как уже говорил в другой теме, принтер у меня не очень печатает, так что придется все дорожки вручную обводить. Но этот EzoFlash для моих целей бесполезен.
--- Цитата: Rumata от 07 Июнь 2023, 21:08:41 ---В смысле поставить на плату картриджа пяток дополнительных микросхем?
/TIME формируется железом приставки, что сильно упрощает жизнь.
--- Конец цитаты ---
В смысле сделать так, чтобы это значение 0xA1 было прописано в коде только один раз, а не бралось каждый раз из "таблицы". В принципе, Sharpnull уже многое объяснил.
Sharpnull, если что, вы сможете разъяснить, как работают эти значения? А то я просто уже настроен серьезно и хочу изменить эти значения, чтобы записать свой набор игр со своими размерами. Изначально просто хотел заменить игры на аналогичные по размеру.
Rumata:
--- Цитата: Talking_Sword от 07 Июнь 2023, 22:06:50 ---чтобы это значение 0xA1
--- Конец цитаты ---
Там нет никакого "значения". Это адрес, длинное слово, 4 байта. $00A130xx. Младший байт адреса используется в качестве данных для регистра. И в любом случае в команде записи это адрес должен быть указан.
Посмотри на схему картриджа и там совершенно очевидно как это работает
Sharpnull:
--- Цитата: Talking_Sword от 07 Июнь 2023, 22:06:50 ---если что, вы сможете разъяснить, как работают эти значения?
--- Конец цитаты ---
Похоже там банки по 64КиБ или 128КиБ и наверно не стоит смотреть как идёт запись в коде, а просто берёте позицию начала игры в роме многоигровки, делите на 65536 байт и к этому добавляете 0xA13000, например как сейчас указано: предполагаю меню с начала рома - у него 0xA13000 и размер 512КиБ, "007 JAME BOND THE DUEL" - следующий и у него 0xA13008 (8 * 64КиБ = 512КиБ от меню), дальше "INSECTOR X" - у него 0xA13010 (8 * 64 = 512 от 007 или по позиции 0x100000/65536=0x10). Что странно, 56-я игра, которая не видна без вашего хака, имеет значение 0xA13870, но, судя по коду, бит в этом полубайте "0xXXX8XX" не используется, т. е. для текущего кода как будто записано 0xA13070.
Хорошо бы точно узнать физический порядок игр чтобы узнать правильно ли я предположил.
UPD: Скорее всего так и есть, последний ром "MORTAL KOMBAT 3 ULTIMATE" - 4МиБ и указан в конце - 0xA133C0 и кол-во банков 0x400 * 64КиБ = 64МиБ многоигровки для 55 игр. По коду может быть ещё 1 бит, тогда 128МиБ.
mutabor:
--- Цитата: godun от 07 Июнь 2023, 20:54:10 ---я уже выше думал про такой вариант. но наверно нужно обучить софт этому. он наврено не поймет что он туда шьет? он же вроде как маппер определяет ?
--- Конец цитаты ---
Софт очевидно надо написать, сам себя он не напишет. Но софт то по идее гораздо проще чем для денди - у сеги вроде как почти все игры безмапперные, мапперы только в многоигровках для выбора игр, либо вообще счетчик на ресете - т.е. можно просто последовательно шить регионы и дергать ресет для переключения на следующий.
Rumata:
Для начала хотелось бы понять, какую именно плату мы обсуждаем и увидеть её схему.
В классическом варианте банки в пределах 4 Мб имеют разный размер, с делением размера на 2. Например:
4М = 2 + 2
4М = 2 + 1 +1
4М = 2 + 1 + 0,5 + 0,5
и так далее
Для переключения выше 4 Мб дополнительно могут быть использованы линии данных
Расположение игры в файле вообще никакого значения не имеет, она однозначно выбирается данными, записанными в регистр.
Sharpnull:
--- Цитата: Rumata от 07 Июнь 2023, 23:50:15 ---В классическом варианте банки в пределах 4 Мб имеют разный размер, с делением размера на 2.
--- Конец цитаты ---
Действительно, заметно, что значения в этой многоигровки не пересекают куски по 4МиБ, значит располагать по этим правилам. Там есть ещё варианты: 4МиБ = 3+1, 0.5+0.5+0.5+0.5+1+1.
Rumata:
--- Цитата: Sharpnull от 08 Июнь 2023, 00:12:24 ---Действительно, заметно
--- Конец цитаты ---
Естественно. 4 Мб - это физический предел картриджа, максимальный адрес $3FFFFF. Дальше или переключать страницы, или искусственно формировать сигналы, но там уже сложнее, /DTACK и всё такое.
--- Цитата: Sharpnull от 08 Июнь 2023, 00:12:24 ---Там есть ещё варианты
--- Конец цитаты ---
Надо учитывать, что на выходе регистра обычно стоит 7432, соответственно на выходе могут быть или адрес или "1", "0" там не выставить. Отсюда и такое деление вниз, кратное 2
JRBVZ:
--- Цитата: Rumata от 07 Июнь 2023, 23:50:15 ---Для начала хотелось бы понять, какую именно плату мы обсуждаем и увидеть её схему.
--- Конец цитаты ---
Полагаю всё ту же, из 2021: https://www.emu-land.net/forum/index.php/topic,83028.msg1492579.html#msg1492579
Talking_Sword:
--- Цитата: Rumata от 07 Июнь 2023, 23:50:15 ---Для начала хотелось бы понять, какую именно плату мы обсуждаем
--- Конец цитаты ---
Плата вот из этого сообщения, собственно JRBVZ об этом уже написал.
--- Цитата: Rumata от 07 Июнь 2023, 23:50:15 ---и увидеть её схему
--- Конец цитаты ---
Частичная схема есть в этом сообщении. Но есть небольшое отличие: в моем варианте адреса, которыми управляет схема переключения сдвинуты на 1 адрес вверх, то есть, у меня третий вывод первой HC32 тоже подключен к A16 ПЗУ, но на той схеме адреса нумеруются с "1", а не с "0", так что на моем картридже это уже получается 17-ый адресный вывод. Также, для управления старшими адресными выводами была добавлена еще одна 74HC174. Включена она так:
И да, как вы писали, используются линии данных.
Rumata:
Сдвиг там будет обязательно, так как на шине 68000 нет А0. На схему Радики в этом смысле ориентироваться не стоит.
Talking_Sword:
Я все-таки прошил эту многоигровку, но получилась некоторая дичь.
Во первых, с прошивкой MSP55LV100S ничего не получилось. Но я ее сдампил полностью. Считывал при помощи Nintendo DS, так как там на картридж GBA выделено только 32 МБ, на адреса A24, A25 повесил переключатель и дампил по частям. Во второй половине, кстати никаких сюрпризов не было - все было забито FF, используются только первые 64 МБ.
Так как с MSP55LV100S ничего не получилось, припаял S29GL512P, которую купил еще в прошлом году. Для начала просто захотел проверить, что микросхема прошивается, поэтому зашил туда только одну игру для начала - Squirrel King с пометкой [f1]. Сначала хотел проверить перед созданием ROM-а многоигровки несколько игр, как они будут работать на железе - во первых, игры от Gamtec: Squirrel King, Super Bubble Bobble, Smart Mouse, так как они нормально не работают на эмуляторе, у Squirrel King была исправленная версия ([f1]), для Super Bubble Bobble нашел в сети, как заставить ее работать (там нужно изменить буквально один байт), по Smart Mouse ничего не нашел. Собственно, моя догадка была в том что в оригинальных картриджах была какая-то защита, но интереснобыло посмотреть, как неисправленные версии поведут себя на железе. Также решил проверить Mr. Nutz 2, так как в теме по этой игре на этом форуме было две версии: "обычная" и исправленная, якобы "обычная" висла при запуске на железе сразу после старта.
Но в Squirrel King столкнулся с тормозами, поэтому решил еще проверить некоторые игры, с которыми у меня уже раньше были проблемы на этой приставке: Jungle Book, Animaniacs, Flintstones, Marsupilami. Было подозрение, что проблемы с этими играми были вызваны "кривыми" пиратскими картриджами, но тут на форуме уже объяснили, что "кривой" является ревизия приставки. Для проверки был также записан первый Sonic, так как с ним как раз проблем не было, чтобы убедится, что это не проблемы с моим картриджем.
Эту "простыню" текста написал только для того, чтобы было понятно, что будет далее. Чтобы не перезаписывать постоянно одно и то же место, использовал переключатель, оставшийся после дампа MSP55LV100S, он как бы переключал между певыми и вторыми 32 мегабайтами (второй переключатель не использовался). После нескольких перезаписей игры, записанные начиная с 32 мегабайт перестали запускаться. Собственно, подумал, что "доканал" ПЗУ перезаписью, так как микросхема похоже была Б\У, так как еще перед первой перепрошивкой для интереса решил проверить, есть ли там данные, и данные там были - все дампить не стал, но в том куске в 1 МБ, который я сдампил для проверки обнаружилась строка "Version", то есть это ни какой-то там мусор, а какие-то "осмысленные" данные. Да и вообще, у новых микросхем все должно быть "FF". Но самая большая дичь в том, что на Nintendo DS то, что записано начиная с 32 мегабайт считывается один-в-один, но на приставке только красный экран. Красный экран означает, что не совпадает контрольная сумма, но такая процедура проверки контрольной суммы есть не во всех играх, но красный экран возникает во всех играх, туда записанных, словно там остались какие-то остатки первого Соника. Но при этом, опять же, на Nintendo DS все считывается байт-в-байт, как было в оригинальном файле.
Не смотря на это, решил все-таки собрать и записать ROM многоигровки. В итоге, часть игр не работает. При этом, опять же, перед окончательной запайкой микросхем логики на место, проверил, что считывается то же самое, что записалось. у меня считалось все точно так же, были только некоторые проблемы со считыванием первой части (вторая считалась нормально с первого раза), но я добился, чтобы считалось то же самое, что и записалось. То есть, получается нужные данные в ПЗУ как бы есть (раз считались), но Mega Drive их почему-то "не видит", но только в некоторых местах (так как многие игры все же работают). То, что неправильно прописал адреса в меню исключено - перепроверял несколько раз. К тому же, есть пара игр, которые запускается, но зависают, что говорит в пользу того, что по некоторым адресам считываются битые данные.
Собственно, догадки:
1. Может все-таки как-то криво прошивается, так как у меня колхоз на проводках. Но опять же, раз я как-то умудрился считать те же самые данные (на Nintendo DS), значит они там есть. Не могут ли быть в NOR Flash нестабильные биты? И могут ли они получится, если были какие-то помехи на шине при перепрошивке?
2. Уже выше говорил, что определил, что микросхема, похоже Б\У, так как в ней уже были какие-то данные, плюс ко всему, верхняя сторона у нее какая-то подозрительно шершавая. Но при этом, ножки у нее были явно не паяные (как они это делают?). Возможно, микросхема уже "дышала на ладан", несколько перезаписей ее убили.
3. Случайно получилось, что у меня в течении короткого времени на микросхему пошло 4.5 В, может микросхема "подгорела", но только частично. Но после этого игры еще прошивались и запускались из начала второй половины, перестали они оттуда работать после пары-тройки следующих прошивок.
godun:
Может как вариант, стоит попробовать купить ещё пару таких микросхем и на них попробовать?
Talking_Sword:
godun, да, тоже об этом уже подумал, но есть пара опасений:
1. если покупать там же, то скорее всего Б\У пришлют, есть большой риск, что опять будет что-нибудь полудохлое. Можно конечно другого продавца найти, но не факт, что у него будет не Б\У, да и вообще может оказаться, что это тот же продавец, только с другой учетной записи. Можно поискать чуть дороже, но опять же, не факт, что там будет не Б\У. Конечно, на Aliexpress, скорее всего, есть новые и пустые, но наверно по цене готового картриджа-многоигровки.
2. есть также опасения, что у меня все-таки возникают некоторые косяки в процессе прошивки.
Но в любом случае, скорее всего, пока это единственный вариант.
P.S.: у меня появилась идея, что можно сделать многоигровку из одноигровки - купить самый дешевый картридж с микросхемой в TSOP48, впаять туда S29GL512P, схему переключения сделать на отдельной плате, которую нужно будет допаять на проводках. Только дорожки от A16-A21 нужно будет перерезать.
godun:
Ну если купить даже пять штук, очень малая вероятность что вот прямо все сдохнут именно в процессе записи
Talking_Sword:
Продолжаем жевать кактус.
Вообще, хотел написать об этом уже после того, как перепрошью, но когда это еще будет, а в другой теме уже появилось упоминание этого картриджа. Так то пора написать о нем всю информацию.
Недавно нашел на Ozon многоигровку для Sega Mega Drive. Сначала можно подумать, что ничего особенного, то же, что и с Aliexpress, только под нашим "брендом", со своим набором игр и с русифицированными ROM-ами.
Но картридж оказался не так уж "прост". В отзывах увидел фотографию платы - оказалось, что плата совсем не такая, как у картриджей с Aliexpress. Самое крутое, что на плате было ПЗУ в корпусе TSOP56! У такого шансы на прошивку гораздо больше. Ибо у тех, что с Aliexpress либо BGA - прошить теоретически можно, но выведен ли /WE - неизвестно. Либо MSP55LV100S - как его прошивать - непонятно. Решил купить.
Фото платы:
До того как получил, больше всего, что меня смущало - как они реализовали схему переключения всего на трех микросхемах вместо четырех?
Когда получил, стало все понятно - использовали сдвиговый регистр. Срисовал схему:
(Осторожно! Могут присутствовать ошибки!)
Неприятный сюрприз - при такой схеме минимальный размер игры - 512 КБ. Зачем вообще так было делать? Захотели сэкономить одну микросхему?
Из приятного - /WE выведен прямо на B28, прямо как у FlashKit. Не нужно отгибать ногу, само ПЗУ можно вообще не паять. А если сделать специальный программатор, который бы мог записывать значения в регистр, то картридж можно бы было записывать вообще без вмешательства паяльника.
Картридж не всегда четко сбрасывается. Не уверен конечно, но мне кажется, это из-за недоработанного кода меню. Также, часто при сбросе остается завасший звук PSG. Наверно, это тоже из-за меню. В меню не понравилось также то, что долго переключаются страницы - используется эффект плавного затухания и "проявления" текста, из-за чего это занимает чуть ли не секунду.
Еще в меню нашел пасхалку - если нажать кнопку C, то заиграет музыка Prince Ali из игры Aladdin. Правда не совсем понял какие кнопки точно надо жать, иногда срабатывает от одной только C, но иногда как будто надо нажать еще что-то из A\B\C.
Прикладываю дамп меню.
Rumata:
Так я давно говорю: берите FlashKit :D
Это вот то самое из НьюГейма.
Схема вроде правильная. Интересно на досуге повтыкать что там с ОЗУ, теоретически возможно, на практике на ставится, даже если есть игры с сохранеиями.
Меню там да, забавное. И тормозное.
Навигация
Перейти к полной версии