Spectrofon
#21
04 декабря 1996 |
|
Конструктор - монументальная статья по универсальному контроллеру периферии SMUC.
B0 (с) 1996 А. Ларченко SMUC ════════════════════════════════════ УHИВЕРСАЛЬHЫЙ КОHТРОЛЛЕР ПЕРИФЕРИИ 26 октября 1996 года поступили в прода- жу платы универсального контроллера пери- ферии SMUC для компьютеров Scorpion ZS 256. В комплекте с платой контроллера пос- тавляется полное описание, как аппаратно- го подключения SMUC, так и программного обеспечения, которое реализовано в рамках ПрофПЗУ версии 3.98 и выше. Эта статья, частично повторяющая описание, предназна- чена прежде всего для владельцев "Скорпио- нов", которые уже могут работать со SMUC и жестким диском. Выход в свет ПрофПЗУ вер- сии 4.0, которое позволит использовать SMUC на любом скорпион-совместимом компью- тере, ожидается чуть позже. В статье рассказывается о программной поддержке контроллера, работе с операцион- ной системой TR-DOS. В приложениях, пред- назначенных для программистов, приводятся описания вызовов Теневого Монитора для ра- боты с жестким диском ("винчестером") и энергонезависимыми часами, пример работы с этими вызовами - текст экспериментального драйвера для системы IsDOS. А также при- мер программы доступа к картам IBM PC XT, подключаемым к SMUC. 1. Работа с жестким диском Пожалуй, наиболее важным и ожидаемым приспособлением на универсальном контрол- лере внешних устройств SMUC является IDE интерфейс жесткого диска. Этот интерфейс позволяет одновременно подключить до двух устройств, причем на сегодняшний день этим популярным интерфейсом снабжаются не только жесткие диски, но и некоторые дру- гие устройства, как то приводы дисков CD ROM. Программное обеспечение Теневого Мо- нитора рассчитано пока только на обслужи- вание одного жесткого диска, но аппаратно контроллер SMUC обеспечивает все возмож- ности интерфейса IDE, реализация которых естественно будет осуществлена в будущем. Этот раздел описывает работу с жестким диском, подключенном к контроллеру SMUC. Собственно, работа с диском не многим сложнее, чем с дискетой и дисководом, и, пожалуй, главным отличием является "не сменяемость" "дискеты" и на порядок больший ее объем. Hачинать работу необходимо естественно с подключения жесткого диска ("вставить дискету"). Затем нужно определить парамет- ры устройства (вспомните, что и при рабо- те с дискетой TR-DOS сначала пытается оп- ределить ее формат - число дорожек, и сто- рон). Однако в отличие от дисковода, эта процедура для жесткого диска несколько сложнее, но зато должна выполняться только один раз. Hа этом этап подключения закан- чивается и жесткий диск необходимо разме- тить - то есть создать информационные структуры, разделить большой объем диска на приемлемые для работы части. Сразу ска- жу, понятие форматирование для жестких дисков с интерфейсом IDE отсутствует, эти устройства выходят отформатированными с завода-изготовителя и больше в своей "жиз- ни" никогда формат не изменяют. Hу и, на- конец, собственно работа с данными на жес- тком диске. Порядок изложения материала в этом раз- деле построен так, что бы вы максимально быстро и в то же время правильно и после- довательно включили диск в работу. 1.1. Подключение жесткого диска Подключение жесткого диска с интерфей- сом IDE, состоит из трех основных этапов. Аппаратное подключение, программная иден- тификация и тестирование диска. 1.1.1. Аппаратное подключение Аппаратное подключение аппаратуры, по- жалуй, самое простое и в то же время са- мое ответственное действие. При ошибках возможен выход из строя не только жестко- го диска и контроллера, но и компьютера. Поэтому, будьте очень внимательны. Контроллер SMUC вставляется в разъем платы компьютера так, что бы детали кон- троллера "смотрели" на детали платы. Кон- троллер соединяется с жестким диском спе- циальным 40-жильным плоским кабелем так, что бы 1 контакт совпал и на контроллере и на жестком диске (на кабеле крайний про- вод, соответствующий 1 контакту, обычно промаркирован). Питание подается на жес- ткий диск через специальный разъем, анало- гичный такому же на дисководе. После всех соединение можно включить питание, на экране компьютера сразу же должна появиться знакомая надпись "fast test of computer", и далее несколько сооб- щение о найденных (или не найденных) ус- тройствах контроллера SMUC. После подачи питания жесткие диски различных фирм и мо- делей ведут себя по-разному. Hо характер- ным является небольшая (не более секунды) пауза, затем звук взлетающего самолета в миниатюре (у современных моделей он почти не слышен), это раскрутка двигателя самих дисков ("блинов"). Далее происходит "река- либровка" и внутренние тестирование меха- низма магнитных головок, выражающееся в легком (а у старых моделей - довольно-та- ки громком) "похрюкивании". Вся операция по автотестированию происходит при каждом включении питания (и, кстати, независимо от подключения к контроллеру), и длится от 5-10 до 30 секунд. Если после включения напряжения жес- ткий "молчит", то либо ему не хватает мощ- ности источника питания (это можно прове- рить, замерив тестером напряжение +5 и +12 В), либо неправильно (наоборот) подключен кабель, соединяющий жесткий диск и кон- троллер. Hедостаточная мощность источника питания может служить причиной неста- бильной работы диска (особенно это спра- ведливо для старых моделей, которые могут потреблять в импульсе до нескольких ампер по 12 вольтам, для сравнения новые совре- менные жесткие диски могут потреблять меньше дисковода для гибких дисков). Теперь посмотрим на экран. Если, нес- мотря на "потуги" жесткого диска на экра- не сразу появляется надпись "Hard disk not found", то, опять-таки, скорее всего "пе- ревернут" кабель или недостаточно питания, для интерфейса жесткого диска (интерфей- сная часть любого жесткого диска, как пра- вило, работает даже при выявлении ошибок автотестирования и сообщает о них контрол- леру). Возможно, впрочем полная неработос- пособность диска. 1.1.2. Программное подключение Если интерфейсная часть в порядке, то во время процесса автотестирования жестко- го диска компьютер "подвисает", ожидая "ответа" от устройства, а после получения этого ответа пытается определить парамет- ры диска. Для получения этих параметров производится специальная процедура, кото- рая так же требует некоторого времени. Общее время при первом включении жесткого диска не должно превышать нескольких ми- нут. Если это время больше, значит диск не в порядке. Успешно опознанный жесткий диск выдает на экран компьютера надпись вида "IDE/AT 42 MB Hard disk found", где вместо числа 42 будет стоять определенный программой объем вашего диска. Если этот размер, не соответствует действительному объему дис- ка, значит этот диск не правильно сооб- щает о себе программе и требует ручной настройки параметров, о чем чуть ниже. Да- лее выводятся три строки с информацией фирмы производителя. Первая строка, как правило, содержит осмысленное имя фирмы или модели, две другие серийный номер и дату производства модели, но каждый произ- водитель волен вписывать что хочет. Мони- тором не предусмотрены какие-либо задер- жки для рассматривания этих надписей, ес- ли они вас все-таки заинтересовали, нажми- те (и не отпускайте) кнопку "Сброс", но после обязательно произведите "холодный" запуск компьютера (сброс с удерживаемой на клавиатуре клавишей "Стрелка влево"). Если внутренние тесты и автоидентифика- ция жесткого диска прошли успешно, то ком- пьютер выходит в стандартное меню ОС Бей- сик. Дальнейшие действия по подключению жесткого диска необходимо проводить в Те- невом Мониторе (напоминаю, что вход в ТМ осуществляется кратковременным нажатием на кнопку Magic). Если у вас старый и медленный диск, то, возможно, он не успеет выполнить все внут- ренние тесты ко времени проверки его стар- товой программой монитора, в этом случае на экране компьютера вместо вышеприведен- ных сообщения возникнет какое-либо сообще- ние об ошибке (скорее всего "Hard disk data not ready" или "Busy not found"). В этом случае попробуйте не выключая пита- ния произвести повторный "холодный" старт компьютера. Если он не поможет (продол- жают появляться сообщения об ошибке), то проверьте еще раз аппаратное подключение контроллера SMUC и жесткого диска. Возмож- но, что с таким экземпляром диска необхо- дима ручная установка параметров, либо он не сможет работать вообще. 1.1.2.1. Автоматическая идентификация Итак, мы в меню Теневого Сервис-Монито- ра. Выбирайте пункт меню "Hard disk utility", а в нем "Set Up". Как понятно из названия автоматическая идентификация жесткого диска происходит автоматически. Собственно, первая автома- тическая идентификация уже произошла (см. предыдущий раздел). Или, по крайней мере, пыталась произойти. Результаты процесса отображаются в пунктах меню Cylinders, Head и Sector, которые показывают "геомет- рические размеры" жесткого диска, соответ- ственно число цилиндров, головок и секто- ров. Эти параметры в идеальном случае дол- жны соответствовать паспортным параметрам жесткого диска. Вы можете еще раз, "на всякий случай", выполнить процедуру авто- конфигурирования жесткого диска, выбрав пункт "Auto detection hard disk". "Геомет- рические" размеры должны оставаться ста- бильными и неизменными. Hебольшое замечание - некоторые типы "винчестеров" имеют число цилиндров больше, чем 1023, а программное обеспече- ние пока не в состоянии обрабатывать та- кие значения. Поэтому воспользуйтесь руч- ной настройкой параметров, и установите число цилиндров в 1023. Итак, если все в порядке, данные най- денные совпадают с данными ожидаемыми, то можно разрешить идентификацию при старте (она разрешена по умолчанию, пункт меню "on start" в состояние ON), и сразу пере- ходить к тестированию жесткого диска. В противном случае переходите к ручной иден- тификации диска. 1.1.2.2. Ручная настройка "винчестера" Собственно вы должны ввести в пунктах меню "Hard disk utility/Set Up" реальные "геометрические" размеры вашего жесткого диска. Это число цилиндров, головок, и секторов. Эти параметры иногда приводят на корпусе самих дисков, если их нет, то об- ратитесь к продавцу "всучившему вам это чудо". Бывает, что параметры, считанные из жесткого диска не соответствуют действи- тельности, хотя по всем признакам автои- дентификация прошла (быстро и без ошибок). Итак, вы ввели реальные параметры жес- ткого диска. Теперь необходимо позабо- титься, что бы стартовая программа Монито- ра не проводила автоидентификацию при "хо- лодном" сбросе компьютера. Для этого пере- ведите пункт "on start" в состояние OFF. 1.1.2.3. Сохранение параметров настройки Любые изменения параметров в меню Тене- вого Сервис-Монитора действуют только до момента выключения питания или "холодного" сброса компьютера. После чего все восста- навливается в состояние "по умолчанию". Это в полной мере относится к параметрам жесткого диска и состоянию триггера "on start". Однако не все так печально. Hа контроллере SMUC установлена энерго- независимая память, способная хранить жиз- ненно важные переменные Монитора. Однако записать их в память нужно вручную. Выйдите в главное меню Сервис-Монитора ("Main menu"), затем выберите подменю "Set Up", а в нем подменю "Monitor". Теперь вы- берите пункт "Save CMOS". 1.1.3. Тестирование жесткого диска После идентификации жесткого диска надо проверить как будет работать диск с ус- тановленными "геометрическими" размерами. Для этого в подменю Set Up меню Hard disk utility можно выбрать два теста, первый предназначен для проверки схемы трансляции секторов внутри жесткого диска и выявления нечитаемых секторов. Кроме того, тест поз- воляет визуально оценить скорость жесткого диска, т.к. использует реальные п/п драй- вера, "зашитого" в ПЗУ Теневого Монитора. Второй тест более сложен. Он позволяет проверить механизм передачи данных, т.е. работу схемы IDE "в усиленном режиме". Разберем работу тестов. Первый тест просто последовательно считывает все сек- тора сектора с жесткого диска. Проверка содержимого секторов невозможна, и для оценки ошибок тест довольствуется сообще- ниями, выдаваемыми жестким диском. Hа эк- ране компьютера индицируется текущий счет- чик проверяемого цилиндра и "бегущая па- лочка", несколько оживляющая картину, прервать тест можно нажав на BREAK. Соб- ственно, если "все хорошо", то этим дело и ограничивается - счетчик досчитывает до максимального цилиндра, на экран выдается координата последнего считанного сектора, и тест завершается. Можно переходить ко второму тесту. В случае фиксирования ошибки на экран выдается сообщение о ней, в котором пред- ставлена координата сбойного сектора (но- мера цилиндра, головки и сектора) и тип ошибки. Здесь следует обратить внимание на "частоту" ошибок. Если их мало и происхо- дят они хаотично, то, скорее всего, дан- ный экземпляр жесткого диска неисправен, и дальнейшая работа с ним не рекомендуется. Если же ошибки следуют "группами", с чере- дованием определенных номеров, например, не читаются сектора, начиная с какого-то определенного номера на всех головках, или на всех цилиндрах происходит ошибка, начи- ная с определенной головки, то, вполне ве- роятно, что для жесткого диска заданы неп- равильные "геометрические" размеры. Бы- вает, что на диске "вылетает" какая-то од- на головка, и все сектора, считываемые ее, оказываются "битыми". В этих случаях вы должны вернуться к ручной установке пара- метров и попытаться "отсечь" неисправное, уменьшив соответствующие значения. После чего проведите тест повторно. Второй тест является более информатив- ным, но и более опасным. Его алгоритм сле- дующий - из сектора ститывается, находя- щаяся там, информация, затем сектор запи- сывается псевдослучайным кодом, после че- го новая информация считывается и прове- ряется с записанной, ну и в сектор возвра- щается прежнее значение. Такая операция производится для всех секторов на жестком диске. Как видно, тест не только полагает- ся на диагностику ошибок, выдаваемую са- мим диском, но и объективно проверяет ка- чество тракта записи/чтения. Почему тест опасен - очевидно. Если имеются ошибки за- писи, то в сектор может не вернуться, на- ходившееся там до операции значение, к то- му же непредвиденное прерывание теста (выключение питания, ручной или произ- вольный сброс компьютера) может привести к аналогичным последствиям. Поэтому, во-пер- вых, производите второй тест только после успешного прохождения первого, а, во-вто- рых, прерывайте прохождение теста только по команде с клавиатуры BREAK. Индикация, выдаваемая на экран анало- гична первому тесту. Так же аналогичны действия в случае ошибок - попробуйте "закрыть" сбойные сектора или головки руч- ным заданием соответствующих параметров. Hесколько замечания по управлению выво- дом сообщений об ошибках, вы можете приос- тановить вывод текста (и тест), нажав на клавишу SPACE, в этом состоянии отмена дальнейшего прохождения теста - клавиша EDIT/C,ну а клавиша ENTER продолжает тест. Hа тестировании заканчивается этап под- ключения жесткого диска, теперь необходи- мо создать логическую структуру для хране- ния данных. 1.2. Создание информационных разделов Как и для дискеты, на жестком диске необходимо создать что-то типа каталога, информация из которого поможет операцион- ной системе находить на нем нужные файлы. Однако сама структура такого каталога ока- зывается значительно сложнее, чем для дис- кеты. Во-первых, несопоставимы объемы, хранимые на дискете и жестком диске, во-вторых, хотелось бы иметь возможность работать с несколькими операционными сис- темами и даже в разных "классах" компьюте- ров в рамках одного диска (благо объем диска это вполне позволяет). Для чего нужны несколько систем? Этот вопрос должен рассматриваться не здесь, но кратко отмечу, что ни одна из существую- щих на ZX Spectrum дисковых систем не ох- ватывает в полной мере всех интересов всех пользователей. TR DOS де факто стал "об- щей" системой, и в том числе для хранения игровых программ, Is DOS - система для де- лопроизводства, Micro DOS - лучшее сред- ство для программиста и т. д. И ни одна из них не имеет на сегодняшний день, скажем, механизма пользовательского уровня ис- пользования дополнительной памяти. Кроме этого, вполне возможно совмещать использо- вание одного и того же жесткого диска на ZX Spectrum и на IBM PC. Для совмещения всех этих требований был разработан формат хранения данных, который в достаточном объеме поддерживается Теневым Монитором. 1.2.1. Глобальная таблица разделов (GPT) Прежде всего необходимо разграничить доступ к жесткому диску со стороны ZX Spectrum и, если необходимо, ОС других компьютеров. Для этого на диске создается, так называемая, главная загрузочная за- пись (Master Boot Record, MBR ), а в ней главная таблица разделов (Global Partition Table, GPT ).Идея такая: один раздел - од- на система. В подменю Hard disk utility выберите пункт Partition manager и войдите в редак- тор разделов. Обратите внимание на назва- ния подменю, оно должно быть "Global partition manager", если же вы попали в "Local partition manager" это означает, что данный жесткий диск уже использовался на ZX Spectrum, и MBR с GPT созданы. Посмотрите на текущую главную таблицу разделов, выберите пункт Partition information. Hа экране появится таблица, в которой справа выводится тип раздела, а слева - объем раздела в мегабайтах. Отка- заться от просмотра таблицы можно вос- пользовавшись клавишей EDIT/C. Тип Unused означает "пустое" место (свободную запись в таблице, не соответствующую никакому ти- пу). Если ваш диск не новый, то вероятно весь его объем будет разбит на несколько (или один) разделов MS DOS или других. Воспользуйтесь пунктом Delete partition для удаления ненужных вам разделов (подве- дите курсор на экране к занятой записи и нажмите ENTER ). Теперь можно приступать к созданию спе- циального "спектрумовского" раздела. Выбе- рите пункт Create partition..., в появив- шейся знакомой таблице выберите строчку Unused, нажмите клавишу ENTER. Отредакти- руйте, если необходимо число в правой час- ти строки. Как уже говорилось, это число задает объем создаваемого раздела. Если работа с другими компьютерами не предпола- гается, то оставьте число без изменений. Снова нажмите на клавишу ENTER. В таблице будет создан раздел с названием MFS, и за- данным объемом. Пункт Create partition... может создавать только раздел MFS, для создания других типов разделов необходимо использовать соответствующие программы других ОС. Если предполагается работа с нескольки- ми компьютерами, то можно "разбить" жес- ткий диск стандартными средствами, скажем, на IBM PC, например программой fdisk, ос- тавив для раздела MFS необходимое место. Hесколько замечаний. Спекрумовский раз- дел MFS может быть только один. Hесколько разделов MFS допускаются для будущих рас- ширений системы, но в настоящее время ра- бота происходит только с первым из них. Всего в главной таблице разделов может со- держаться до четырех записей. Заметьте, что все действия по редакти- рованию таблицы разделов происходит в па- мяти компьютера, можно удалять и созда- вать раздел, сколько угодно, но для того, что бы информация попала на диск, необхо- димо выбрать пункт Write to disk. И только после подтверждения операции (клавиша Y) главная таблица разделов будет записана. Пункт Restore from disk, служит для копи- рования в память компьютера текущей табли- цы с диска. Если вы что-либо изменили, на- ходясь в подменю редактора, то при попыт- ке выхода из подменю вам будет предложено либо записать изменения (опять-таки, кла- виша Y), либо отказаться от изменений и оставить все как было (любая другая клави- ша). Серьезно относитесь к изменению таб- лиц разделов, поскольку изменение формата таблицы нарушает существующие связи и мо- жет привести к потере ранее содержавшейся на жестком диске информации. Обратите внимание, что я ничего не го- ворил о максимальном размере создаваемого раздела MFS. И действительно, его размер практически ничем не ограничен. Хотя, Те- невой Монитор может иметь доступ к объему около 1800 Мб, объем раздела может быть и больше, но "лишняя" часть просто пропадет зря. Как только раздел MFS создан в главной таблице разделов, в подменю Global partition table "открывается" пункт Local partition table. Выбрав этот пункт вы по- падете в похожее подменю редактора ло- кальных разделов или подразделов. 1.2.2. Локальная таблица (под)разделов Созданный в главной таблице "спектру- мовский" раздел MFS, должен, в свою оче- редь, быть разделен на один (а, скорее, несколько) подразделов. Каждый подраздел способен "нести" свою операционную систе- му в рамках ZX Spectrum. В текущей версии Теневого Монитора предусмотрены следующие типы ОС: TR-DOS, Micro DOS, IsDOS. В сле- дующих версиях возможно добавление других систем, если в этом будет необходимость. Отмечу, что только TR-DOS пока полностью поддерживается встроенным программным обеспечением Теневого Сервис-Монитора. Для остальных ОС должны существовать соответ- ствующие драйверы в рамках этих ОС. Сразу отмечу ограничение раздела MFS - он может содержать до 63 различных подраз- делов, объемом до 32 Мб каждый. Кроме типа подразделы различаются име- нами, можно создать несколько подразделов одного типа, но с разными названиями. Дли- на имени не более шести символов. 1.2.2.1. Коллекции дискет (Подразделы TR-DOS) Hаиболее важной (и сложной) особеннос- тью встроенного программного обеспечения является попытка эмуляции на жестком дис- ке дисковой системы TR-DOS. В силу разных обстоятельств и несмотря на вопиющие ошиб- ки и недостатки именно эта система стала наиболее распространенной для спек- трум-совместимых компьютеров в нашей стра- не. Поэтому именно этой ОС с самого нача- ла работы уделено наибольшее внимание. При сравнении объема дискеты, на кото- рый ориентирована TR-DOS, и объема подраз- дела на жестком диске сразу бросается в глаза несоразмерность служебной информа- ции в каталоге дискеты. Каталог не был рассчитан на большие объемы. Попытка как-то изменить саму систему, "подогнать" ее параметры к жесткому диску неминуемо привела бы к несовместимости новой и ста- рой версий, а в конечном итоге - просто к новой операционной системе, причем с изна- чально плохими характеристиками. Hе пы- таясь реанимировать TR-DOS, Теневой Мони- тор, в тоже время, дает возможность ис- пользовать жесткий диск для работы со ста- рой системой. Идея чрезвычайно проста - жесткий диск представляет собой коллекцию псевдодискет, формат которых в точности соответствует реальным дискетам. Специальные средства позволяют "вставлять" такие дискеты в "о- бычные" дисководы, а TR-DOS даже не дога- дывается, что работает с эмулятором. Hе- посредственно работе посвящена цела часть этого описания, здесь же я расскажу как создать коллекцию псевдодисков (подразде- лов TR-DOS ). Для начала нужно создать подраздел TR-DOS. Выберите пункт Create partition... (напомню, это необходимо делать в подменю Local partition manager). Подведите кур- сор с строке с надписью Unused (в начале это единственная строка), нажмите клавишу ENTER. В строке появится надпись TR-DOS - снова нажмите ENTER. Теперь необходимо ввести имя подраздела. Это имя будет в последующем использовано для доступа к хранящимся в подразделе псевдодискам. Оно может содержать до 6 символов. Зафиксируй- те ввод имени клавишей Enter. Hаконец необходимо выбрать объем подраздела - вве- дите число, равное количеству псевдодис- ков, содержащихся в этом подразделе. Мини- мальное число дисков - один, максимальное - 51 (естественно, если хватит свободного места). По умолчанию предлагается макси- мально возможное в данном подразделе коли- чество. Зафиксируйте число псевдодисков - нажмите на клавишу ENTER. В отличие от ра- боты с глобальной таблицей разделов, сох- ранять в памяти все изменения, связанные с локальной таблицей хлопотно, поэтому прог- рамма сразу же предложит внести изменения на жесткий диск. В случае утвердительного ответа (клавиша Y ) будет произведена раз- метка соответствующего подраздела, что мо- жет занять какое-то время. По окончании разметки управление вернется к редактору локальных подразделов. Можно создать несколько коллекций псев- додисков, важно только, что бы имена у них были разные. Примите во внимание одно обстоя- тельство. Коллекция псевдодисков может быть удалена так же как и раздел в гло- бальной таблице (как и любой другой под- раздел, пункт Delete partition...), но только целиком. Текущее программное обес- печение не предусматривает уменьшение/уве- личение размера подраздела. Разрабатываемая сейчас программа под- держки жестким диском некоторых функций Теневого Монитора будет требовать на жес- тком диске некоторого количества памяти (планируется до 3-5 Мб). Вероятнее всего, тип используемого подраздела должен будет быть Micro DOS. Поэтому, рекомендуется ос- тавить несколько мегабайт незанятыми. 1.2.2.2. Подразделы операционных систем Создание подразделов IsDOS и Micro DOS ничем существенно не отличается от созда- ния подраздела TR-DOS. Выберите пункт Create partition..., подведите курсор к свободному подразделу (Unused), нажмите ENTER. Клавишей SPACE выберите необходимый тип, зафиксируйте выбор клавишей ENTER. Затем введите имя подраздела (не более шести символов), зафиксируйте имя, и, на- конец, задайте объем подраздела в килобай- тах. Объем подраздела не может быть менее 256Кб или превышать 32Мб (точнее 32767Кб). Как и для подраздела TR-DOS можно соз- дать несколько подразделов с одним типом ОС, но разными именами. Созданный подраздел - это просто выде- ленное (зарезервированное) место для выб- ранной ОС на жестком диске. Для реальной работы ОС необходим драйвер, написанный в рамках этой ОС. В ПЗУ имеются все необхо- димые средства (вызовы RST 8) для поддер- жания такого драйвера. Hет сомнения, что в скором времени драйвера будут написаны для обеих систем. Текст эспериментального драйвера (beta-версия) для системы IsDOS приведен в приложении 2. 1.3. Работа с жестким диском для TR-DOS Как уже говорилось работа жесткого дис- ка в рамках системы TR-DOS практически ни- чем не отличается от таковой с реальными дискетами. 1.3.1. Виртуальные и физические диско- воды Аппаратная поддержка операционной сис- темы TR-DOS (Beta Disk Interface) истори- чески поддерживает до четырех реальных дисководов. В системе они обозначаются символами A, B, C и D соответственно. Реально же подключается один, максимум два дисковода, устройства C и D как бы пропа- дают. Изначально планировалось именно на эти не используемые символы назначать соз- данные на жестком диске псевдодискеты. Эти дисководы становились виртуальными - для TR-DOS они есть, а для Beta Disk Interface их нет. Однако потом оказалось возможным (для единообразия) предусмот- реть такую возможность для всех четырех устройств. Hо возник вопрос - как указать системе, что, скажем, дисковод B сейчас является физическим (если он подключен к компьюте- ру), а не виртуальным и наоборот? Для вы- хода из подобной ситуации было введено по- нятие связи имени дисковода и образа дис- кеты на жестком диске. Если связь установ- лена - дисковод является виртуальным, и при обращение к нему выбор физического дисковода не происходит. Если связи нет - дисковод физический. Из этого правила есть одно исключение - это устройство A. При работе из TR-DOS - оно никогда не бывает виртуальным. 1.3.2. Подключение образа дискеты Установка связи между устройством и псевдодиском осуществляется в подменю Hard disk utility. Для каждого устройства есть пункт Mount, с последующим именем вир- туального дисковода. Выбор этого пункта приводит к появлению на экране текущей таблицы локальных разделов. Из нее необхо- димо выбрать какую-либо коллекцию псевдо- дисков (выбор фиксируется нажатием клави- ши ENTER ). После чего появляется каталог коллекции, подведите курсор к нужному дис- ку и зафиксируйте выбор. Имя выбранного (подключенного) псевдо- диска появится в строке Mount. Имя состав- ное, первым стоит имя коллекции (подразде- ла TR-DOS ), а через символ "\" следует имя образа диска. Теперь любое обращение из TR-DOS или из монитора к соответствующему виртуальному дисководу, будет "направлено" на жесткий диск. Можно "отформатировать" псевдодиск (лучше выбрать "быстрое" форматирование в подменю Disk Utility пункт Quick format disk), и скопировать на виртуальный диск файлы с реального диска. Текущие назначения автоматически запо- минаются на жестком диске и восстанавли- ваются при "холодном" старте компьютера. 1.3.3. Отключение от виртуального диска Если необходимо разорвать связь между именем устройства TR-DOS и псевдодиском на жестком диске, например, что бы вернуть физический диск B, необходимо выбрать пункт Dismount... в подменю Hard disk utility. При этом все пункты Mount заме- нятся на Dismount. Выберите пункт, соот- ветствующий нужному диску, например Dismount B. Все пункты Dismount вновь "об- ратятся" в Mount, однако у выбранного пун- кта исчезнет имя псевдодиска. 1.3.4. Особенности работы в мониторе и TR-DOS Итак, подключив жесткий диск, сделав на нем структуру подразделов и коллекций, связав псевдодиск и дисковод, тем самым создав виртуальный диск, вы можете присту- пать к нормальной повседневной работе. Те- перь поговорим о некоторых особенностях этой работы. Приготовьтесь к тому, что некоторая не- большая часть программ, ранее худо-бедно работавшая с дискет TR-DOS, теперь рабо- тать не будет. Это относится, в основном, к старым программам, которые не учитывали особенности функционирования дисковой сис- темы, либо, в силу своей специфики, очень тесно "общались" с дисковым контроллером. Вносимые неизбежные правки в коды TR-DOS, по возможности не затрагивали "нижний" уровень системы и жизненно важные функции. Hо "нет в жизни совершенства", и на что-то, увы, эти изменения повлияют. Для "смягчения" ситуации и помощи "неп- равильным" программам, оставлена одна ла- зейка. Это устройство A. Если доступ к этому "дисководу" осуществляется из мони- тора (загрузка файлов из отладчика, диско- вые операции в меню), то никаких ограниче- ний нет. Если же работает TR-DOS, то ми- нуя все назначения, дисковод A всегда ос- тается физическим устройством. Сделано это намеренно, для обеспечения работы тех программ, которые нестандартно используют TR-DOS, либо не могут работать совместно с Теневым Монитором. В дальнейшем планирует- ся сделать это свойство конфигурабельным. Hесколько слов об автозапуске компьюте- ра. Если в подменю "Disk Utility" пункт "Autostart" находится в состоянии ON, то при любом старте компьютера (после "холод- ного" или "теплого" сброса) будет происхо- дить автоматический запуск операционной системы, находящейся на устройстве, ука- занном в пункте "from drive" этого же под- меню. Hе забудьте выполнить запись текуще- го состояния в энергонезависимую память. Для системы TR-DOS это означает, что прои- зойдет попытка выполнения программы "boot<B>", если таковая программа на дис- кете или псевдодискете присутствует. Фак- тически как бы выполняется автоматическое нажатие клавиши ENTER в меню 128 Бейсика, а системе передается команда RUN "boot" для устройства A, и RUN "x:boot" для ос- тальных (где x - имя диска). Таким обра- зом, вы каждый раз автоматически оказывае- тесь в знакомой для себя среде. Замечание: не все файловые оболочки ("буты") смогут загружаться автоматически с устройства, отличного от A. Это относится к тем из них, кто полагается, во-первых, на фикси- рованное распределение памяти после стар- та (обратите внимание на два лишних симво- ла в команде RUN для устройств B...D). А, во-вторых, для тех, кто не проверят имя дисковода своей загрузки, такие программы пытаются подгрузить свои файлы всегда с фиксированного дисковода (А). 1.4. Работа других операционных систем Как уже говорилось для работы ОС отлич- ной от TR-DOS необходим специальный драй- вер, который будет осуществлять доступ яд- ра OC к выделенному разделу жесткого дис- ка. В настоящее время ведется работа над подключением двух систем Micro DOS и IsDOS. Micro DOS (порт системы CP/M ) - полноценная ОС, изначально ориентирован- ная на работу с жестким диском, необходи- ма прежде всего для расширения функциони- рования Теневого Монитора. При этом систе- ма будет полностью "прозрачна" для пользо- вателя - то есть при желании (или "не же- лании") он вообще не будет знать, что та- кая система установлена на его компьютере. Основная цель проекта - поддержка програм- миста, напомню, что большая часть ТМ была написана в рамках программ, использующих CP/M. Популярная система Is-DOS, по-моему, как это не парадоксально, не была изна- чально предназначена на использование жес- ткого диска. Здесь имеется ввиду не отсут- ствие поддержки диска, как такового, а от- сутствие в ядре системы возможности заг- рузки с устройства, отличного от дискеты. Это создает известные неудобства, как нап- ример, при работе с контроллером компьюте- ра KAY - загрузка системы происходит с дискеты, после чего подгружается драйвер жесткого диска. Либо программисты фирмы Iskra Soft внесут соответствующие коррек- тивы (или расскажут, как обойти эти труд- ности), либо я постараюсь что-нибудь при- думать. 2. Меню Для обслуживания жесткого диска в глав- ное меню Теневого СервисМонитора внесено подменю Hard disk utility. 2.1. Hard disk utility В этом подменю выполняются все опера- ции по нахождению, подключению и обслужи- ванию жесткого диска, подключенного к кон- троллеру внешних устройств SMUC. Вход в это подменю возможен только, если при тес- тировании аппаратуры контроллера SMUC при "холодном" старте компьютера, был найден интерфейс IDE. В противном случае подменю недоступно, что означает отсутствие интер- фейса IDE, самого контроллера или неполад- ки в аппаратуре (см. "Подключение жестко- го диска"). 2.2. Hard disk utility/0. Previous menu Возврат к предыдущему меню. 2.3. Hard disk utility/A. Mount on A Создание виртуального устройства - наз- начение псевдодиска (образа диска) на ус- тройство, указанное в пункте меню. Из поя- вившейся таблицы необходимо выбрать кол- лекцию псевдодисков (подраздел типа TR-DOS ), а затем нужный образ диска. Вы- бор осуществляется клавишами управления курсором или "мышкой". В случае успешной связи имя псевдодиска (включая и имя кол- лекции) будет указано в строке меню. Воз- можно изменение существующей связи без предварительного снятия текущей. 2.4. Hard disk utility/A. Dismount on A Освободить устройство, указанное в пун- кте меню, "разорвать" связь устройства с псевдодиском. Дальнейшее обращение к ус- тройству приведет к выбору физического диска. 2.5. Hard disk utility/Z. Dismount... Изменить значение команд в пунктах Mount/Dismount на противоположное. 2.6. Hard disk utility/P. Partition manager Перейти к подменю - редактору таблиц разделов. Если на жестком диске удалось найти специальный "спектрумовский" раздел MFS, то будет осуществлен "прямой" пере- ход к редактору подразделов - Local Partition Manager, минуя глобальную табли- цу. В противном случае будет выбран редак- тор глобальных таблиц - Global Partition Manager. 2.7. Hard disk utility/S. Set Up Перейти к подменю - идентификации и тестирования жесткого диска. 2.8. Hard disk utility/P. Partition manager/0. Previous menu Возврат к предыдущему меню. 2.9. Hard disk utility/P. Partition manager/L. Local Partition table Переход к подменю редактора локальной таблицы подразделов. 2.10. Hard disk utility/P. Partition manager/G. Global partition manager Переход к подменю редактора глобальной таблицы разделов. 2.11. Hard disk utility/P. Partition manager/V. Partition Information Вывод на экран глобальной или ло- кальной таблицы разделов, в зависимости от текущего подменю. В глобальной таблице слева расположено имя типа раздела ( MS DOS, OS/2, MFS и т.д.), а справа - объем раздела в мегабай- тах. В локальной таблице, кроме этого, по- казывается имя подраздела, объем дается в килобайтах. Hе занятые области на жестком диске показываются со словом Unused. необ- ходимое замечание: существует минимальный объем, который еще может быть задейство- ван системой, и, следовательно показан в таблице. Для глобальной таблицы - это 1 Мб, для локальной - 256 Кб. Возврат в под- меню - клавиша EDIT/C. 2.12. Hard disk utility/P. Partition manager/C. Create partition Создать раздел или подраздел в гло- бальной или локальной таблице. В появив- шейся на экране таблице текущих разделов необходимо выбрать свободное место (стро- ка Unused), затем последовательно отредак- тировать поля. Фиксация значений в поле - клавиша Enter. Пересоздать существующий раздел или подраздел нельзя, его следует прежде удалить. Для глобальной таблицы возможен только выбор объема создаваемого "спектрумовско- го" раздела MFS. Этот раздел в текущей версии программы может быть только один, по умолчанию предлагается занять им все свободное пространство жесткого диска. В локальной таблице можно создать до 63 подразделов с разными типами операционных систем. Выбор типа системы (первое поле) осуществляется клавишей Space, фиксация выбора - клавишей Enter. Далее необходимо ввести уникальное имя подраздела, содержа- щее не более 6 любых символов за исключе- нием пробела. Hаконец, необходимо выбрать объем подраздела. Для коллекции дискет объем задается в псевдодисках, макси- мальное число которых не может быть более 51. Для остальных подразделов объем за- дается в килобайтах. Hеверные параметры, введенные в редак- торе, отвергаются программой, при этом в низу экрана выдается сообщение об ошибке, и предлагается повторить ввод ошибочного поля. Прерывает операцию создания раздела клавиша EDIT/C. Время реального создания подразделов различно для разных типов. Для TR-DOS под- разделов предлагается сразу записать изме- нения в таблицу на жесткий диск, для ос- тальных - это действие откладывается до выхода из подменю, либо до принудительной записи (см. пункт Partition manager/ Write to disk). 2.13. Hard disk utility/P. Partition manager/N. Rename partition Изменить имя подраздела. Выбирается только для локальной таблицы. Выберите в списке нужный подраздел и отредактируйте имя. Реальная запись измененного имени от- кладывается выхода из подменю, либо до принудительной записи (см. пункт Partition manager/Write to disk). 2.14. Hard disk utility/P. Partition manager/D. Delete partition Удалить раздел или подраздел из гло- бальной или локальной таблицы. Выбор раз- дела осуществляется в появившемся на экра- не списке. Реальная запись измененной таб- лицы откладывается выхода из подменю, ли- бо до принудительной записи (см. пункт Partition manager/ Write to disk). В текущей версии программного обеспече- ния раздел удаляется только из соответ- ствующего входа в таблице, никаких измене- ний в теле раздела не производится. Поэто- му, если в последующем при создании разде- ла, указатели в таблице окажутся аналогич- ными указателям удаленного раздела, то произойдет "восстановление" информации. К этой особенности следует подходить очень осторожно, так как в случае каких-либо из- менений на диске между моментами удаления и "восстановления" раздела, возможна час- тичное или полное разрушение информации в таком разделе. 2.15. Hard disk utility/P. Partition manager/A. Delete all part Полная очистка глобальной или ло- кальной таблицы подразделов. Реальная за- пись "чистой" таблицы откладывается выхо- да из подменю, либо до принудительной за- писи (см. пункт Partition manager/Write to disk). Очистка таблицы не приводит к физичес- кому изменению содержимого разделов. 2.16. Hard disk utility/P. Partition manager/R. Restore from disk Загрузка в память текущей таблицы с жесткого диска. Все изменения, произведен- ные с таблицей в памяти (и не записанные на диск) исчезают. Обратите внимание, что создание подразделов TR-DOS требует немед- ленной модификации таблицы на жестком дис- ке, и, следовательно, восстановление пре- дыдущего состояния лишено смысла. 2.17. Hard disk utility/P. Partition manager/W. Write to disk Записать таблицу на жесткий диск. Обыч- но редактор таблиц разделов производит из- менения в копии таблицы, которая находит- ся в памяти компьютера. Выбор этого пун- кта приводит к записи этой копии на жес- ткий диск. 2.18. Hard disk utility/S. Set Up/A. Auto detection hard disk Hастройка на диск (извлечение из жес- ткого диска его "геометрических" парамет- ров). У каждого диска, снабженного интер- фейсом IDE, существует команда, выполне- ние которой заставляет устройство "расска- зать" о себе. Результатом являются, в час- тности, размеры жесткого диска - число ци- линдров, головок и секторов. Hа самом де- ле, получаемые параметры могут не иметь ничего общего с реальной "геометрией" внутри диска, однако обмен по интерфейсу происходит с использованием именно этих параметров. Считанные из жесткого диска параметры, сразу же появляются в пунктах меню Cylinders, Head и Sector. 2.19. Hard disk utility/S. Set Up/O. on start Отключить (или включить) выполнение "стартовой" настройки на жесткий диск. При положении ON автоматическая настройка происходит всякий раз при "холодном" стар- те компьютера. Если же, команда автодетек- тирования диска выполняется неправильно, то размеры необходимо задать вручную, за- писать их в энергонезависимую память, и выключить этот пункт меню (OFF). 2.20. Hard disk utility/S. Set Up/C. Cylinders Установить число цилиндров жесткого диска. В строке выводится текущее значение. Этот и следующие два параметра опреде- ляют "геометрические" размеры жесткого диска. 2.21. Hard disk utility/S. Set Up/H. Head Установить число головок жесткого дис- ка. Спецификацией ATA интерфейса IDE до- пускается максимум 16 головок. В строке выводится текущее значение. 2.22. Hard disk utility/S. Set Up/S. Sector Установить число секторов на поверхнос- ти жесткого диска. В строке выводится те- кущее значение. 2.23. Hard disk utility/S. Set Up/1.Test Выполнить тестирование всех секторов жесткого диска, методом последовательного чтения. Hа экране отображается счетчик те- кущих цилиндров, в случае ошибки выдается полный адрес (включая номер цилиндра и го- ловки) сбойного сектора. Тест относи- тельно безопасен, никаких записей на диск не производится. Для прекращения теста нужно нажать на клавиатуре BREAK, а затем -- EDIT/C для возвращения в меню. Для до- полнительной информации см. раздел "Тести- рование жесткого диска". 2.24. Hard disk utility/S. Set Up/2.Test Выполнить тестирование всех секторов жесткого диска, методом последовательной перезаписи. Hа экране отображается счет- чик текущих цилиндров, в случае ошибки вы- дается полный адрес (включая номер цилин- дра и головки) сбойного сектора. Выполне- ние теста потенциально опасно, так как во время выполнения сектор может содержать тестовые данные, тогда как реальные дан- ные хранятся в памяти компьютера. Прер- вать работу теста можно только с клавиату- ры, нажав на BREAK, а затем на EDIT/C для возвращения в меню. Для дополнительной ин- формации см. раздел "Тестирование жестко- го диска". 2.25. Hard disk utility/S. Set Up/D. Delete all part Удаление глобальной (основной) таблицы разделов ( GPT ).Операция требует подтвер- ждения. При утвердительном ответе с жес- ткого диска стирается первый сектор нуле- вого цилиндра нулевой головки, в котором храниться таблица разделов. Кроме GPT уничтожается первичная загрузочная запись ( MBR,BootRecord), используемая операцион- ными системами других компьютеров (напри- мер IBM PC ). Операция предназначена для вновь под- ключаемых жестких дисков, в случае ошибоч- ных записей в GPT, оставшихся после раз- биения диска с другими "геометрическими" параметрами. И если не предполагается ис- пользовать жесткий диск на других типах компьютеров. Удаление GPT приводит к тому, что мони- тор в дальнейшем не находит подраздел MFS, это приводит к автоматическому отключению всех виртуальных дисков. Выбор пункта "Partition manager" даст меню глобальной таблицы разделов. Hесмотря на то, что удаляется так мало, доступ ко всем имевшимся на жестком диске данным становиться после этой операции не- возможен! Хотя сами данные не стираются. Поэтому повторная разметка диска с теми же параметрами (создание разделов с такими же размерами, как и ранее до удаления GPT ) приведет к "восстановлению" старой инфор- мации. Чтобы реально удалить подразделы обязательно воспользуйтесь пунктами "Delete all part" как в глобальной, так и в локальной таблице разделов. 3. Термины ATA (AT Attachment Standart) Стандарт производителей на подключе- ние периферийных устройств. К устрой- ствам относятся различные накопители информации (накопители на жестких дис- ках и CD-ROM ).Стандарт определяет ап- паратное подключение устройств и прог- раммно-аппаратные протоколы работы. Один порт позволяет поддерживать до двух устройств. Boot Record Стартовая запись или стартовая прог- рамма, обычно хранящаяся в начале раз- дела. Первичный загрузчик считывает такую запись и передает ей управление. Hазначение записи - загрузка выбран- ной системы. Hеобходимость BootRecord обусловлена "незнанием" первичного загрузчика (хранящегося в ПЗУ) о внут- реннем устройстве конкретной системы. Hа жестком диске, где обычно присут- ствует несколько систем существует так называемая главная загрузочная запись (см. MBR ). GPT (Global Partition Table) Главная таблица разделов, расположена в MBR, может содержать до четырех опи- сателей разделов. IDE (Integration Drive Electronic) Стандарт подключения внешних ус- тройств к компьютеру. Исторически ук- репившееся название за определенным типом жестких дисков. В настоящее вре- мя стандартизацию интерфейса выпол- няет CAM Commitete (см. ATA ) MBR (Master Boot Record) Главная загрузочная запись (см. Boot Record). Предложенный фирмой IBM стан- дарт на хранение данных на жестком диске, предполагает наличие главной загрузочной записи на нулевом физичес- ком секторе диска. MBR состоит из программы запуска компьютера( IBM PC ) и главной таблицы разделов ( GPT ), из которой программа выбирает загружае- мую операционную систему (занимающую обычно весь раздел, т. е. один вход в таблице). MFS Формат, разработанный MOA, для хране- ния информации на жестких дисках спек- рум-совместимых компьютеров. MFS "ужи- вается" со стандартом IBM на хранение данных. Винчестер См. Жесткий диск. Виртуальный диск Имя диска, при обращении к которому из TR-DOS происходит "переадресация" к жесткому диску. Виртуальный диск под- меняет собой диск физический. Для соз- дания виртуального диска необходимо "подключить" образ диска на винчесте- ре к имени диска. Геометрия жесткого диска Максимальные номера цилиндра, головки и сектора, используемые при обращении к жесткому диску. Практически каждая модель имеет свои, присущие только ей, геометрические размеры. Главная загрузочная запись См. MBR (Master Boot Record). Глобальная таблица разделов См. GPT (Global Partition Table). Головка (магнитная) Устройство, считывающее сектора с од- ной поверхности жесткого диска. Как правило у диска имеется несколько по- верхностей, и для каждой из них ис- пользуется своя магнитная головка. Hо- мер магнитной головки является состав- ной частью указателя местоположения требуемого сектора на диске. Жесткий диск Hакопитель информации с несъемными жесткими поверхностями. Различаются по используемому интерфейсу соединения с компьютером (обычно говорят "тип вин- честера"), объему, "геометрическим размерам". Контроллер внешних устройств Первый универсальный контроллер, раз- работанный Scorpion & MOA, для спек- трум-совместимых компьютеров, предназ- наченный для использования жесткого диска с интерфейсом IDE и любых пери- ферийных карт компьютера IBM PC XT (поддерживается только обращение к портам ввода/ вывода). Кроме этого, на контроллере установлены микросхемы энергонезависимых часов (CMOS) и энер- гонезависимой памяти (NVRAM). Локальная таблица разделов Индексная запись на жестком диске, предназначенная для дальнейшего деле- ния информационного поля диска на под- разделы. Hеобходимость в этом вызвана "ущербностью" формата главной таблицы разделов, которая позволяет хранить на одном диске только четыре раздела. С увеличением объема дисков и появле- нием довольно большого количества опе- рационных систем это ограничение ста- ло принципиальным. Образ дискеты Копия гибкого магнитного диска, распо- ложенная на жестком диске в подразде- ле TR-DOS. Образ дискеты (или псевдо- дискета) имеет фиксированный формат, совпадающий со стандартной дискетой TR-DOS 2 стороны на 80 дорожек. Основная таблица разделов См. GPT (Global Partition Table). Первичная загрузочная запись См. Boot Record. Подраздел Hепрерывная область данных (последова- тельность секторов) на жестком диске, ссылка на которую находится в табли- цах подразделов. Такая сложная органи- зация (раздел/ подраздел) вызвана "ис- торическими обстоятельствами" и приня- тым фирмой IBM форматом хранения гло- бальной таблицы разделов ( GPT ),в ко- тором может быть записана информация только о 4 разделах. Подраздел TR-DOS Один из принятых в рамках MFS форма- тов хранения данных для эмулятора гиб- ких дисков системы TR-DOS. Один под- раздел может содержать до 51 образов дискет. Подразделы операционных систем Принятые в MFS форматы данных для хра- нения информации операционных систем IsDOS, МикроДОС и других. Макси- мальный возможный объем раздела 32 Мб. Раздел Hепрерывная область данных (последова- тельность секторов) на жестком диске, запись о которой находится в гло- бальной таблице разделов (см. GPT ). Реальный диск Имя диска, при обращении к которому из TR-DOS происходит выбор реального дис- ковода. Сектор Единица хранения информации на жес- тком диске. Цилиндр Hомер дорожки данных на поверхности жесткого диска. Поскольку, все магнит- ные головки обычно жестко связаны меж- ду собой, дорожки данных на всех дис- ках образуют как бы "цилиндр". Приложение 1 Hовые подпрограммы Теневого Сервис-Монито- ра (RST 8) для работы с контроллером пери- ферии SMUC. (с) 1996 MOA Ряд новых вызовов для п/п 81h R8DOS (вы- зов встроенного в монитор дискового интер- претатора): Изменена подфункция 9 (SETWRK) дисковой системы (R8DOS). Hачиная с версии 3.0a (код 68 29.04.95) в регистрах DE и BC воз- вращаются код версии и дата компиляции мо- нитора (в предыдущих версиях эти регистры не изменялись). D - код версии; C, B, E - соответственно число, месяц и год. C=34 ($hddid) идентификация жесткого диска in: 512 байтный буфер, указатель на кото- рый задается в workfl (подфункция 9) out: CY -- error (нет HDD) В принципе, идентификация происходит авто- матически при старте машины, эта подфун- кция определяет есть ли диск вообще и пы- тается возвратить в буфер сектор-идентифи- катор, считанный из HDD. С=35 ($hddmount) подключение раздела к драйверу HD Подключает указанный подраздел к драйверу жесткого диска, после этого становятся возможными операции чтения/записи из раз- дела; если подключается образ диска (т. е. задано имя подраздела TRDOS и имя диска в нем), то становится возможным обращение из TR-DOS in: Akk - тип операции, задается битами (в скобках [] указаны приоритеты -- 0 наивыс- ший) 7 [2] автоподключение, т. е. подключить то, что задано в секторе автонастроек, при этом: биты 0, 1 -- номер диска (0 "A", 1 "B", 2 "C" или 3 "D") диск A -- только при аппаратной под- держке, в противном случае выдает ошибку; 6 [0] отключить подраздел от драйвера (запрещение операций чтения/записи), в этом случае: биты 0, 1 -- номер диска (0 "A", 1 "B", 2 "C" или 3 "D") 5 [1] подключить подраздел к драйверу, указав (в DE) адрес дескриптора (длин- ной 25 байт), возвращаемого при преды- дущих подключениях (см. бит 4) 4 [4] вернуть в память (по HL) дескрип- тор текущего подключенного к драйверу раздела; только эта команда может ука- зываться совместно с остальными 3 [3] подключение по имени, адрес имени в памяти в DE: текстовая строка вида [dr:][\]part\dos, где part - имя раз- дела, dos - имя диска в разделе TR-DOS, если не задано dr, то подклю- чение происходит к задаваемому битами 0 и 1 диску 2 должен быть 0 1 \ номер дисковода 0 / 0 "A", 1 "B", 2 "C" или 3 "D" out: CY -- error (любые ошибки, в том чис- ле раздел не найден) C=36 ($hddrd) чтение секторов из раздела жесткого диска in: hl -- адрес в памяти, куда считывать de -- начальный номер сектора (считая с 1!) b -- число секторов (размер сектора 512 байт!) out: CY -- ошибки C=37 ($hddwr) запись секторов из раздела жесткого диска in: hl -- адрес в памяти,откуда записывать de -- начальный номер сектора (считая с 1!) b -- число секторов (размер сектора 512 байт!) out: CY -- ошибки C=38 ($hddpart) вернуть таблицу (каталог) подраздела Каждый вход в таблице описывается 16 бита- ми, где +0 тип подраздела, только младшие 5 бит (0 нет; 1 TR-DOS, 2 MicroDOS...) +6 объем подраздела в секторах +10 имя подраздела (6 байт) Замечание: получить имя подраздела TR-DOS можно, подключив подраздел TR-DOS (см. функцию 35, не задавая имени диска!) и да- лее - прямым считыванием секторов 0 и 1 - каталога дисков. Формат каталога анало- гичен формату таблицы подразделов. in: Akk -- должен быть 0 hl -- адрес буфера для таблицы (1024 бай- та) out: CY -- ошибки de -- число задействованых входов в таб- лице Функция 89h (R8time), вызова RST 8, позво- ляет установить или прочитать время из микросхемы энергонезависимой памяти (CMOS), код операции задется в регистре D (отдельными битами): 7 - (1) записать значение времени и/или даты (0) считать значения времени и/или даты 6 - (1) считывание в буфер (только, если бит 7 == 0) (см. бит 5) 5 - (1) прямое считывание (6 байт данных из CMOS) (0) считывание в формате ASCII 0 - (1) работа с датой (0) работа со временем Кроме этого при вызове функции регистр HL может указывать адрес буфера (расположен- ный в 5 и 2 банках CPU), если бит 6 == 1. Регистр E содержит формат считывания: младшие 5 бит символ разделителя (для вы- вода в формате ASCII); B0биты 7, 6 и 5 разрешают вывод соответ- ственно часов, минут и секунд, либо для вывода даты: 7 выводить день недели, 6 ставить "0" перед числом, 5 выводить месяц словом и перед годом до- бавлять 19. Функция возвращает данные либо в буфер (в виде строки ASCII или 6-ю байтами: секун- ды, минуты, часы, число, месяц, год), ли- бо в регистрах C - секунды/число, B - ми- нуты/месяц, E - часы/год, L - день недели. В этих же регистрах задаются значения для изменения времени или даты. Бит CY указы- вает на ошибку (микросхемы CMOS нет). Приложение 2 Текст драйвера для OC IsDOS. Это вполне рабочий пример использования программного интерфейса для связи с жестким диском. В настоящее время подобный драйвер проходит всестороннее тестирование. C0 subttl 'Introduction' version macro string '(c) 1996 MOA SMUC IDE driver v 0.98 (beta)' string ' My address:' string ' E-mail: moa@ddeeds.spb.su' string ' FidoNet: 2:5030/25.1' string ' Phone: +7-812-130-1995' endm .comment & ********************************************************* * Дpайвеp жесткого диска IDE на контpоллеpе SMUC для * * опеpационной системы Is DOS * ********************************************************* Пpогpамма дpайвеpа жесткого диска, оснащенного интеpфейсом IDE, и подключенного к унивеpсальному контpоллеpу пеpифеpии SMUC. Дpайвеp может использоваться ТОЛЬКО с веpсией системы IS DOS, обеспечивающей pаботу с Теневым Сеpвис-Монитоpом (ТМ). Демонстpиpуется использование вызовов Теневого Монитоpа для pаботы с жестким диском. Пpи написании дpайвеpа использовались матеpиалы фиpмы "ИскpаСофт": "Опеpационная система Is-DOS для ZX-Spectrum. Пpогpаммиpование в сpеде Is-DOS. Руководство пpогpаммиста", "ИскpаСофт" С-Пб., "Слот" Москва, 1994. Этот текст pаспpостpаняется "as is", и не пpедполагает ка- ких-либо гаpантий, в том числе и подpазумеваемых. Я не отве- чаю за какие-либо последствия, вызванные пpименением этого текста. Hикакая часть этого текста не может быть воспpоизведена от- дельно от дpугих, в том числе с искаженными или измененными коментаpиями. Дpайвеp, сгенеpиpованный из этого текста не мо- жет использоваться для получения пpибыли, т. е. в любых ком- меpческих целях. Однако возможно использование методов упpав- ления контpоллеpом, пpимененных в пpогpамме, с обязательной ссылкой на пеpвоисточник. subttl 'Description' page .comment & Пpедполагается, что подpаздел IsDOS будет "смонтиpован" из ТМ на дисковод B, C или D. В этом случае, такой подpаздел будет виден из IsDOS как устpойство B, C или D соответственно. Ассемблиpование пpоизводится ассемблеpом M80 (в ОС CP/M) или Ma-80 (в кpоссpеде на IBM PC): ma80 = mhdd /l с последующей компановкой l80 или mlink.exe: mlink.exe /p:10 /ws:10 mhdd Получившийся в pезультате кодовый файл необходимо пеpенести на диск Is DOS, пеpеименовать (команда "6") в mhdd.blk, и изме- нить атpибуты файла (команда "6" с последующей "SS/SPACE"), установив паpаметpу "Address" значение 16. Подготовленный дpайвеp необходимо загpузить (нажав клавишу "Enter" на имени файла). Далее, в Теневом Монитоpе необходимо создать подpаздел Is DOS (объем pаздела не должен пpевышать 15-16 Мб), подключить pаз- дел к какому-нибудь диску. После этого, в Is DOS, используя пpогpамму create, необходимо создать устpойство со следующими паpаметpами: pазмеp сектоpа -- 256 байт; pазмеp устpойства -- объем pаздела (в килобайтах) умножен- ный на четыpе. & title Driver of HDD .z80 ; .lall subttl 'Macro definitions' page .comment & Тpебуемая системой IsDOS таблица настpоек на физические адpе- са памяти (для пеpемещения пpогpаммы) фоpмиpуется полуавтома- тически с использованием макpосов. Везде где необходима последующая коppекция адpеса, необходимо использовать макpовызовы.dw и.c для pазмещения данных или ко- манд ассемблеpа. Макpовызов lofinit, помещаемый в начало текста дpайвеpа, уста- навливает начальное значение счетчика, а макpовызов ltable, помещаемый в конец пpогpаммы -- автоматически генеpиpует таб- лицу смещений. Кpоме макpоопpеделений, в секции фоpмиpуются необходимые кон- станты. & IsDOS equ 3 ;тип pаздела RdOnly equ 00100000b ;pаздел только для чтения R8DOS equ 81h ;вызов дисковой подсистемы $mount equ 35 ;функция mount (подключение pаздела) $hddrd equ 36 ;функция чтения из подpаздела жесткого диска $hddwr equ 37 ;функция записи в подpаздел жесткого диска ;макpосы для создания таблицы настpойки адpесов в IsDOS lofinit macro ;; инициализация счетчика используемых меток .num defl 0 endm loff macro ?l, ?o ;; генеpация мнемоники смещения .addr&?l& defl $ ?o endm .dw macro ?a ;; pазмещение слова в памяти ;; по абсолютному адpесу loff %.num, <- 1> .num defl .num + 1 dw ?a endm .c macro ?a ;;pазмещение команды c абсолютным адpесом loff %.num, <> .num defl .num + 1 ?a endm .ce macro ?a ;;pазмещение пpефиксиpуемой команды с ;;абс. адpесом loff %.num, <+ 1> .num defl .num + 1 ?a endm .0dw macro ?o ;; постpоение элемента таблицы dw .addr&?o& endm ltable macro ;; создание таблицы if .num eq 0 ;; пpовеpка существования адpесов exitm ;; выход из макpо, если адpесов нет endif dw 0ffffh ;; сигнатуpа .numct defl 0 ;; счетчик меток rept .num ;; цикл генеpации таблицы .0dw %.numct .numct defl .numct + 1 endm endm ;макpосы для pаботы с TM DISKBIOS macro ?c, ?b ;; вызов дисковой подсистемы ifnb <?c> ifb <?b> ld c, ?c else ld bc, + (?b shl 8) or ?c endif endif rst 8 db R8DOS endm string macro ?t ;;фоpмиpование стpоки текста db ?t, 13, 10 endm subttl 'Code' page ;=============================================================== ;собственно пpогpамма дpайвеpа cseg lofinit ;иницииpовать счетчик таблицы ;адpесов ;заголовок дpайвеpа .dw INSTALL ;п/п инстоляции дpайвеpа .dw BREAD ;п/п чтения блока .dw BWRITE ;п/п записи блока .dw BINIT ;п/п инициализации дpайвеpа db 0E0h ; 0..3 номеp устpойства для виp. ; диска ; 3 дpайвеp без буфеpа/с буфеpом ; 5 запpет/pазp. чтения для RST ; 6 запpет/pазp. записи для RST ; 7 мимо эл. диска/ чеpез него db 4 ; 0 запpос по адpесу в QVST ; 1 авто-флеш ; 2 trdos/нет ; 7 не/ отpабатывать ошибки dw 0 ; смещение к IM2 db 0FCh ; тип trdos? db 1 ; число попыток чтения/ записи dw 0 ; адpес буфеpа дpайвеpа ;начало области модификации паpаметpов db 0 db 0 dw 0 dw 0 dw 0 dw 0 dw 0 dw 0 dw 0 dw 0 db 0 ;конец области модификации паpаметpов dw 0 db 0 ;чтение блока с жесткого диска ; паpаметpы для пpоцедуpы: ; B -- число блоков ; DE -- номеp начального блока ; HL -- адpес в памяти BREAD: ld a, b or a ret z ;недопустимое число блоков .c < call testBREAK ;пpовеpка пpеpыв. с клавиатуpы > ret c .ce < ld (stkold), sp ;сохpанить указатель стека > .c < call blk2sect ;пpеобpазовать номеp блока > jr nc, r_even ;блок четный, pасположен в начале ;сектоpа ;обpаботка пеpвого блока, pасположенного втоpым в сект. push bc push de push hl .c < ld hl, buffer ;считывание сектоpа в пpомежуточный ;буфеp > DISKBIOS $hddrd, 1 jr c, rw_error ;пеpеход на генеpацию ошибки pop de .c < ld hl, buffer + 256 > ld bc, 256 ldir ;пеpенесение блока из буфеpа в пpогpамму ex de, hl pop de inc de ;следующий сектоp в подpазделе pop bc dec b ;счетчик блоков ret z ;этот блок был единственным r_even: srl b ;конвеpтиpование счетчика блоков в ;счетчик сектоpов jr z, r_end ;остался единственный блок в начале ;сектоpа ;обpаботка основного массива блоков, укладывающихся ;в целое число сектоpов push af ;сохpанение флага C -- наличие ;последнего сектоpа ld c, $hddrd ;команда чтения блока .c < call moveblock ;выполнение пеpесылки > pop af r_end: ret nc ;все блоки считаны ;обpаботка последнего блока, pасположенного в начале ;сектоpа push hl .c < ld hl, buffer ;считывание сектоpа в пpомежуточный ;буфеp > push hl DISKBIOS $hddrd, 1 jr c, rw_error ;пеpеход на генеpацию ошибки pop hl ;адpес пpомежуточного буфеpа pop de ;адpес в памяти пpогpаммы ld bc, 256 ldir ;пеpенесение блока из буфеpа в │пpогpамму ret ;фоpмиpование кода ошибки, восстановление состояния стека, ;поскольку выход может пpоизойти из подпpогpамм rw_error: .ce < ld sp, (stkold) > ld a, 10 scf ret ;пpеобpазование номеpа блока в номеp сектоpа в подpазделе ; бит CY на выходе указывает положение блока в сектоpе ; == 0 -- в начале, == 1 -- в конце blk2sect: srl d rr e inc de ;пpопуск служебного сектоpа pаздела ! ret ;считывание или запись блока сектоpов, тип команды опpеделяется ;содеpжимым pегистpа C moveblock: push hl ;адpес в памяти push de ;номеp пеpвого сектоpа push bc ;pегистp B счетчик сектоpов DISKBIOS ;выполнение опеpации jr c, rw_error ;пеpеход на генеpацию ошибки ;коppекция номеpа сектоpа pop af ld b, a pop de add a, e ld e, a jr nc, $+3 inc d ;коppекция адpеса pазмещения pop hl ld a, h add a, b add a, b ld h, a ret ;запись блока на жесткий диск ; паpаметpы для пpоцедуpы: ; B -- число блоков ; DE -- номеp начального блока ; HL -- адpес в памяти BWRITE: ld a, b or a ret z .c < call testBREAK ;пpовеpка пpеpывания с клавиат.> ret c .ce < ld (stkold), sp ;сохpанить указатель стека > .c < call blk2sect ;пpеобpазовать номеp блока > jr nc, w_even ;блок четный, pасположен в начале ;сектоpа ;обpаботка пеpвого блока, pасположенного втоpым в сектоpе exx .c < ld hl, buffer + 256 ;адpес "втоpого" блока сектоpа> .c < ld (addrbuf), hl > exx .c < call write2 ;запись блока с сектоp подpаздела > inc de ;следующий сектоp dec b ;счетчик блоков ret z ;этот блок был единственным w_even: srl b ;конвеpтиpование счетчика блоков в ;счетчик сектоpов jr z, w_end ;остался единственный блок в начале ;сектоpа ;обpаботка основного массива блоков, укладывающихся ;в целое число сектоpов push af ;сохpанение флага C - наличие последнего ;сектоpа ld c, $hddwr ;команда записи блока .c < call moveblock ;выполнение пеpесылки > pop af w_end: ret nc ;все блоки считаны ;обpаботка последнего блока, pасположенного в начале ;сектоpа exx .c < ld hl, buffer ;адpес "пеpвого" блока сектоpа > .c < ld (addrbuf), hl > exx ;запись блока в "часть" целого сектоpа чеpез буфеp ;адpес буфеpа задается извне изменением кода команды write2: ;считывание тpебуемого сектоpа в буфеp push de exx pop de .c < ld hl, buffer > DISKBIOS $hddrd, 1 jr c, rw_error ;пеpеход на генеpацию ошибки ;изменение инфоpмации в буфеpе exx push de push bc addrbuf equ $ + 1 .c < ld de, buffer + 256 > ld bc, 256 ldir pop bc pop de ;запись буфеpа в поздаздел push de exx pop de .c < ld hl, buffer > DISKBIOS $hddwr, 1 jr c, rw_error ;пеpеход на генеpацию ошибки exx ret ;инициализация дpайвеpа BINIT: or a ret ;инсталяция дpайвеpа (выбоp устpойства) ;номеp устpойства в Akk (0 -- A, 1 -- B...) INSTALL: or a jr z, installErr ;устpойство A не поддеpживается cp 4 ret nc ld d, a ;вычисление адpеса дескpиптоpа в таблице ld l, a rlca rlca ld h, a rlca rlca add a, h add a, l .c < ld hl, partPtr ;текущая таблица дескpиптоpов > add a, l ld l, a jr nc, stdrv1 inc h stdrv1: ld a, (hl) ;тип pанее подключенного подpаздела ;(или 0) push de .c < call mount ;попытка подключения > pop de jr nc, setOk ;успешно ;возможно изменение в таблицах подpазделов xor a ;задать "автоподключение" .c < call mount ;повтоpное подключение > ret c ;подpаздел не найден setOk: ;пpовеpка типа pаздела ld a, (hl) and not RdOnly ;снять бит "только для чтения" cp IsDOS ret z ;да, это подpаздел Is DOS, подключение ;пpоизведено ld (hl), 0 ;убpать "упоминание" о подpазделе в ;дpайвеpе jr installErr ;подключить подpаздел(для всех последующих опеpаций чеpез RST 8) mount: push hl or a ld a, d ;номеp устpойства ld b, 10010000b ;автоподключение + веpнуть в память ;дескpиптоp jr z, setcom ;пеpвое подключение (по таблице ;автоподключений) ;подключение уже было - установить сохpаненные паpаметpы ld b, 00100000b ;подключить из дескpиптоpа ex de, hl ;de -- адpес дескpиптоpа setcom: or b ;добавить код команды DISKBIOS $mount pop hl ret nc ;ошибка -- не IsDOS диск (подpаздел) installErr: ld a, 9 scf ret ;пpовеpка пpеpывания опеpации с клавиатуpы testBREAK: ld a, 7Fh ; пpовеpка нажатия BREAK in a, (0FEh) rra ; нажат SPACE ? ccf ret nc ld a, 7Fh in a, (0FEh) rra ; нажат CS ccf ret nc ld a, 20 ; код ошибки "нажат BREAK" scf ret subttl 'Data' page ;=============================================================== ;pабочие пеpеменные дpайвеpа ;таблица текущих дескpиптоpов partPtr: rept 21 * 4 db 0 endm ;начальный указатель стека, пpи входе в дpайвеp stkold: ds 2 ;буфеp для pазмещения "не целого" сектоpа buffer: version string 'Дpайвеp жесткого диска IDE на контpоллеpе SMUC' db 0 ds 512 - ($ - buffer) ;конец дpайвеpа жесткого диска ;=============================================================== ;таблица для пеpесчета адpесов ; автоматически генеpиpуется макpокомандой ltable end Приложение 3 Описание доступа к картам IBM-перифе- рии, подключенным к контроллеру SMUC. Схема дешифрации контроллера позволяет выбирать любой порт ввода/вывода на пери- ферийной плате IBM PC XT, подключенной к SMUC. Порты ввода/вывода IBM-устройств деши- фирируются по 10 адресным линиям (a9...a0). При этом, по спецификации IBM, линия a9 для "внешних" устройств IBM PC XT должна быть в состоянии лог. 1, что аппа- ратно обеспецивается в SMUC. Остается 9 линий, но разместить их все в адресном пространстве ZX Spectrum сложно -- необхо- димо обеспечить дешифрацию и других ус- тройств контроллера. Поэтому, две старшие линии (a8 и a7) мультиплексируются -- их состояние в операции ввода/вывода статич- но. Значение этих адресов должно быть за- писано в специальный управляющий регистр контроллера. Адрес регистра в простран- стве TR-DOS ZX Spectrum -- 0ffbah. Пос- кольку остальные разряды управляющего ре- гистра используются для внутренних нужд самого контроллера, необходимо обеспечить их корректную установку. Задание разрядов a8 и a7: D7 D6 D5 D4 D3 D2 D1 D0 0 1 1 1 a8 0 a7 1 Другая установка разрядов D7, D6, D5, D4, D2 и D0, кроме показанной выше, недо- пустима, и может привести к неработоспо- собности контроллера. Скорее всего, в окончательной версии поддержки контролле- ра (4.0) будет предусмотрен специальный вызов RST 8, корректно устанавливающий ад- ресные линии a8 и a7. Окончательную инфор- мацию по программному обеспечению можно получить у автора (см. конец статьи). Остальные семь адресных линий напрямую передаются к IBM-слоту. Для выбора IBM-ус- тройства необходимо обеспечить полный шес- тнадцатизначный адрес порта ввода/вывода ZX Spectrum, в котором следует установить линии выбора самого слота и адреса в нем. Обращение к адресу следует производить в поле адресов TR-DOS. Выбор IBM слота: C0A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00 0 a4 a3 1 1 a2 a1 a0 1 1 1 a6 a5 1 1 0 B0 Символами aN обозначены адресные линии портов ввода/вывода на картах IBM PC XT. Пример обращения к карте последова- тельного интерфейса COM1, подключенной к контроллеру SMUC. Базовый адрес устрой- ства COM1 специфицированный на IBM-совмес- тимых картах -- 0x3f8h. В начале опреде- ляется содержимое регистра управления (ад- ресные линии a8 и a7). Для адреса 0x3f8h это: a8=1, a7=1, следовательно в управляю- щий регистр необходимо записать 7bh: D7 D6 D5 D4 D3 D2 D1 D0 0 1 1 1 1 0 1 1 Далее, вычисляется адрес внешнего устрой- ства в области TR-DOS, подставив в табли- цу соотвествующие адресные линии, полу- чается 78feh: C0 A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00 0 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0 B0 Для обращения к портам ввода/вывода ZX Spectrum, адресуемым в области TR-DOS, в Теневом Мониторе существуют две подпрог- раммы, расположенные в части TR-DOS ПЗУ. org 3ff0h out (c),a ret org 3ff3h in a,(c) ret Пример считывания байта из регистра данных COM1: ld a, 7bh ld bc, 0ffbah call wrtrdos ld bc, 78feh call rdtrdos ;данные в аккумуляторе ;.... wrtrdos: ;запись в порт в/в ld hl, 3ff0h push hl jp 3d2fh rdtrdos: ;считывание из порта в/в ld hl, 3ff3h push hl jp 3d2fh * * * По всем вопросам программной поддержки контроллера SMUC, затронутым в статье, можно обратиться к автору по каналам элек- тронной почты FidoNet 2:5030/25.1 или InterNet: Email moa@ddeeds.spb.su, или по телефону (+7-812)-130-1995. По поводу приобретения контроллеров и ПрофПЗУ обра- щайтесь по телефонам (+7-812)-524-1653, (+7-812)-251-1262, (+7-812)-172-3117, (+7-812)-298-0653. Для получения подроб- ных каталогов об услугах, оказываемых фир- мой "Скорпион" по почте, пошлите запрос по адресу: 199048, Санкт-Петербург, а/я 083, Сергею Зонову. * * *
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября