Прошивка микрокода Д3-28 (дампик-дампик... ай-нэ-нэ)

Карманные вычислительные устройства и механические вычислители
Ответить
Гость

Прошивка микрокода Д3-28

Сообщение Гость » 07.05.2018,02:12

дампик-дампик... ай-нэ-нэ

Всем привет!

Короче, сдампил я прошивку микрокода Д3-28.

Прошивка -- это конкретно от "микросхемного" модуля ПЗУ от Д3-28.
Модуль этот называется ПЕЛ3.065.001 "Устройство постоянное запоминающее".
// был ещё и модуль диодно-трансформаторного ПЗУ, но его я пока не дампил -- ну, как-нить потом сдамплю

Кому надо - берите отсуда: https://yadi.sk/d/X_m3xnUD3VSr3M https://yadi.sk/d/oHjTeGeU3VY8Td
Там zip-архивчик, а в нём текстовый файл с ноликами и единичками.

Файлики с контрольными суммами -- для любителей удостоверяться в их валидности:
https://yadi.sk/d/emsWurEQ3VSr5T https://yadi.sk/d/STQV_N0e3VY8UJ
https://yadi.sk/d/X-x3R7Mg3VSr7H https://yadi.sk/d/-mTdGJcU3VY8UU

Мойный модуль "микросхемного" ПЗУ достался мне от нашего уважаемого коллеги sanders -- за что ему ещё и ещё раз ОГРОМНОЕ спасибище! :thumbup:

Вот.

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

С уважухой, Саня.

Гость

Сообщение Гость » 07.05.2018,02:13

Как пользоваться файликом с дампом прошивки. Пояснения к формату файла и пр.

1. Модуль ПЗУ имеет объём памяти:
- (М) микросхемный = 48 кбайт ровно
- (ДТ) диодно-трансформаторный = 22528 байт

2. Организация памяти:
- М -- 8 кслов, каждое шириной 48 бит
- ДТ -- 4 кслов, каждое шириной 44 бит

3. Шина адреса представлена двумя наборами линий -- "ПX.." и "ПY..". Ну, такая несовременная нотация, очевидно, происходит из того, что линии ПX.. приходят на X-дешифратор адреса, а ПY -- сотвесна на Y-дешифратор, которые выбирают в XY-матрице требуемый проводок (это в смысле в диодно-трансформаторном ПЗУ). В микросхемном модуле ПЗУ все эти линии приходят на адресные входы микросхем масочного ПЗУ, но нотацию менять не стали. Короче, можно рассматривать этот набор линий просто как монолитную шину адреса вот с такими хитрыми обозначениями отдельных линий
- М -- шина адреса имеет ширину 13 бит и представлена линиями ПY64, ПY32, ПY16 ... ПY1, ПX32, ПX16 ... ПX1
- ДТ -- шина адреса имеет ширину 12 бит и представлена линиями ПY32, ПY16 ... ПY1, ПX32, ПX16 ... ПX1

3++. Для очень внимательных инженеров сообщу, что на самом деле в ДТ ПЗУ Y-дешифратор принимает только линии ПY16 ... ПY1 -- таким образом получается, что "проводков" и "диодиков" в матрице всего (2^5)*(2^6)=2048, а не 4096, как должно было бы быть для получения заявленных "4 кслов". Фишка в том, что каждый проводок проходит через 88 считывающих трансформаторов, а не через 44 (по ширине слова = 44 бит). Ну а суть линия ПY32 -- она просто выбирает, какой набор из 88 трансформаторов - "первые 44" или "вторые 44" - выбрать для формирования отклика модуля. Получается, что "вторые 44 трансформатора" в те времена были дешевле, чем ещё "вторые 2048 диодиков"... Ну, на самом деле, думаю, лимитирующим фактором было место на плате, т.к. трансформаторы такого места занимают существенно меньше, чем поляна диодиков

4. Отмечу, что я условно принял линии "ПY" как старшие разряды адреса, а линии "ПX" - как младшие. Это в общем не так суть важно, но просто строки в файле с дампом прошивки упорядочены имеено исходя из такой схемы "упаковки" адреных линий.

4++. Для внимательных инженеров сообщу, что такая схема упаковки "почти" соответствует той схеме, которая принята в модуле микросхемного ПЗУ. Здесь "почти" означает, что преимущественно ПX приходят на младшие линии шины адреса A0..A12 микросхем ПЗУ, а ПY - преимущественно на старшие. Но на самом деле там почему-то вот именно линия ПY32 приходит на линию A0 -- это как непонятное для меня исключение... Наверное с целью нас с вами - потомков - запутать :)
К чему я это уточнение сделал -- ну, к тому, что если кто-то вдруг зачем-то захочет соотнести "мою" прошивку с прошивкой конкретной микросхемы из состава модуля ПЗУ, то надо иметь в виду, что там вот есть такие нюансы в принципиальной схеме. A0 = ПY32, A1 = ПX1, A2 = ПX2, ну и т.д.

5. Шина данных представлена набором линий "E.."
- М -- шина данных имеет ширину 48 бит и представлена линиями E1..E48 (обратите внимание, что нумерация с "1", а не с "0")
- ДТ -- шина данных имеет ширину 44 бит и представлена линиями E1..E44

6. !! очень важное обстоятельство !! На самом деле все линии адреса и данных в модуле ПЗУ (как М, так и ДТ) -- инверсные. То есть на разъёмы выведены сигналы "~ПX..", "~ПY..", "~Е..".
Как я не люблю вот эти инверсные сигналы! Это всегда так запутывает дело и заставляет писАть много-много лишних буковок, чтобы два-три раза разными словами объяснить читателю одну и ту же весчь -- лишь бы тебя 300% поняли правильно.
Так вот, в моём файле данные представлены для ПРЯМЫХ (т.е. НЕинвертированных) линий ---- т.е. для линий "ПX..", "ПY..", "Е..".
Если в моём файле указано, что скажем линия ПX1 принимает вот здесь значение 0 -- то это означает, что на контакт разъёма платы "~ПX1" нужно подать +5 В (т.е. инвертированное значение). То же - с "ПY" и с "Е".

6++. А вот сигналы управления "СТРОБ" и пр. у этих модулей ... вроде бы ... не инвертированные -- но это к файлу прошивки отношения уже не имеет

Вот. Ну, теперь, особенно если посмотреть схему модуля, полагаю, должно быть понятно, как работать с файлом, который я тут расшарил.

Гость

Сообщение Гость » 07.05.2018,02:13

Интересные моменты.

1. Я понятия не имею, зачем в микросхемном модуле ПЗУ ширина слова микрокода была увеличена до 48 бит, при том, что в диодно-трансформаторном ПЗУ она составляет 44 бита.

2. Если кто-то думает, что в верхних 24 кбайтах микросхемного модуля ПЗУ записаны супер-секретные алгоритмы, которых нет в машинах с диодно-трансформаторным ПЗУ, ну или хотя бы порнушка...
... расслабьтесь! там записана КОПИЯ нижних 24 кбайт -- не больше и не меньше.

Но я бы не спешил сказать "увы" по поводу пункта 2.

Наличие второй копии прошивки:
- во-первых, позволяет сравнить её с первой копией -- и, если они равны, то утверждать, что обе они сдампились правильно (ну, наверное, так можно утверждать)
- и во-вторых, если вам не повезло, и конкретно в вашем модуле ПЗУ побился один-два битика в "нижнем" банке, то вы можете перевести ваш модуль ПЗУ на работу по "верхнему" банку (в надежде, что в нём нет битых битиков)

Гость

Сообщение Гость » 07.05.2018,02:13

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

Схему я собрал предельно примитивную:
- шлейфы для подключения к модулю --- вот это было, пожалуй, самым трудоёмким моментом
- микроконтроллер ATmega32, четыре керамических кондюшка и один электролит в цепи питания... кварц тут не понадобился... ну, ещё я добавил светодиод, чтобы по его "условному подмигиванию" как-то видеть, что там контроллер сейчас делает
- плата для быстрого прототипирования и пучок проводков к ней
- блок питания... Нюанс! Модуль микросхемного ПЗУ хавает аккурат 1 ампер постоянного тока при напряжении питания 5 вольт
- ну и самый задрипищенский программатор AVR ISP MKII (даже не JTAG)

Вот фоточки:

Изображение

Изображение

Изображение

Внимательные инженеры, наверное, обратили внимание, что в перечне совершенно отсутствуют детали для организации канала передачи прошивки из микроконтроллера в компутер...
... да, такого канала там суть и не было. Мне было нереально в лом заморачиваться с чем-то типа COM-порта (RS-232).
Поэтому я реализовал сохранение считанной прошивки в Flash память ATmega, а потом просто вычитывал всю его память через программатор.

Контроллер ATmega32 имеет четыре 8-битных порта. Два из них я использовал для линий адреса и управления - ПY, ПX, СТРОБ, tПЗУ, свето-диод.
Другие два - для чтения части линий шины данных "E..". // понятно, что мне пришлось дампить прошивку в три итерации, т.к. 48/16 = 3.

Sergei Frolov
Advanced Member
Сообщения: 2820
Зарегистрирован: 05.07.2003,15:30
Откуда: Питер
Контактная информация:

Конкурсы

Вклад в сообщество

Сообщение Sergei Frolov » 07.05.2018,07:45

Вот спасибо!
Собираю в коллекцию советские калькуляторы и компьютеры.
Мой сайт: http://www.leningrad.su/museum/ ICQ=12370106 https://t.me/retrocomps

Kinder5912
Newbie
Сообщения: 11
Зарегистрирован: 18.10.2015,19:49

Сообщение Kinder5912 » 07.05.2018,17:48

Могу в дополнение выложить перерисованную схему микросхемного модуля ПЗУ (чтобы не ломать глаза на оригинальной схеме).
http://www.portal.kinderland.ru/publish ... T1JUQUw%3D.

Гость

Сообщение Гость » 08.05.2018,04:26

Похоже, удалось проссечь, для чего таки нужны четыре дополнительных битика E45..E48 в микросхемном ПЗУ.

В общем, если из разрядов E45..E48 составить 4-битное двоичное число (разряд E48 - самый младший), то...
... дополнение этого числа до 16 и число единиц в разрядах E1...E44 должны быть равны по модулю 16.

То есть, эти четыре бита - это просто контрольные биты.

Например, строка:
[font=Courier]PY..... PX....   E...................................................E
64....1 32...1   48....41 40....33 32....25 24....17 16.....9 8......1
0000000 101010 : 10110000 10011000 00000000 00001011 11111100 11111011
[/font]

разряды E44..E1: 0000 10011000 00000000 00001011 11111100 11111011
число "единиц" равно 19
по модулу 16 получим 3

в разрядах E48..E45: 1011
составим число <E45.E48> -- получим 0b1101 = десятичное 13
дополнение до 16 будет равно 3

Вот.

Это выполняется по всему файлу.

// скриптик для python 2.7:
[font=Courier]f = open("rom.txt", "r")
for l in f:
    if ':' not in l:
        continue
    addr, data = l.strip('\n').split(' : ')
    data = data.replace(' ', '')
    e4845, e4401 = data[:4], data[4:]
    ones = len([e for e in e4401 if e == '1']) % 16
    check = (16 - int(''.join(reversed(e4845)), 2)) % 16
    if check != ones:
        print "ROM failure at address %s" % addr
        break
else:
    print "ROM is Ok"
f.close()
[/font]

Гость

Сообщение Гость » 08.05.2018,14:34

Друзья, всем привет!

Перезалил прошивку -- так что, кто уже успел качнуть файл, обновитесь!

Что поменялось -- только форматирование:

1) упорядочил столбцы E1 .. E48 в порядке от 1 до 48
изначально я их выстроил в обратном порядке - от 48 до 1
почему их так необходимо перевернуть?
ну, выяснилось, что на самом деле "старший" бит имеет меньший номер линии, чем "младший"
например, в блоке ветвлений микрокода адрес следующей инструкции принимается по такой схеме:
E29 => ПY16
E30 => ПY8
E31 => ПY4
E32 => ПY2
E33 => ПY1
E34 => ПX32
E35 => ПX16
E36 => ПX8
E37 => ПX4
например, микрокоманда 8W0..7 выбирается по коду с весами:
E18 => 4
E19 => 2
E20 => 1
ну и ещё там полно таких же примеров
Короче, бит E1 - самый старший -- поэтому удобней будет, если его показывать первым слева.

2) отделил биты E45..48, т.к. они лишь кодируют проверочный код и не являются частью микрокоманды

3) отделил бит адреса ПY64, т.к. он выбирает один из двух (идентичных) банков ПЗУ

больше ничего не менял

shattered
Advanced Member
Сообщения: 1131
Зарегистрирован: 17.02.2008,02:38

Сообщение shattered » 09.05.2018,13:17

Круто

Формат микрокода похож на Wang?

Гость

Сообщение Гость » 10.05.2018,00:44

да кто же его знает! :)

вот здесь -- единственная, известная мне, фотография блока ПЗУ от Wang 720:
http://www.oldcalculatormuseum.com/wang720.html
// ищите "Compare to the ROM in the Wang 720C (right)"

рискну предположить, что у wang 720, по крайней мере, такая же ширина слова микрокода -- 44 бита

кстати, по фото видно, что у wang 720 поляна диодиков в два раза больше, чем у Д3-28
надо думать это потому, что наши инженеры догадались поставить 22 трансформаторных блока вместо 11, как было в оригинале, и тем самым сократить число прооводочков и число диодиков с 4096 до 2048 :)
// а инхние инженеры -- не догадались!! :) :)

Гость

Сообщение Гость » 30.05.2018,02:04

Сегодня с коллегой по интересам Kinder5912 сличали прошивки микрокода Д3-28
- с моей стороны был опубликованный здесь файлик
- со стороны Kinder5912 были помикросхемные дампы -- снятые отдельно с каждой К596РЕ1 0082..0087

О результатах, думаю, Kinder5912 сам в скором времени подготовит детальный отчёт -- ждите!

Но, в процессе сличения была обнаружена ошибка в схеме принципиальной блока "микросхемного" ПЗУ ПЕЛ3.065.001.
Ошибка именно в схеме (т.е. в документе). Сама суть плата, конечно же, сделана правильно.
Ошибка выявлена путём сравнительного сравнения одного с другим, другого с третьим и т.д.

Исправленный участок схемы:
Изображение

Если вдруг картиночка не грузится, то словами:
- ошибочно указано: выводы D20:10 и D20:11 обозначены как цепи ~E42 и ~E43 и показаны подключенными к контактам X2:Б3 и X1:А3 соответственно
- должно быть: выводы D20:10 и D20:11 обозначены как цепи ~E43 и ~E42 и показаны подключенными к контактам X1:А3 и X1:Б3 соответственно

То есть там сразу две ошибки:
- указан номер разъёма X2 (неправильно) вместо X1 (правильно)
- взаимно перепутаны цепи ~E42 и ~43, а также контакты А3 и Б3 разъёма X1

Большое спасибо Kinder5912 за предоставленные для сличения помикросхемные файлы-дампы.
Без них ошибка в схеме осталась бы невыявленной.

P.S. Да, если, что то файл с прошивкой, опубликованный здесь выше, -- он правильный. То есть ошибка в принципиальной схеме, вскрывшаяся сегодня, на этот файл влияния не оказывала.

Ответить