PC-9801でDPMI


MS-DOSは16Bitで動作してますが、DPMI(DOS protected mode interface)という仕組みで32Bitのコードを実行することができました。

PC-9801ではMS-DOS 5.0AからDPMIが入っていました。

ハードディスクは無いのでフロッピーでDPMIが起動できるようにファイルをコピーしてみました。

A>dir

 ドライブ A: のディスクのボリュームラベルはありません.
 ディレクトリは A:\

COMMAND  COM    48402  92-11-11    0:00
HIMEM    SYS    11024  92-11-11    0:00
EMM386   EXE    91742  92-11-11    0:00
CONFIG   BAK      241  21-06-21   19:33
EXTDSWAP SYS    30858  92-11-11    0:00
DPMI     EXE   405566  92-11-11    0:00
DPMI     INI      440  21-06-22    1:40
DPMI     SYS    10591  92-11-11    0:00
CONFIG   SYS      118  21-06-22    0:40
D86MGRH  386    45433  92-11-11    0:00
D86MGRN  386    45945  92-11-11    0:00
DDDH     386    80444  92-11-11    0:00
DDDN     386    80956  92-11-11    0:00
DMCPD    386     9588  92-11-11    0:00
DPDH     386     9322  92-11-11    0:00
DPDN     386     9300  92-11-11    0:00
DPFD     386     9275  92-11-11    0:00
       17 個のファイルがあります.
   243712 バイトが使用可能です.

かろうじてHD 1.2Mフロッピー一枚に納まります

CONFIG.SYSはこうなっています。

FILES=30
SHELL=\COMMAND.COM /P /MSG
DEVICE=HIMEM.SYS
DEVICE=EMM386.EXE /P=352 /UMB /T=EXTDSWAP.SYS
DOS=HIGH,UMB

これでDPMIを起動するとプロテクトモードになります。

JWasmにあったサンプルコードをopen watcom v2でアセンブリしてEXEを作り実機で確認しました。

コードを見ると16bitで実行が始まり途中で32bitに替えているようです。