
Сообщение от
Titus
Интересно, были ли в ходу дискеты для УКНЦ с сектором, размером 1024 байта (5 секторов на дорожке)? Загрузчик в ПЗУ ПП на такие диски рассчитан тоже.
Фиг с них загрузишься. Все дело в том, что драйвер дисковода написан так, чтобы на дискетах с размером сектора 1024 байта, адресный маркер читался только тогда, когда отсутствует индексная метка, поэтому при форматировании на УКНЦ адресная метка первого сектора в дорожке никогда не будет поймана. А вот если отформатировали на PC с индексным маркером, то скорее всего прочтется.
Код:
132656$:MOV #4,R1
CMPB #5,23301 ; Формат 1024 байта в секторе ?
BNE 132702$ ; Нет
TST @R4 ; Присутствует линия индекс ?
BPL 132702$ ; Нет
MOV #36,R1
132702$:MOV @R5,R0 ; Прочесть слово с дискеты
BEQ 132730$ ; Это нуль
INC R0
BEQ 132730$ ; Это минус один
TSTB @#177710 ; Таймер окончил счет
BPL 132656$ ; Нет
CALL 134242$ ; Сбросить готовность таймера
SOB R2,132656$
BR 133002$ ; Ошибка (не найден межсекторный промежуток)
132730$:MOV @R5,R0 ; Прочесть слово с дискеты
BEQ 132740$ ; Это нуль
INC R0
BNE 132640$ ; Это не минус один
132740$:SOB R1,132730$
BIS #400,R3 ; Установить в УС бит поиска заголовка
MOV R3,@R4 ; Начать поиск
BIC #400,R3 ; Сбросить в УС бит поиска заголовка
MOV #226,R0 ; Время ожидания поиска
MOV R3,@R4
132762$:TSTB @R4 ; Маркер заголовка обнаружен ?
BMI 133034$ ; Да
SOB R0,132762$
Собственно в R1 счетчик чтения синхрозоны. Сперва ищется слово 0 или 177777, считается, что поймали синхрозону. Далее в цикле 132730 надо удостоверится, что это синхрозона - по счетчику в R1 считывается регистр данных без учета бита готовности. Так вот при значении 36 в R1 в любом случае выйдем за синхрозону и не сможем поймать адресный маркер первого сектора. А вот если дискета отформатирована на PC с индексной меткой, то сперва будет синхрозона перед индексной меткой, она пропустится, и далее уже поймается синхрозона перед первым сектором, там уже индексное отверстие будет неактивно и первый сектор должен прочесться.