Попробовал недокументированную функцию форматирования дорожки в формате IBM с индексными маркерами 0xC2. Функция эта присутствует в КМД с прошивками -092, -093* и -255, в -091 её нет. Отформатировалось все нормально, но вот с чтением первого сектора проблема. Эта проблема есть в прошивке -091, но в более поздних её убрали. Вот кусок кода из прошивки:
Как видно из кода, если активна линия ИНДЕКС, то в качестве счетчика ожидания при поиске маркера используется значение 0764, если неактивна, то 024. Это нужно потому, что если попали на синхрозону перед индексным маркером 0xC2, то надо пропустить оставшиеся нули, 4 байта самого маркера, 50 байт промежутка и 12 байт синхрозоны перед заголовком первого сектора.Код:; Удостоверение в том, что попали на синхрозону 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
Patron, хотелось бы узнать, какова длина ИНДЕКСА, сколько байт с начала дорожки. Соответственно, в чем проблема - линия ИНДЕКС уже неактивна в этой проверке, или значения 0764 слишком мало для ожидания.
Во вложении программа форматирования диска в формате IBM, ну и сам образ диска.




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

