|
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одолжение следует...
Другие статьи номера:
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3