Блин, опять поднял волну зазря
- - - Добавлено - - -
Вот не хотел я в вашем мдосе копаться, но раз уж назвался груздем...
Проблема тут:
Задаём диск 2В. Исходный номер сектора 0101E6h, делим на 120h (18*16 секторов на дорожке). Процедура L_D8F3 делит 16-битное на 16-битное с остатком. Потом двигаем остаток на 8-бит и берём младшие 8 бит, и снова делим на 16-бит.Код:MOV H, A ; (HL,E) = (A,HL) POP B ; для подчистки стека, загружаем временно в BC CALL L_D9D9 ; проверка готовности НЖМД, получение кода ошибки и RET PUSH B ; возвращаем BC в стек ANI 0C0h ; 1110 0000 CPI 040h ; 0100 0000 устройство готово к операции RNZ ; выход, если не готово DI ; запрет прерываний на время установки параметров PUSH D CALL L_D8F3 ; расчёт номера цилиндра = 00h OUT 055h ; Цилиндр, младшие биты номера цилиндра POP D MOV H, L MOV L, E CALL L_D8F3 ; расчёт номера цилиндра = 00h OUT 054h ; Цилиндр, старшие биты номера цилиндра
Проблема только в том, что остаток 16-битный.
О способе деления я умолчу, он тут работает как задумывалось. Но это тоже мрак.
- - - Добавлено - - -
Получается, выражение "секторов*головок" должно быть <256





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