直線上に配置

MS-DOS 4.01のソースコードにある
MASM 5.1とMS-C 5.1

直線上に配置
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 など
必ずこの順番にライブラリを指定する

直線上に配置

トップ アイコン