Japheth さんのサイト
URL: http://www.japheth.de/JWasm.html
オープンソースで各種 OS に対応しています。
ライセンスは、Sybase Open Watcom Public License version 1.0 (原文)です。
JWasm と MASM の互換性については、JWasm 2.02 と MASM の動作の違いを見て
下さい。
ソースファイルを展開します。
> mkdir jwasm201
> cd jwasm201
> unzip ../jwasm201s.zip
GNU make コマンドを使ってコンパイルします。
> gmake -f GccUnix.mak # FreeBSD の場合
> make -f GccUnix.mak # Linux の場合
エル・エス・アイジャパン社のフリーソフトウェア集にて
URL: http://www.lsi-j.co.jp/freesoft/
LSI C-86 3.30c の割り込み処理の例として pit18.c を作ってみました。pit18.c は、
プログラマブル・インターバル・タイマー(PIT: i8254 相当)の割り込み回数を18回数え
るシンプルなプログラムです。コンパイルして
>lcc -O -o pit18.exe pit18.c -ltinymain.obj -lintlib.lib
実行するとこんな感じになります。DOSBoxのようなエミュレータでも動きます。
>PIT18.EXE
PIT 18
PIT 18
pit18.c の割り込み処理の部分は、こんなになっていて
void far pit_count()
{
_asm( "PUSH AX" );
_asm( "PUSH DS" );
_asm( "MOV AX,DGROUP" );
_asm( "MOV DS,AX" );
pitcnt++; /* PIT interrupt count */
_pushf();
(*old_PIT_isr)();
_asm( "POP DS" );
_asm( "POP AX" );
_iret();
}
オプション -S を付けてコンパイルすると pit18.a86 というファイルができて
>lcc -S -O pit18.c
該当する部分は、こんなコードになりました。
pit_count_::
PUSH AX
PUSH DS
MOV AX,DGROUP
MOV DS,AX
INC [pitcnt_].W
pushf
CALLF [old_PIT_isr_].D
POP DS
POP AX
iret
RETF
最後の RETF は不要なんですが、試食版では必ず付いてきます。割り込み処理に影響は
ありませんが、スクリプト等を使って削除するようにした方がいいかもしれません。
もっと複雑な割り込み処理の場合は、iret の前に調整用の POP が必要になりますので、
ご注意を。
<追記> PC-9821のカレンダー時計割り込みの例として cal32.c を作りました。
カレンダー時計(UPD4993A)の割り込み回数を32回数えるシンプルなプログラムです。
2009年 8月に配布を終了したようです。
Turbo Explorer の Turbo C++ の中に入っていました。
URL: http://www.turboexplorer.com/jp/cpp
また、C++ BuilderX Personal (cbx1_personal_windows.zip) でも配布されていました
ので、雑誌等の付録で入手できるかもしれません。
Windows 版ですが、DOS のコードもアセンブルできます。
7-Zip のコマンドライン版を使うと下記のようにして展開できます。
> 7za e -tcab TCPP_EXPL_JP_DL.exe -r Data1.cab
> 7za e -tcab Data1.cab tasm32.exe
cabextract を使うと下記のようにして展開できます。
> cabextract -F Install/Data1.cab TCPP_EXPL_JP_DL.exe
> cabextract -F tasm32.exe Install\Data1.cab
尚、英語版 (TCPP_EXPL_EN_DL.exe) でも同じようにして展開できます。
TASM 5.0 互換の Paradigm Assembler のユーザーズ・ガイド (PDF) です。
Paradigm Assembler User's Guide (968KB)
URL: http://www.phatcode.net/res/308/files/pasmug.pdf
Windows Server 2003 DDK に入っていましたが、現在配布は終了しています。
URL: http://www.microsoft.com/japan/whdc/DevTools/ddk/default.mspx
URL: http://download.microsoft.com/download/9/0/f/ (実際には1行です)
90f019ac-8243-48d3-91cf-81fc4093ecfd/1830_usa_ddk.iso
上記より入手したファイル 1830_usa_ddk.iso を CD-R に焼いたり、仮想ドライブに
して common ディレクトリにあるファイル X86dBINS.cab を取り出します。また、同じ
ディレクトリにある d16bebin.cab, d16beinc.cab, d16belib.cab の3つのファイル
が、MSC 8 と MASM 5.1 の圧縮ファイルで設定等は別途記載します。
圧縮ファイル X86dBINS.cab から下記のようにして展開します。
> expand X86dBINS.cab -F:X86dBINS_FILE_19 .
> ren X86dBINS_FILE_19 ml.exe
尚、DOS のコードをアセンブルするときは、オプションの -omf が必要になります。
Windows Server 2003 DDK に入っていましたが、現在配布は終了しています。
URL: http://www.microsoft.com/japan/whdc/DevTools/ddk/default.mspx
URL: http://download.microsoft.com/download/9/0/f/ (実際には1行です)
90f019ac-8243-48d3-91cf-81fc4093ecfd/1830_usa_ddk.iso
上記より入手したファイル 1830_usa_ddk.iso を CD-R に焼いたり、仮想ドライブに
して common ディレクトリにある d16bebin.cab, d16beinc.cab, d16belib.cab の3
つのファイルを取り出します。また、同じディレクトリにある X86dBINS.cab という
ファイルの中に MASM 7 があります。
C ドライブの \msc ディレクトリにインストールする場合の例です。
1. d16bebin.cab ファイルの展開
C: ドライブに \msc\bin ディレクトリを作ります。
C:\msc\bin ディレクトリに d16bebin.cab ファイルを展開します。
2. d16beinc.cab ファイルの展開
C: ドライブに \msc\include ディレクトリを作ります。
C:\msc\include ディレクトリに d16beinc.cab ファイルを展開します。
C: ドライブに \msc\include\sys ディレクトリを作ります。
sys_locking.h, sys_stat.h, sys_timeb.h, sys_types.h, sys_utime.h の
ファイルを \msc\include\sys ディレクトリに移動させて、ファイル名から
sys_ の部分を取り除きます。
3. d16belib.cab ファイルの展開
C: ドライブに \msc\lib ディレクトリを作ります。
C:\msc\lib ディレクトリに d16belib.cab ファイルを展開します。
環境変数を下記のように設定します。
SET PATH=%PATH%;C:\msc\bin
SET INCLUDE=C:\msc\include
SET LIB=C:\msc\lib
試しにハローワールドをやってみます。
> cl /AT hello.c
> hello.com
Hello, world !!
設定が正しければ正常に表示されるはずです。