Приставки > Картриджи / диски
"Многоигровки" на Sega Mega Drive
Sharpnull:
--- Цитата: Talking_Sword от 02 Август 2023, 16:23:58 ---В меню не понравилось также то, что долго переключаются страницы - используется эффект плавного затухания и "проявления" текста, из-за чего это занимает чуть ли не секунду.
--- Конец цитаты ---
Ускорить меню влево/вправо: 35C1: 00, 3445: 00. Ускорить курсор вверх/вниз: 2C40: 60 0E. Можно настроить скорость 35C1 от 0x00 до 0x10, а 2C40 также влияет на скорость влево/вправо, можно настроить от медленного до быстрого: 60 02, 60 06, 60 0A, 60 0E, 60 12, 60 16, 60 1A, 60 1E.
Talking_Sword:
Недавно перепрошил многоигровку 206 в 1. Правда не захотел использовать "родную" схему переключения, так как она не позволяет выбирать игры менее 512 КБ, да и хотелось использовать Меню от картриджа 55 in 1. Поэтому, сделал вот такую схему переключения на отдельной плате:
Вчера припаял ее на проводках. Как итог - не работает, ни одна игра не запускается. Сразу говорю, что после прошивки проверял, что прошилось - все совпало. Начал думать, почему не работает, сначала проверил, правильно ли все припаял - все припаяно куда надо. Затем проверил, нет ли "соплей" - нашел одну соплю, после того, как убрал, стали запускаться игры на 128 КБ, еще запустилось несколько игр на 256 КБ в сильно побитом виде. Еще запустилась игра Frogger, которая на 512 КБ.
Появилась мысль, что игры по какой-то причине "не видят" больше 128 КБ. Проверил на компьютере ROM Frogger - не смотря на то, что он 512 КБ, все, что выше 128 КБ забито FF, так что реальный размер игры 128 КБ, что утвердило мою теорию.
Начал подозревать, что что-то не так со значениями в коде меню. Решил посмотреть значение для игры Alex Kidd - первой (по адресу) игры на 256 КБ. Для Alex Kidd это значение 0x06 (шестнадцетиричное, за вычетом 0xA13000), в двоичном виде это будет 110, но в HC174 это значение записывается с первого бита, бит 0 не используется, почему-то. То есть, на выходах HC174 будет 110000 (Q1-Q6), а Q1 у нас отвечает за A16, то есть эта адресная линия будет "намертво" "прибита" к лог. "1" через элемент ИЛИ. Понятно, что при таком раскладе игра никак не сможет увидеть больше 128 КБ ROM-а.
Посмотрел, и у других игр имеется такая проблема (Q1=1), вот они и не запускаются, так как адресное пространство ROM-а урезано до 128 КБ. Я так понимаю, что это от "неправильного" расположения игр в ROM-е многоигровки. Более того, начал проверять предыдущюю многоигровку, где у меня не запускалась часть игр - так там похоже тоже эта проблема - каким-то чудом получилось так, что у игр 256 КБ, 512 КБ и 1 МБ получились "нормальные" значения, а у игр 2 МБ адресное пространство ROM-а получилось урезанным до 1 МБ.
Я в принципе догадывался, что такая проблема может быть, но думал, что достаточно рассортировать ROM-ы по размеру. Оказалось недостаточно.
Кто-нибудь может подсказать, как рассортировать ROM-ы (имеется в виду по адресу размещения в ROM-е многоигровки), чтобы не возникало подобных "коллизий"?
Прикладываю код меню со вписаными в него значениями (начинаются по адресу 0x11D02), а также, документ Excel со списком игр. В документе Excel 1 столбец - порядковый номер в меню, 2 столбец - название, 3 столбец - размер (в байтах, десятичный), 4 столбец - адрес (десятичный), 5 столбец - значения для кода меню (десятичные), 6 столбец - значения, которые будут прописаны в код меню (шестнадцетиричные).
pipiman:
Немного не понял: судя по схеме ПЗУ разбита на банки по 128Кбайт (если нумерация адресов ПЗУ начинается с A0), а в таблице десятичные значения для кода меню высчитываются исходя из размера банков в 64Кбайта. Может в этом проблема
Еще немного по теме. На формуе Gbatemp, посвященном Burn2Slot, один китайский товарищ выложил доработанную альтернативную версию прошивальщика Gba картриджей GBABF, вот ссылка на его пост, может пригодиться:
https://gbatemp.net/threads/burn2slot-re-programm-gba-bootlegs-on-ds.583984/post-9986477
В ней есть удобство, что сразу после записи можно провести верификацию правильности записанного, и другие функции есть. Если получится её использовать, то напишите как она в работе. Я тоже планирую свою многоигровку для Сеги сделать, пока собираю материалы и слежу за темой)
Yoti:
--- Цитата: pipiman от 21 Август 2023, 20:55:16 ---На формуе Gbatemp, посвященном Burn2Slot
--- Конец цитаты ---
Автор русскоязычный, если что.
Talking_Sword:
--- Цитата: pipiman от 21 Август 2023, 20:55:16 ---Немного не понял: судя по схеме ПЗУ разбита на банки по 128Кбайт (если нумерация адресов ПЗУ начинается с A0), а в таблице десятичные значения для кода меню высчитываются исходя из размера банков в 64Кбайта. Может в этом проблема
--- Конец цитаты ---
Возможно, мы плохо друг друга поняли. По идее, там можно выбирать банки более 128 КБ, так как стоят элементы ИЛИ. Ровно 128 КБ было бы если выходы HC174 были бы подключены напрямую к выводам A16-A25 ПЗУ (без элементов ИЛИ).
Что касается расчета значений для кода меню, то у меня в них сомнений нет, делал по формуле от Sharpnull-а, то есть адрес игры делить на 0x10000+0xA13000 (все значения HEX), только у меня +0x3000, так как байт A1 менять нигде не надо. В правильности формулы соменеий нет, проверил экспериментальным путем - делал полный дамп "родного" ROM-а с многоигровки 55 in 1 (эта плата, если что), в нем попробовал провести "обратное преобразование" значения из кода меню - вычел из него 0xA13000 и умножил на 0x10000 - вышел на начальный адрес игры. Попробовал для нескольких случайно взятых игр - всегда выходил на эти игры в ROM-е, то есть формула рабочая.
Я уже проблему понял, я просто не знаю, как с ней бороться. Проблему я описал в предыдущем сообщении, возьмем для примера игру Alex Kidd - адрес у нее 0x60000, если поделить на 0x10000, будет 0x06. В двоичном виде это будет 110, но нулевой байт почему-то не используется, поэтому в HC174 будет записано 110000 (Q1-Q6). Как я уже говорил, выход Q1 отвечает за адресную линию A16, а если там будет лог. "1", то приставка не сможет ей управлять, значит, игра не сможет получать доступ к адресам выше 128 КБ.
Проще говоря, у первой игры на 256 КБ получился "нехороший" адрес, в котором 18-й бит получился=1, а для 256 КБ надо минимум 18 нолей. Соответственно, для 512 КБ - 19, 1 МБ - 20, 2МБ - 21, 4МБ - 22.
Мне надо понять правила размещения игр в ROM-е многоигровки, чтобы для игр определенного размера соблюдались соответствующие условия описанные выше.
Тем не менее, несмотря на то, что я не знаю правила размещения игр в ROM-е, удалось получить методом тыка рабочий (в теории) ROM. Провел небольшие изменения - во первых, выяснилось, что игра Frogger на самом деле 128 КБ, все остальное "набивка" FF. Поэтому "обрезал" эту игру до 128 КБ. В предыдущем варианте ROM-а уже было свободно 384 КБ, после обрезки Frogger-а освободилось еще столько же, так что стало уже 768, поэтому "докинул" еще одну игру на 512 КБ. Frogger переместился в начало, к другим играм на 128 КБ. Alex Kidd благодаря этому переехал на адрес 0x80000, то есть теперь в адресе есть 19 нолей (в двоичном виде), то что надо. Соответственно, для всех следующих игр на 256 КБ было минимум 18 нолей. Далее, по адресу 0x340000 была игра Adventurous Boy на 512 КБ, в двоичном адресе было только 18 нулей, а надо 19. У меня еще осталось 256 КБ свободного места, поэтому вставил перед Adventurous Boy "набивку" на 256 КБ в надежде, что это поможет. Получилось. Когда игра сдвинулась на адрес 0x380000, получилось уже 19 нулей, то что надо. Далее, еще понял, что при такой схеме нельзя выбирать игры на 3 МБ, их надо "добивать" до 4 МБ. Решил посмотреть, как это сделано в многоигровке 55 in 1, там есть пара таких игр - Pinocchio и Street Fighter II Plus. Оказалось, что там после каждой игры на 3 МБ размещена еще одна игра на 1 МБ, таким образом, получается размер в 4 МБ и игру на 1 МБ тоже можно выбрать. В моей многоигровке тоже есть две игры на 3 МБ - Donald in Maui Mallard и Spot Goes to Hollywood. Перенес после каждой из них по игре на 1 МБ. Далее, проверил адреса для остальных игр других объемов на нужное количество нулей, с ними все оказалось нормально.
Так что в теории, этот ром должен быть рабочий.
--- Цитата: pipiman от 21 Август 2023, 20:55:16 ---Еще немного по теме. На формуе Gbatemp, посвященном Burn2Slot, один китайский товарищ выложил доработанную альтернативную версию прошивальщика Gba картриджей GBABF, вот ссылка на его пост, может пригодиться:
https://gbatemp.net/threads/burn2slot-re-programm-gba-bootlegs-on-ds.583984/post-9986477
В ней есть удобство, что сразу после записи можно провести верификацию правильности записанного, и другие функции есть. Если получится её использовать, то напишите как она в работе.
--- Конец цитаты ---
Про такую программу уже узнал от HayaoYokogawa в другой теме. Пробовал ее - прошивка не работает, вероятно, она расчитана на картриджи, где /WE управляется как-то по другому. Но она оказалось полезной за счет возможности проверки записанного. Но ту я скачивал с GitHub (вроде бы).
Тем не менее, попробовал программу по вашей ссылке. Она оказалась другая. Прошивать ей еще не пробовал, но она правильно определяет микросхему, значит, прошиваться скорее всего тоже будет.
--- Цитата: pipiman от 21 Август 2023, 20:55:16 ---Я тоже планирую свою многоигровку для Сеги сделать, пока собираю материалы и слежу за темой)
--- Конец цитаты ---
Это прекрасно! А то у меня ощущение, что тема никому, кроме меня не интересна, я ее один на себе "тащу".
P.S.: На всякий случай прикладываю код меню и документ Excel с изменениями.
HayaoYokogawa:
--- Цитата: Talking_Sword от 22 Август 2023, 19:09:00 ---Пробовал ее - прошивка не работает, вероятно, она расчитана на картриджи, где /WE управляется как-то по другому.
--- Конец цитаты ---
Вполне вероятно, что там микрухи другие только поддерживаются. Так что лучше иметь и GBABF, и Burn2Slot - в первом хотя б содержимое можно в реальном времени смотреть и там плюшек побольше, во втором поддержка в теории шире. Сборок первой тоже несколько вариаций есть, если что. :) Свои карики шил через GBABF, если что.
Talking_Sword:
Вчера снова прошил многоигровку 206 в 1. В этот раз, можно сказать, все прошло успешно где-то на 97%.
О хорошем: почти все игры заработали. Вообще, в той первой многоигровке (55 in 1) много игр не заработало даже не из-за того, что что-то криво записалось, или в микросхеме были битые сектора (но они там есть), а из-за моей ошибки размещения игр в ROM-е многоигровки, которую описал выше. Перед вчерашней прошивкой я ее уже понял и учел.
Но я не был бы собой, если бы не сел в лужу. Но на этот раз, к счастью, по мелочи. На многоигровку затесалось два неработоспособных ROM-а - виснут даже на эмуляторе. Дело вот в чем: дело в том, что на свою многоигровку захотел записать игры без проверки региона. Для многих игр есть уже готовые версии с уже отключеной проверкой региона, обычно их помечают как [f1]. Но для некоторых игр таких версий нет. Нашел такую программу, как Genesis Region Tool, если у игры нет готовой версии с отключенной проверкой, то патчил ей. После патчинга проверял на эмуляторе, но проверял лишь то, что показывает заставку Sega. Одна игра - Gunstar Heroes, кстати, после патчинга перестала запускаться, ее пришлось хачить вручную.
Но пара игр - McDonald's Treasure Land Adventure и Newman-Haas IndyCar Racing не доходили на многоигровке до игрового процесса - висли. Сначала даже не сообразил, в чем дело, но потом догадался проверить их ROM-ы, из которых собирал многоигровку, на эмуляторе. Оказалось, они зависают даже там. Вообщем надо было тщательней проверять.
Не обошлось и без дичи: игра Nigel Mansell's World Championship (не везет что-то играм про Найджела Манселла) не запускается, хотя по всем параметрам должна (ROM без изменений). После прошивки многоигровки все сверял через GBABF - все совпало. Так что несоответствия данных\битых секторов вроде быть не должно (но это не точно, учитывая то, что было с предыдущей многоигровкой).
--- Цитата: HayaoYokogawa от 23 Август 2023, 15:21:52 ---Вполне вероятно, что там микрухи другие только поддерживаются. Так что лучше иметь и GBABF, и Burn2Slot - в первом хотя б содержимое можно в реальном времени смотреть и там плюшек побольше, во втором поддержка в теории шире. Сборок первой тоже несколько вариаций есть, если что. :) Свои карики шил через GBABF, если что.
--- Конец цитаты ---
Ну кстати, та, которая по ссылке от pipiman у меня смогла определить микросхмеу, значит наверно и шить будет. Но я не пробовал, прошивал по старинке Burn2Slot, просто уже привычнее, и знаешь, что от нее ждать.
Что касается GBABF, то я ей тоже пользовался - через нее сверял записанное, а то когда шил предыдущую многоигровку (та, что 55 in 1 на S29GL512P), то дампил через GBA Backup Tool, затем сверял уже на компьютере, так как не знал про GBABF.
Talking_Sword:
С моей мнгоигровкой снова произошла дичь. Позавчера решил полноценно поиграть, но после того, как нажал Reset, чтобы выбрать другую игру, меню через некоторое время зависло.
Выяснилось, что меню начинает виснуть после прогрева. Причем, прогрев тут - не в переносном смысле, заметил, что если охлаждать плату кулером, то она вроде начинает работать более стабильно, если погреть феном (для волос), то быстрее зависает даже из "холодного состояния". Причем, пальцем греющихся микросхем обнаружено не было.
Кстати, виснет только меню. Сами игры вроде не виснут (но долгого тестирования не проводилось).
Также, заметил, что если держать шило, к которому приложен палец (шило, чтобы удобнее было дотрагиваться до контакта) на одном из контактов адресных линий (пробовал VA7, VA6), то зависания в меню вроде проходят.
Сегодня еще заметил, что на клоне на TV16B меню не виснет. Зависания впервые словил на Sega Mega Drive VA1. Грешить на кривую ревизию не стоит - после прошивки проверял на ней. Проверял каждую игру по чуть-чуть (до игрового процесса), это заняло некоторое время, если бы изначально меню так зависало, словил бы зависание уже тогда.
То есть, мнгоигровка стала зависать после того, как просто полежала на полке. Правда лежала она без корпуса, может статикой что-нибудь выбило?
И да, как уже говорил, припаял на проводках другую схему переключения заместо родной.
Вот как выглядит это безобразие, не обращайте внимание на торчащий лишний проводок, я его подпаял уже когда пытался решить проблему:
У кого какие соображения на этот счет?
HayaoYokogawa:
--- Цитата: Talking_Sword от 12 Сентябрь 2023, 08:58:48 ---Также, заметил, что если держать шило, к которому приложен палец (шило, чтобы удобнее было дотрагиваться до контакта) на одном из контактов адресных линий (пробовал VA7, VA6), то зависания в меню вроде проходят.
--- Конец цитаты ---
Попробовать повесить кондер на эти линии?
Talking_Sword:
HayaoYokogawa, да, тоже уже об этом думал. Какую емкость? Другую ногу куда подключить? К плюсу или к минусу питания?
HayaoYokogawa:
--- Цитата: Talking_Sword от 12 Сентябрь 2023, 10:09:29 ---HayaoYokogawa, да, тоже уже об этом думал. Какую емкость? Другую ногу куда подключить? К плюсу или к минусу питания?
--- Конец цитаты ---
Промеж. К плюсу точно не надо - либо к земле, либо промеж. Я б всяко попробовал, правда, но это потому, что я шарю совсем чуть-чуть. :lol:
Talking_Sword:
"Промеж" - это как? Между двух адресных линий? Если да, то так точно не заработает, пробовал уже вчера, правда подтыкал нагорячую вручную.
Сейчас еще попробовал к земле (припаял) - вообще не запускается.
В принципе, логично. Переменный ток через конденсатор вполне может течь. На адресных линиях ток не совсем переменный, но идет импульсами, можно тоже условно посчитать переменным. Скорее всего, конденсатор "утягивает" адресную линию в "0", так что запуска не происходит.
HayaoYokogawa:
--- Цитата: Talking_Sword от 12 Сентябрь 2023, 10:55:56 ---"Промеж" - это как? Между двух адресных линий? Если да, то так точно не заработает, пробовал уже вчера, правда подтыкал нагорячую вручную.
Сейчас еще попробовал к земле (припаял) - вообще не запускается.
В принципе, логично. Переменный ток через конденсатор вполне может течь. На адресных линиях ток не совсем переменный, но идет импульсами, можно тоже условно посчитать переменным. Скорее всего, конденсатор "утягивает" адресную линию в "0", так что запуска не происходит.
--- Конец цитаты ---
В линию конденсатор поставить в смысле попробовать. Может постоянка где-то пролезает.
JRBVZ:
Надо проверять на другом чипе памяти, может данный экземпляр глючит.
Talking_Sword:
HayaoYokogawa, в разрыв? Если да, то я пас. Столько дорожек придется резать, не факт, что поможет.
JRBVZ, 1. У меня нет другой микросхемы ПЗУ.
2. Если я отпаяю схему переключения, которая припаяна на отдельной плате на проводках, подтяну все "лишние" адресных линии ПЗУ к лог. "0", сделав таким образом одноигровку, которая будет показывать только меню. То если в таком виде меню перестанет виснуть, то подозрения с ПЗУ снимаются? И наоборот, если продолжит виснуть, то значит виновато ПЗУ?
JRBVZ:
По идее да, попробуй.
Talking_Sword:
Не совсем понял, попробовать что? Убрать схему переключения?
JRBVZ:
Да, сделай одноигровку с меню.
8street:
Не надо кондер вешать, он только мешать будет. Надо резистор 2,2-10 КОм на питание или на землю. Тут в соседней ветке помогло вроде https://www.emu-land.net/forum/index.php/topic,88377.0.html Правда там на линию данных вешали, на любую. Может поможет.
Talking_Sword:
--- Цитата: 8street от 12 Сентябрь 2023, 19:11:39 ---Не надо кондер вешать, он только мешать будет. Надо резистор 2,2-10 КОм на питание или на землю.
--- Конец цитаты ---
Да, тоже уже об этом подумал.
Сейчас провел эксперимент - пока полностью отпаивать схему переключения не стал, отпаял входы HC174 от VA1-VA7 (см. схему в этом посте). Определенно стало работать стабильнее, теперь в простое не виснет (до этого висло, даже если приставку просто не трогать). Я было подумал, что проблема ушла, но если прокручивать список на "прогретом" картридже, то все равно виснет. Сейчас попробовал отпаять VD7-VD9, теперь надо немного погонять, чтобы понять, изменилось что-то, или нет.
Навигация
Перейти к полной версии