1 Отредактировано Voldemar0 (08-01-2020 11:33)

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

Привет!

После копания в теме CPLD'х начал реализацию пары старых и немного новых идей.
Первый блин, возможно даже не комом: универсальный модуль расширения ОЗУ.
Планируется работа как в семёрке так и в девятке и немножко других вкусностей.
Основной упор на полную совместимость с существующим софтом.
Но компактно, без глюков старой DRAM и на современных нулёвых элементах.

-==-

Лирика.

Spoiler

Я начал работать с агатом где-то в конце 80-х, но до середины 2000-х это были только семёрки.
И только где-то в 2005 я познакомился с Игорем и он прислал несколько девяток.
С тех пор я почти всё делал на девятках. Причина проста: машины без корпусов (чтобы хранить компактнее),
но к девятке достаточно подключить питание/мон/клавиатуру и уже получается вполне себе комп.
С компактным 3.5'' дисководом - ещё один модуль - и полная машина, совместимая со всем своим софтом.

А у семёрки нужно: модуль проца, два модуля допозу, да ещё и флоп. Когда модули не закреплены,
они при покачивании иногда плохо контачат. Всё это выловить из общей кучи, разобрать все подписи ("не работает", "модуль 2", "модуль 4"...)  и воткнуть в плату. Время разворачивания семёрки, таким образом, гораздо больше чем у девятки.

Кроме того, всё моё знакомство с аппаратурой агата - это, в первую очередь, изношенный 5088 (с ним тоже был целый детектив, но, к сожалению, именно тот загадочный дисковод, который особенно активно меня доставал, не сохранился) и регулярно (по началу) выносящее мозги ОЗУ. На самом первом моём компе не работала Школьница. Но однажды было замечено, что первые две минуты после включения она всё таки работает. Я понял, что сам софт, вероятно, живой, а глюки где-то в железе. С учтётом того, что бейсик работал нормально (а потом, как выяснилось, и Агат-Автор), я предположил, что глюк где-то в базовом ОЗУ. Написал тесты, гонял штатный тест, но так ничего и не нашел. А позднее появилась возможность сменить материнку и какое-то время всё работало (потом она стала сыпаться похожим образом. Интересно, что обе материнки были одногодками, так что, вероятно, износ возрастал именно с наработанными часами).

У меня была возможность заменять платы на исправные, а вот ремонтировать я почти не мог: из измерительной техники у меня были только однолучевые ОЛМ-2М и С1-19. Т.е. отследить непериодические процессы, особенно редко возникающие, было нечем.

С другой стороны, был интерес расширить объём допмодуля. Я даже пробовал заменить одну из 565ру6 на 565ру7 - вроде бы там 128 или 256 кбит. Понятно, что это расширение только одного бита, но было интересно, что получится. По докам вроде бы микруха вставала пин-в-пин, но реально что-то не взлетело. Не помню уже, что именно.

В общем, если с 5088, да и с тиком всё удалось красиво обойти (вместо 5088 сейчас есть Alpins в хорошем состоянии, а вместо тиков - трёхдюймовые самсунги), то с ОЗУ для семёрки всё мрачно: у меня осталось по одному модулю: эмпзу и допозу (может быть их было по паре в последние годы, видно, пару кому-то отдал).
И, что характерно, у меня их никогда не было сильно помногу (в отличие от флоп-контроллеров и модулей процов).

Короче, я решил, что первое полезное и нужное - это именно ДопОЗУ.

И раз уж делать модуль, то сразу закрыть все хотелки: и семёрочные и девяточные.
Поэтому 128кб.

Сделать это на GALке сложно: даже если отказаться от DRAM в пользу SRAM, всё равно максимум что можно сделать: модуль для семёрки. Для девятки нужна, как минимум, память конфигурации - а это 4x16 триггеров.

Поэтому идея дожидалась освоения CPLD.

-==-

Конструктив: в основе maxII на 240 LE и SRAM 128 Кб (спасибо AlexBel: он подарил пару штук и в остальном много помогал). Также питание 3.3в и буфера согласования уровней.

Режимы работы (выбираются красными переключателями):
- Модуль ДопОЗУ-7 32 Кб
- Модуль ДопОЗУ-7 128 Кб
- Модуль ЭмПЗУ-7 32 Кб
- Модуль ЭмПЗУ-7 128 Кб
- Модуль ДопОЗУ-9 128 Кб (без поддержки Apple ][-mode)
- Отключено (модуль недоступен, на светодиоды постоянно выводится шина адреса)
- Модуль "2в1": ДопОЗУ-7 + ЭмПЗУ-7 (по 32 Кб каждый или по 64 Кб каждый).

В последнем режиме модуль не использует сигнал !ROM Select, а сам слушает шину адреса и отзывается на 2 и 4 слоте независимо от того, куда установлен. Т.е. одной платой можно закрывать все потребности в памяти семёрки.

{ От поддержки Apple ][-mode пришлось отказаться, так как я слабо ориентируюсь в софте, который бы его знал и мне неизвестны тестовые программы, которые можно было бы использовать для разносторонней проверки модуля. Другая причина: мутная документация на модуль ДопОЗУ9 (ФГ3.089.170 ТО). Её дебри, даже для агатовского режима, пришлось всё время проверять по реальному железу. Самое страшное: описание регистра управления модулем. Он и так-то не особо логичный (а в эпловском режиме просто странный), но даже найти его первоначальное состояние (при сбросе питания) в доках не удалось. }

Две кнопки сверху:
- Сброс регистров управления (полезно при зависаниях семёрки, чтобы питанием не щёлкать),
- Переключение индикации (на светодиоды обычно выводятся слова состояния регистров управления, при нажатии кнопки выводится шина адреса).

Две линейки светодиодов (2x8) используются для индикации (в зависимости от выбранного режима):
- Регистров состояния модулей ДопОЗУ7 (верхняя линейка) и ЭмПЗУ7 (нижняя линейка) (режим "2в1").
- Регистра состояния одного из модулей ДопОЗУ7 или ЭмПЗУ7 и признака запрета работы второго модуля (тусклое свечение всей линейки).
- Регистра LC ДопОЗУ9 (верхняя линейка) и активных сегментов адресного пространства, на которые подключен модуль (нижняя линейка).
- Состояния шины адреса (по нажатию кнопки или постоянно, в соответствующем режиме модуля).

В текущей конфигурации использовано примерно 194 из 240 доступных LE матрицы (80%).

-==-

Платы изготовлены на заводе Электроконнект (г.Новосибирск).
Слотовый разъём с никелевым покрытием.
4 платы стоили около 2800р.
Завод сохраняет шаблоны, так что повторный выпуск платы будет дешевле, номер заказа: ps409194.

(спасибо Wierzbowsky: здесь использованы его чертеж и схема слотового разъёма из разработки Breadboard)

Самая дорогая деталь: матрица, цена вопроса - около 180р за штуку, покупал в tom-electron.ru.
Буфера (кроме ап6) - около 20 р за штуку, Чип-Дип.
Голубые разъёмы JTAG, резисторы,  кондёры, АП6 и транзисторы (в итоге оказались не нужны) бесплатно выдраны из дохлых материнок и прочего технохлама.
Остальное - aliexpress, цены ниже точности вычислений.

Основная часть платы немного смещена относительно разъёма: это напоминалка об ориентации платы в слоте, аналогично другим агатовским устройствам.

-==-

Проект доведён до завершения примерно на 95%: всё запланированное работает, но иногда программные тесты ОЗУ указывают на одиночные сбои (1 сбой минут за 10 тестирования в худшем случае, в лучшем - 1 сбой в час и менее). Частота их возникновения зависит от комплектности компьютера, от подключения-отключения измерительной техники и от напряжения питания. Снижение напряжения уменьшает процент сбоев. Судя по проведённым измерениям, основной источник сбоев - "звон" шин. Наибольшие проблемы возникают при одновременном переключении линий шины данных из "1" в "0". Наиболее злобные проявления этого эффекта устранены подбором алгоритмов работы матрицы, но идеальное поведение пока не достигнуто. Возможные пути поиска решения:
1) последовательные или параллельные резисторы на линиях.
2) разнос фаз переключения (разделить шину на 2 части, переключать сперва 4 бита, потом следующие 4).
3) кратковременно (70нс) выводить на шину константу $55 или $AA, затем нужное значение.
4) подбор фаз выдачи данных на шину: условие "phase_addr <= phase_num >= 4;" в исходнике тоже как-то странно влияло на поведение: вроде бы ">= 5" в каких-то случаях улучшало работу, хотя и не понятно - почему. Шина адреса ЦП к началу phase_addr в любом случае давно уже подготовлена.

Бейсик-60 на семёрке грузится и работает, так же как Рапира и ДОК.

-==-

В результате исследований ДопОЗУ9 выявлен странный косяк: линия блокировки штатного ПЗУ активна постоянно, поэтому не ясно, как предполагалась совместная работа нескольких модулей, заявленная в документации. Однако штатные модули работают: возможно из-за того, что ток низкого уровня этой линии превышает ток высокого уровня, таким образом образуя монтажное НЕ-ИЛИ.
На новоделе это также создало проблемы: попытка реализовать нормальное монтажное НЕ-ИЛИ с каскадом с ОК было безуспешным, так как подтягивающий резистор на материнке имеет значительный номинал и линия возвращается в высокий уровень только за время, сопоставимое с периодом тактовой частоты F0. Пришлось реализовать трюк: захват линии выполняется низким уровнем, но, в конце периода F0, линия !БлкПЗУ принудительно восстанавливается в высокий уровень, после чего выход переходит в Z-state, что позволяет другим модулям также переводить её в низкий уровень при необходимости.

В результате тест Лисина для двух новодельных модулей нормально гоняет этап "ЛОГИКА". Так как альтера даёт заметно больший ток, чем оригинальные модули, то можно даже использовать новодел одновременно с оригинальными модулями. Хотя было замечено, что чем больше модулей установлено в комп, тем больше вероятность глюков. Возможно, это связано всё с тем же "звоном", но так как сбои редки и одиночны, исследовать явление сложно. Также были отмечены глюки копировщика ИКП при работе с тремя модулями: при копировании диска на некоторых треках копии были созданы корявые адресные поля, но что явилось источником этого глюка - неизвестно. Явление подробно не изучалось.

-==-

Вложения:
- Схема в PDF.
- Схема и плата в AD 16.
- Плата в Gerber.
- Исходники конфигурации матрицы в Quartus 11: помимо исходника на Verilog-е, также важны разнообразные списки assignment: это не только списки выводов, но и конфигурация pullup-резисторов, первоначальные состояния триггеров и т.д..
- Фотография обратной стороны платы: если будете собирать - обратите внимание на перемычки.

Post's attachments

Attachment icon AgatRAM-AD.rar 1.38 mb, 297 downloads since 2020-01-08 

Attachment icon AgatRAM-Gerber.rar 979.8 kb, 272 downloads since 2020-01-08 

Attachment icon AgatRAM-Quartus.rar 535.89 kb, 297 downloads since 2020-01-08 

Attachment icon AgatRAM.pdf 305.55 kb, 299 downloads since 2020-01-08 

DSC00258.jpg, 70.49 kb, 686 x 511
DSC00258.jpg 70.49 kb, 301 downloads since 2019-12-29 

Attachment icon dsc_8370.jpg 255.07 kb, 115 downloads since 2019-12-30 

2

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

Супер!
А подробности будут? ;)

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

3

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

> А подробности будут? ;)

По мере завершения проекта.

Сейчас готова конфигурация для всех режимов семёрки, потом буду делать конфиг на девятку.

Пока идут тесты на семёрке, на фиксированном напряжении питания. Потом ещё буду гонять в диапазонах 4.7..5.3 вольта - на тестах допозу 9ки это тоже вылезало кой где.

Зафиксированные подробности буду добавлять в первое сообщение.

4

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

Voldemar0 пишет:

Также питание 3.3в и буфера согласования уровней.

Внизу LVC245 с двумя питаниями на ШД?
А вверху АП6 для чего?

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

5

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

Модуль ДопОЗУ-9 128 Кб (без поддержки Apple ][-mode)

Да как же так?

6

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

Наверное, CPLD недостаточно жирный для этого.

7 Отредактировано Voldemar0 (30-12-2019 13:44)

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

> Да как же так?

С каких пор тебя стали беспокоить эпловские темы ?

Я не знаю, жирная CPLD для этого или нет, но я плохо знаю детали этого режима, а главное - у меня не только прог под него нет, но даже хотя бы теста памяти для этого режима. Т.е. даже если я его реализую, мне всё равно проверять будет нечем :)

Т.е. модуль не будет мешать девятке использовать эпловский режим: бейскик там всё равно грузиться в базовое озу,
и потом оно переходит в режим эмуляции ПЗУ. А доппамять - это же уже выше 128 кб - скорее всего сделаю так, чтобы она просто отключалась при переключаении базового контроллера в ЭплМоде.

8

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

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

А вообще в виндовом эмуляторе есть дистрибутивы разные для SATURN Card - чтоб проверить.

9

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

> Да не волнуют они меня, просто раз уж такая плата есть можно было бы на девяточке в Prince of Persia поиграть.

У тебя вроде бы оригинальный допозу есть 128, с которого я схему рисовал и тебе его уже вернул.... ?
Причем в живом виде вернул :)
Играй :)

Когда мы с Wierzbowsky бились над репликой допозу-9, че-то никто про принца не вспомнил :).....

----

> Внизу LVC245 с двумя питаниями на ШД?
> А вверху АП6 для чего?

Схему добавил в первое сообщение.

10

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

да не про одну игру речь, а про полноценную замену Фг3.089.170

11

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

> да не про одну игру речь, а про полноценную замену Фг3.089.170

А есть желающие её иметь ? Если хотя бы заказов 5 будет - можно сделать серию и уже учесть тогда внешние пожелания. Я -то пока её для себя делал, просто чтобы упростить работу с семёркой, в первую очередь.

12

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

У Apple вообще было много вариантов расширения ОЗУ. Saturn Card это просто один из вариантов, даже не знаю, почему при разработке Фг3.089.170 выбрали именно его.

Что касается полноценной замены Фг3.089.170 то я как-то в сомнении. У меня была тут одна идея, требующая дополнительной памяти, но там ее нужно килобайт 500, а все эти заморочки с 8-ю сегментами адреса и прочими битами активности они просто лишние. Хватило бы одного фиксированного окна, как у семерочного ДопОЗУ.

13 Отредактировано Wierzbowsky (31-12-2019 00:39)

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

Шикарно! Компактно и универсально!

Сколько же платки по себестоимости получаются? И где берёшь Альтеры? Сейчас фейков и брака развалось в Китае - просто жуть. Постоянно строчу диспуты.

14 Отредактировано Voldemar0 (31-12-2019 06:37)

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

> Сколько же платки по себестоимости получаются?
Средненько пока.
700р за печатку (4 штуки заказывал), около 200р за альтеры (выбор именно этой альтеры и делался по ценнику/ёмкости),
Остальное, в сумме, рублей на 100 потянет

Альтеры заказывал в tom-electron.ru
Буфера - в чип-дипе
ап6-ки - в кладовке :)

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

Если в плате не будет существенных ошибок, то перевыпуск будет заметно дешевле (завод хранит шаблоны).
Когда закончу проект, выложу все исходники.

15 Отредактировано Voldemar0 (31-12-2019 09:35)

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

Раньше замечал что-то такое, сейчас убедился конкретно:
идут сбои в ОЗУ (пока отлаживаю) или что-то к с контроллером флопа (почистил разъём ластиком - всё прошло), при этом драйвера дисковода начинают дурковать и могут стереть сразу дорожку.
Разбор показал, что, по видимому, драйвер (пока со 140ками играюсь) включает запись и подвисает: дорожка или кусок в 2-3 сектора оказывается заполнена нулями (т.е. шумом: читается как $80, $81...).

Сделал прикольную штуку: у флопика оторвал оптодатчик защиты записи и сделал кнопочку. Любая дискета выглядит теперь защищённой от записи. Но если нажать кнопочку - даже вторая сторона дискеты теперь доступна для записи. Запись мостом на 140ку идёт секунд 20, так что кнопочка даже без фиксации подходит.

16 Отредактировано Voldemar0 (31-12-2019 14:59)

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

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

Речь пойдёт о блокировках вообще и о блокировке ОЗУ, в частности.

Изначальная идея, описанная в инструкциях по агату: линии А24, А25 и Б24, Б25 предназначены для
выстраивании иерархии модулей, которые могут одновременно использовать прерывания и DMA-режим.
Странно, что в эту иерархию не включили таймер на материнке - он как бы тоже использует
прерывания.

Идея была проста: контакты А24, А25 старшего по званию слота подключаем к Б24, Б25 младшего по званию.
Если старший выставляет сигнал на свою сторону А, то младший, услышав команду по своим Б должен освободить
или не занимать рессурс и передать команду ниже по цепочке через свою А. Если по Б ничего не приходит, то младший
может использовать рессурс, но по своей А тоже должен сообщить нижестоящим, что рессурс занят.

Некоторую неясность возникала уже в том, какими уровнями сигнала о чём сообщать?
Как бы обычно принято высоким уровнем указывать на свободный рессурс, а низким - на какую-то активность.

Но уже в семёрке эту идею маленько подвинули: ламель А24 разъёма X7 (слот 6) подключили
ко входу блокировки базового ОЗУ. И резистором подтянули к "земле" - если источника нет, то сигнал
будет твёрдо сидеть на нуле - базовое ОЗУ доступноs.
Зачем блокировать базовое ОЗУ на семёрке:
1) Ячейка 121, изображая дисплейный контроллер, всё таки вынуждена иметь собственное ОЗУ,
по адресам совпадающее с базовым. Чтобы ЦП мог до него дотянуться, базовое ОЗУ на материнке нужно блокировать.
2) Как бы была такая идея, что если бы базовое ОЗУ было больше 32 Кб, то модуль ДопОЗУ
мог конфликтовать за общее адресное пространство $8000..$BFFF. И, таким образом,
если бы вы встретили материнку с 64 Кб на борту или выше, следовало бы
втыкать ДопОЗУ в слот X7, чтобы он мог разруливать конфликты.
Если бы вы воткнули два модуля ДопОЗУ, то следовало бы втыкать их в слоты X7 и X6.

Если же базовая память у вас всё таки 32 Кб, но вы разжились двумя модулями ДопОЗУ,
то их бы следовало втыкать в соседние слоты (X7, X6 или X4, X5... и т.д).

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

Тут пока загадок нет: вероятно, разработчики поняли, что до устройств с IRQ и DMA
им дальше, чем даже до Луны и решили отдать цепочки под что нибудь более полезное.

Почему использовался высокий активный уровень, вместо традиционно низкого: IMHO,
потому что были использованы микрухи 559ип2 - это такие интересные ТТЛШные шинные
приёмники, которые, в отличие от обычных ТТЛ или ТТЛШ, любят тянуть входные линии к нулю,
а не к единице. Т.е. когда их вход не подключен ни к какому выходу, их проще подтянуть к низкому уровню.

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

http://forum.agatcomp.ru//misc.php?action=pun_attachment&amp;item=698&amp;download=0

(здесь крестиками с цифрами отмечены номера линий по мымринским схемам)

Сигнал заходит с ламели Б25 и идёт на два логических элемента той самой 559ип2
(опа: а резистор подтяжки -то забыли).
Также на D3.2 заходит сигнал управления с регистра конфигурации - бит D3.
И вот это - очень интересный сигнал, он ещё пригодиться.

Схема формирует два сигнала: один с D5.11 разрешает работу исполнительной части модуля,
а D3.3 выдаёт сигнал на ламель А25 через инвертирующий элемент D6.

Из этой схемы уже видно, что сигнал с Б25 без инверсии проходит на А25,
но также цепочка принимает решение о старшинстве - либо модуль активируется при наличии сигнала
от регистра управления либо блокируется при появлении Б25.

Интересное дальше: D6.12 получает сигнал с ламели Б18 (адресная линия А15) и при условии
сигнала на А25 D5.8 выдаёт единицу на джампер 20-36 и затем сигнал уходит на ламель А24.

Т.е. цепочка иерархии работает в любом случае, а вот блокировка базового ОЗУ происходит
только при установке модуля в X7 и !! установленном джампере !!.

У меня сразу возникает два вопроса к кофейной гуще и лабиринту зеркал:
- Зачем вообще нужен джампер ? Что предполагалось в его отсутствие ?
- Зачем вообще задействовали ламели 24 и 25 ? Почему не обойтись одной ?
На первый вопрос ответ я получил вчера, а точнее - на два вопроса - на первый и на третий, который звучит так:
- Почему механизм цепочек (т.е. джампер) вообще впаивался именно в ДопОЗУ, но не в ЭмПЗУ ?

Вспоминаем, что делает модуль, будучи сконфигурированным в состояние ЭмПЗУ ?
Кроме того, что отсвечивает на шине, он ещё и блокирует ПЗУ сисмона.
НО ! Сигнал блокировки ПЗУ сисмона не встроен в слот X7, он подключен равноправно ко всем разъёмам.
И подтянут к высокому уровню резистором.

До вчерашнего дня я полагал, что это - хорошее и правильное решение, предполагающее,
что разные модули могут по монтажному И блокировать ПЗУ, используя, со своей стороны, выходы с открытыми
коллекторами.

Но эксперименты показали, что это не работает. Когда выходной транзистор закрывается, паразитные ёмкости
заряжаются примерно 1 мкс, так что следующий за блокировкой период ПЗУ всё ещё остаётся недоступным.
Конечно, можно было бы сделать какой-то автомат, резко заряжающий шину и потом переходящий в 3-state,
но такая логика для агата - перебор.

А почему бы просто не держать блокировку ПЗУ постоянно, когда ЭмПЗУ выбран ?
А вот облом вам: если модуль стоит в режиме Read Only - это ещё будет работать.
Но после сброса модуль стоит в Write Only и тут возникает интересный эффект:
без блокировки ПЗУ буфера на шине данных ЦП отключен (так как системная ROM стоит
до этого буфера), а раз буфер отключен, то при записи в ЭмПЗУ будет попадать только аккуратно сформированная
константа $FF.
Поэтому модуль должен управлять линией Блокировка ПЗУ с точностью до такта F0
(просто представьте, что вы после холодного старта пишете:
F800<F800.FFFFM
- т.е. хотите скопировать ROM в ЭмПЗУ. У вас по одним и тем же адресам ЦП запрашивает,
команды, данные и тут же записывает данные в те же адреса. Тут уж линия блокировки ПЗУ будет
прыгать как ёжик на сковородке).
Стало быть, ему нужен полноценный двухтактный выход.

Ладно, допустим, что мы поставим 3-state и будем управлять Блокировкой ПЗУ только
когда модуль активен через регистр управления, если модуль не активен - переводить
выход в Z-state...... Но это - теория.
На практике выход линии управления блокировкой ПЗУ - это выход 559ип2,
Z-состояния у него нет. Да и нет в регистре управления модулем сигнала активации.

Итого: модуль ЭмПЗУ может быть только один на шине. Так что ему не нужны ни цепочки приоритета,
вообще ничего ему не надо, отстаньте от него :)


Или всё таки есть в регистре управления бит активации модуля ?
Вот мы и вернулись к биту D3. Он работает с цепочкой приоритета, он активирует работу
модуля, сконфигурированного как ДопОЗУ.

Стоп ? А почему только сконфигурированного как ДопОЗУ ?
Не, ну просто интересно: почему бы не использовать этот же разряд для активации модуля,
сконфигурированного как ЭмПЗУ ? Зеркало, гуща кофейная, скажи мне ?!


Вероятно, разработчики на самом деле слабо представляли себе всю конечную архитектуру и судьбу
машины, когда обдумывали эти модули. Сколько модулей будет надо, какие микрухи дадут, какие будут проги ?...
Про 3-state для блокировки ПЗУ просто не подумали. Много неопределённостей, отсюда и 12 перемычек конфигурации.

Возможно предполагали, что ЭмПЗУ просто не нужно будет больше одной штуки, а вот ДопОЗУ народ
будет массово стекировать. А когда семёрку уже комплектовали, поняли, что и стекировать никто не будет,
поэтому ДопОЗУ пошел в X5, а не X7. Для красоты, чтобы пустой слот был с краю.

В семёрке с 140кб это всё счастливо работало.

Сюрпризы начались с 840кб флопами.

Внимательно посмотрите на контроллер 140ки "девяточной" версии или на контроллер 840ки:
вы увидите, что на модуле замкнуты ламели А25-Б25 и А24-Б24.
На "семёрочной" версии 140ки этих перемычек нет. И что ? Зачем они вообще ?

Для непрерывности сигналов приоритета, вероятно.
Ну, по инструкциям на семёрку, модули, использующие цепочки приоритета, должны быть
установлены в соседние слоты. А тут как бы дополнительное удобство: модуль,
которому эти цепочки не нужны, просто пассивно пропускает сигнал через себя.
Кстати, эти же перемычки есть на модуле проца семёрки. Внезапно.

И что ? В семёрке модуль ДопОЗУ и модуль ЭмПЗУ, по одной штуке.
Зачем тут приоритеты, они разные регионы памяти обслуживают ?

Всё как бы так, но не совсем: вспомните бит D3 в регистре модуля: он ведь в ЭмПЗУ тоже есть.
И хотя модуль активен даже если этот бит сброшен, но установка этого бита приводит
к тому, что на ламель А25, в любом случае (!) выставляется сигнал занятости рессурса.
ЭмПЗУ - 2-й слот, дальше контроллер 840ки, пропускающий через себя приоритет, в 3-м слоте,
и в 4-м слоте - ДопОЗУ. Которое можно совершенно незаслуженно заблокировать !

Теперь смотрим на эту страничку, последний абзац:
http://agatcomp.su/Apps/Testozu7.shtml

А вот так выглядит официальный (!) тест памяти в такой ситуации:

http://forum.agatcomp.ru//misc.php?action=pun_attachment&amp;item=699&amp;download=0

Он включил на первом проходе ЭмПЗУ в состояние вроде $A9 (другой софт обычно использует значения 20/21),
а на втором полез тестировать ДопОЗУ, которое встало в блокировку и с шины данных теперь читается $FF.

Я не знаю, в какой слот втыкали 840ку на официальных семёрках, возможно, не в 3-й.
Поэтому, возможно, косяк и не вылез.

Короче, много сложностей в семёрке и даже немного неоднозначностей.
По этой причине я решил не поддерживать блокировки в своём модуле ДопОЗУ.
Не то, чтобы это очень сложно, просто я пока не нашел софт, который бы вообще понимал
всякие расширенные конфигурации, выше 96 Кб. Кроме вот этого официального теста.


Теперь про девятку.

Судя по всему, там разработчики осознали весь этот винигрет в целом, и сделали всё проще
и понятнее:
1) Линия 25 вообще не используется.
2) Все сигналы теперь переехали на 24. Вышестоящий слот - Б24, сигнал к нижестоящему - А24.
Никакого конфигурирования модуля не требуется, кроме настройки карты сегментов,
Б24 на модулях подтянут к высокому уровню. А24 на разъёме X2 (слот 2) подключен
к линии блокировки базового ОЗУ и без него никак нельзя: базовое ОЗУ использует
всё доступное адресное пространство и модуль также может на него претендовать.
Им приходиться договариваться.
А вот некоторая интрига всё таки осталась: А20 - блокировка ПЗУ - синтезируется
в ПЗУшке модуля, которая всегда разрешена сигналом CS. И ПЗУшка, похоже,
содержит 3-state, а не ОК, так что никак не избежать драки за управление этой линией,
если воткнуть пару ДопОЗУ9..... Но этот вопрос я ещё буду уточнять в доках.
Возможно, просто найду там запрет на работу двух модулей ДопОЗУ.
Можно было, конечно, сделать отдельные входы с каждого слота и объединять их в какое нибудь
И/ИЛИ, но в девятке этого не сделано.

Post's attachments

Attachment icon memory.Png 34.56 kb, 255 downloads since 2019-12-31 

Attachment icon memtest-bug.Jpg 154.3 kb, 255 downloads since 2019-12-31 

17 Отредактировано avivanov76 (31-12-2019 17:33)

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

Про линию блокировки ОЗУ на семерке загадка таки есть: она работает, только если заняты все слоты начиная с X7. Но обычно там ничего нет. Поэтому цепочка разорвана и модули ничего на материнке не блокируют.

Ячейка 121 пользуется для блокировки альтернативным способом: линией A19, которая соединяется со всеми слотами и с линией A24 на X7. Но модули ОЗУ про нее не знают.

То есть, получается, линия блокировки ОЗУ сделана специально под ячейку 121?

Voldemar0 пишет:

IMHO,
потому что были использованы микрухи 559ип2 - это такие интересные ТТЛШные шинные
приёмники, которые, в отличие от обычных ТТЛ или ТТЛШ, любят тянуть входные линии к нулю,
а не к единице.

Я смотрел схему 559ИП7 (в девичестве Signetics N8T24N), там на входе дифференциальный каскад ( https://datasheetspdf.com/pdf-file/5018 … a/MC8T24/1 ). Судя по крошечным входным токам 559ИП2, у нее, наверно, тоже.

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

Зато, если ничем его не шунтировать, то он за счет высокого входного сопротивления должен работать как радиоприемник :)

Так что тут я тоже не понимаю, как модули ДопОЗУ вообще выживают в таких условиях?

Voldemar0 пишет:

Я не знаю, в какой слот втыкали 840ку на официальных семёрках, возможно, не в 3-й.
Поэтому, возможно, косяк и не вылез.

Я видел всего пару семерок с 840-кой: одну еще в 90-е, другую недавно в музее :)
Так у обеих контроллер стоял в 5 слоте (по адресам пятом, $C500, X6), и кажется, я даже от кого-то слышал, что только так и правильно, но это неточно.

18 Отредактировано Voldemar0 (31-12-2019 17:48)

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

> Так что тут я тоже не понимаю, как модули ДопОЗУ вообще выживают в таких условиях?

Вот пока всё рядом, ткнул мультом:
В спокойном состоянии (никуда не подключен) напряжение 0.4в.
Ток КЗ на ноль - ниже чувствительности мульта.
Ток КЗ на +5 - 0.13ма (да, я в ДопОЗУ тыкал - там два входа в параллель).
Так и выживает.

> 7-840:
В Томске у нашей школы был единственный класс 7-ок со 140ками.
В одной точно был класс: одна девятка со 140-кой и 840-кой и семёрки только с 840ками.
Я тогда ещё даже как-то не поверил: считал, что с 840ками идут только девятки.
В другой, вроде бы, были девятки - эпловские игрушки шли без переключения моников.

19

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

Voldemar0 пишет:

Так и работаем.

Круто. Не просто так у 559ИП2 импортного аналога нет :) И менять ее здесь ни на что другое нельзя :)

20

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

ИП7 тоже та ещё приколистка: у неё ток нуля выходной какой-то дикий - вроде 70 ма, а вот ток единицы на выходе - гораздо меньше. Я уже на это попадался. Думал - нифига себе качалка! А нет, не всё она качает.

21

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

Voldemar0 пишет:

ткнул мультом

Стоп, а у мульта какое входное сопротивление? Может он своим входом к земле подтягивает?

Voldemar0 пишет:

ИП7 тоже та ещё приколистка: у неё ток нуля выходной какой-то дикий - вроде 70 ма, а вот ток единицы на выходе - гораздо меньше. Я уже на это попадался. Думал - нифига себе качалка! А нет, не всё она качает.

Лучшая качалка это NE555. У нее 220 ма и вроде в обе стороны.

22 Отредактировано Voldemar0 (31-12-2019 19:02)

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

10 МОм
vc9805
Попробовал пальцами потыкать - вроде не глючит.
Даже если взяться за +5 и пинцетом в этот вход ткнуть - напряжение до 1.4 доходит, но, видимо, ИП2 не считает это единицей. Наводки 50 Гц с руки тоже не ловит.
А вот если миллиамперметром на +5 - то всё, выключилось-зависло
(я вывод дампа 8000.bfff запускаю из под бейсика 60 - там же и дос лежит и через неё весь вывод идёт).

Up: попробовал ещё мульт между +5 и 0 в режиме вольтметра  - тянет маленько, но не сильно.
Питание 4.6 в, а он показывает 0.3в до 0 и 3.6в до +5в. И, похоже, маленько это всё с прогревом плывёт.
В общем, это ещё не CMOS.

23

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

Voldemar0 пишет:

Я не знаю, в какой слот втыкали 840ку на официальных семёрках, возможно, не в 3-й.

Если эта информация чем-то поможет - компьютерный клуб, в котором я начал своё знакомство с "Агатами" был укомплектован "семёрками" с дисководами 840к и контроллеры были вставлены в 3 слот. Я с тех пор запомнил заклинание загрузки "C300G" :)

24

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

Володя, дай ссылочку на тест памяти пожалуйста. Это не Лисин. Хочу всё-таки когда-то довести свои платы расширения ОЗУ до полностью рабочего состояния.

25

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

Это - не Лисин. Это официальный тест для СЕМЁРКИ!