Доброго времени дорогие друзья !
Поковырялся сегодня в версии ASC которая адекватно реагирует на команду 9, а теперь еще и 8 (добавил еще одну проверку),... Там все просто, с адреса 4100H (смещение 4000 в HEX редакторе) дописан следующий код :
Код:
org 04100H
;
di
lxi h, 00080H
mov a, m
cpi 039H
jz GO
cpi 038H
jz GO
jmp L4149
GO:
lxi d, 04181H
L410D:
mov a, m
stax d
inx h
inx d
ana a
jnz L410D
xchg
mvi m, 00DH
dcx h
mvi m, 00DH
inx h
inx h
mvi m, 000H
mvi a, 004H
sta 4180h
mvi a, 085H
sta 4200h
lxi h, 4180h
shld 4201h
mvi c, 032H
lxi d, 4200h
call 0005h
ei
hlt
lxi d, 04280H
mvi c, 00AH
call 0005h
mvi a, 002H
sta 297Ch
jmp 0100h
L4149:
jmp 0005h
;
Адресс ссылки на эту подпрограмму вписан вместо адреса системного вызова CALL 0005H по смещению 395F в HEX редакторе.
Но, под mdos3.1 и FH51 - это прекрасно работает, а вот под T72 выполняет последний в коде CALL 0005h и уже не возвращается на строчку mvi a, 002H. При этом, набранная в командной строке команда выполняется, то есть переданная системе команда сформированная в системном буфере по адр. 4180H вполне передается и воспринимается системой, но после выполнения иногда на экране наблюдается какой то кратковременный выброс пискелей, иногда не наблюдается, и после появляется курсор ">_" без буквы диска, знак подчеркивания мигает, нет управления клавишами, но реакция системы в виде звуков на нажатие есть. И вернуть ситему к жизни может только "блк+сбр", после нажатия "блк+сбр" в следующей строке появляется курсор с текущим диском "A>_" и система продолжает работать с штатном режиме.... А в mdos3.1 и FH51 подпрограмма в итоге после выполнения команды 9 A:X или 8 - запускается заново с 100H. На вскидку определить в чем проблема у меня не получилось, знания системных вызовов мои оставляют желать лучшего. По идее, это же не должно сильно отличаться в разных системах... Я пытался это все пролистать в отладчике эмулятора, но толку от этого немного, несколько миллионнов операций просмотреть и понять что там происходит для меня пока сложно .. ))) Я продолжу в целом, но думаю, наверняка среди вас все гораздо лучше меня разбираются в системных вызовах микродоса... Может глянете, почему такой эффект ?
Еще, не могу понять, что за запрос с параметром 32H в регистре C? По крайей мере в стандартном описании системных функций CP\M я такой функции не нашел, 28H последняя... Может это какая то специальная функция, имеющая место быть только в microdos3.1 и FH51, которая делает возможным такой финт... Хотя эта функция выполняется и в T72...
Вариант в целом кривоватый,... но, позволяет, не выходя и заходя из менеджера файлов перемонтировать диск,.. и тестировать и форматировать квазидиск, в целом, на данном этапе это более чем достаточно.