aav8 wrote:SAA wrote:
Не перехватывается черт возьми, такое ощущение что прежде чем уйти в BDOS из Си CP/M восстанавливает эти вектора.
Си возвращает управление CP/M через холодный старт,
при этом восстанавливаются все вектора и точки входа.
Это в случае выхода из программы штатно, я же вываливаюсь из нее из процедуры сообщения об ошибке, которую пытаюсь перехватить. Вываливаюсь кстати в полном согласии с руководством, в котором написано что после нажатия CR получите WarmBoot! Не холодный старт! Да после этого с огромной вероятностью все перехваты будут восстановлены, я это понимаю. Но я то пытаюсь перехватится до получения сообщения об ошибке подменяя вектор входа в него. Я подразумевал, что у меня ощущения что CP/M как только Си производит выход в BDOS по функции selectdisk восстанавливает все вектора, которые я заменил. Я же до Вашей "наводки" пытался перехватить WarmBoot так же безуспешно!
aav8 wrote:
Да и обработчики ошибок должны указывать на какое-то место в программе.
Я же прям кусок кода на Си привел на то куда он указывает, вот еще развернутей
*((short*) (*bdosbase + 5)) = (short) HookErrSelectDisk;
if(bdos(0x0E, Drive) != 0){
Я вижу на экране сообщение об ошибке, которого не должен видеть так как заменил только что вектор этого входа!
aav8 wrote:А если программа завершилась - куда-чего должно указывать?
Программа то завершается только
а) не запланировано
б) при помощи WarmBoot