[HOME]  [全部表示 会議室風]  [全部表示 保存用]  [リストへもどる]

一括表示

  百人一首 for DOS/V 改変版 2026-07-07 - konno 26/07/07-22:59 No.12825
  ┗ Re: 百人一首 for DOS/V 改変版 差替え - konno 26/07/08-22:40 No.12826
(12825) 12825百人一首 for DOS/V 改変版 2026-07-07  投稿者:konno   2026/07/07(火) 22:59
   コメント数 1

百人一首 for DOS/V 改変版 2026-07-07版です。
オリジナル Copyright (c) 電子情報研究所 1994 / 開発:皆木 慎吾
https://www.minagi.jp/1997/12/13/carta111/

・ VTDOSは起動直後に固まりエラーログを無限に吐くので終了するようにしました
・ CPU負荷が高いので負荷低減の INT28h を追加
・ MSDOS Player で表示に問題有るので表示関連調整(疑似テキストモード?)
・ 正解/不正解を色分けして見やすくした
・ マウスの位置調整を変え、MSDOS PlayerではY移動量倍に
・ 文字長さを揃えるためにデータファイルを改変した
・ 作者の許可を得て改変版ソースも公開します。

 ※バグを見つけたら教えてください。  
ダウンロード #txt:carta_k.zip サイズ 26252bytes  2026-07-07 new!

遊びながら百人一首を覚えられるすばらしいゲームです。
LSICの勉強にもなります。
作者様に感謝。

      - No.12825 -    このTreeへ           [リストへもどる] soft


(12825) 12826Re: 百人一首 for DOS/V 改変版 差替え  投稿者:konno   2026/07/08(水) 22:40
    12825 番 konno さんへのコメント

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言語などよくわからないのでこのように泥縄でやっております。

      - No.12826 -    このTreeへ    コメント元:12825 へ [リストへもどる] pre