26 Отредактировано Voldemar0 (01-01-2020 22:08)

Re: Универсальный новодельный модуль ОЗУ

Печаль вновь :(
Читаю и перечитываю Фг 3.089.170 ТО
"...поддерживает приоритетный принцип блокировки при установке в одну ПЭВМ нескольких ячеек."
"В режиме "Apple" ячейка не поддерживает приоритетного принципа при использовании нескольких ячеек."

НО: судя по схеме (если у вас есть ячейка - проверьте меня!): сигнал на ламель А20 (БлкПЗУ) выходит из ПЗУ 556рт13.
Эта микруха имеет 3-state выходы, но её входы 8, 10 (!CS) намертво запаяны в "общий", т.е. никакого 3-state по линии блокировки системного ПЗУ нет и не пахнет ей.
А если нет 3-state, то две ячейки могут (и будут в некоторых операциях) тянуть эту линию в разные стороны.
И это даже не смотря на то, что авторы явно должны были (и уделяли) пристальное внимание линиям блокировки ОЗУ.

Инструментальный анализ шин показал, что само управление как блокировкой ОЗУ так и ПЗУ происходит модулем до с точностью до такта F0. Т.е. сделать всего небольшой шаг до какой-то механики разделения линии блокировки ПЗУ было бы не сложно. Например, на манер подключения блокировки ОЗУ на A24, можно было на А25 повесить блокировку ПЗУ и слепить цепочку между модулями.

В своём модуле я могу использовать 3-state, но это не очень просто:если линию после операции просто бросить в Z, то она довольно долго будет возвращаться в состояние "1". Либо нужно её резко переключать в "1", а потом уже переводить в "Z". Но это позволит использовать только мои модули в группе, группировать их со оригинальной версией ДопОЗУ9 ... ну, может работать будет, но только за счёт того, что у альтеры ток КЗ - до 80 ма, а у рт13 - около 45 ма.

Единственный корректный способ использовать всё вместе: не подключать банки на сегменты 6-7 (там, где сидит ПЗУ).
В этом случае модули не будут пытаться блокировать ПЗУ и все вместе будут держать БлкПЗУ в высоком состоянии.
Но это имеет значение только если кто-то самостоятельно будет разрабатывать софт.

В общем, не буду проверять стекирование своих модулей лисиным, просто сделаю то, что есть в оригинале...


ЗЫ Семёрочные конфиги прошли все придуманные мной тесты, выявил пару мелких ошибок.
Добавил черновую поддержку девятки - нормально всё поместилось и ещё немного осталось места.
PPS Лисин пошел нормально!

27 Отредактировано Voldemar0 (02-01-2020 18:19)

Re: Универсальный новодельный модуль ОЗУ

Пока праздники провожу большие исследования.

По видимому, штатные модули могли работать совместно потому, что 556я тянет в низкий уровень энергичнее, чем вверх.
Поэтому при объединении выходов одна микра может перетянуть другую, если тянет вниз. Трёх модулей одновременно у меня не было: возможно при этом бы всё бы и вскрылось. Но в справочниках, которые я нашел, или не указывается максимальный выходной ток или просто говориться о 15 ма - видимо, в обе стороны.

У альтеры токи настолько симметричны, что даже логические анализатор рисует сложные "зубки" в момент, когда оба модуля начинают тянуть БлкПЗУ в разные стороны (уровень разделения 0-1 выставлен в 1.5 вольта). Я пытался найти какой нибудь ход, который бы позволил всё таки двум модулям делить эту линию, но так ничего работающего пока не придумалось.

Лисин на первом тесте (логика) истерит, когда пытаюсь включать сразу два модуля. С одним модулем проблем нет.
На остальных тестах также проблем нет: он все банки подключает в регионы ниже $8000, а там конфликты разруливаются по А24-Б24.

Копировщик из ИКП тоже работает с двумя модулями: он их использует через регион $8000.$BFFF.
{ Попробовал также помимо новых двух воткнуть третьим модулем зелёный от Wierzbowsky, но тут копировщик
стал делать странную штуку: он как бы модуль видит, читает в него диск (копирую диск целиком),
но при записи в каком-нибудь случайном треке сбивается и начинает записывать битые адресные поля
(в нём отсутствует номер трека, сразу идёт том-сектор-5A). Не ясно откуда берётся такой странный баг,
но, возможно, авторы вообще не тестировали его в такой конфигурации - 512 кб всё таки :) }

Напомните, какой софт ещё может работать с ДопОЗУ9 ? Фонограф вроде бы и какой-то графредактор...

Кстати, штатный модуль по докам берёт 700ма, новодел - 60-120 ма (в зависимости от количества включенных светодиодов).

28

Re: Универсальный новодельный модуль ОЗУ

Voldemar0 пишет:

По видимому, штатные модули могли работать совместно потому, что 556я тянет в низкий уровень энергичнее, чем вверх.

Мне кажется, любой ТТЛ выход так должен делать, потому что ток от шины +5 в течет через верхний ключ и резистор, а ток к общему проводу только через нижний ключ.

Через нижний ключ ток тоже ограничивается - током базы и коэффициентом передачи тока, но он делается заметно больше, чем ток через верхний ключ.

Как будет работать конфигурация "два выхода тянут вверх, один вниз" зависит от конкретных экземпляров микросхем. В справочнике Нефедова разброс тока КЗ для 556РТ13 указан от 15 до 85 мА. Резистор в стандартном ТТЛ выходе - 100 Ом, если выходов два то делим пополам. Чтобы на выходе было меньше 1,3 в, падение напряжения на резисторе и ключе должно быть 3,7 в, и ток КЗ должен быть где-то от 70 мА.

Думаю, три модуля будут работать как повезет, а запустить четыре - вообще нет шансов.

Ну и штатным такой режим для микросхем не будет. Режим КЗ допускается кратковременно, потому что будет нагрев и резистора и нижнего ключа и срок службы микрухи от этого точно не увеличится.

29 Отредактировано garnizon (04-01-2020 02:02)

Re: Универсальный новодельный модуль ОЗУ

Voldemar0 пишет:

НО: судя по схеме (если у вас есть ячейка - проверьте меня!): сигнал на ламель А20 (БлкПЗУ) выходит из ПЗУ 556рт13.

Дык у нас же есть сканы этой платы крупного размера (1200dpi) - 78Мб.

http://agatcomp.ru/Images/new_RAM.shtml


Voldemar0 пишет:

Напомните, какой софт ещё может работать с ДопОЗУ9 ? Фонограф вроде бы и какой-то графредактор

А мы когда-то с тобой обсуждали это, даже список был, но я его куда-то дел.
Фонограф точно, еще Баланс
http://agatcomp.ru/Apps/Balans.shtml

Еще последние версии маусграфа вроде (или ГрафСервис?), ТОР и ПАРУС в тихую если видят что есть еще память - если я не ошибаюсь.  Список не большой был но пунктов 10-12.
А, мастербейсик РАМдиск устраивает в нем. И Кентавр вроде тоже.
ОСы Спрайт и Оникс точно, какие-то из титровальных программ Телетекст NikoS\ Телемикст....

30 Отредактировано Voldemar0 (05-01-2020 14:54)

Re: Универсальный новодельный модуль ОЗУ

У жены комп ласты склеил: из трех винтов два недоступны. Оказалось, что у одного из винтов шлейф питания где-то плохо контачить стал с годами. Чуть коснёшся - винт заводится, чуть шевельнешь - опять гасится. А второй от скуки, за компанию. Где-то саташный канал, что ли, завешивают. Обжал, почистил ластиком - заработало. Пока работает.
Одновременно осцилограф на моём компе че-то на драйвера ругается. Туды-сюды, день потерял на попытку научным тыком всё это заставить работать, потом ночью винду переставлял. В результате.
А зачем осцилограф ? А вот:

1) Лисин стал на девятке гавкать на какую-то комбинацию регистров управления. То ли при прогреве компа, то ли ещё почему-то. Стал проверять:

с2bf:0
c2b0..c2bf

Должно вернуться 16 штук BF. Возвращается то 3F, то ещё что нибудь интересное. И только на этой комбинации.
Причем не на холодной машине, а только после выхода из Лисина.

Анализатор показывает интересную картинку:
На шине данных сперва старший разряд адреса мелькает: C2, а потом ответ модуля: BF. Многие линии шины данных переключаются. И на анализаторе видно, что не совсем сразу: некоторое время линия, переходящая из 1 в 0 сперва качается. Обычно недолго - допустим, 50 нс. Но иногда, почему-то, дольше: может и 100 качаться. А тут уже проц читает шину. И получает мусор.

Отодвинул фазу вывода данных на шину на такт раньше. Заодно перевёл все управляющие шины в низкий ток и slow slew rate. Вроде помогло. Заодно перевёл такт анализа шины адреса тоже на один раньше.

Очень хотел это всё раглядеть на осциллографе, но увы - pcsu1000 не вывозит настолько кратковременные нестабильные сигналы. Формально он до 60 МГц, но это только для периодических сигналов: он пытается их анализировать статистически, а тут со статистикой напряг. Но всё таки кой что он показал: какие-то пульсации там правда накапливаются. Хотя и ниже 1.4 вольта. Но анализатор-то показывает из выше 1.4...


2) Но теперь Лисин стал стабильно гавкать на тесте "МАРШ". И только на нём. Зато гавкает радостно и много.
Настолько, что даже удалось написать прогу, повторяющую эффект:

loop:
lda #$FF
sta $40F8
lda $40F8
cmp #$FF
bne next
inc $800
next:
jmp loop

Включаем C2A0:0 и C706.
И получаем в левом верхнем углу бешенный счётчик сбоев.

Тут осциллограф опять пассует, а вот анализатор показывает кой что интересное:
на шине данных чтение процом команды LDA $40F8 даёт в конце байт $40, а при её последующем исполнении модуль-новодел выдаёт FF на шину.
И начинается РАСКОЛБАС! (не каждый раз, но хотя бы даже это случалось 1/20 - всё равно же работать невозможно).
Все биты резко подлетают к высокому уровню (вероятно, из-за того, что на предыдущем этапе борьбы выдача была подвинута ближе к фронту F0, эффект обострился), и так хорошо они подлетают, что даже тянут вверх линию "ВК" у буферов шины адреса ! Причем это происходит опосредованно, т.е. на входе D13.1 ничего не фиксируется, а вот на его выходе уже кой что есть. Я так думаю: линии данных до проца идут параллельно линии "ВК", если данные подлетают резко вверх, то магнитным полем они затягивают к верху и "ВК" (а может это паразитные ёмкости внутри буферов?).
Процесс очень кратковременный, но матрица успевает среагировать и так как адрес изменился (а может какой-то другой сигнал влияет), она моментально отключает выходной буфер. Уровни резко падают (может они даже не успевают достигать high..) и всю шину, включая F0 и даже немного задевая 14МГц, начинает бить в конвульсиях.

ЦП на это мало обращает внимания, но, в результате, LDA $40F8 получает всё что угодно, но - преимущественно - нули.

Теперь понимаете, какой гемор для разработчиков был переход на более плотный монтаж девятки и почему под пузиком материнки девятки тянутся два толстых провода от разъёма питания? Это питание буфера шины данных.

По хорошему, на плате новодела, вероятно, следует предусмотреть резисторы последовательно с шиной.
Но пока победил это так: сигнал DIR выходного буфера и OE SRAM протащил через RS-триггер: в одну сторону включаю по условию обращения к модулю (совпадение адресов, конфигураций, номера фазы...), а выключаю по спаду F0 на очередном такте 14 МГц. Похоже, достаточно задушить одну пульсацию, чтобы она не переросла за пару периодов в ураган мусора.
{ Тут расчёт на то, что даже если на входе SRAM кратковременно изменится адрес, это отразится на выходе SRAM довольно таки не быстро. Главное, чтобы data_bus хоть какое-то время не болталась во все стороны. Пусть успокоение займет даже 100 нс, у нас на самом деле ещё много времени до fall F0, когда ЦП будет захватывать данные с data_bus }

3 или 0) Кажется, удалось найти решение для управления БлкПЗУ. Сделал управление 3-state: если нужно отключить ПЗУ, перевожу в low, а в момент fall F0 до очередного raise 14 MHz задираю в High. В остальных случаях Z-state.
Таким образом получается управлять линией с точностью до периода F0, позволяя разным модулям управлять линией без конфликтов.

Если нужно работать в паре с оригиналом, то модули нужно расставить в порядке: новодел - менее приоритетный, оригинал - более приоритетный. Альтера задушит рт13, если будет нужно, а оригинал может заблокировать новодел по цепи приоритета.

Во всяком случае два новодела тест "ЛОГ" у Лисина начали проходить. Но это было ещё до вылезания других багов .....

31 Отредактировано avivanov76 (07-01-2020 01:11)

Re: Универсальный новодельный модуль ОЗУ

Voldemar0 пишет:

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

Хм. Может я чего-то не так понял, но если выходной буфер D_U1 модуля отключился, то есть перешел в Z состояние, то емкость шины должна держать установленный уровень несколько микросекунд.

Если уровень прыгает, значит буфер не в Z состоянии. Возможно, из-за slow slew rate стало помехами "колбасить" его вход направления T/R. Может, его подтянуть к +3 в, как и OE?

Кстати, у cy62128 по даташиту rise time 5 нс. Может, это просто ОЗУ модуля на slow slew rate так реагирует?

32 Отредактировано Voldemar0 (07-01-2020 21:13)

Re: Универсальный новодельный модуль ОЗУ

К сожалению, я тоже не знаю точно, что там происходит. Если бы были осцилограммы - было бы понятнее.
Просто вижу, что сразу по всем (A0, A1, D7..D0, F0, 14MHz, !БлкПЗУ, !БлкОЗУ и, с задержкой в один период, ВК ША) - начинается дискотека. Кто первый начал, от кого полетело и что именно включило - сказать сложно. Зацепиться прямо на линии матрицы сложно из-за мелкости. У меня есть только 4 контрольных точки, на которые я могу продублировать какие нибудь сигналы. В общем-то, можно провести подробное исследование, но это, скорее, расскажет о конкретном сочетании материнка-модуль. Общее решение от этого не измениться: резисторы надо где-то расставить. С другой стороны - защёлка на ОЕ сильно помогла.


> Кстати, у cy62128 по даташиту rise time 5 нс.

Я slow slew включил уже после того, как начались проблемы.
Но, по докам, это вообще мало что даёт для таких скоростей.

--

Up1: закончил с девяткой, гоняю вновь тесты с семёркой.
При напряжении выше 5.10в начинаются ошибки при тесте ЭмПЗУ, причем только
если новодел обрабатывает запросы сразу за ДопОЗУ и ЭмПЗУ. Два модуля втыкаешь,
каждый из которых по отдельности отвечает за ДопОЗУ и ЭмПЗУ - ошибки
пропадают. От выбора слота не зависит. Снижаю напряжение - ошибки
пропадают. Подключаю анализатор на шину - ошибки уменьшаются.

!Ошибки видит только штатный тест, тест от FRS их не замечает!
Глюки опять на тесте Марш.

Если будет следующий релиз платы, наверное имеет смысл воткнуть в
качестве шинного формирователя два АП16 или какой нибудь ещё 4битник и раскидать биты через один на
два формирователя. На шину подключать сперва один, потом, через такт, другой.

Не ясно, что лучше: резисторы последовательно с шиной (кстати, такое решение было
на контроллере 140ке, хотя не уверен, что причины были те же) или деление на два такта.

--

Up2: попал на какое-то странное поведение штатного теста семёрки:
что-то происходит, если кручу уровень питания или подключаю анализатор, причём более выраженно с одним модулем и меньше - с другим. После этого тест начинает вести себя неадекватно: валит кучу ошибок, причем только по модулю ЭмПЗУ, но ошибки всегда одинаковые: или "записано 55/АА, прочитано E0" или что-то похожее (цифры всегда одинаковые). Это тест МАРШ, там пишутся 55 или AA в эмпзу. на разных проходах. Баг не вылазит при подключенном анализаторе, но после того как он происходит, я могу подключить анализатор и вижу, что в модуль вообще нет запросов чтения ! Причем слово состояние модуля тест переключает на каждом байте, так что точно отследить я его не могу, но модуль выставляет сигнал БлкПЗУ и по нему сразу ловиться обращение : так вот тест начинает обращаться только на запись! Чтения просто нет ! Я отследил даже конкретную команду в памяти, которая записывает новое значение, но чтения-то нет. Торможу тест, смотрю сисмоном - всё норм: 55 или AA во всём ЭмПЗУ.

В эмуляторе пытался поставить тест в такое положение: не получается (обнаруживает конкретный битый байт и идёт дальше) :( Ошибок на работу слова состояния от теста нет. Причём если я принудительно сбрасываю кнопкой слово состояния модуля - тест на это ругается (если сбросить не в паузу. Тест может останавливаться по нажатию любой кнопки, во время ожидания можно свободно сбрасывать модуль без сообщения об ошибке!)

В общем, полный тупик: надо разбираться, как тест вообще может попадать в это состояние. ОС грузятся, проги работают, другие тесты проходят. Но тест валиться в это состояние только при определённых условиях, значит что-то всё таки подглючивает...

Рано праздники заканчиваются, я бы ещё недельку посидел...