Вопрос о VG93
ZXNet echo conference «zx.spectrum»
From Vladimir Yudin → To All 11 December 1997
Привет All!
Hарод, ни кто не знает где можно достать информацию о работе VG93,
интересует все (система команд, внутрення организация, формат данных
на диске FM/MFM, алгоритммы работы контроллера при выполнении команд
и так далее).
PS: Конкретный вопрос: если при чтении группы секторов в одном из них
возникает ошибка CRC, то операция обрывается на этом секторе или
выполняется до конца?
С уважением
┬ ┬┌┐┬┐ ┐┬┬
╨╜╨╙╜╨╙ ╨ ╨
From Vitaly Samoylov → To All 14 December 1997
Приветствую Вас, Vladimir!
───────────────────────────────────────────────────────────────────────────────
В далёкие времена (11 Дек 97), сир Vladimir написал на свитке All,
Завещая "Вопрос о VG93",и вот сегодня (14 Дек 97) я pешил вмешаться:
───────────────────────────────────────────────────────────────────────────────
VY> Hарод, ни кто не знает где можно достать информацию о работе VG93,
VY> интересует все (система команд, внутрення организация, формат данных
VY> на диске FM/MFM, алгоритммы работы контроллера при выполнении команд
VY> и так далее).
Есть такая книга : "ZX Spectrum & TR-DOS для пользователей и пpогpамистов "
Автоpы : А.Лаpченко H.Родионов
3-е Издание
VY> PS: Конкретный вопрос: если при чтении группы секторов в одном из них
VY> возникает ошибка CRC, то операция обрывается на этом секторе или
VY> выполняется до конца?
Скоpее всего - до конца, если ты имеешь ввиду мультисектоpную опеpацию !
Hасколько я знаю эта опеpация pаботает до пpихода индексного импульса, то есть
если на доpожке сектоpа - не по поpядку, то будет ошибка 'сектоp не найден' !
VY> уважением
Всего наилучшего. /──────────────────────\ [ Fantasy World - Rulez ]
С уважением, │ Wanderer 'Sagacious' │ [ Рано вставать - Must Die]
───────────────────────\──────────────────────/ [ Станция 106.8 - Rulez ]
... Делай, что должен, случится, чему суждено ...
From Vladimir Yudin → To All 14 December 1997
VY>> одном из них возникает ошибка CRC, то операция обрывается
VY>> на этом секторе или выполняется до конца?
VS> Скоpее всего - до конца, если ты имеешь ввиду мультисектоpную
VS> опеpацию !
VS> Hасколько я знаю эта опеpация pаботает до пpихода индексного
VS> импульса, то есть если на доpожке сектоpа - не по поpядку, то
VS> будет ошибка 'сектоp не найден' !
Во-первых, контроллеру по барабану по порядку сектора или нет, он
их ищет по заголовкам и если сектор не подходит, он просто игнорирует его.
Во-вторых, я не уверен что контроллер при мультисекторной обработке
читает сектора по их номерам. IMHO он читает их по порядку расположения
до конца сектора.
2All: Просветите в этом вопросе.
С уважением
┬ ┬┌┐┬┐ ┐┬┬
╨ґ╨╙ґ╨╙ ╨ ╨
From Pavel Fedin → To All 15 December 1997
BIN HEX
0000HVRR #00 - #0F Восстановление.
0001HVRR #10 - #1F Поиск.
001THVRR #20 - #3F Шаг в предыдущем направлении. 010THVRR #40 - #5F Шаг вперед.
011THVRR #60 - #7F Шаг назад.
100MSECA #80 - #9F Чтение сектора.
101MSEC0 #A0 - #BF Запись сектора.
11000E00 #C0, #C4 Чтение адреса.
11100E00 #E0, #E4 Чтение дорожки.
11110E00 #F0, #F4 Запись дорожки.
1101IIII #D0 - #DF Принудительное прерывание.
Флаговые биты:
RR - скорость позиционирования головки:
╔══І══І═════╗
║R1│R0│T шаг║
╟──┼──┼─────Є
║ 0│ 0│ 6 мс║
║ 0│ 1│12 мс║
║ 1│ 0│20 мс║
║ 1│ 1│30 мс║
╚══╧══╧═════ў
Эта таблица справедлива при тактовой частоте 1 мГц. При сигнале TEST=0 период
равен около 400 мс и не меняется.
V - проверка номера дорожки после позиционирования. H - загрузка головки.
T - изменение номера дорожки в регистре дорожки после каждого
шага.
A - тип адресной метки (0 - #FB, 1 - #F8). C - проверка номера стороны диска
при идентификации индексной
области.
E - задержка после загрузки головки на 30 мс. S - сторона диска.
M - мультисекторная операция.
I - условие прерывания:
I0 - по переходу привода в состояние "готов".
I1 - по переходу привода в состояние "не готов".
I2 - по индексному импульсу.
I3 - немедленно.
Команда "восстановление" осуществляет позиционирование на до- pожку 0. Если
через 256 шагов сигнал TR00 не появится, то коман-
да прекращает работу. Всегда выполняется при сбросе контроллера
независимо от готовности дисковода.
Команда "поиск" - в регистре дорожки должен находиться текущий
номер дорожки, а в регистре данных - требуемый. Перемещение го-
ловки происходит до их совпадения.
Команда "шаг" продвигает головку на 1 шаг. аправление устанав-
ливается командами "вперед" и "назад".
Команда "чтение сектора" читает с текущей дорожки сектор, номер которого задан
в регистре сектора. Сторона диска задается флагом
S (0, 1). При установленном флаге M читаются все сектора до кон- ца дорожки.
Флаг A - тип адресной метки: при A=1 - #F8, стирание сектора разрешено; при A=0
- #FB, стирание запрещено. Вначале читается идентификатор сектора; если таковой
не найден, то в ре- гистре состояния устанавливается флаг "массив не найден".
Иначе если совпали номера дорожки, стороны, сектора и контрольная сум-
ма, то то происходит чтение данных: очередной байт выдается в регистр данных и
сопровождается сигналом DRQ. Байт должен быть считан из регистра данных до
появление следующего, иначе в ре- гистре состояния устанавливается флаг "потеря
данных". В конце чтения проверяется контрольная сумма и если она не совпадает,
то в регистре состояния устанавливается флаг "ошибка в контрольной сумме". При
этом мультисекторная операция прекращается.
Команда "запись сектора" в части идентификации сектора выполня- ется подобно
предыдущей. Сигнал DRQ появляется при запросе пер- вого байта данных. Затем
вычисляются 22 байта для двойной плот-
ности (для одинарной 11) - пробел между индексной областью и
данными. После этого, если регистр данных получил байт, выдается строб записи и
записываются данные, начиная с нулевых байтов и
адресной метки. Регистр данных должен получать очередной байт в ответ на каждый
сигнал DRQ со скоростью записи. Если байт не по-
лучен, то в регистре состояния устанавливается бит "потеря дан-
ных", а на диск записывается байт 0. После данных записывается контрольная
сумма и байт - пробел. Сигнал WSTB устанавливается в 0.
Пока, с пачкой вишезов, Pavel Fedin.