Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Калькуляторы, арифмометры, PDA, HPC »   Прошивка микрокода Д3-28
RSS

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

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

<<Назад  Вперед>> Страницы: 1 2
Печать
 
xoiss
Advanced Member


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
Всем привет!

Короче, сдампил я прошивку микрокода Д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:

Вот.

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

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


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


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

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++. А вот сигналы управления "СТРОБ" и пр. у этих модулей ... вроде бы ... не инвертированные — но это к файлу прошивки отношения уже не имеет

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


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
Интересные моменты.

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

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

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

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


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
Если кто-то захочет повторить опыт, то пишите сюда — я дам комментарии по запросу.

Схему я собрал предельно примитивную:
- шлейфы для подключения к модулю --- вот это было, пожалуй, самым трудоёмким моментом
- микроконтроллер 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
Коллекционер

Откуда: Питер
Всего сообщений: 2719
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 июля 2003
Вот спасибо!
Kinder5912
Newbie


Всего сообщений: 11
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
18 окт. 2015
Могу в дополнение выложить перерисованную схему микросхемного модуля ПЗУ (чтобы не ломать глаза на оригинальной схеме).
http://www.portal.kinderland.r...T1JUQUw%3D.
xoiss
Advanced Member


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


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

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

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

Например, строка:
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


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

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

Вот.

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

// скриптик для python 2.7:
[q]
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()
[/q]
xoiss
Advanced Member


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
Друзья, всем привет!

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

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

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


Всего сообщений: 953
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
17 фев. 2008
Круто

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


Всего сообщений: 711
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 окт. 2013
да кто же его знает! :)

вот здесь — единственная, известная мне, фотография блока ПЗУ от 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 :)
// а инхние инженеры — не догадались!! :) :)
<<Назад  Вперед>> Страницы: 1 2
Печать
Полигон-2 »   Калькуляторы, арифмометры, PDA, HPC »   Прошивка микрокода Д3-28
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS