Автор Тема: Famicom/NES/Dendy - как многоигровые картриджи определяют нажатие на reset?  (Прочитано 5847 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Cluster

  • Пользователь
  • Сообщений: 67
    • Twitter
    • ВКонтакте
    • Просмотр профиля
Я наверное достану вас тут тупыми вопросами. Поиск по форуму ничего не дал.

На Денди есть пиратские многоигровые картриджи, игры на которых переключаются нажатием на ресет. Возник вопрос - как они это делают? Я выяснил, что многие картриджи просто реагируют на длительный низкий уровень M2, всё просто и логично. Но встречаются картриджи, которые я успешно могу сдампить, но никак не могу имитировать reset, чтобы переключить игры. Что я пробовал:
  • Выставить на секунду низкий уровень на всех контактах
  • Выставить на секунду низкий уровень на всех контактах кроме ROMSEL
  • Выставить на секунду все контакты в Z-состояние
  • Прочитать ресет-вектор по адресу $FFFC-$FFFD
  • Разные комбинации вышеперечисленного

Ничего не помогает, картридж всегда выдаёт одну и ту же игру. Что именно происходит в консоли при нажатии на reset? Я тыкал логическим анализатором и увидел низкий уровень M2, высокий на ROMSEL. Но похоже, что такие картриджи реагируют на что-то ещё. На самом деле этот вопрос скорее волнует просто из-за любопытства. На иностранных форумах спрашивать не стал, там такие картриджи редко встречаются.

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7392
    • Просмотр профиля
Сигнала сброс не выведено на гнездо картриджа, это правда. Но используя особенность 6502 он легко детектится. В общем, когда ядро 6502 молотит, оно выставляет F2 (он же PHI2, т.е. фаза №2, а М2 это уже всякие Рюмики додумали) в лог.1 когда хочет обращения к внешним шинам. Выглядит это вот так:

И тут вступает второй фактор ядра 6502: он конвеерный. Т.е., он делает обращение к шине каждый такт ядра. Таким образом, сигнал строба F2 получается стабильной частотой ядра (в случае с Денди это около 1,7Мгц). Но если нажать на сброс, то все сигналы переходят в Z, а F2 в лог.1. Таким образом, наличие лог.0 на этом выводе означает что ядро работает. И сразу рождается простая схема:

Один диод (D100), одно сопротивление (R100) и один конденсатор (C100) формируют положительный импульс сброса.
В первых картриджах эта цепь была снаружи на плате, в более позних ее умудрились запихать внутрь маппера.

Оффлайн Engine23

  • Пользователь
  • Сообщений: 41
    • Просмотр профиля
вот тут тоже приведен пример программной реализации
 http://www.no-carrier.com/index.php?/9999-in-1/

Оффлайн Cluster

  • Пользователь
  • Сообщений: 67
    • Twitter
    • ВКонтакте
    • Просмотр профиля
Но если нажать на сброс, то все сигналы переходят в Z, а F2 в лог.1. Таким образом, наличие лог.0 на этом выводе означает что ядро работает.
Странно, я сейчас перепроверил - во время нажатия на ресет PHI2 принимает логический 0, а не 1. Т.е. наличие логической 1 обозначает, что ядро работает. И все картриджи, в которых у меня получается переключать игры, реагируют именно на длительный 0 на PHI2.

Но я же говорю - таки и делаю. Но иногда встречаются картриджи, которые регистрируют ресет как-то иначе. И я никак не могу понять как.

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7392
    • Просмотр профиля
Давным давно, в 90е, я делал исследования. В 2009м я записал логиком, но имижшак похерил все картинки. Результат один и тот же - лог.1 в пассиве. Но при этом, лог.1 означает обращение.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24406
    • Просмотр профиля
Из опиания UM6557 (как бы СЕКАМовский ЦПУ)
Цитата
When /RST equal zero, this pin is TRI-state. This output is 1.78977 MHz clock, duty cycle = 62.5% high, its falling edge synchronizes with the falling edge of Ф2 (Out) of 6502 microprocessor.

На сколько я помню, там обычно по входу RC цепочка стоит, так что статические комбинации эффекта иметь не будут.

Надо просто разрисовать схему этих цепей в картридже, тогда понятнее будет

Оффлайн Cluster

  • Пользователь
  • Сообщений: 67
    • Twitter
    • ВКонтакте
    • Просмотр профиля
Хм. Мистика. Я вот на своём фамикоме AV тоже подключал логический анализатор. При зажатом ресете на PHI2 ноль, на ROMSEL единица. Сегодня утром перепроверил, что на PHI2 ноль.
Как бы там ни было, это не отвечает на вопрос в первом посте.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24406
    • Просмотр профиля
Схему в студию. В ней и будет ответ  :)

Оффлайн Cluster

  • Пользователь
  • Сообщений: 67
    • Twitter
    • ВКонтакте
    • Просмотр профиля
Схему в студию. В ней и будет ответ  :)
Схему картриджа?Ну вот у меня на руках один, там только SRAM, две бескорпусные микросхемы и два диода. Это UNROM на две игры.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24406
    • Просмотр профиля
Если такой - это плохо. Хорошо бы что-то более древнее.  :)
Сейчас не берусь утверждать точно, давно этой темы не касался, но помнится там ставился триггер / счётчик, тактируемый по фронту / спаду Ф2

Оффлайн CaH4e3

  • Пользователь
  • Сообщений: 3588
    • Twitter
    • Просмотр профиля
По опыту дампа кариков тупыми шинными дамперами детект резета проверяется наличием конкретно частоты проца на Ф2 контакте. есть строб - есть лог 1, нет строба (независимо от состояния Ф2) - лог 0 - резет. то есть, чтобы некоторые картриджи держали регистры, надо подавать частоту проца на Ф2, соответственно, чтобы другие картриджи переключались по резету, надо переставать стробировать Ф2. другого пока не попадалось.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24406
    • Просмотр профиля
То есть там должна быть интегрирующая цепочка. При наличии Ф2 на её выходе будет единица, при отсутствии Ф2 (сброс) - ноль, потом снова единица. И вот один из этих фронтов и используется для тактирования триггера / счётчика, переключающего банки. Как-то так.

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7392
    • Просмотр профиля
Граждане, а что я привел в своем первом посте? Как и сказал Санч - требуется определить отсутствие частоты. Возможно, лог.1 при сбросе это особенность именно 6527, с которыми я и работал. Либо это получалось из-за подтяжки картриджем, в котором была схема сброса. Я просто уже не помню, при каких условиях я измерял. Но схема приведенная в моем первом посте работает на всех клонах и оригиналах.