DDKからMASMとMS-Cを取り出す

以前マイクロソフトが無償配布していたWindows Server 2003 SP1 DDKからMASM5.1とMASM7とMS-C 8が取り出せるとのことなので試してみました。

MASM5.1は16ビットアプリケーションでした。
MS-C 8とMASM7は32ビットアプリケーションでした。

## Windows Server 2003 SP1 DDK の入手

Windows Server 2003 SP1 DDKは2008年ごろ、マイクロソフトからISOファイル 1830_usa_ddk.iso を無償で入手することができました。

ちなみにDDKとは、Driver Development Kitのことでデバイスドライバを開発するためのソフトウェアです。

Windows Server 2003 SP1 DDK の配布ページのURL https://www.microsoft.com/japan/whdc/DevTools/ddk/default.mspx でした。
2020年現在はアクセスできませんが、そのURLをweb archiveで調べると、保存されていました。
http://web.archive.org/web/20080213193656/https://www.microsoft.com/japan/whdc/DevTools/ddk/default.mspx
幸運にも、DDKのISOファイルも保存されていました。
http://web.archive.org/web/20111222012852/http://download.microsoft.com/download/9/0/f/90f019ac-8243-48d3-91cf-81fc4093ecfd/1830_usa_ddk.iso


# MASM 5.1 を取り出す

1830_usa_ddk.iso をマウントします。
common\d16bebin.cabからmasm.exe を取り出します。(7-Zzipを使いました。)
このmasm.exeは16ビットアプリケーションなので、Windows10のコマンドプロンプトでは動作しません。

DOSのエミュレータDOSBoxを使うと動作しました。

![masm510a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42120/2185b51d-8881-178c-677d-169817da72ee.png)


# MASM 7.10.4035を取り出す

1830_usa_ddk.iso をマウントします。
common\X86dBINS.cabから X86dBINS_FILE_19を取り出します。(7-Zipを使いました。)
X86dBINS_FILE_19をml.exeにリネームします。
このファイルはwin32アプリなのでWindows10のコマンドプロンプトでうごきました。

```
C:\DOS>ml.exe
Microsoft (R) Macro Assembler Version 7.10.4035
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: ML [ options ] filelist [ /link linkoptions]
Run "ML /help" or "ML /?" for more info
```

# Microsoft C 8.0cを取り出す

1830_usa_ddk.iso をマウントします。
c:\MSCにインストールするとします。

C: ドライブに\MSC\include ディレクトリを作ります。
C:\msc\include ディレクトリに d16beinc.cab ファイルを展開します。(7-Zzipを使いました。)

C: ドライブに \MSC\include\sys ディレクトリを作ります。
sys_locking.h, sys_stat.h, sys_timeb.h, sys_types.h, sys_utime.h の
ファイルを \MSC\include\sys ディレクトリに移動させて、ファイル名から
sys_ の部分を取り除きます。

C: ドライブに \MSC\lib ディレクトリを作ります。
C:\msc\lib ディレクトリに d16belib.cab ファイルを展開します。(7-Zzipを使いました。)

C: ドライブに \MSC\bin ディレクトリを作ります。
C:\MSC\bin ディレクトリに d16bebin.cab からcl.exe cl.err cl.def cl.msg c13216.exe link.exe q23.exeを取り出します。(7-Zzipを使いました。)

MS-C8はWin32アプリなので、Windows10のコマンドプロンプトで動作しました。

コマンドプロンプト起動後に環境変数の設定をします。

```
SET PATH=%PATH%;C:\msc\bin
SET INCLUDE=C:\msc\include
SET LIB=C:\msc\lib
```

hello.c をコンパイルしてみました。

```
C:\MSC>more hello.c
#include <stdio.h>

int main(void) {
    printf("hello world\n");
    return 0;
}

C:\MSC>cl hello.c
Microsoft (R) C/C++ Optimizing Compiler Version 8.00c
Copyright (c) Microsoft Corp 1984-1993. All rights reserved.

hello.c

Microsoft (R) Segmented Executable Linker NTGroup Version 5.60.220 Dec 28 1999
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.

Object Modules [.obj]: hello.obj
Run File [hello.exe]: "hello.exe" /noi
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]: ;
```

できあがったhello.exeは16ビットアプリケーションなのでDOSBoxで実行すると動きました。

![doshello.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42120/649a1309-ba58-9cf5-ad4a-7116cb07877a.png)

c13216.exeとq23.exeにはPhar Lap Softwareのコピーライトが含まれているので640KB以上のメモリを使うためのソフトウェアっぽいです。

# 参考にしたページ

* http://junk.s21.xrea.com/dos_tool.html
* http://tamaneko.world.coocan.jp/bbs/wforum.cgi?mode=allread&fsize=&no=3398