Автор Тема: Пиратский картридж с 8бит ПЗУ и 8бит регистром 74ls374  (Прочитано 466 раз)

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

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Задумался, зачем в одноигровке, работающей без мапперов, регистр 74ls374. Срисовывая схему, сначала не понял, а потом как понял...
VD0..VD7 cигналы соединены со входами регистра и с ПЗУ
VD8..VD15 соединены с соответствующими выходами регистра, а на ПЗУ дорожек нет, ПЗУ видимо 8бит
/CE_0 (B17) соединен с /OE регистра и идет под каплю
/CAS_2 (B21) через инвертор заходит на вход clock неинверсный и в каплю (видимо, на старшую линию адреса)

/CAS_0 (B16) не используется

Стало быть, в сегах есть какая-то возможность читать 2 байта по очереди.

И еще факт - на ретрогенезис на tct-6803 картридж не работает, хотя я не смотрел пока, есть там /CAS_2 или нет, или мож капле или логике питания не хватает, но другое подобное старье с питанием ПЗУ под каплей от 5 Вольт работает.

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

Возможно, что-то недосрисовал.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
Стало быть, в сегах есть какая-то возможность читать 2 байта по очереди.
Стало быть нет. /CAS2 в два раза короче /CAS0



Сначала в регистре защелкивается старший байт, потом переключается адрес и с шины читается полное слово.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
/CAS2 есть на SM-801, TCT-6035, TCT-6001H. А потом его нет. Зато есть переключение между внутренним ПЗУ и внешним.

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
/CAS2 в два раза короче /CAS0
Значит, если /CAS2 нет, его можно родить из /CAS0, если искусственно ограничить длину импульса? Сделать одностабильный мультивибратор.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
Можно. Только зачем? Использование 8-битных ПЗУ крайне ограничено. Объём слишком маленький. А если ставить две, до логичнее разбивать побайтно, что обычно и делали.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
Кстати, в упор не понимаю, почему они решили коммутировать старший адрес. В  таком случае надо специально подготавливать файл: сначала разделить побайтно, а потом склеить верхнюю и нижнюю части. Если коммутировать младший адрес (А0 ПЗУ), то можно зашивать файл "как есть"

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Я бы добавил еще, что не только младший адрес лучше коммутировать, но и заводить на него CAS2, уже без "/", то есть с выхода инвертора, как в этом китайском картридже.

По поводу зачем 8-битное ПЗУ - ну, если ром в объем влезает, и если в наличии эти самые 8-битные ПЗУ каким-то боком есть, и хочется куда-то затулить какие-нибудь 27C040

Добавлено позже:
Неинверсный кас2 на младший адрес позволит с ромом не делать никаких перестановок, а просто писать как есть.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
Ну так в пиратке многое как раз делается под текущее наличие. Не знаю, на сколько это сейчас актуально. Так-то в 512 кбайт много не запихаешь, хотя ряд игр есть.

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Если только хочется сделать себе самому одноигровки из таких маленьких игр.

Еще смотрю, /OE ПЗУ сидит на земле, ПЗУ всегда выдает данные, а защелкивание в регистре при окончании /CAS2 получается до начала смены данных на выходе ПЗУ с допущением, что ПЗУ имеет больше задержку срабатывания, чем регистр.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
Ну не всегда, только при активном /CE. И тут ещё надо смотреть цикл шины 68000, когда он забирает данные с шины.

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
А, точно.

Я вот не знаю, если менять адрес при активном /CE, ПЗУ меняет данные сразу, или нужно /CE прервать, поменять адрес, а потом снова сделать активный /CE?

Во всяком случае, как-то оно всё работает... одно другому соответствует

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
Нет, ничего прерывать не нужно. Это у FRAM /CE используется как строб адреса.

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Нет, ничего прерывать не нужно.
Я хотел спросить, сам /CE_0 со слота - это получается одиночный импульс, который просто длиннее, чем /CAS_2?

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
/CE0 формируется в каждом цикле обращения к картриджу в диапазоне $000000 - $3FFFFF
/CAS0 формируется от нуля до $DFFFFF. /CAS2 наверно так же, не проверял

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Это по адресам, а по длительности импульсов - /CE_0 и /CAS_0, получается, одной длины и практически одновременно подаются? (при условии что мы за $3FFFFF не выходим, то есть подаются оба)

И /CAS_2 половинной длительности

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
В первом приближении так.

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Значит, когда /CAS_2 становится неактивен, почти сразу регистр защелкивает значение на своем выходе (т.к. он быстрее, чем ПЗУ, имеет внутри меньше стадий, задерживающих сигнал), и сразу же А0 (включенное к выходу инвертора на /CAS_2) меняется на лог0, и ПЗУ само по смене значения А0 начинает менять данные на выходе (пока /CE_0 активен, то есть вывод данных тоже активен при смене А0)

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
374 защелкивается по положительному фронту (0 -> 1), то есть по заднему фронту /CAS2. Быстродействие не при чём. Просто /CAS2 короче. И при смене адреса ПЗУ с некоторой задержкой (см. даташит) изменит информацию на выходах. Смена будет происходить внутри ПЗУ не зависимо от /OE и /CE, а вот непосредственно на выходе данные будут появляться только при активных /OE и /CE, там же выход с тремя состояниями.

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Тогда
если 374 защелкивается по фронту, то начало активного /CAS_2 (спад) должно быть сдвинуто относительно начала /CAS_0, то есть /CAS_2 более короткий, потому что у него начало (спад) позже, а конец (восстановление лог1) там же, где у CAS_0

исхожу из факта, что /CAS_2 по приведенной схеме инвертируется, чтобы зайти потом в неинверсный тактовый вход регистра
И при смене адреса ПЗУ с некоторой задержкой (см. даташит) изменит информацию на выходах.
А тем же сигналом логическим по схеме происходит защелкивание регистра, то есть увеличенная задержка ПЗУ относительно задержки защелкивания регистра служит тем фактором, который позволяет защелкнуть старый байт информации, пока новый не выдан.
Соответственно, если бы ПЗУ срабатывало быстрее, чем регистр, в регистре бы оказался младший байт уже.

Оффлайн Rumata

  • Модератор
  • Сообщений: 24484
    • Просмотр профиля
Да, наверно :-\. Проблема в том, что это было лет 20 назад. Попробую посмотреть, может какие записи остались.

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Я параллельно думаю о том, чтобы использовать /CAS_0 вместо /CAS_2, сделав укорочение импульса с левого его края. Может быть, даже сегодня что-то попробую навесить, особенно учитывая, что на картридже много свободных инверторов.

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Подал на красный и зеленый входы гбс контрол эти самые кас и це через 680 Ом, получил что-то такое, оно мельтешило. но я сфотографировал с ЭЛТ монитора с короткой выдержкой, и импульсы более-менее видно, несмотря на то, что автосмещение видеосигнала не работает от слова совсем (чтобы оно работало, надо зану

/CAS_2 и /CE_0 действительно отличаются только тем, что у /CAS_2 слева съедено пол импульса, и его активная (лог.0) ширина как раз где-то в 2 раза ниже. в остальном идентично

/CAS_2 и /CAS_0 отличаются не только длиной, а иногда еще в разных местах широкий импульс

Но, может быть, это только в конкретный момент, я пока не пробовал обычный 16-битный картридж.

Гифка - это RG каналы в ч/б по очереди, чтобы нагляднее выглядело.

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Значится, попробовал из /CE_0 сгенерировать этот сигнал, конечно, 100% он не совпадает в таймингах, но характерно то, что ошибка в данных видна только на спрайте персонажа, в остальном игра работает гладко.

Пока что какие-либо выводы сложно сделать.

Добавлено позже:
...на TCT-6803 ожидаемо тоже запустилось, ожидаемо с тем же глюком

Добавлено позже:
...если рукой создать сопротивление между GND и анодом диода, характер глюков меняется, соответственно, начинает чудить (расходиться) музыка, может быть, имеет смысл попробовать в основной части сигналы сделать идентичными, подобрать данный резистор (или поставить переменник и покрутить)
« Последнее редактирование: 20 Июль 2024, 20:31:16 от as32888 »

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Оказалось намного проще. Сигналы на /CE_0 /CAS2 различаются в момент обратного хода развертки, немного залезает эта область на видимую область растра, по 1 строке вверху и внизу видно. что они не одно и то же выдают.

красный /CAS2, зеленый /CE_0, укороченный схемой выше, к тому же в схеме 6 кОм теперь (2 по 12 кОм параллельно), на глюки изменение резистора не повлияло, суть глюков не в таймингах сформированного сигнала, а в том, что он просто не соответствует тому, который я пробовал заменить.

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Пофиксил глюки, подав на схему /CAS_0, который заводится обычно на /OE 16-битного ПЗУ. Сходу ничего не зависало. Резистор оставил 12 килоом. Работает в том числе на TCT-6803

Добавлено позже:
Вспомнил попутно, что если делать самому картридж и шить РПЗУ, то А0 таки должен кормиться от инверсного сигнала, то есть с выхода элемента Х2 на последней схеме, тогда в ROM точно не нужно ничего переставлять.
« Последнее редактирование: 21 Июль 2024, 01:32:52 от as32888 »

Оффлайн as32888

  • Пользователь
  • Сообщений: 969
  • Пол: Мужской
  • ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็็็็็็็็็็ ส็็็็
    • Просмотр профиля
Подпаяв кроватку для 27c040, обнаружил, что либо оно не укладывается в тайминги (сама схема сдвига начала импульса плюс ПЗУ), либо в мешанине проводов чего-то напутал, прошитая игра не стартует. ПЗУ под каплей при этом не испытывает проблем (перебрасывал между каплей и внешним ПЗУ сигнал /CE_0)

27с040 с временем доступа 150 нс и одна штучка 120 нс.

В общем, буду разбираться, но думаю, что если не делать нормальную печатную плату (и нормальную панельку под микросхему на всякий), не получится нормально ориентироваться в монтаже, или будет очень лень. И еще надо с осциллографом посмотреть сигналы, какие там вообще тайминги, да та же частота циклов чтения. А то ниче не понятно почти вслепую.