АВТОРСКАЯ РАЗРАБОТКА
© С. Веремеенко
ВИНЧЕСТЕР ДЛЯ ZX SPECTRUM.
Давно назрел вопрос о подключении винчестера к ZX SPECTRUM. Известно несколько попыток решения этой проблемы (МФК: в частности, см. ZX РЕВЮ 96/3). Видимо, разработки в этой области будут продолжаться, и это грозит еще большей неразберихой, чем несовместимость разных моделей SPECTRUM'a, если не будет принят какой-то стандарт.
Цель этой статьи - предложить стандарт подключения винчестера к ZX SPECTRUM и призвать разработчиков следовать ему.
Для начала сформулируем несколько постулатов.
1. Контроллер винчестера должен быть пригоден для любой модели ZX SPECTRUM без каких-либо переделок как компьютера, так и контроллера.
2. Контроллер винчестера должен подключаться к разъему дисковода компьютера (системный разъем есть не у всех моделей). Использование дополнительных сигналов и, упаси боже, портов недопустимо.
3. Любая дисковая версия программы должна работать с винчестером без всякой адаптации.
4. Никаких ограничений на использование альтернативных DOS (IS DOS, CP/M) быть не должно.
5. Размещение драйвера винчестера в ОЗУ компьютера и изменение его системных переменных недопустимо.
6. Способ передачи служебной информации в контроллер винчестера и команды должны быть стандартизованы.
Требования достаточно жесткие, но их выполнение гарантирует отсутствие «головных болей» у синкле-ристов, подключивших винчестер к своему компьютеру.
Единственный разумный способ удовлетворить все эти требования - работа контроллера винчестера в режиме эмуляции дисковода. При этом, разумеется, теряется такое преимущество винчестера, как более высокое, по сравнению с дисководом, быстродействие. Однако, преимущества такого решения - простота, подключения, независимость от типа компьютера, абсолютная программная совместимость - с лихвой перекрывают этот недостаток. Кроме того, SPECTRUM - это не IBM, и файлов с объемом более 40-50Кб у него не бывает. Поэтому быстродействия дисковода, как правило, вполне достаточно.
В подавляющем большинстве моделей ZX SPECTRUM основной является дисковая система TR DOS, разработчики которой явно не предполагали, что их детищу придется обслуживать винчестер. На жестком диске может храниться несколько десятков тысяч файлов и, без иерархической структуры каталогов, работать с ними невозможно. Эта проблема имеет достаточно простое решение.
Винчестер разбивается на разделы, каждый из которых имеет объем 640Кб и воспринимается TR DOS как дискета. В нулевом разделе, который включается при первом обращении к TR DOS, размещаем файловую оболочку, внешне напоминающую знаменитый NORTON-COMANDER. Она имеет собственную систему каталогов и, перед выбором заказанного пользователем файла, выбирает соответствующий раздел. Есть, правда, одно ограничение. Если программа в процессе работы обращается к дисководу, все дополнительные файлы должны размещаться в том же разделе.
Встает вопрос, а как переключать разделы? Мы ведь договорились, что никаких дополнительных портов и линий связи, кроме тех, которые используются для подключения дисководов, не используем. Собственно говоря, выбор весьма невелик
Из всех линий интерфейса дисковода доступны для управления только четыре линии "выбор дисковода" и "сторона". Дисководы А и В подключены во многих компьютерах, и эти линии использовать нельзя. Вместо дисковода С подключается контроллер винчестера. Я предлагаю для передачи команд контроллеру винчестера использовать линии «дисковод D» и «сторона». Выбор дисковода D означает, что контроллер винчестера должен принять команду, а информация передается по шине «сторона» в последовательном коде. На первый взгляд, это напоминает «операцию через совсем другую полость», но на практике оказалось достаточно удобно.
Предлагается следующий протокол:
1. Выбирается «дисковод D», «сторона» = 1 на время не менее 10 mS.
2. По шине «сторона» передается калибровочный нулевой импульс длительностью Т=5 mS. Калибровка необходима, т.к. быстродействие у разных компьютеров различно (имеется ввиду режим Турбо).
3. После паузы, длительностью 3*Т, передается код операции в последовательном асинхронном 8-битном коде с битом контроля по четности и двумя стоп-битами. Каждый бит имеет длительность Т.
4. Восстанавливается состояние системного регистра дискового интерфейса.
Команды контроллера винчестера:
1. 20h - выбор раздела. Второй байт - номер раздела.
2. 21h - принудительная парковка винчестера.
3. 22h - по этой команде винчестер получает имя А, а дисковод А имя С. Эта команда введена из-за того, что некоторые программы не хотят работать с дисковода, отличного от А.
4. 23h - восстановление родных имен.
5. 24h - побитовое копирование с дисковода А на винчестер.
6. 25h - побитовое копирование с винчестера на дисковод А.
Последние две команды позволяют перенести на винчестер целиком дискету с практически любой защитой и сделать для себя страховую копию такой дискеты. О другом применении этих команд умолчу - это уже вопрос Вашей совести.
Я понимаю, что предлагать свою разработку в качестве стандарта нескромно и самонадеянно. Возможно, появятся и лучшие, но пока я таких не знаю.
Контроллер предназначен для работы с винчестерами MFM/RLL, имеющими интерфейс ST506/412. Эти винчестеры достаточно широко распространены, и в 2-3 раза дешевле винчестеров IDE такой же емкости. Реально, цена винчестера вместе-с контроллером близка к цене хорошего импортного дисковода.
По мере удешевления винчестеров IDE, возможно, встанет вопрос о разработке контроллера, совместимого с уже разработанным, и для них.
По вопросу приобретения контроллера винчестера или комплекта для самостоятельной сборки, включающего печатную плату, запрограммированное ПЗУ, дискету с инсталлятором, схему и инструкцию, можете обратиться по телефону 3432-340-124.