union REGS inreg;などをVS2005ではそう表現する?

[戻る]
ちゃまいえ 2009/08/14(金) 12:45:54
昔のLatticeのCでは、
union REGS inregs;
union REGS outregs;
struct SREGS segregs;

とか言う表現がいっぱい出てくる。
でも、今のVC++6とか
VS2005では、
REGSとか
SREGS自体が
UNKNOWN;
このinregs
とかoutregs
はコードの中で
どんどん出てくるし、
上記の3行をどう書き換えたらいいのだろう?

ちゃまいえ 2009/08/14(金) 15:26:03
タイトルですが、
“union REGS inreg;などをVS2005ではどう表現する?”
の間違いでした。

どなたかわかる方がいらっしゃたら、
よろしくお願いします。

かつて、
MS DOS上でのLATTIC C(Ver3.0)
では
union REGS inregs;
union REGS outregs;
struct SREGS segregs;
と言う定義が、ソースの頭の部分で使われていたようです。

VS2005に、そのコードをじかに持って来ると、
ここの部分でエラーが出るので、
3つとも消してしまうと、
今度は、ソースの中の
segread(&segregs);
seg_adrs = segregs.ds;
segregs.ds += (((int)parameters >> 4) & 0xfff) + 1;
などと言う部分が通らなくなってしまいます。
(segreadやseg_adrsなどの関数定義もされていなければ、
 inregsとかoutregsとかsegregsというパラメータ定義も見つかっていないせい)

これらの部分、
VC++6用やVS2005用に、どう書き換えればいいのでしょうか?

tetrapod 2009/08/14(金) 16:14:37
それはおそらく 16bit の頃の BIOS 呼び出し MS-DOS 呼び出し手順だと思われる。
Windows では BIOS や MS-DOS の呼び出しは原理的に不可能なので、意味がない。

同じ処理に相当する API を呼び出すよう、全面的に書き直すしかないよ。

ちゃまいえ 2009/08/15(土) 14:05:16
さっそくのお返事ありがとうございます。

ただ、
確かに、VS2005とかV++6のモードだと、
WINSDOWSからAPIを呼び出すモード
(mainはWinmainになりますよね)
が主流ですが、
設定によっては、
(LINKのシステムでしたっけ)
コンソールでのモードででも
使えるので、
今、こっちで動かす形で
マイナーチェンジで何とかならないかなあ、と考えているのですが。

甘いでしょうか。

tetrapod 2009/08/15(土) 15:53:14
なんともならんです。書き換えるしか手段はないです。
コンソールアプリケーションであっても Win32 配下で動作するので
その昔の 16bit 専用機能は今の Win32 (Windows) では原理的に使えない。

特定 CPU 固有の機能を使っているアセンブラソフトを別 CPU に移植する
のと同じこと、といえばあきらめもつくかしらん。

ちゃまいえ 2009/08/22(土) 11:23:57
[[解決]]
みなさん

いろいろアドバイスいただきありがとうございました。

ゴリゴリインプットしましたが、
書きなおします。

古いスレッドには追加発言できません。