union REGS inreg;などをVS2005ではそう表現する? – プログラミング – Home

通知
すべてクリア

[解決済] union REGS inreg;などをVS2005ではそう表現する?


ちゃまいえ
 ちゃまいえ
(@ちゃまいえ)
ゲスト
結合: 19年前
投稿: 33
Topic starter  

昔のLatticeのCでは、
union REGS inregs;
union REGS outregs;
struct SREGS segregs;

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


引用未解決
トピックタグ
ちゃまいえ
 ちゃまいえ
(@ちゃまいえ)
ゲスト
結合: 19年前
投稿: 33
Topic starter  

タイトルですが、
“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
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

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

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


返信引用
ちゃまいえ
 ちゃまいえ
(@ちゃまいえ)
ゲスト
結合: 19年前
投稿: 33
Topic starter  

さっそくのお返事ありがとうございます。

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

甘いでしょうか。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

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

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


返信引用
ちゃまいえ
 ちゃまいえ
(@ちゃまいえ)
ゲスト
結合: 19年前
投稿: 33
Topic starter  

みなさん

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました