| Alex_K |
19th January 2014 21:23 |
Дорожка в формате IBM с маркерами 0xC2
1 Attachment(s)
Попробовал недокументированную функцию форматирования дорожки в формате IBM с индексными маркерами 0xC2. Функция эта присутствует в КМД с прошивками -092, -093* и -255, в -091 её нет. Отформатировалось все нормально, но вот с чтением первого сектора проблема. Эта проблема есть в прошивке -091, но в более поздних её убрали. Вот кусок кода из прошивки:
Code:
; Удостоверение в том, что попали на синхрозону
7014$: MOV #3,32(R3) ; Счетчик для удостоверения
7022$: MOV @R5,R0 ; Считанное слово равно нулю?
BEQ 7032$ ; Да
INC R0 ; Считанное слово равно 177777?
BNE 7066$ ; Нет - не синхрозона
7032$: DEC 32(R3) ; Уменьшить счетчик
BNE 7022$ ; Продолжаем дальше
; Поиск и ожидание маркера
CALL 7220$ ; Дать команду на поиск маркера
MOV #24,R0 ; R0 = счетчик ожидания маркера
TST @R4 ; Линия ИНДЕКС активна?
BPL 7060$ ; Нет
MOV #764,R0 ; R0 = счетчик ожидания для первого сектора
7060$: TSTB @R4 ; Маркер найден?
BMI 7074$ ; Да
SOB R0,7060$ ; Цикл ожидания маркера
; Маркер не найден - на поиск нулей
7066$: TST @R4 ; Линия индекс активна?
BPL 6664$ ; На пропуск нулей при неактивном ИНДЕКСЕ
BR 6756$ ; На пропуск нулей при активном ИНДЕКСЕ
; Определение типа найденного маркера
7074$: TST @R5 ; Пропустить 0xA1A1
Как видно из кода, если активна линия ИНДЕКС, то в качестве счетчика ожидания при поиске маркера используется значение 0764, если неактивна, то 024. Это нужно потому, что если попали на синхрозону перед индексным маркером 0xC2, то надо пропустить оставшиеся нули, 4 байта самого маркера, 50 байт промежутка и 12 байт синхрозоны перед заголовком первого сектора.
Patron, хотелось бы узнать, какова длина ИНДЕКСА, сколько байт с начала дорожки. Соответственно, в чем проблема - линия ИНДЕКС уже неактивна в этой проверке, или значения 0764 слишком мало для ожидания.
Во вложении программа форматирования диска в формате IBM, ну и сам образ диска.
|