С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Вот драйвер. Последняя версия.
Ассемблирование: ассемблер M80 под CP/M
Использование:
Константы:
FORTABL - адрес размещения таблицы форматирования. Таблица занимает около 6400 байт (уточняйте по исходнику). Необходима для форматирования дорожек, содержит образ дорожки со всеми служебными полями и пропусками.
CP_M - доступ к портам контроллера напрямую (когда CP_M=1) или через точки входа TR-DOS (CP_M=0). Для отладки я использовал значение 1, при выпуске программ - значение 0.
Точки входа:
INIALL - инициализация дисковода. Вызывать один раз при первом использовании данного дисковода. Выполняет сброс контроллера ВГ93, запускает мотор дисковода и переводит головку на дорожку 0. Только что посмотрел: данная функция выполняет сброс контроллера дважды (баг), так что рекомендуется исправить.
DRIVE - выбор дисковода. Вход: регистр A - номер дисковода (0-3).
READGR - чтение группы секторов. Вход: HL - адрес в памяти, куда читать; D - номер дорожки начала чтения (0-159), E - номер сектора начала чтения (00-FF); B - количество секторов (00-FF); при B=0 читается 256 секторов.
Выход: переменная ERR_CO содержит код ошибки. 0 - нет ошибки, 1 - no disk, 2 - Write protect, 3 - Break key pressed, 4 - Data error (SNF/CRC)
READGR корректно обрабатывает ситуацию нестандартной длины секторов. При заданном количестве секторов =1 может быть прочитан сектор любого размера с дорожки нестандартного формата, при этом в HL будет адрес, следующий за последним считанным байтом. Если количество секторов (B) больше одного, то программа считает, что на одной дорожке 16 секторов. Поэтому множественное считывание дорожек с нестандартным форматом в некоторой степени неполноценно.
WRITGR - запись группы секторов. Входы и выходы аналогичны READGR.
BUILD - подготовка таблицы форматирования. Вход: IX - адрес таблицы требуемого формата (номера и размеры секторов - забыл точно, надо смотреть исходники RRESTORE);
FORM_TRK - форматирование дорожки. A - номер дорожки (0-159).
Подход, который я реализовал в FORM_TRK и BUILD, позволяет форматировать диск с повышенной скоростью. Большинство программ (таких как ADS) при форматировании каждой дорожки строят в памяти образ дорожки, которая имеет размер более 6кБ. На это уходит процессорное время, за которое диск проходит индексную метку. Приходится ждать еще один оборот диска, прежде чем начнется форматирование. Мой же драйвер сначала, перед форматированием всего диска, подготавливает образ дорожки (BUILD), а потом, для каждой дорожки, лишь модифицирует его (FORM_TRK). Подготовка образа дорожки таким образом завершается до прохода индексного отверстия диска, что сберегает один оборот диска при форматировании и повышает скорость форматирования/восстановления.
RETRY и IGNORE - подпрограммы, которые вызываются в случае завершения READGR или WRITGR с ошибками. Изначально предполагалось, что вызов этих подпрограмм продолжит прерванную процедуру чтения/записи (RETRY) или пропустит сектор и потом продолжит (IGNORE). На практике я никогда не пользовался этими функциями; возможно, они содержат баги. Тем, кто будет творчески перерабатывать мой драйвер, рекомендую выкинуть оттуда процедуры RETRY, IGNORE и логику, связанную с их поддержкой. Это оказалось некрасивым архитектурным решением.
Вот такие дела.
под CP/M Profi обходился без библиотек, напрямую. ничего сложного там нет!
WBR, Doctor Max^GLOBAL Corp.
[www.globalcorp.org.ru]
Doctor Max, ну покажи какой нить готовый продукт..
Хороший.. Плохой.. Главное - у кого ружьё !!
John North, их много есть.. ищите и обрящете... спросите у Syaman к примеру
WBR, Doctor Max^GLOBAL Corp.
[www.globalcorp.org.ru]
Doctor Max, а у самого нет что ли под рукой?
Хороший.. Плохой.. Главное - у кого ружьё !!
нет, нету... к сожалению. а ёрничание про готовый продукт не к месту совершенно!
WBR, Doctor Max^GLOBAL Corp.
[www.globalcorp.org.ru]
Doctor Max, это не «ёрничание» вообще то.. А просьба)
Хороший.. Плохой.. Главное - у кого ружьё !!
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)