2024年4月、MT-DOS 4.0のbeta版とMS-DOS 4.01のソースコードが公開。 そのアーカイブにはビルド用にMASM 5.1とMS-C 5.1も含まれていた。 というわけで、こいつを使い倒そうという企画です。 ★概要 v4.0/TOOLS/ の中にそれらがあります。 ★何が無いか 製品版と比較して、無いものを抽出しました。 DOSコールライブラリやサンプルプログラム等は除いています。 [MS-C 5.1 または MASM 5.1にあるもの] ・OS/2用インクルードファイル (MASMにもあります) ・Codeview デバッガ ・M エディタと関連ユーティリティ ・OS/2用ユーティリティ ・EXEHDR, ERROUT [MS-C 5.1にあるもの] ・OS/2用コンパイラ・ライブラリ他 ・87ライブラリ (nLIBF7.LIB, 87.LIB) ・Altmathライブラリ (nLIBFA.LIB) ・EMOEM.ASM [MASM 5.1にあるもの] ・OS/2用MASM, LINK他 ・CREF ★MASM, MS-Cのコンポーネントでないもの TOOLSフォルダにはMASM, MSC以外のツールも含まれています。 [著作権表示にIBMとあるもの] ・ASC2HLP ・DBOF [DOSの一部と思われるもの] ・ATTRIB ・EXE2BIN ←よく使う [DOSのビルド用と思われるもの] ・COMPRESS ←よくわからない ・EXEFIX ←EXEMODと似ている ・BUILDIDX, BUILDMSG ・MENUBLD, NOSRVBLD ★PC-9800シリーズで使う際の注意点 MS-Cのライブラリ (nLIBCE.LIB)はPC/AT機用に作られており、 PC-9800シリーズには対応していません。 残念ながらnLIBCE.LIBは動かないので捨ててください。 nLIBCE.LIBは以下のライブラリが組み合わさっており、 セットアップ時にユーザがリンクして作る仕様になっています。 nLIBCE = nLIBCR + LIBH + EM + nLIBFP (幸いな事に4つ全てがLIBフォルダ内に収録されています) このうち差し替えが必要なライブラリはEM.LIBです。 EM.LIBはEM.OBJとEMOEM.OBJで構成されたライブラリで、 EMOEM.OBJを差し替える必要があります。 ★EMOEMについて 端的に説明すると、8087の割込ハンドラが定義されています。 このEMOEMは以下の製品で使用されており、ユーザが変えられるよう EMOEM.ASMが添付されています。 ・Microsoft C 3.0以降 ・Microsoft FORTRAN 3.3以降 ・Microsoft Pascal 3.3以降 以下の製品ではEMOEM.ASMが添付されていませんが、 変更済のEMOEMが組み込まれています。 ・Microsoft Quick Basic 4.2 / 4.5 (BCOM4xE.LIB) ・Microsoft Quick C 1.1 / 2.0 (EM.LIB) QB4.2, QB4.5, QC1.1, QC2.0のEMOEMは4つ全て同じ内容でした。 Quick系のEMOEMは8087/80287両用です。 (逆アセンブルした上で使用上問題ない事を確認済) ----- EMOEMモジュールにはi8259のI/OアドレスやEOIコマンドが記載されたテーブルが ありますが、PC/AT用のEMOEMでは一部処理が省略されています。 なので、バイナリエディタでテーブルを書き換える技を使うことはできず、 どこかからEMOEMを調達してくる必要があります。 1. PC98用に販売されたMS-C, MS-FORTRAN, MS-PascalのEMOEMを使う ※PC98用EMOEMが添付されている。ただし中古では滅多に見かけない。 2. 入手しやすいPC98用Quick CまたはQuick Basicから抽出する ※LIB EM*EMOEM または LIB BCOM4xE*EMOEM で抽出できます 3. どこかからEMOEM.ASMを入手してカスタマイズする EMOEM.ASM内に以下の行があると思います。 ;NEC APC3 and PC-9801 (OEM number returned by NEC MS-DOS's is different) ;oem oeminfo <000h,016h,000h,008h,066h,000h,067h,00Ah,0BFh,002h,07Fh> ここのコメントアウトを外してコンパイルをするとPC-9801用になります。 ただし8087用のテーブルで、80287以降の環境では使用する事ができません。 80287以降の環境では次のテーブルを使用します。 oem oeminfo <000h,010h,000h,008h,060h,000h,067h,00Ah,0FEh,002h,07Fh> ★EMOEMを適用する 1. EMOEM.ASMをコンパイルする。 MASM -DOEM -R EMOEM.ASM など 古い製品では MASM EMOEM/R など EMOEMのコメントに書いてあると思います。 2.ライブラリのEMOEM.OBJを差し替える LIB EM-+EMOEM,, など 3.ライブラリをつくる LIB CLIBCR.LIB+LIBH.LIB+EM.LIB+CLIBFP.LIB,,CLIBCE.LIB など 必ずこの順番にライブラリを指定する |