
No.2ベストアンサー
- 回答日時:
Q1:PC98xxと所謂DOS/Vは別物です。
PC98xxのソフトは本来PC98xx上で使うためのものです。(MS-DOSだけでなく)WindowsもPC98xx用という専用版がありましたが、それもWindows 2000迄です。
DOS/V機上で動くWindowsではMS-DOS互換といってもそれはDOS/V版MS-DOSであって、
PC98xx版MS-DOSとは違います。PC98xx互換で動くには、PC98xx版Windowsが必要ですが、XPはPC98xxに対応してません。
つまり、この方向性では無理ということです。
エミュレータは世にありますし、それを使う手があると思いますが、
動作するかどうかは使いたいソフトウェア次第です。
(当時のソフトの移植性は、個別に考えるしかありません)
Q2:ソースがあるなら、Visual Studio 2008等が無料で入手できますので、
ISO/IEC14882の範囲で可搬的に書いてあれば
Win32 Console applicationとして移植するのが早いかも知れません。
(当時はやむをえないものも含め)可搬性が低いのは、例えばこういうのです。
・ポインタサイズに直接依存している
・ハードウェアに依存してる(例えばVRAMでグラフィックを描いている。マウスを制御している等)
・MS-DOSのシステムコール(int 21等)を直接利用している
・表示にエスケープシーケンスを利用してる(conio.h等)
・インラインアセンブリで特権命令を用いている
・…
# MS-DOSとあるのでWindows APIは(Win16も含め)利用してないはず。
こんにちは。
御回答、ありがとうございまいた。
「Win32 Console application」等、色々用語があって、さらに調査する手がかりになりました。
また質問すると思いますので、その時はよろしくお願いいたします。
No.4
- 回答日時:
動けばもうけもの
ぐらいに考えてください。
まず、PC-98がいわゆるIBM-PCとは異なる独自規格です。
この段階で既に怪しいです。
また、MS-DOSも引っ掛かります。
MS-DOSの時代はアプリケーションが自由に周辺機器を制御できていました。
Windows95系ではそれをエミュレーションしていましたが、
NT系(2000/XP/Vista)
ではエミュレーションを止めてしまいました。
専用の"ドライバ"が必要になりました。
ま、それだけでしたら
周辺機器を制御している部分を探して
ドライバを作り
ドライバ経由でアクセスするよう
移植すればよいのです。
(といっても、結構大変ですが)
たちの悪いのは
MS-DOSがシングル・タスクであることを利用してしまった
プログラムです。
特に、ゲームや機器制御に多いのですが
例えば
for (i = 0; i < 65535;++i)
;
などとやって、消費クロック数を計測し
タイミング制御に利用したりするプログラムを
MS-DOSでは当たり前に見かけます。
アプリがCPUを独占できた時代の技です。
MS-DOSの時代はこの手で
例えば
10msec毎に信号をON/OFFする
などということを実装していました。
Windowsでは話はそう単純ではありません。
10msecの間"眠る"には
Sleep(10)
でできそうですが
正確には
10msec以上眠るの意味で
目を覚ますのは
10ms後かもしれないし、11ms後かも知れない。
極端な話
”100ms眠り続けても文句はいうな”
という仕様です。
Win32APIの段階で"正確に"10msを待つ方法はありません。
どうしても正確性が必要なら
外部クロックの割り込みに頼るしかありません。
このようなコードがあったら
如何にソースがC++で書かれていてもお手上げです。
移植は大変なものになるでしょう。
結局安心できるのは
Cの標準関数やSTLなどANSI規格の範囲で
書かれたものだけです。
これなら
16ビット ==> 32ビットへの対応をするだけです。
int a[10]
の大きさを正しく
sizeof (a)
で計算していれば安心ですが
手抜きで
20バイト決め打ちだったりしていると
問題を引き起こす可能性があります
ex
int a[10]
memset(a, 0, 20)
XPでは後半が0で埋まっていない
DOSでは問題ない
memset(a, 0, sizeof (a))
DOSでもXPでも配列全体が0で埋まる
こういうのがないかチェックする必要があります。
こんにちは。
御回答、ありがとうございまいた。
具体的な内容で、今からソースを見ていくのですが、大変参考になります。
また質問すると思いますので、その時はよろしくお願いいたします。
No.1
- 回答日時:
PC98のMS-DOSという事は16bitのAPであると推測します。
WindowsXPは32bitであり完全互換はありません。Windows95等の16bitのOSの場合は多少の互換があり、互換モードも備えていました。
WindowsXP上で動作させる場合は16bitのアプリケーションを動作させるエミュレーションプログラムが必要になります。申し訳ありませんがその様な物が現時点で存在するかは分かりません。(詳しい方がいればお願いします。)
移植についてですが、WindowsAPIを利用しているのであれば少なくともその部分は書き換えが必要です。
こんにちは。
御回答、ありがとうございまいた。
エミュレータで「T98-Next」というのを見つけ、現行のソフトをこれで動作させようと思っています。
また質問すると思いますので、その時はよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PLC間の信号のやりとりについて...
-
USBからの電源供給をコントロー...
-
Matlab
-
シーケンスのプログラムについ...
-
マイコンボード上のポートと端...
-
ディスプレイ上で起こる2重表...
-
電子基板に直接固めたICの名称
-
基板の内層配線の浮遊容量につ...
-
目を左右別々に動かす
-
[PC] HDMI-DVI(DualLink対応)変...
-
新しくNUROを引いたらlot機器や...
-
HDMI接続のパソコン液晶モニタ...
-
「かりん」を数字で表すとした...
-
ゲーミングPCでの質問です ゲー...
-
HDMIとHDの違いはなんですか? ...
-
HyperVで仮想マシンがネットワ...
-
ワークグループとドメインの共存
-
IPアドレスの範囲が重複するネ...
-
VPN環境でのARPテーブルの情報...
-
はんだ揚りってなんでしょう。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PLC間の信号のやりとりについて...
-
USBからの電源供給をコントロー...
-
Picマイコンについて質問します...
-
C++でLEDを点灯させるプログラム
-
マイコンボード上のポートと端...
-
EnumとType
-
arduinoでミスト機を自作したい
-
マイコンのアセンブラ学習
-
シーケンスのプログラムについ...
-
MFCのシリアル通信でCTS/DSR取得
-
VC++で位相進み補償を行うには?
-
PCのUSBバスパワーの制御
-
VBでUSBポートからの入力を制御...
-
シリアル通信
-
PICの信号について
-
デジタルフォトフレームをただ...
-
PID調節器を用いる制御系につい...
-
マイコンにおけるビット間の干...
-
Borland C++でRTS,DTRを操作できる
-
汎用入出力ポートの制御方法
おすすめ情報