8086 コードが出せるコンパイラ

uPD70116 をつけるボードが完成しつつあるので、今後のことも考えて 8086 からSDカードを読めるようにしておかなければならない。ということで 2011 年なのにセグメントに悩ませる時代遅れの C コンパイラを探すことになった。

LSI-C86 試食版

DOS 時代からあるフリーコンパイラの先駆者といったところ。91 年から更新されていない DOS 向け C コンパイラなので Windows7 では簡単には動かないらしい。手元は XP なので、そのまま rxvt から動かすことが出来た。

このコンパイラは Visual C と同じで C89 準拠なので自分がよく使う C99 のコードではエラーがでてしまう。

  • // でのコメントが使えない
  • 関数での途中変数宣言も使えない
  • stdint.h なんてねーよ
  • const はなんとか通るようだ
  • static inline は駄目だった

ここまでは想定していたのだが、それ以前の場所でこける。

最近の Windows アプリは基本的にディレクトリの区切りには / を通しても動いてくれるんでカルチャーショックというやつ。ファイル名の文字数は、どうしましょうね。

良い点もちゃんとあって、文書が日本語でついてるし、ROM 化もできるらしい。オプションも GCC に似ているし、潜在的な(使い方を忘れた)ユーザーが多いこともよいことであろう。

Open Watcom

2002 年に止まったC, C++コンパイラでみてたらどうも 8086 コードが出せることが判明。C99 にも対応しているらしい。というわけで、試してみた。

  • // でのコメントが使える!
  • 関数での途中変数宣言も使えない \(^o^)/
  • stdint.h があるではないか
  • const も大丈夫そうだ

途中変数宣言が使えないんじゃあんま変わんないんじゃないのという。

  • (確認していないがおそらく) ファイル名の文字数はロングファイル名がいけるはず
  • コマンドラインでのディレクトリの区切りは \ で渡せねばならない

まだ調べはじめたばかりなので、ROM 化などは不明。アセンブラソースが直接吐けないのでビルド済みオブジェクトから dump せねばならない。

wikipedia を見ると書いてあった。

Open Watcom C compilerは標準のうち最もよく使われている部分を実装している。ただ、これらはドキュメント化されていないコマンドラインスイッチを指定しないと有効化されない[2]。

いけるか?

総評

あっちがたってこっちが立たない。そんなに複雑なプログラムを書くわけではないので様子見が必要であろう。