Описание: АРХИВНАЯ ТЕМА 2006 года |
Поиск в теме | Версия для печати |
Griever |
Отправлено: 31 Октября, 2018 - 21:37:39
|
VIP
Покинул форум
Сообщений всего: 457
Дата рег-ции: Июнь 2015
|
alex_231 пишет:Вот.
Переключение банков (рабочее) прописано по адресу x7FFAF, плюс по адресу x7F0C2 убрал обработку прерывания (хотя, возможно, зря), которое так же рушило процесс.
Переключение банков (не рабочее) - x7C9B4, чтобы его поймать, нужно ставить бряк на $6CC2.
Ну, для начала,
CODE:0x06 42 -> 52
0x07 00 -> F0
У китайского дампа ошибка в хедере, которая фиксится эмуляторным костылём .
До Эникса проходит. Ты знаешь, что делать дальше? |
|
|
Марат |
Отправлено: 01 Ноября, 2018 - 19:43:42
|
Chief-Net
Покинул форум
Сообщений всего: 2183
Дата рег-ции: Окт. 2014
Откуда: Казахстан
|
alex_231 пишет:В данном маппере переключение банков производится записью номера слота в $8000 и номера банка в $8001, слоты и банки размером по 8 кб.
Слот $8000-$9FFF имеет номер h06, слот $A000-$BFFF - h07, это проверено и точно работает.
Слот $C000-$DFFF должен иметь номер h00, слот $E000-$FFFF - h01, у меня это не работает, но в китайском Dragon Quest VII переключает.
Где ты это вычитал? Согласно https://wiki.nesdev.com/w/index.php/MMC3 ,
Слот $8000-$9FFF имеет номер R06, слот $A000-$BFFF - R07, как ты и пишешь, но
слот $C000-$DFFF также имеет номер R06, а слот $E000-$FFFF вообще непереключаемый и всегда закреплен за последним банком. Чтобы поменять слот $C000-$DFFF, надо писать что-то типа:
CODE:
LDA #$46
STA $8000
LDA #$XX
STA $8001
после этого предпоследний банк будет уже закреплен за слотом $8000-$9FFF,
а в слоте $C000-$DFFF будет тот банк, который мы выбрали. |
|
|
alex_231 |
Отправлено: 02 Ноября, 2018 - 03:33:27
|
Chief-Net
Покинул форум
Сообщений всего: 4688
Дата рег-ции: Окт. 2014
|
Я это нигде не вычитывал, а увидел во время выполнения кода китайского рома.
И да, последний банк не должен быть переключаемым, но он переключается и в DW4 и у китайцев, я сам был в шоке, но как-то оно работает.
Можешь сам посмотреть на оригинальном роме DW4, поставив бряк на $6CAD.
Там до этой подпрограммы код читается из банка h1F, а после JSR уже из банка h0F.
У китайцев там немного не так, сейчас пересмотрел повнимательней:
при записи в $8000 байта h00 и в $8001 байта h00 происходит переключение всех банков, в слот $8000-$BFFF подключается банк $0000-$3FFF, а в слот $С000-$FFFF банк $7C000-$7FFFF,
а при записи в $8000 байта h00 и в $8001 байта h02 все банки переключаются на следующую страницу рома - в $8000-$BFFF - банк $80000-$83FFF, а в $C000-$FFFF - банк $FC000-$FFFFF.
А у меня это переключение почему-то не работает.
----- Делая выбор, отбрось простое решение и выбери правильное...
|
|
|
Марат |
Отправлено: 02 Ноября, 2018 - 08:03:03
|
Chief-Net
Покинул форум
Сообщений всего: 2183
Дата рег-ции: Окт. 2014
Откуда: Казахстан
|
С оригиналом понятно. Там маппер подключает либо первые 256 КБ, либо вторые. И последние банки, видимо, у них одинаковые или, по крайней мере, содержат прерывания и идентичный код. А в китайском клон mmc3, который тоже переключает страницу, но по 512 КБ. Теперь более менее понятно. Через регистр R0 выбираем первые или вторые 512 КБ, а через регистры R6, R7 нужный банк. Непонятно, правда, почему у тебя не работает. Буду дома попробую поэкспериментировать. |
|
|
Марат |
Отправлено: 02 Ноября, 2018 - 16:48:25
|
Chief-Net
Покинул форум
Сообщений всего: 2183
Дата рег-ции: Окт. 2014
Откуда: Казахстан
|
Griever пишет:Ну, для начала,
CODE:
0x06 42 -> 52
0x07 00 -> F0
У китайского дампа ошибка в хедере, которая фиксится эмуляторным костылём .
Вот же Гривер, оказывается написал причину, почему у тебя не переключается банк.
Надо именно эти значения записать в хедер, так как игра использует 245 маппер, клон mmc3.
И в мессадже лог, должна появиться надпись Mapper #: 245.
Если исправишь, то будут переключаться банки. |
|
|
alex_231 |
Отправлено: 09 Ноября, 2018 - 04:55:14
|
Chief-Net
Покинул форум
Сообщений всего: 4688
Дата рег-ции: Окт. 2014
|
Вот прям не знаю, вроде бы, корректно переписал переключение, и переместил банки куда нужно и игра, вроде бы, запускается, но...
ни name table mirroring нормально не определяется, ни спрайты нормально не рисуются, а что самое паршивое - в произвольный момент времени игра может зависнуть из-за неожиданного прерывания, которое вылезает посреди процедуры переключения банков.
Плюс ещё в самом начале новый маппер свинью подкладывает и прерывания срабатывают совершенно не так как в оригинале.
Боюсь руками я это все-таки доделать не смогу, нужен тотальный дизасм и пересборка кода с нуля, но для меня это непосильная задача
----- Делая выбор, отбрось простое решение и выбери правильное...
|
|
|
|
Поиск в теме | Версия для печати |
Страниц (10): В начало « ... 2 3 4 5 [6] 7 8 9 10 » |
Сейчас эту тему просматривают: 23 (гостей: 23, зарегистрированных: 0) |
« Переводы » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|