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одолжение следует...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября