Ответить на тему  [ 1 сообщение ] 
 
Автор Сообщение

Зарегистрирован: 20 май 2013, 11:45
Сообщений: 18
Сообщение Цифровая археология 1801: неудержимое диско 128
"Комендант выходит перед строем и высоким лающим голосом объявляет:
- Сегодня у нас в лагере будет дискотека
- Ура-а-а!
- Пулеметчик Ганс прокрутит два диска..."
(с) Старый советский анекдот


В отличие от ситуации в анекдоте у нас прекрасный реальный повод устроить сегодня дискотеку - закончен полный реверс-инжиниринг микросхемы 1801ВП1-128. Данная микросхема является контроллером накопителей на гибких магнитных дисках (в быту используется более простое название - "дисковод"). Ранее компьютеры БК-001х использовали для сохранения программ и данных магнитофон. С появлением 1801ВП1-128 стала возможной разработка простого, компактного и массового контроллера НГМД и магнитофоны наконец освободились для прямого назначения - для устройства дискотек (конец 80-х, про компакт диски в СССР мало вообще кто хотя бы слышал. Мда, а каким шиком было иметь "Шарп")

Микросхема ВП1-128 фактически является венцом советского БМК-строения на основе матрицы серии 1801ВП1. 128 - это последний широкоизвестный номер в серии который пошел в массовое производство. Микросхема является относительно сложной (пока могу сравнить только с 030), использует 308 ячеек матрицы и содержит 525 связей.

Фотографии высокого разрешения кристалла традиционно выполнены BarsMonster, за что ему отдельное спасибо.

Изображение Изображение

Качество фотографий 128-ой получилось лучше чем для 030-ой. Фактически ошибки векторизации возникали только из-за моей невнимательности. Ошибки представляются любопытными - достаточно одной небольшой дополнительной черточки на ячейке и мультиплексор превращается в триггер. Ну как тут не вспомнить еще один старый анекдот "надо же, всего одна циф'га - а какая г'азница" :). В процессе декапа кристалла случился небольшой скол, но основная часть схемы осталась неповрежденной и на процесс реверса этот скол никак не повлиял.

При "раскопках" не обнаружено никаких дополнительных регистров или битов, не указанных в имеющейся скудной документации. А вот алгоритмы работы некоторых штатных блоков вызывают недоумение и, скажем так, некоторое неприятие, но - обо всем по порядку. Чтобы не придумывать ничего нового воспользуемся описанием блоков из имеющейся документации на микросхему. 1801ВП1-128 содержит следующие функциональные блоки (нумерация ячеек приведена по восстановленной схеме):

  • декодер адреса шины MПИ. Основная часть декодера реализована на ячейках A3, N3, B3, L4, B4, A5, A6, A7. Из особенностей отмечу что микросхема не защелкивает по ниспадающиему фронту nSYNC адрес обращения целиком, а только результаты предварительного его декодирования. В связи с чем выдвигаются вполне естественные требования к времени предустановки адреса относительно ниспадающего фронта nSYNC. Декодируется всего два адреса - 177130 (регистр управления при записи и регистр состояния при чтении) и 177132 (регистр для чтения-записи 16-битного слова данных).

  • схема управления сигналом RPLY. Данный сигнал вырабатывается в ответ на обращение к регистрам контроллера по шине МПИ. Установка данного сигнала в активный (низкий) уровень синхронизирована с фронтом тактового сигнала CLK. Снятие происходит немедленно после снятия сигналов nDIN или nDOUT. Реализована на ячейках B6, B7, B9, B10, B11. Триггер на элементах B6, B7, B9 является интересным схемотехническим образчиком - на этих трех элементах реализован D-триггер (вход данных - контакт 8 элемента B6), срабатывающий на ниспадающем фронте тактового сигнала (CLK).

  • регистр данных записи это просто 16-битный региcтр. На схеме банально представлен шестнадцатью D-триггерами
    N4, N5, M4, M5, L5, J4, H5. H4, G5, G4, F5, F4, D5. D4, C5 и C4. Данные в этот регистр переписываются непосредственно с шины МПИ при обращении на запись по адресу 177132. Выход этого регистра через мультиплексор подключен к сдвиговому регистру, через который записываемые данные будут последовательно поступать для записи на гибкий диск.

  • мультиплексор регистра данных записи. Реализован на элментах C7, D7, F7, G7, H7, I7, J7, L7 и представляет собой восьмиканальный мультиплексор два-в-один, коммутирует младший и старший байты регистра данных записи ко входам сдвигового регистра.

  • восьмибитный сдвиговый регистр. Реализован на L9, L11, L12, I9, I11, I12, J9, J11, J12, H9, H11, H12, G9, G11, G12, F9, F11, F12, D9, D11, D12, C9, C11, C12. Может работать или в режиме сдвига (только в одну сторону - от младших разрядов к старшим) или в режиме параллельной загрузки. Стоит отметить что старший бит байта данных записывается или считывается первым.

  • демультиплексор данных чтения. Поочередно подключает старший и младший байты шестнадцатибитового регистра данных
    чтения к выходам воcьмибитного сдвигового регистра. Наличие этого блока явно избыточно - достаточно просто соединить регистры напрямую - байт сдвигового регистра непосредственно выдается одновременно на оба байта регистра данных чтения, а логика работы реализуется через стробы записи - она так на этих стробах по факту и реализована. Поэтому, по мнению автора, элементы C2, D2, F2, G2, H2, I2. L2, M2 являются избыточными и могли бы быть удалены из схемы.

  • шестнадцатибитный регистр данных чтения принимает два байта данных из сдвигового регистра. В процессе считывания данных с диска сначала сохраняется старший байт, затем младший данных. Регистр реализован на шестнадцати D-триггерах, разбитых на две группы - для старшего (I0, H0, F0, D0, B0, A0, B2, B1) и младшего (O10, O6, O4, O1, O0, N0, M0, J0) байта данных соответственно.

  • регистр управления, содержит десять D-триггеров (O23, O27, O32, O36, O38, O39, N39, G39, F39, G36), которые сохраняют данные записываемые при обращении по адресу 177130. Разряды DS0-DS3, MSW, HS, DIR, REZ отображаются с инвертированием на соответствующие внешние выходы микросхемы и более никакого влияния на работу остальных блоков не оказывают. Разряд ST фактически в отдельном триггере не запоминается, вместо этого на выходе ST формируется импульс отрицательной полярности в момент записи единичного значения в данный разряд. Поэтому последующая запись в регистр управления с обнулением значения разряда не нужна. Состояние разряда GDR дополнительно стробируется импульсами данных чтения. Поэтому если ранее был установлен GDR и с дисковода более не поступают импульсы чтения (допустим вставили неформатированную дискету) то запись осуществить невозможно (по крайней мере без подачи активного низкого INIT) - так как внутрений стробируемый GDR зафиксировался в активном состоянии и удерживает часть схемы синхронизации в сбросе.

  • регистр состояния ВП1-128 содержит всего два триггера - для фиксации сигнала готовности (M12) и результатов контрольной суммы/окончания записи (J34). Остальные сигналы регистра состояния считываются непосредственно с входов микросхемы. Сигналы TR0, RDY вообще никак не влияют на работу микросхемы. Высокий уровень на входе WRP запрещает запись. Сигнал IND на работу микросхемы также влияет очень слабо - никак не прерывает режимы поиска маркера, чтения или записи данных. По крайней мере об этом говорят результаты моделирования. Поскольку они несколько странны, то были приняты дополнительные усилия по поиску ошибок восстановления схемы, никаких ошибок на данный момент не выявлено.

  • мультиплексор чтения (O11, O7, O3, L0, A1, A2) подключает к шине данных МПИ или регистр данных чтения или регистр/флаги состояния в зависимости от адреса обращения

  • схема синхронизации импульсов данных чтения собрана на элементах C39, D39, D38, G27, F35. На вход поступают положительные импульсы с инвертированного входа nDI. На выходе генерируются импульсы длительностью один период тактовой частоты CLK (250нс), передний фронт которых синхронизирован с ниспадающим фронтом CLK.

  • схема синхронизации. Содержит генератор с подсистемой фазовой автоподстройки частоты и схемы формирования различных синхроимпульсов. В режиме чтения выход ФАПЧ находится в фазовом соотвествии с импульсами данных чтения. Если таковые импульсы отсутствуют или схема находится в режиме записи, то схема находится в свободном режиме (free-running) и на выходах генерируются повторяющиеся сигналы с периодом 250кГц.

  • схема декодирования читаемых данных (G32) является очень простой - схема синхронизации вырабатывает меандр, фаза которого привязана к потоку импульсов данных чтения. Частота этого меандра соответствует битовой частоте 250кГц. Если в течение высокого уровня данного сигнала поступил импульс данных чтения, то фиксируется единичное значение бита данных, если импульса на входе nDI не было, то фиксируется нулевое значение. Таким образом, только МФМ-импульсы в середине битового интервала влияют на формирование данных. МФМ-импульсы на границе интервала участвуют только в управлении схемой ФАПЧ.

  • схема распознавания маркера - постоянно проверяет значение сдвигового регистра на соответствие коду 0xA1 (элементы I5, D13). Также имеется теневой четырехбитный сдвиговый регистр (F25, H23, I23, J23), который детектирует имульсы данных чтения на границе битовых интервалов - работает на том же принципе что и схема декодирования читаемых данных, только захватывает импульсы в противофазе. Захваченное значение также постоянно анализируется на предмет пропущенного синхроимпульса в младших четырех битах маркера 0xA1. Таким образом, можно утверждать что при чтении микросхема распознает только маркер 0xA1 с пропущенным синхробитом.

  • схема кодирования записываемых данных. Кодирует последовательный битовый поток данных в импульсы длительностью 500нс на выходах DO1-DO3. Данные выходы, по видимому, соответствуют значениям "номинальный импульс", "запаздывающий импульс" и "опережающий импульс" и предназначены для организации работы схемы предкомпенсации записи. Результаты моделирования показывают что фаза импульсов является постоянной и импульс может появиться только на одном из этих выходов. Поэтому использование элементов "И" в схемах многих контроллеров НГМД на ВП1-128 выглядит ненужным и избыточным - вполне достаточно одного сдвигового регистра.

  • генератор CRC вырабатывает циклический контрольный код. Любопытно что занимает он целых 48 ячеек - почти одну шестую часть всей микросхемы. В-общем-то ничего интересного из себя не представляет - обычный шестнадцатибитный сдвиговый регистр с обратными связями, реализован на длинной цепочке RS триггеров с двумя противофазными тактами.

При реверсе cхема ФАПЧ показалась мне особенно сложной. Она содержит около двух десятков отдельных триггеров, каждый из которых собран на "рассыпных" элементах "ИЛИ-НЕ". Все это густо переплетено непростыми обратными связями, которые зачастую являются распределенными по нескольким дополнительным ячейкам функциями нескольких триггерных выходов. Нет, я, конечно, знал - что вот эта беспорядочная кучка ячеек на схеме "где-то тут" содержит ФАПЧ. И после нескольких вечеров даже как-то ухитрился их сгруппировать. Но тут очень удачно вспомнилась такая книжка - Шевкопляс Б.В. - Микропроцессорные структуры. Более того, на работе у меня нашелся бумажный экземпляр и было приятно поработать с реальной бумагой :). Так вот, этот антикварный фолиант содержит подробное описание структуры и принципов работы ФАПЧ, реализованной именно в 1801ВП1-128. Любопытно что на эту схему в 1990 году получено Авторское свидетельство СССР. С книжкой и описанием дело пошло существенно веселее и схема была быстренько "разложена по полочкам".


Изображение

Но, сожалению, в бочке с медом нашлась и ложка кое-чего менее вкусного - несмотря на блестящую схему фазовой автоподстройки, авторы ВП1-128 не смогли обеспечить надежное распознавание маркера и переход в режим чтения данных. Дело в том, что ФАПЧ подстраивает генератор на удвоенную частоту битового интервала. И результирующая битовая частота может иметь две фазы. Если повезет и первыми битами будут нулевые данные (часто это так и есть - перед маркером записывается преамбула из нескольких нулевых байт) то фаза будет корректной и маркер будет распознан. А вот если сначала попадется несколько единичных бит (МФМ-импульсы в середине интервала), то фаза будет повернута на 180 градусов и маркер не будет распознан. Это подтверждается моделированием и экспериментально - вот в этой теме обсуждался эмулятор флоппи-дисковода с которым у 1801ВП1-128 были проблемы - не опознавался маркер. В-общем, у 128-ой шанс распознать маркер 50/50 - это как блондинке встретить динозавра на улице - "или встречу или не встречу".

Ну а в остальном все выглядит достаточно симпатично, несмотря на то что 1801ВП1-128 является достаточно простым контроллером НГМД (можно ведь сравнить, например, с 1818ВГ93, который сам умеет анализировать заголовок сектора). Надеюсь, что статья вышла не очень скучной и многие ее смогли осилить до конца :)


Комментарий к файлу: Модель 1801ВП1-128 на Verilog HDL
128-rc0.rar [12.88 KiB]
Скачиваний: 1299
Комментарий к файлу: Восстановленная схема 1801ВП1-128
128-rc0.pdf [507.59 KiB]
Скачиваний: 1502


14 окт 2013, 13:25
Профиль
Показать сообщения за:  Сортировать по:  
Ответить на тему   [ 1 сообщение ] 

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000 - 2011 phpBB Group.
Design creat de Florea Cosmin Ionut | Translation by WebSok.Ru

закрыть

Советскому бытовому " БК-0011М" посвящается...


Вопреки всем скептикам и недоброжелателям, дело БК живет и развивается. Не за горами день, когда будет выпущен в свет "БК-0012 Pulsar" - расширенный FPGA-клон БК-0011М. Пока же на данном форуме Вы можете ознакомиться с репликами БК-0011М(-01), приставкой Booster-11, репликой контроллера SMK64 (а также его FPGA-клоном - SMK512), аппаратным эмулятором ПЗУ КР1801РЕ2Б, блоками расширения с процессорами ВМ2/ВМ3, и другими интересными материалами и работами.
Ведутся работы по отрисовке в 3D корпусов БК, МСТД, оригинальных клавиатуры, джойстика и мыши, но пока не удается найти их производство по приемлемой цене при малом тираже. Выполнено производство новодельных пленок для клавиатур БК-0011М.
Важным для возрождения БК и его сообщества является новый софт (игры и демо в особености), и они периодически появляются!
Удалось решить многие hard-задачи, но нет системных программистов, востребованных в проекте БК-0012, как минимум для тестирования. Требуется разработка полноценного Win32-компилятора Си в bin-файлы БК.
Релизован полноценный каталогизатор всего софта БК, с удобным интерфейсом. Осталось выполнить собственно большую задачу каталогизации.

Ждем ваших откликов, идей. Сообщайте о данном ресурсе всем, кто увлекался в прошлом БКшкой, присылайте их и свои e-mail для рассылки новостей из мира БК.

nimamov@mail.ru