Еще попробовал скопировать файл POWERом - тоже заворот
Вид для печати
Еще попробовал скопировать файл POWERом - тоже заворот
И всё-таки проблема с геометрией, конкретно с головками-секторами, т.к. на моих дисках глюка нет. Копаем дальше. :)
- - - Добавлено - - -
Обращение к диску идёт по CHS, просто расчёты ведутся по методу, похожему на LBA. Основное отличие от последнего в битности, LBA использует 28 бит, а Вектор -- 24.
- - - Добавлено - - -
С такой геометрией даже команда "D" даёт заворот.
Насколько я понял код "патча", количество секторов/головок читается из загрузочного сектора (по смещению 80h/81h). То есть параметр в конфиге должен соответствовать образу, т.к. используется CHS. Максимальный номер флоппи-образа должен зависеть от количества дорожек в параметре конфига. Однако природа "заворота" мне до сих пор не ясна.
Заинтересовал код расчёта номера сектора:
Он везде такой или только у Improver-а?Код:LXI H, 0F3BEh ; = 2 - 0622h * 2
MVI A, 0FFh
INX B
LaD96A: LXI D, 00622h ; суммарное количество секторов на одной дискете
DAD D
ACI 000h
DCX B
MOV D, A
MOV A, B
ORA C
MOV A, D
JNZ LaD96A
- - - Добавлено - - -
Вот выкинуть бы всё похожее и сделать нормальные процедуры умножения/деления.
- - - Добавлено - - -
Я так полагаю, кто-то захотел больше 255 образов на винте, но сделал это криво.
В mdos31h так, в rds не так (как в rds - надо искать)
- - - Добавлено - - -
В РДС3 с моей геометрией тоже заворот на дискете 2B (копировал файл POWERом, на 2A заворота нет).
- - - Добавлено - - -
Оказывается в РДС3 практически аналогичный фрагмент, только поменяли ролями DE и BC, поэтому по сигнатуре я сразу не нашел
А если сделать DCR C и выкинуть модификацию D, то заворот останется?
Но указанный фрагмент вроде работает правильно, проблема где-то еще
В общем, пробемка с расчётом номера цилиндра, на дискете 2B вместо "00E4h" получаем "0001h". Возможно есть ограничение (головок*секторов)<256, но это не точно, завтра продолжу поиски...