|
City
#11
05 мая 1999 |
|
Ликбез - полное описание и полный дизассемблер ПЗУ (часть 7).

---------------------------------------------------
ЛИКБЕЗ
---------------------------------------------------
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
Порты интерфейса BETA DISC
Для управления интерфейсом BETA DISC используются
порты:
31 - вывод - регистр команд ВГ-93, ввод - регистр
состояния ВГ-93.
63 - регистр дорожки ВГ-93.
95 - регистр сектора ВГ-93.
127 - регистр данных ВГ-93.
255 - вывод - системный регистр, ввод- сигналы DRQ
и INTRQ.
Порт 31.
Регистр команд- самый важный. С помощью его прог-
рамма отдает контроллеру команды на проведение опе-
раций. Микросхема может выполнять 11 команд:
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.
Команда "чтение адреса" считывает 6 байтов первого
попавшегося идентификатора сектора, включая конт-
рольную сумму. Если контрольная сумма не совпадает,
то устанавливается флаг "ошибка в контрольной сум-
ме" и чтение продолжается. При выполнении этой ко-
манды байт из регистра дорожки помещается в регистр
сектора. По окончании как обычно вырабатывается си-
гнал INTRQ и в регистре состояния сбрасывается бит
"занято".
Команда "чтение дорожки" читает всю информацию с
дорожки, включая служебную. При этом не выдается
строб чтения и не проверяются контрольные суммы.
Команда "запись дорожки" предназначена для форма-
тирования дисков. Вся информация, включая пробелы и
поля индексов и данных со всеми метками. Записыва-
ются все байты кроме #F5 - #FE, которые интерпрети-
руются как управляющие адресные метки. Таким обра-
зом при форматировании эти байты не могут быть за-
писаны. Список этих байтов вы видите в таблице:
╔═════════╤═══════════════════════════════════════╗
║ │ Hазначение ║
║ Байт ├────────────────────┬──────────────────╢
║ │ В режиме FM │ В режиме MFM ║
╟─────────┼────────────────────┼──────────────────╢
║ #F5│Не допускается │Запись метки #A1 в║
║ │ │MFM ║
║ │ │Вычисляется конт-║
║ │ │рольная сумма ║
║ #F6│Не допускается │Запись метки #C2 в║
║ │ │MFM ║
║ #F7│Записывается вычисленная контрольная ║
║ │ сумма ║
║#F8 - #FB│Запись #F8 - #FB с Запись #F8 - #FB в ║
║ │CLK=#C7 │MFM ║
║ #FC│Запись #FC с CLK=#D7│Запись #FC в MFM ║
║ │(индексная метка перед первым индексным║
║ │ массивом) ║
║ #FD│Запись #FD с CLK=#FF│Запись #FD в MFM ║
║ #FE│Запись #FE с CLK=#C7│Запись #FE в MFM ║
║ │Вычисляется контроль│ ║
║ │ная сумма │ ║
║ │(индексная метка в начале индексного║
║ │ массива) ║
║ #FF│Запись #FF с CLK=#FF│Запись #FF в MFM ║
╚═════════╧════════════════════╧══════════════════╝
Команда "принудительное прерывание" задается для
завершения любой выполняемой команды. В отличие от
других команд она может выдаваться в любой момент
времени. Условие прерывания зависит от младших би-
тов команды. Если они равны 0, то команда прерыва-
ется и INTRQ не вырабатывается. При I0=1 прерывание
выполняется после перехода сигнала CPRDY из 0 в 1;
при I1=1 - из 1 в 0. При I2=1- по поступлению инде-
ксного импульса. При I3=1 происходит немедленное
прерывание команды. После выполнения этих условий
выдается сигнал INTRQ.
пpодолжение следует...
Другие статьи номера:
Похожие статьи:
В этот день... 16 ноября