MSX(Z80)のセルフコンパイラ


2017.3.30更新

当時のC言語コンパイラはANSI規格に対応しておらずK&Rが普通だったと思います。
ただしHI-TECH CはANSI対応のようです。(いつから対応かは知りません。)
ANSI規格ができたのは1989年ですからそれより前に発売されたC言語コンパイラがANSIに対応しているはずはないし、ANSI対応のコンパイラをまとも動かす能力が8080やZ80の8ビットCPUにあったとは思えません。
K&Rでさえもフル対応が難しかったため、サブセットが普通です。
K&Rを知らない世代の人が当時のK&Rコンパイラを使うのは苦しいかと思います。
K&RのほうがANSIより覚えることは少なく制限がきつく書き方を少し変えるだけではありますが最近のコンパイラでコンパイルするとエラーが出るか警告が出まくるかどちらかなので移植性を考えると使いにくいです。
今現在、Z80またはMSXの開発をC言語でするのならWindowsなどでコンパイルしてZ80/8080のコードを出力するクロスコンパイラのほうがいいかも知れません。
ですが無料のクロスコンパイラのz88dk試して見たら二次元配列にも対応していなくてまだBDS Cのほうがいいと思いました。

BDS C
BDS C公式サイト
別ページに書いたBDS Cの記事
C言語コンパイラです。
ANSI規格ではなくK&Rで、しかもサブセットです。
昔買って愛用していました。
私がMSXを使い続けたのはBDS Cと出会えたからです。
MSX-Cはコンパイル速度が遅くて使い物にならないと判断したのでもしBDS Cと出会えなかったら早い段階でMSXを捨てていたと思います。
MSX-BASICでは実行速度が遅く、マシン語では開発効率が悪すぎましたし、C言語をやりたかったのです。
MSX-DOS版はライフボートから38000円でした。(29800円だったかも知れない)
アセンブラを経由しないで直接マシン語を生成します。
BDS CはCP/M版としては世界的に有名だったと思いますが、日本でのMSX-DOS版は存在そのものがあまり知られておらずあまり流通していなかったと思います。
アスキーがMSX-Cを販売して雑誌広告で積極的に宣伝もしていたのでMSXではMSX-Cのほうが入手しやすく知名度も高かったです。
BDS CのMSX-DOS版の広告など見たことがなく店頭でも長らく見かけませんでした。
秋葉原電気街に通っているうちに奇跡的にある大型電気店の一軒だけがひとつだけ置いているのを見つけて、そこで初めて存在を知り、今買わないと一生買えないだろうと思って買いました。
それ以降、店頭でBDS Cが売られているのを見かけたことは一度もなく最初で最後の機会でした。
存在さえ知っていれば店頭になくても注文はできたかも知れませんが雑誌広告は全くなく、雑誌で記事として取り上げられることもなかったBDS Cの存在をを知る方法は店頭で見かける以外には無かったかも知れません。
私の知る範囲内ですがBDS CはパソコンのC言語コンパイラでは唯一アセンブリ言語で作られています。
そのため、Z80/8080向けのセルフC言語コンパイラとしては唯一、コンパイル速度やコンパイル時のメモリ節約にはCPUの能力を最大限に引き出せました。
Z80/8080 CPU向けのセルフC言語コンパイラではコンパイル速度は最速です。
ただし、作ったプログラムの実行速度はMSX-Cなどと比べると遅かったです。
今はフリーソフト(オープンソースでパブリックドメイン)になって公式サイトから無料公開されています。
ただ、製品版にはオセロのソースと実行ファイルがついていたと思うのですがここからダウンロードしたものにはついていません。
CP/M版とMSX-DOS版がありましたがメディア(フロッピーディスクの種類とフォーマット)は違っても中身は一緒だと思います。
今すぐBDS Cを体験するには、オセロとBDS Cをウェブブラウザ上のMSXエミュレーターで今すぐ使うことができます。
BDS Cで作られたオセロが自動起動するので、最後までやるかCtrl+Cで止めるかすればCCとCLINKコマンドでBDS Cが使えます。
OTHELLO.Cが入っていてテキストエディタはTEDが入っています。
画面を横80文字にするには、mode 80 と打ちます。

MSX-C
MSX-C COMPILER。MSX MAGAZINE 1986年10月号の広告
画像はMSX MAGAZINE 1986年10月号の広告です。
アスキー(MSX規格を作った会社)の標準のC言語コンパイラです。
Ver 1.0は作ったプログラムのバイナリの配布ができるようですが、Ver 1.1はライセンス上できなくなったと聞きます。
(Ver 1.2はどうなんでしょうか?)
ネット上に非公式のものがあるようです。
例えばここにあります。
Ver 1.2 MSX-DOS2専用、(MSX-DOS(1)及びCP/Mで動作しない。)
Ver 1.1 MSX-DOS、MSX-DOS2、(CP/Mで動作しない。)
2005年発売のMSX MAGAZINE永久保存版3の付録にWindowsソフトとしてMSXエミュレーター込みMSX-DOS込みアセンブラ込みでMSX-C Ver 1.2が収録されています。
インストールディスクではなくMSXエミュレーターにインストール済みの形で使えます。
そして、MSX-C Liblrayや説明書や当時のMSX-C関連の書籍もPDFで付いています。
現在可能かも知れない合法な入手方法は、たとえ中古でも「MSX MAGAZINE永久保存版」を手に入れることかも知れません。
中古に使用ライセンスがあるかどうかははっきりしませんが単独商品で売ることを放棄して付録としてついてくるおまけですので新品で買った人以外は使うなという条項でも書いていない限り使えると考えていいと個人的には思います。
ネットから入手した場合は、BDS Cのようにはっきりとフリーソフトと宣言してくれていないので使いにくいです。
(今更誰も使わないとは思いますが)
雑誌のMSX MAGAZINEとMSX-FANでMSX-Cの連載記事が載ったこともあります。
(MSX MAGAZINE 1987年11月号~。MSX-FAN 1994年~1995年8月号(最終号))
ANSI規格ではなくK&Rで、しかもサブセットです。
MSX-Cは、LSI C-80 CP/M版のサブセットが元になっていたと思います。
(初版は値段がLSI C-80と同じなんでもしかしたらフルセット?)
初版が98000円、Ver 1.1とVer 1.2が19800円。
Ver 1.1はTAKERUというコンビニにあった自動販売機で買うと7000円でした。
最終的にはMSX MAGAZINE永久保存版3(2と1は調べてない)に付録ですので雑誌の値段で格安で買えました。
初版のパッケージにははMSX-C COMPILERと書いてありました。
Ver 1.2を昔、パソコン屋の店頭で買いました。
MSX用のグラフィック機能などを含むライブラリ(MSX-C Library 14800円)も別途売っていて買いました。
初版は98000円と高いですがコンパイルに必要なアセンブラとリンカも付属していました。
Ver 1.1からはアセンブラとリンカが付いて来ないのでそれらが入っているMSX-DOS TOOLS(14800円、TAKERU 7000円)またはMSX-DOS2 TOOLS(14800円)などを買うかMicrosoft M80/L80と互換性のあるものを用意する必要がありました。
Ver 1.1からはMSX-Cが出力するニーモニックがインテル8080からザイログZ80に変ったようです。
アスキー出版社からMSX-Cでグラフィックを使ったゲームを作る本も当時は売っていて、それを買って本に載っているもぐら叩きゲームとかをコンパイルしたりしました。
それなりに使っていましたが関数を小さく分けないといけないし、コンパイル速度が遅すぎてこんなのやっていられないと思っていたところ、BDS Cに出逢って乗り換えました。
とはいえMSX-Cは思い出のあるコンパイラです。
アスキーが、MSX-CではなくBDS CまたはBDS CベースのC言語コンパイラを標準C言語コンパイラにしていたら、MSXの歴史も大きく変わったんじゃないかと思います。
MSX-Cは、MSXでC言語なんかだめだ使えないというイメージを植え付けてしまいました。
さらにメモリ消費が大きく関数を極小にしないとコンパイルが通りません。
2005年発売のMSX MAGAZINE永久保存版3の付録のWindowsで動く開発ツールはMSXエミュレーターの上でMSX-C Ver 1.2が動き、DOS窓での開発はできませんがまあこれでもいいかも知れません。
そのMSXエミュレーター(MSX Player)はフロッピーディスクをマウントできるので仮想フロッピーディスクドライバ(ImDisk Virtual Disk Driverなど)を使ってWindows側のファイルとやりとりすることが可能です。
(フロッピーディスクのサイズは737280バイトを指定)
32ビットのWinodwosのDOS窓であればMS-ODS版のMSX-DOSエミュレーターのMSX-DOS Emulatorを使って現在でもコンパイルすることができます。
64ビットのWindowsのDOS窓ではこのMSX-DOS Emulatorは動作せず、MS-DOS playerやDOSBoxなどのMS-DOSエミュレーターの上でさらにMSX Emulatorを動かす二重エミュレートをしてもMSX-Cは動きませんでした。
64ビットのWindowsが主流になっている現在では非常に使いにくいです。
CP/Mエミュレーターで動作しないのは残念ですが、64ビットWindowsで動作するMSX-DOSエミュレーターを開発すればこの欠点はほぼ解決するのではないかと思います。
WindowsでZ80/8080のC言語開発をするLSI C-80 Windowsパック(98000円)がMSX-Cの上位互換がある程度あるかも知れません。
Windows版のLSI C-80で当時の市販品のMSX-C Libraryをリンクできるかどうかは分かりませんが。

H-FORTH
公式サイト
つい最近知りました。
A.Hiramatsu氏が1999年に作った比較的新しい(それでも17年か18年前ですが)FORTHコンパイラです。
フリーソフトです。
MSX-DOSでコンパイルしてMSX-DOS上で動く拡張子.COMのファイルを出力します。
MSXライブラリ(VDPアクセス、BIOSコール、BDOSコールなど)が付属しています。
CP/Mエミュレーターでコンパイルできるかどうかは知りません。


Mini Compiler(ミニ・コンパイラ)
公式サイト
つい最近知りました。
言語名は書いていないんですが行番号を取ったBASICに近い感じです。
フリーソフト?のようです。
日本人の個人の方が作られたようです。
MSX-DOSまたはCP/MでコンパイルしてMSX-DOS上で動く拡張子.COMのファイルを出力します。
MSXライブラリがありCP/Mエミュレーターでもコンパイルできるようです。

Turbo Pascal CP/M or MSX-DOS版
ネットで非公式?のものがダウンロードできます。
MSX-DOS版が日本で売られていたのは見たことがないしそういう話も聞いたことがないです。
ライセンスがどうなっているかは知りません。
今のDelphiの祖先ですね。
Turbo Cが出たのはMS-DOSからでCP/M版は無かったと思います。(MSX-DOSとMS-DOSは似て非なるものです。)
Pascalというマイナーな言語だったのは非常に残念ですが、MS-DOSやWindowsの後継姉妹製品にはC/C++も出て、現在はC++ Builderが販売されています。

HI-TECH C CP/M版
珍しくANSI Cにある程度対応しているのが魅力です。
元々有料でしたがフリーソフトに転換して公式ホームページで配布されていましたが、現在は公式配布はなく二次配布されているものが入手できます。
HI-TECH Cの過去の公式配布ページのアーカイブ
MSX-DOS版が発売されたという話は聞いたことがありません。
MSX-DOSで使うにはパッチを当てる必要があるようです。
(MSX-DOSパッチでは$EXEC.COMを、$EXEC.BATに変えるなどしているようです。)
http://www.msxarchive.nl/pub/msx/programming/c/ からMSX-DOSパッチが当たっているものをダウンロードできます。
CP/M用はhttp://www.z80.info/z80sdt.htm#SDT_COMPILER_C_CPMにLZH圧縮されたものとzip圧縮のマニュアルがあります。
CP/M用は他にはhttp://www.retroarchive.org/cpm/cdrom/SIMTEL/HITECH-C/のZ80V309.EXEもあります。
MS-DOSの自己解凍で解答できます。
64ビットのWindowsでは解凍できないのでMS-DOS playerを使って、DOS窓で「msdos Z80V309」と入力するなどして解答できます。
CP/MエミュレーターのCP/M program EXEcutor for Win32で少し使ってみました。
BDS CやMSX-Cのような制限だらけのコンパイラと比較するとHI-TECH CはCP/MまたはMSX-DOSをターゲットするC言語コンパイラとしては完成形に近いです。
現在はZ80をターゲットとするMS-DOS版とWindows版は販売してないようです。
また、BDS CとSmall-C(z88dkなどの派生がある)と違ってオープンソース化されていなのいで今後の進化や他のOSへの移植は一切見込めないという欠点があります。
関数の宣言はANSI Cの記述ができ、エラーメッセージやワーニングも詳しく出てくるのはいいんですが、
void sub1(char b[8][8]) { } int main(void) { char b[8][8]; sub1(b); return 0; }
のsub1の引数部分がコンパイルエラーになって解決策が分かりません。
gcc、clang、C++ Builder全てコンパイルできるソースです。
K&Rに置き換えるとBDS Cではコンパイルできます。
これができないのでHI-TECH CではBDS C Ver 1.5に付属で付いていたオセロのプログラムをコンパイルできません。
またアセンブリで記述する場合、1ファイルに1関数のようでこの辺はBDS Cと比べると使い勝手が悪いと思います。

LSI C-80 CP/M版
MSX-DOS版としては発売されたことは多分なかったと思いますが、MSX-DOSはCP/Mと互換性があるのでMSXで動くはずです。
これをOEM提供したサブセットがMSX-Cだと思います。
多分98000円だったと思う。
現在はCP/M版は入手不能かな?
MSX MAGAZINE 1987年10月号57ページによると三国志というMSXゲームは一部をLSI C-80 CP/M版を使って作ったそうです。
8080/Z80クロスコンパイラのLSI C-80のMS-DOS版は仕事で使っていたことがあります。
MS-DOS版は快適でしたが、CP/M版はMSX-C同等のコンパイル速度の遅さと関数を極小に分けないとコンパイルできない制限があるはずです。
現在は、8080/Z80クロスコンパイラのLSI C-80 Windows版が、98000円で売られています。

αランゲージシリーズ
MSX用に、いろんな言語が売っていました。
MSX用はMSX-DOS版ですが、中身はCP/M版そのままだと思います。
言語によってはコンパイラではなく中間言語コンパイラだったりインタプリタだったりすると思います。
販売元はライフボートで各19800円。
α-C、α-Pascal、α-FORTRAN、α-COBOL、α-LISP、α-FORTH、α-APL、α-PROLOGなどがありました。
α-Cは、BDS Cの機能制限がある廉価版です。
α-Pascalと、α-FORTRANは買いましたが使いませんでした。
α-FORTRANは、NEVADA FORTRANが元になっているようなことが書いてあったような気がしますがよく覚えていません。
α-Pascalは中間言語コンパイラで実行ファイルを作れず、中間言語にコンパイルしてそれをインタプリタで実行していました。

Small C
C言語コンパイラです。
別途アセンブラ(Small Mac)などが必要。
確かに売っていて、Small Macとセットで買ったような気がするんですが、 本当に売っていたんだろうかと思うぐらい検索しても情報が出て来ません。
幻覚でも見ていたんでしょうか。
少なくともCP/M版があったことは間違いないです。
銀色のパッケージだったような記憶があります。
買ったんですが、BDS Cを使うことにしたのでほとんど使うことは無かったです。
パッケージ版は有料だったと思いますが(少なくとも今は)フリーソフトなのではないかと思います。
検索するとMS-DOSで8080のコードを出力するクロスコンパイラもあるようです。
インタプリターもあるようです。
現在はSmall Cをベースにしたらしいz88dkというWindowsで動くクロスコンパイラがあるのでそれを使うべきかも知れません。
z88dkが二次元配列(例えばint a[3][3];)に対応していないのでSmall Cも二次元配列に対応していないと思われます。

Aztech C
C言語コンパイラです。
K&Rのようです。
CP/M版がありコピーすればMSX-DOSでも動くと思います。
MSX-DOS版は発売されなかったと思います。
the offical AZTEC C online MuseumからコンパイラやPDFのマニュアルがダウンロードできるようです。
法的な使用ライセンスはないかも知れません。
使ったことはないので詳しいことは知りません。
Windwos XP/MS-DOSでZ80コードの開発をするクロスコンパイラもあるようです。
クロス版は64ビットのWindowsで動くかどうかは知りません。

SOLiD C
C言語コンパイラです。
個人作成?のフリーソフトのようです。
MSX-DOS、MSX-DOS2用、CP/Mでは動作不可。
つい最近存在を知りました。
いつからあるのか分かりません。
ダウンロードはここからできます。
(Assembler package と、SOLiD C と、SOLiD C librariesが必要。)
拡張子arjのファイルを展開するのにMSX-DOS上ではXARJ(XARJ.COM)が必要です。
Windowsではarjの解凍にARJ32(ARJ32.EXE)が必要でarj32 e xxx.arj のように入力してコンパイルします。
printfなどのC言語ライブラリを使うには、C.BATの中身のslibをclibに変更します。
ソースファイル名が test.c だとすると c test と入力してコンパイルします。
少しだけ試してみました。
二次元配列に対応しています。
二次元配列に対応しているC言語コンパイラは他にBDS Cがありますが、MSX-C、HI-TECH C、Small C、Z88dkは対応していません。
CP/Mエミュレーターで動かないので64ビットWindowsで動くMSX-DOSエミュレーターを開発すればいいのではないかと思います。
MS-DOSで動くMSX-DOSエミュレーターというのもあるんですが64ビットのWindowsでは動きません。
32ビットのWindowsなら動きます。

AI-LISP
LISPインタプリタだと思います。
MSX-DOS版。
メモリ64K以上、38000円。(株)シンフォニー。
1DDフロッピーディスク。
(雑誌、MSX MAGAZINE 1987年8月号143ページに紹介あり。)
売られているところを見たことはありません。

AI-PROLOG
PROLOGインタプリタだと思います。
MSX-DOS版。
メモリ64K以上、38000円。(株)シンフォニー。
1DDフロッピーディスク。
(雑誌、MSX MAGAZINE 1987年8月号143ページに紹介あり。)
売られているところを見たことはありません。

MSX-Logo
LOGO言語。
グラフィックにも対応したインタプリタだと思います。
MSX。ROMカートリッジ。RAM32Kバイト以上。日本語版は9800円。
カナダのLCSI社(Logo Computer Systems Inc)。
当時の日本での問い合わせ先は、プロテックインターナショナル株式会社。
MSX MAGAZINE 1986年7月号の80ページから83ページに紹介記事あり。
日本語版の他に英語、ドイツ語、フランス語、イタリア語、オランダ語、スぺイン語、アラビア語版があるそうです。
日本語版はコマンドが日本語にも対応していて、「まえへ」、「みぎへ」、「くりかえせ」などのコマンドがあります。

ASM/FORTH
FORTH言語コンパイラのようです。
会社名:インフォメーションオファリングシステム
MSX-DOS版、29800円。
MSX MAGAZINEに「コンパイラに挑戦!?」というASM/FORTHの連載記事がありました。
MSX MAGAZINE 1986年2月号の時点で第4回。
MSX MAGAZINE 1986年8月号の時点で第10回。
(いつからはじまりいつ終わったのかは確認していません。)
この連載のMSX MAGAZINE 1986年6月号からはシューティングゲームを作る記事が始まっています。
MSX MAGAZINE 1986年7月号177ページに「MSX-DOSで動作する主なプログラム」のひとつとしてASM/FORTHの名前が出ています。

MSXべーしっ君
実行時にコンパイルしてから実行します。
JITになるのかな?
べーしっ君は他の多くのコンパイラと違ってMSX-DOSもCP/Mも必要ありません。
一応ROMカートリッジ版買いましたがほとんど使うことはありませんでした。
ROMカートリッジ版は4500円です。
一応BASICコンパイラなんですが、ふざけた名前だけあって普通のコンパイラではないです。
コンパイラといっても実行時にコンパイルし、ソースからマシン語のバイナリファイルに変換できません。
ROMカートリッジ版はROMカートリッジを挿し込んでないとプログラムが動かないし、ディスク版は電源投入後に一回ディスクからMSXべーしっ君を読み込まなないと使えないというものすごい欠点がありました。
MSXべーしっ君、MSXべーしっ君ぷらす、MSXべーしっ君たーぼ の三種類があって、
さらにROMカートリッジ、フロッピーディスク、MSXパソコン本体に内蔵などの種類がありました。
コンパイルは瞬時に終わり、待たされるとかはありません。
コンパイルされれば確かに高速化されました。
ただ対応しているBASICのコマンドに制限があり、多くの場合ソースそのままでは動かなかったような気します。
例えばディスクアクセスは対応していませんでした。
そのためソースに、CALL TURBO ON というコマンドと、CALL TURBO OFF というコマンドを追加し、その間だけをコンパイルして未対応コマンドを避けるように改造する必要がありました。
いちいちソースをこういう改造しないと動かなかったし、ROMカートリッジ抜いたら動かないし実用性に乏しかったです。
未対応コマンドの部分は自動で CALL TURBO OFF して、対応コマンドは自動でCALL TURBO ON すればいいのにと思っていましたがそれができない欠陥品でした。
自動切り替えができなかったのはコンパイル部分とインタプリタ部分では同じ変数名でも変数が共有されない別プログラムになったからだと今になってわかりました。
引数を渡すような感じで一部の変数を共有するようなことはできたようです。
MSXべーしっ君を内蔵しているMSXの機種もあったのですが内蔵していない機種が多く、MSXべーしっ君のROMカートリッジを買って常に挿している人ばかりではなかったので、MSXべーしっ君対応のソースというのもあまり見かけませんでした。
バイナリファイルに変換できず高速化するだけなので、べーしっ君を使わなくても高速化が可能なMSXエミュレーターでは特に必要ないかも知れません。
ただ、べーしっ君対応の対応のソースを無改造で実行するには必要です。
MSXエミュレーターでべーしっ君が使えるのかどうかは知りませんが。

BASICコンパイラ for MSX(ハート電子産業)
BASICコンパイラ for MSX(ハート電子産業)。MSX MAGAZINE 1986年2月号の広告
画像は1986年のMSX MAGAZINE2月号に載っていた広告です。
ROMカートリッジ。15000円。MSX 16K RAM以上。
ハート電子産業株式会社。
おそらく、MSXべーしっ君のような物だと思います。
「いちいちROMカートリッジを取り外す必要がありません。」と書いていますが、多分これは利点ではなくてROMカートリッジを取り外すと作ったプログラムがコンパイルされた状態では実行できないのではないかと思います。
私はこのソフトの存在を知りませんでした。
MSXべーしっ君と比べればかなりマイナーです。
1986年の何月か知りませんがMSXべーしっ君が4500円で発売され、商品価値を失ったのではないかと思います。

その他CP/Mの言語
MSX向けとして発売されたことはなくてもCP/Mのソフトをなんらかの方法で入手してコピーすればその多くはMSX-DOSでもそのまま動くと思います。
MSXで動くかどうかは確認していません。
MSX-DOSのバッチファイルに相当するものはCP/Mではサブミットファイルになり書式やファイルの拡張子に互換性はないので多少の書き換えが必要になります。
Commercial CP/M Software ArchiveのサイトではCP/Mのソフトが保存されています。
それを見ると、このページの上記で紹介していないものとして、以下のものがあります。
BASICファンにはMicrosoft BASIC CompilerとMicrosoft BASIC Interpriterが有用かも知れません。
MSX-BASICと比較すると少なくともデフォルトではグラフィックには対応していないのが欠点です。
その代わり、いろんな機種、そしてWindows上のCP/Mエミュレーターでもで動く利点があります。
さらに、http://www.z80.eu/c-compiler.htmlとか、http://pcsauro.altervista.org/CPM.PHPとか、http://www.floppysoftware.es/c_compilers.htmlなどにその他のコンパイラも載っているんですがいっぱいありすぎるし価値もなさそうなので書くのはやめときます。


MSX(Z80)のC言語コンパイラ

MSX (パソコン)


あーすブラウザ
オンライン鍋田辞書
鍋田辞書トップ