| Приставки > Картриджи / диски |
| Taito маперы 33 и 48 |
| << < (2/3) > >> |
| dssoft:
--- Цитата ---IRQs on this mapper seem to behave exactly like MMC3's IRQs, with 2 exceptions: 1) The written reload value is inverted. EG: Writing $06 to the reload reg on this mapper would be like writing $F9 on MMC3. You can simply XOR the writes with $FF and it will work just like MMC3. 2) The IRQ seems to trip a little later than it does on MMC3. It looks like about a 4 CPU cycle delay from the normal MMC3 IRQ time. Failure to put in this delay results in shaking and other graphical quirks in some games. --- Конец цитаты --- Забавно, похоже описывающему не пришло в голову что в этом маппере счетчик увеличивается, а не уменьшается, а инверсия как раз и добавляет лишний цикл :D |
| dssoft:
А нет ли у нас здесь счастливых обладателей японской версии джетсонов "в железе"? Никак не могу найти как должна выглядеть "демка", везде только mmc3 английская версия на ютубе. |
| supremacy:
Только с флешкартриджа. Зачем делать японскую версию, если можно сделать английскую? |
| dssoft:
Я заморочился максимально точной эмуляцией. На флешкартриджах, к сожалению, реализация тоже может быть не совсем верной, источники информации-то одни и те же. Вот, к примеру, в демке джетсонов есть полоса, подчеркивающая иероглифы? Фото с экрана, сорри. |
| supremacy:
Нет, полосы нет. Немножко пиксель мерцает слева на уровне полосы. |
| dssoft:
Ага, спасибо. Вот в этом и загвоздка - должна быть полоса или нет, ошибка на целую сканлинию это дофига и по идее артефактов должно немало. Но их нет, кроме этой линии. |
| supremacy:
Думаю, что линии быть не должно, она не вписывается в дизайн |
| dssoft:
Вот тут согласен, тем более что ее нет на ммс3 версии. Добавлено позже: В общем, это я лошара: в 48 маппере счет останавливается при запрете прерываний, отсюда и эти плавающие погрешности. |
| dssoft:
В общем, все совсем не так как на самом деле, алгоритм генерации прерываний отличается от ММС3. http://forums.nesdev.com/viewtopic.php?f=3&t=18277 --- Цитата ---* Mechanism of IRQS: --- Код: --- if falling_edge(PPU_/RD) if PPU_A13 = 0 AND LAST_PPU_A12 = 1 AND PPU_A12 = 0 if (IRQ_counter = 255) IRQ_pending <= 1; end if; IRQ_counter++; end if; LAST_PPU_A12 <= PPU_A12 end if --- Конец кода --- * IRQ is asserted immediatelly if IRQ_pending flag is set AND IRQs_are_enabled * It is impossible to tell if the IRQ_counter is reloaded instantly when writing to C001 or when falling edge of PPU /RD (but that does not matter) * Only writing to C001 clears the IRQ_pending flag (dislabling IRQs doesn't) * IRQ counter reacts only when there is a PPU A12 transition at $0000-$1fff and only during PPU reads (because the external 74157 mux prevents chip from seeing actual PPU A12/A13 values during PPU write cycles) * IRQ counter does not checks for M2 when determining if two A12 transitions are too close to each other --- Конец цитаты --- Пункт Only writing to C001 clears the IRQ_pending flag (dislabling IRQs doesn't) сомнителен. |
| supremacy:
То что алгоритм прерываний отличается от mmc3 было понятно и раньше (на nesdev было написано что прерывание происходит позже чем на mmc3). Я как-то хотел переделать Captain Saver на mmc3, так там с прерываниями совсем беда, где-то просто графические глюки, а где-то и зависания. Надо сидеть и подгонять тайминги для каждого места. --- Цитата: dssoft от 04 Февраль 2020, 20:48:46 ---Пункт Only writing to C001 clears the IRQ_pending flag (dislabling IRQs doesn't) сомнителен. --- Конец цитаты --- Человек тестировал на реальном железе, а какие основания для сомнений есть у тебя? 8) |
| dssoft:
--- Цитата: supremacy от 05 Февраль 2020, 08:27:37 ---Человек тестировал на реальном железе, а какие основания для сомнений есть у тебя? 8) --- Конец цитаты --- Да все оттуда же: https://forums.nesdev.com/viewtopic.php?p=231581#p231581 --- Цитата ---I had forgotten all about that one time I spent hours on that Flintstones game. FYI, the game also requires that writing to $C000 acknowledges the IRQ, otherwise one specific portion of a later stage in the game is bugged (the Wiki does not mention this, unsure if other emulators implement this or if it is correct, but it's the solution I found for a user-reported emulation bug at the time) --- Конец цитаты --- Я сейчас раздумываю как лучше, лепить новый отдельный механизм или добавить правильную задержку после прерывания MMC3, оно в любом случае хлопнет перед этим. |
| supremacy:
--- Цитата: dssoft от 05 Февраль 2020, 09:59:59 ---Да все оттуда же: https://forums.nesdev.com/viewtopic.php?p=231581#p231581 --- Конец цитаты --- Я не понял как эти два утверждения связаны между собой. Первое говорит, что даже при записи в $C003 флаг взведённого прерывания не сбросится. Второе говорит, что при записи в $C000 новое значение сразу применяется к счётчику. |
| dssoft:
--- Цитата: supremacy от 05 Февраль 2020, 11:02:15 ---Я не понял как эти два утверждения связаны между собой. Первое говорит, что даже при записи в $C003 флаг взведённого прерывания не сбросится. Второе говорит, что при записи в $C000 новое значение сразу применяется к счётчику. --- Конец цитаты --- Речь про то что флаг сбрасывается не только записью в C001 но и C000. Разрешение прерывания отдельный вопрос, то ли это И с флагом, то ли разрешение для триггера. Скорее второе. Тут проще погонять, посмотреть на глюки. |
| supremacy:
--- Цитата: dssoft от 05 Февраль 2020, 11:36:08 ---Речь про то что флаг сбрасывается не только записью в C001 но и C000. --- Конец цитаты --- мне кажется, здесь идёт речь не про флаг а про счётчик. У mmc3 запись в C000 не запускает счётчик заново, если не вызвать сразу C001, а у 48-го маппера значение счётчика сразу обновляется и в этом и есть отличие. |
| dssoft:
--- Цитата: supremacy от 05 Февраль 2020, 12:25:29 ---мне кажется, здесь идёт речь не про флаг а про счётчик. У mmc3 запись в C000 не запускает счётчик заново, если не вызвать сразу C001, а у 48-го маппера значение счётчика сразу обновляется и в этом и есть отличие. --- Конец цитаты --- Да вроде как ясно написано что речь именно про IRQ acknowledge, то бишь флаг, а не релоад счетчика. А релоад просто еще одно отличие от MMC3. |
| supremacy:
--- Цитата: dssoft от 05 Февраль 2020, 12:40:36 ---Да вроде как ясно написано что речь именно про IRQ acknowledge --- Конец цитаты --- Чтобы точно понять что он имел в виду надо его код смотреть, может он решил конкретную проблему этим способом, а причина была в другом. https://github.com/SourMesen/Mesen/blob/master/Core/TaitoTc0690.h тут я вижу что значение счётчика не меняется при записи в с000, меняется только reloadvalue, и флаг сбрасывается но и на запись в с003 сбрасывается. И кроме этого какие-то костыли с задержкой в зависимости от игры 8) |
| dssoft:
--- Цитата: supremacy от 05 Февраль 2020, 13:03:06 ---Чтобы точно понять что он имел в виду надо его код смотреть, может он решил конкретную проблему этим способом, а причина была в другом. --- Конец цитаты --- Сколько я смотрел эмуляторов и прочего верилога, везде прерывания у этого маппера кривые. |
| MetalliC:
--- Цитата: dssoft от 05 Февраль 2020, 13:09:37 ---Сколько я смотрел эмуляторов --- Конец цитаты --- на эмуляторы в таких вещах смотреть не стоит, зачастую они не точно эмулируют тайминги (или конвейер и всякие FIFO или еще что подобное) оригинального железа, потому не редко код сделан так чтоб игры нормально работали, а не так как на самом деле пашет маппер или еще что. ну а доверять стоит лишь фоткам/картинкам с анализаторов логики, типа как есть по ссылке на прошлой странице. |
| dssoft:
--- Цитата: MetalliC от 07 Февраль 2020, 17:42:13 ---на эмуляторы в таких вещах смотреть не стоит, зачастую они не точно эмулируют тайминги (или конвейер и всякие FIFO или еще что подобное) оригинального железа, потому не редко код сделан так чтоб игры нормально работали, а не так как на самом деле пашет маппер или еще что. ну а доверять стоит лишь фоткам/картинкам с анализаторов логики, типа как есть по ссылке на прошлой странице. --- Конец цитаты --- Проблема в том что в данном случае анализатором снята искусственно созданная ситуация, а не реальная работа. В результате вышло немного не так как на самом деле: сохранять состояние A12 надо не по любому спаду ppu_rd, а только если А13 = 0, иначе начинается интерференция с чтением nametables. Наверно, человек в теме понял бы это сразу, но мне это стоило нескольких часов отладки. Ну и поскольку прерывания этого маппера используют 3.5 игры то овчинка просто не стоит выделки, разве что из любви к искусству. |
| dssoft:
Еще из серии "юмор нашего городка". Когда я отлаживал прерывания VRC4 то проверял их на играх (Crisis Force портит стартовый ролик при малейших проблемах), но потом случайно нашел специально написанный для этого тестовый ром: http://forums.nesdev.com/viewtopic.php?f=3&t=16009 Прошил его и расстроился: судя по тесту оба вида прерываний "запаздывают". Ну что поделать, посидел, нашел причину, решил что исправлять нет смысла. И только потом решил дочитать тему до конца :lol: Krikzz попробовал этот тест на реальном железе VRC4 и получил то же самое "запаздывание" что и у меня. Вывод: не все то тест что тестирует. А причина, если кому интересно, в том что тест полагает что счетчики тикают по положительному фронту М2, а в реальности это происходит по отрицательному (и прерывание приходит на одну команду позже). |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |