Spectrofon #21
04 декабря 1996
  Железо  
  Scorpion ZS  

Конструктор - монументальная статья по универсальному контроллеру периферии SMUC.

<b>Конструктор</b> - монументальная статья по универсальному контроллеру периферии 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,
Сергею Зонову.

                 *  *  *



Другие статьи номера:

Дебют - "Dark Scepetre" - представитель жанра RPG. В игре изумительная графика, крупные, тщательно прорисованные спрайты героев, превосходные звуковые эффекты, великое многообразие команд, удобный интерфейс.

Обзор - Новые игры на рынках Москвы: Square Head, Sex Xonix, Dr.Mario, Crack Down, RAM, Satan 2, Shadow Dancer, Mountain Bike Simulator, 10 Fingers, Trivial Pursuit, Space Gun,

С миру по биту - небольшой скандальчик с участием KSA, письмо на тему портов компьюутера Profi.

С миру по биту - письма читателей на тему игр.

С миру по биту - "ELITE: Великая тайна великой игры?" откpовения бывшего пилота, ушедшего на заслуженный отдых.

С миру по биту - аналитическая статья на тему игр "Я вас раньше нигде не видел?" (о плагиате).

Зеркало - интервью с Майком Сингльтоном, автором таких известных игр, как "Lords of Midnight", "Doomdark Revenge", "War in the middle earth", "Dark Scepetre" и др.

Премьера - музыкальный проигрыватель Intertia Player, игра Last Hero of the Light Force, системки Supercatalog и Text-Designer, игра DUNE 2.

Система - большой материал по портам компьютера PROFI.

Конструктор - монументальная статья по универсальному контроллеру периферии SMUC.

Мастерская - новый раздел специально для тех, кто любит рисовать. Раздел о художниках и для художников. Представлено несколько работ.

Тайники - Специальный раздел для любителей "вечностей". Разговор пойдет о тайнах и секретах игр. Маленькие хитрости, POKES, пароли и секретные коды.

Горячий привет - В гостях у журнала Sinclair User - сэр Клайв Синклер. Разговор с К.Синклером о Спектруме и вокруг него.

Реклама - каталог програмного обеспечения и обяьвления.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Технология спрайтов - часть 6: подготовка данных к печати.
Новости - Iсе'Di^тriиmрh. Plаid^тriиmрh. кYV^тriиmрh. Stееlzеr^тriиmрh. Pаstоr^тriиmрh. Cj.Есhо^тriиmрh. х-Mаn^тriиmрh. Cооlеr^тriиmрh. Оthеrs.
Послесловие - о релизах.
Движок торговли - реклама и обьявления.
ONLopros - Результаты опроса 100 пользователей ZXNet.

В этот день...   19 апреля