DOSVAXJ3で表示がおかしくなっていたので差し替えました。
落とされた方はお手数ですが差し替え版を再度落としてください。
ご指摘ありがとうございます。>@takapyuさん
原因は エミュの機種チェックルーチンでした。
元は
/* VTDOS 0/ MSDOS Playr 1/ DOSVAXJ3 2 check */
dos_check(void)
{
_asm_c(
"\n\tMOV\tAX,7476H"
"\n\tMOV\tBX,0000H"
"\n\tINT\t2FH"
"\n\tRET"
);
}
こんなルーチンを作り
if ( emu_check()==1) {
このようにあちこちで呼んでいましたが、このルーチンはVTDOSでは 返り値が 118
となって VTDOSを終了させられないので
_asm_c(
"\n\tMOV\tAX,7476H"
"\n\tMOV\tBX,0000H"
"\n\tMOV\tCX,6F64H"
"\n\tMOV\tDX,0073H"
"\n\tINT\t2FH"
"\n\tRET"
このようにしたら VTDOSでの返り値が 0 になったのでこのままアップしたのでした。
どうやら追加した CXや DXの値がデータアドレスなどを狂わせてしまったようです。
なのでさらに
_asm_c(
"\n\tPUSH\tCX"
"\n\tPUSH\tDX"
"\n\tMOV\tAX,7476H"
"\n\tMOV\tBX,0000H"
"\n\tMOV\tCX,6F64H"
"\n\tMOV\tDX,0073H"
"\n\tINT\t2FH"
"\n\tPOP\tDX"
"\n\tPOP\tCX"
"\n\tRET"
このようにプッシュポップを追加しました。あと、あちこちで呼ぶのも良くないので
メインルーチン冒頭でだけ
emu_mode=0;
emu_mode=emu_check();
if ( emu_mode==0) {
printf("VTDOSでは使用できません\n");
exit(0);
}
このように呼んで、あとは
if ( emu_mode==0) {
に変更してやっとうまく動くようになりました。
私は C言語などよくわからないのでこのように泥縄でやっております。