Передовица » Hardware » ДЗУ » Исследование КНГМД 140

Исследование КНГМД 140

Эти тексты появились во время разработки контроллера EPP-ес5088, в результате изучения различных книжек и сайтов. В них я попытаюсь для себя и других читателей разложить работу флоп-контроллеров 140к Агата и Аpple ][ по полочкам, на русском языке и ответить на вопросы не только "как ?", но и "почему ?". Текст может показаться занятным как под сухарики, так и разработчикам разнообразных эмуляторов Агата. Исследования показали, что официальная документация раскрывает, быть может, процентов 10 различных возможных комбинаций, которыми может пользоваться драйвер при взаимодействии с железом.

! Текст не может считаться истинной в последней инстанции ! Маловероятно, что кто-то попытается проверить написанное здесь, поэтому даже простые ошибки могут долгое время оставаться неисправленными.

О чём пойдёт речь

Контроллеры 140 кб агатовские, контроллер Disk ][ от Apple ][ (на фотографии - сверху в центре).

Контроллер 140к Агата и Disk ][ Apple

Предположительно, для Агата существовало две ревизии контроллера. Обозначим их условными (т.е. сам придумал) номерами версий:

  • Версия 1 - исходный, примем его за точку отсчёта (на фотографии слева). Официальное название: "ФГ 3.089.105 - Модуль Контроллера НГДМ ЕС 5088.02 (исп 7)".
  • Версия 2 - отличается заметно изменённой аппаратной частью, прошивками и внешним видом (на фотографии справа). Но логика работы - прежняя. Официальное название "ФГ 3.089.173 - Модуль Контроллера НГДМ ЕС 5088.02, 5089 (исп 9)".

Оба варианта похожи, но в ПЗУ загрузчика есть два отличия: 1) фрагмент кода движения головки использует процедуру задержки из системного монитора, 2) последние 4 байта в конце драйвера - сигнатура.

Процедура задержки

Версия 1Версия 2
(и Disk ][)
Адрес, на который передаёт управление загрузчик¤FB94¤FCA8
В системном мониторе семерки здесьпроцедура задержкикоманда HLT
В системном мониторе девятки здеськоманда JMP ¤FCA8процедура задержки

Отсюда видно, что начальный загрузчик контроллера версии 2 не будет работать на Агат-7. Почему так сделали ? Возможно, для того, чтобы начальный загрузчик контроллера версии 2 мог работать в режиме эмуляции Apple ][, в присутствии Applesoft Basic (с его системным монитором).

Сигнатура

Контроллер версии 1 имеет в конце своего адресного пространства четыре неиспользуемых байта со значением ¤FF. В версии 2 эти байты заполнены сигнатурой ¤01 ¤01 ¤34 ¤02. Disk ][ здесь имеет четыре нуля.

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

В остальном контроллеры взаимозаменяемы - если версию 2 установить в семёрку и загрузить ОС с другого контроллера, то, в дальнейшем, даже ДОС Бейсика-60 нормально работает с версией 2. Так же и в случае установки версии 1 в девятку: если ОС распознает контроллер, он будет нормально работать.

Кроме того, есть отличие в ПЗУ секвенсора: версия 1 использовала младшую часть ПЗУ, а версия 2 - старшую. Но ни на что, кроме того, что лапка 23 ПЗУ подключена к разным шинам питания, это не влияет. Вариант включения, однако - не догма: среди трех изученных контроллеров версии 2 (от разных изготовителей) два использовали верхнюю часть, а третий - нижнюю (с модификацией топологии платы), причем прошиты были обе части во всех трех случаях (в версии 1 вторую часть оставляли пустой).

Контроллер Disk ][ от Apple ][, две версии - 3.2 и 3.3, поставлялись с версиями DOS 3.2 (а может и более ранними) и DOS 3.3 соответственно. Вообще говоря, они (контроллеры) не идеально совместимы с агатовскими, но программы, которые были написаны в соответствии с рекомендациями Apple, будут работать на агатовских контроллерах. В общем-то, контроллеры основаны на одной и той же философской концепции. Я буду придерживаться в описании именно агатовского варианта, либо явно указывать, что речь идёт об эпле.

Помимо описанных здесь и далее, Disk ][ имеет ещё одно отличие в ПЗУ: для определения номера своего слота ПЗУ-загрузчик обращается к пустой (RTS) процедуре в системном мониторе и затем изучает стек, чтобы выяснить собственный адрес. С этой целью агатовские загрузчики использовали процедуру по адресу ¤FFCB, в то время как Disk ][ - ¤FF58.

Контроллеры Агата версии 1 отличались от версии 2 тем, что могли работать не только с дисководом ес5088.01/02, но и с моделью ес5088. У них (контроллеров) на борту, в линиях сигналов записи и чтения, стояли дополнительные элементы, сигналы которых, при работе с ес5088.01/02, не используются.

Андрей Генадич Кулаков пояснил это так: при проектировании контроллера не было точно известно, какими флопами будут комплектовать болгары: ес5088 или ес5088.01. Сроки выхода контроллера поджимали, а договор ещё не был подписан. Всё лишнее в первой версии контроллера - это для ес5088, но присылать стали ес5088.01. Начальство требовало отличий от болгарской ПЭВМ Правец (довольно точная копия Apple ][), которая комплектовалась именно ес5088 (фото её контроллеров). В дальнейшем ес5088.01 сменился на ес5088.02.

Формат данных, которые читает и записывает дисковод

Тут всё просто: дорожка - 200 мс, каждый бит пишется 4 мкс. Если бит имеет единичное значение, уровень на линии записи дисковода должен изменить своё значение. Если бит имеет нулевое значение, уровень на линии записи должен оставаться неизменным. Изменения уровней должны происходить не чаще одного раза в 4 мкс и не реже чем раз в 12 мкс - т.е. между одной единицей допускается не более двух нулей. Попытка записать большее число нулей обернётся возвратом "мусорных" единиц при чтении. Заметьте: это ограничение дисковода, а не контроллера.

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

Особенности контроллера приводят также к следующиму:

  • Старший бит записывается/читается первым, причем он должен быть равен единице.
  • Во время чтения, получив очередной байт, декодер контроллера останавливается и будет продолжать работу только получив на входе единичку. Эта особенность несколько отличается для разных версий прошивки декодера (секвенсора): в ожидании "1" он будет висеть или бесконечно или существенно долго. Такое ограничение используется с целью синхронизации потока (т.е. оно нужно, чтобы контроллер мог выделить старшие биты из общей массы - это происходит в специальным образом сформированных синхрополях).

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

Следующий уровень - файловая система: у Мымрина и официалов слишком много ошибок в её описании, поэтому предпочтительно читать В.Цикозу. Прямо с раздела 8.3 технического описания. (Важно: в этом же документе есть разделы 8.2 и 8.4, там упоминается ДОС, но речь здесь идёт о файловом API ОС Школьница. Универсален лишь раздел 8.3, где описаны дисковые структуры).

Дальше идут отдельные большие разделы:

Ну и до кучи: патент Стива Возняка на свой контроллер: U.S. Patent 4,210,959.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Использование материалов сайта agatcomp.ru без получения предварительного письменного разрешения agatcomp.ru запрещено.