≡ Передовица » Hardware » ДЗУ » Исследование КНГМД 140
Исследование КНГМД 140Эти тексты появились во время разработки контроллера EPP-ес5088, в результате изучения различных книжек и сайтов. В них я попытаюсь для себя и других читателей разложить работу флоп-контроллеров 140к Агата и Аpple ][ по полочкам, на русском языке и ответить на вопросы не только "как ?", но и "почему ?". Текст может показаться занятным как под сухарики, так и разработчикам разнообразных эмуляторов Агата. Исследования показали, что официальная документация раскрывает, быть может, процентов 10 различных возможных комбинаций, которыми может пользоваться драйвер при взаимодействии с железом. ! Текст не может считаться истинной в последней инстанции ! Маловероятно, что кто-то попытается проверить написанное здесь, поэтому даже простые ошибки могут долгое время оставаться неисправленными. О чём пойдёт речьКонтроллеры 140 кб агатовские, контроллер Disk ][ от Apple ][ (на фотографии - сверху в центре). Предположительно, для Агата существовало две ревизии контроллера. Обозначим их условными (т.е. сам придумал) номерами версий:
Оба варианта похожи, но в ПЗУ загрузчика есть два отличия: 1) фрагмент кода движения головки использует процедуру задержки из системного монитора, 2) последние 4 байта в конце драйвера - сигнатура.
В остальном контроллеры взаимозаменяемы - если версию 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 мкс при последующем чтении (дисковод определяет первую производную сигнала, идущего с головки, и при смене её знака дёргает одновибратор). Особенности контроллера приводят также к следующиму:
На более высоком уровне (который уже обеспечивается драйвером, а не контроллером), стоит деление дорожки на поля и сектора, но оно неплохо описано как у Мымрина так и в документации. Следует лишь иметь ввиду следующее: три байта эпилогов полей на самом деле записываются так: первый байт отправляется на запись, драйвер ждёт 32 мкс, следующий отправляется на запись, опять пауза, последний отправляется на запись, после чего драйвер отключает режим записи. Как следствие, последний байт пролога не будет записан целиком. Поэтому процедуры чтения полей не требуют, чтобы были верны все три байта, ограничиваясь проверкой первых двух. Вторая ошибка: контрольная сумма поля данных - один, а не два байта и кодируется она по той же таблице, что и остальная часть поля данных. Следующий уровень - файловая система: у Мымрина и официалов слишком много ошибок в её описании, поэтому предпочтительно читать В.Цикозу. Прямо с раздела 8.3 технического описания. (Важно: в этом же документе есть разделы 8.2 и 8.4, там упоминается ДОС, но речь здесь идёт о файловом API ОС Школьница. Универсален лишь раздел 8.3, где описаны дисковые структуры). Дальше идут отдельные большие разделы:
Ну и до кучи: патент Стива Возняка на свой контроллер: U.S. Patent 4,210,959. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |