Grand, В общем разобрался в чём ошибка. Косвенно правы и вы и я. Ошибка таки сидит в функциях 5/6. В переменную, в которой сохраняется размер сектора в байтах, для дальнейшей переброски из буфера в память пользователя, во время позиционирования головки на заданную дорожку, читается 6 байт заголовка сектора диска, и вот как раз последние два байта заголовка попадают на эту переменную. В итоге там может оказаться любое значение вместо стандартной длины 256 байт, и как результат после чтения сектора, во время переброски из буфера, может скопироваться куда больший объем данных, и они затирают и 8ю страницу, и может попасть в том числе и на экран.
Пофиксим.
Попутно нашел в 8й функции еще одну ошибку: нельзя что бы буфер (вернее конец его начиная от +#E1) попадал на память выше #C000, фатального конечно ничего не случится, но диск будет определен неверно.




Ответить с цитированием