| Приставки > Картриджи / диски |
| [Sega Mega Drive] Life On Mars (dump) |
| << < (4/8) > >> |
| godun:
--- Цитата: Sharpnull от 18 Январь 2023, 09:10:33 ---Кое-как перенес сохранение на обычный SRAM, в начале работает --- Конец цитаты --- на железке не пашет, на эмуле да |
| DrMefistO:
--- Цитата: Sharpnull от 18 Январь 2023, 09:10:33 ---Кое-как перенес сохранение на обычный SRAM, в начале работает. Continue без сохранения не работает, нужно добавлять проверку. Меня удивило, что запись сохранения как в self-flashable https://www.nesdev.org/wiki/UNROM_512, последовательность байтов такая же. UNROM 512: --- Код: ---(This code must exist in wram): Erase 4KB Flash Sector: $C000:$01, $9555:$AA $C000:$00, $AAAA:$55 $C000:$01, $9555:$80 $C000:$01, $9555:$AA $C000:$00, $AAAA:$55 $C000:BANK, ADDR:$30 (Where BANK is $00-1F, ADDR is $8000,$9000,$A000,$B000) Read the written location twice until you get $FF twice. Write a byte: $C000:$01, $9555:$AA $C000:$00, $AAAA:$55 $C000:$01, $9555:$A0 $C000:BANK, ADDR:DATA (Where BANK is $00-1F, ADDR is $8000-$BFFF, DATA is $00-$FF) Read the written location twice until you get DATA twice. --- Конец кода --- В этой игре Erase: --- Код: ---307c 0aab MOVEA.W #$0aab,A0 10bc ffaa MOVE.B #$aa,(A0) 327c 0555 MOVEA.W #$0555,A1 12bc 0055 MOVE.B #$55,(A1) 10bc ff80 MOVE.B #$80,(A0) 10bc ffaa MOVE.B #$aa,(A0) 12bc 0055 MOVE.B #$55,(A1) 13fc 0030 003f f001 MOVE.B #$30,$003ff001 3039 003f f000 MOVE.W $003ff000,D0 0c40 ffff CMPI.W #$FFFF,D0 66f4 BNE $00000054 4e75 RTS --- Конец кода --- Write: --- Код: ---202f 0008 MOVE.L +8(A7),D0 3200 MOVE.W D0,D1 307c 0aab MOVEA.W #$0aab,A0 10bc ffaa MOVE.B #$aa,(A0) 11fc 0055 0555 MOVE.B #$55,$00000555 10bc ffa0 MOVE.B #$a0,(A0) 206f 0004 MOVEA.L +4(A7),A0 3080 MOVE.W D0,(A0) 3010 MOVE.W (A0),D0 b041 CMP.W D1,D0 66fa BNE $00000058 4e75 RTS --- Конец кода --- --- Конец цитаты --- Да, оно, спасибо. Добавлено позже: Закрепил в начало ссылку на пост с нормальным ромом с сейвами. |
| Rumata:
--- Цитата: godun от 18 Январь 2023, 10:17:34 ---на железке не пашет, на эмуле да --- Конец цитаты --- Для железки надо /TIME задействовать, здесь же 4М. Как в Бейонд Оазисе. Может и заголовок править, я не знаю, как там ОС определяет схему. |
| ww:
--- Цитата: Sharpnull от 18 Январь 2023, 09:10:33 ---Кое-как перенес сохранение на обычный SRAM, в начале работает. Continue без сохранения не работает, нужно добавлять проверку. --- Конец цитаты --- Супер :thumbup: На генсе тоже запускается. А далеко там до сэйвов? Хочу проверить на эмуле и флэщкарике |
| DrMefistO:
--- Цитата: ww от 18 Январь 2023, 12:56:27 ---Супер :thumbup: На генсе тоже запускается. А далеко там до сэйвов? Хочу проверить на эмуле и флэщкарике --- Конец цитаты --- Минуты две вправо идти:) |
| ww:
--- Цитата: DrMefistO от 18 Январь 2023, 13:15:52 ---Минуты две вправо идти:) --- Конец цитаты --- На Генсе сэйвы работают :thumbup: |
| Rumata:
А чем Генс отличается от других эмуляторов? o_0 |
| DrMefistO:
--- Цитата: Rumata от 18 Январь 2023, 14:01:50 ---А чем Генс отличается от других эмуляторов? o_0 --- Конец цитаты --- Тем что он древнее зло:) |
| Rumata:
Да ладно :D Местами лучше Фьюжена Вот жаль под руками подходящей платки с флешкой нет. Хотя в принципе и так всё ясно |
| Sharpnull:
--- Цитата: godun от 18 Январь 2023, 10:17:34 ---на железке не пашет --- Конец цитаты --- Попробуйте заменить в файле байт 1B2 с F8 на E0, это указывает на доступ вместо "8-bit (odd addresses)" на доступ по 2 байта, что и делает игра. Я не уверен, что нужно и где-то проверяется, поэтому не менял. Там и размер рома $0FFFFF вместо $3FFFFF, вроде никто не смотрит. Ещё можно поменять размер SRAM с 00 20 FF FF (позиция 1B8) на 00 20 0F FF, всё равно используется только 0x828 байт, а то BizHawk создаёт сохранение на 64КБ, когда нужно 4КБ. Вообще, я только поменял адреса и вкл/выкл SRAM до и после работы с ней. UPD: Для BlastEm нужно было поставить 1B2:E0. Добавил ром с этим и правильным размером рома и SRAM на 4КБ. |
| Ti_:
--- Цитата: Sharpnull от 18 Январь 2023, 17:44:05 ---доступ по 2 байта, что и делает игра. --- Конец цитаты --- На evedrive-md не будет работать, так как там 8-битная sram. Только на mega. Поэтому надо переписывать весь код, который читает/сохраняет сейвы. Менять на байтовые чтения/записи только с нечетных адресов. |
| godun:
--- Цитата: Ti_ от 19 Январь 2023, 10:04:11 ---На evedrive-md не будет работать, так как там 8-битная sram --- Конец цитаты --- Так на родном катридже оно как всё-таки работает то? Сейвы пишутся в те же 4 мегабайта, где и ром, или за пределы 4 мегабайт? Если в теже где и сам ром, то нафига флешкатриджу вообще эта срам и что-то там переписывать? |
| Rumata:
На родном оно пишется во флешку, в стандартные 4М. --- Цитата: godun от 19 Январь 2023, 17:18:24 ---нафига флешкатриджу вообще эта срам --- Конец цитаты --- О каком флешкартридже речь? Если Эвердрайв, то он просто повторяет конфигурацию существующих картриджей. А у существующих записи в ПЗУ нет и быть не может. С эмулятором примерно та же история, там тоже запись в ПЗУ не предполагается. |
| godun:
--- Цитата: Rumata от 19 Январь 2023, 18:32:30 ---О каком флешкартридже речь? --- Конец цитаты --- обычный эвердрайв --- Цитата: Rumata от 19 Январь 2023, 18:32:30 ---А у существующих записи в ПЗУ нет и быть не может. --- Конец цитаты --- а как же тогда идет запись на родном картридже? записью управляет какой то кусок кода? верно? а если так. то этот кусок кода находится в роме. то почему этот же код не выполняет свою функцию на флешкатридже? или это потому что там флешка не такая? или что? |
| Rumata:
"Родной" картридж имеет НЕСТАНДАРТНУЮ конфигурацию. Это фича исключительно крикзовского Flash Kit MD. --- Цитата: godun от 19 Январь 2023, 18:41:01 ---почему этот же код не выполняет свою функцию на флешкатридже? --- Конец цитаты --- Потому, что кроме кода нужно ещё и железо. А его нет. Добавлено позже: --- Цитата: Rumata от 19 Январь 2023, 18:32:30 ---записи в ПЗУ нет и быть не может. --- Конец цитаты --- |
| Rumata:
Кстати, можно на Али купить чистый картридж от Flash Kit MD, даже в корпусе. |
| masyanya:
Судя по фоткам. Заведены сигналы VA[21:1], VD[15:0], nCAS0, nCE0 и nLWR, адреса A[23:22] не заведены, отсюда выводы: 1. Только 4мб. 2. Записывается прям во FLASH память. 3. Записываться может как в режиме 16bit, так и 8Bit. 4. На эмуле глючит, потому что эмуль не умеет эмулировать (простите за каламбур) FLASH память. Разбираем ром. Видим что вначале вычитывается CFI (Common Flash Memory Interface). Вот с этого адреса вызывается CFI: 0xe0ff001e (тут и далее имеется ввиду M68K PROCESSOR COUNTER, после вызова CFI у нас FLASH "исчезает" из области памяти и везде данные CFI, поэтому подобные операции делаются только из рабочей памяти консоли): [0x55*2 + 1] = 0x98 (входим в CFI). 0xe0ff0028 - Read From (читает младшими битам данных, а у 68k это нечетный адрес, выписал адреса: 0x21, 0x23, 0x25, 0x27, 0x29, 0x2b, , 0x2d, 2f, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3b, 0x3d, 0x3f, 0x41, 0x43, 0x45, 0x47, 0x49, 0x4b, 0x4d, 0x4f, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5b, 0x5d, 0x5f, 0x61, 0x63, 0x65, 0x67, 0x69, 0x6b, 0x6d, 0x6f, 0x71, 0x73, 0x75, 0x77, 0x79, то есть вычитывается вся область CFI) 0xe0ff0038 - [0x01] = 0xF0 выходим из CFI, после этой команды можно уже выполнять код с FLASH. Алгоритм проверки ждет от CFI что там будет написано, - “QRY”, и главное FLASH = 64MBit (так что нужна именно S29GL064N, S29GL032N не подойдет как и S29GL128N и так далее). Так же вычитываются данные об алгоритмах стирания и проверяется наличие в самом верху адресов блоков по 8килобайт (можно открыть документашку на S29GL064N и увидеть какие именно байты ждет от нас алгоритм проверки, тут не буду выписывать, портянка до пола получится). Всё, с защитой закончили. Как происходит сохранение: При сохранениях, вначале трется сектор стандартной командой JDEC, - Sector Erase. Причем трет адресом по середине сектора в побайтном режиме, а именно: 0x3ff001 - Erase sector, ага ток сектор весь стирается, начиная с 0x3F0000 (и да, так как нога nWE FLASH'ки соединена напрямую с nLWR, то флешь одинаково хорошо реагирует на правильные команды как размером WORD так и размером BYTE по младшим битам данных, то есть по нечетным адресам, поэтому в CFI на старте вполне норм заходит в побайтном режиме). Затем по WORD'ам (чё не по байтам то :lol:) пишет сохраненку, тоже начиная с середины сектора, причем проверяет не состояние машины статуса, а прям ворд читает и сравнивает с исходным значением. В общем оно бы работало нормально, если эмуль на котором вы запускаете мог эмулировать поведение S29GL064N. Чтоб без "вранья", есть эмулятор повторяющий поведение InviteDRIVE v4 MAX. На нем работает. Скачиваем, распаковываем, запускаем "run.cmd" (управление только с клавиатуры, но тут цель указать на верность сделанных выводов, да и вообще он в основном для отладки, так что не обессудьте: A = "A", S = "B", D = "C", F = "START", TAB = RESET). Теперь разрешите откланяться, удачного Вам дня! P.S. Судя по документации у S29GL064N (Models 06, 07, V6, V7 only) в корпусе TSOP-48 только 32 мегабита памяти на борту, так как на 13 пин выведен "ACC", в других ревизиях там "A21". Полностью для определенности напишите маркировку чипа пожалуйста. |
| Segaman:
Так ну тут конечно это всё очень здорово, но надо это дело перелопатить для эмулятора и флешкариков. Иначе понту в данном сливе маловато, ибо играть невозможно :) |
| hot:
--- Цитата: Segaman от 22 Январь 2023, 11:26:57 ---Иначе понту в данном сливе маловато, ибо играть невозможно :) --- Конец цитаты --- На самом деле сохранения в этой игре не особо то и нужны. Она очень короткая, если сравнивать её с классическими Метроидами. Я прошёл её за полтора часа, исследовав все локации полностью. Думаю, если не тупить и не пытаться найти какие-то секреты, которых нет, то её можно и за час пройти. А терминалы даже без взаимодействия с ними (и сохранения) становятся чекпоинтами, если просто рядом с ними пройти, поэтому если вдруг убьют, то начинать игру сначала не придётся. |
| Segaman:
hot, ну казуалам от этого легче не станет. Так что думаю надо будет сесть поковырять, а в качестве примера взять принцип из Beyond Oasis. :) |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |