Amsterdam Compiler Kitとは
https://en.wikipedia.org/wiki/Amsterdam_Compiler_Kit
http://tack.sourceforge.net/
http://tack.sourceforge.net/about.html
ANSI C,Pascal,Modula-2,BASICなどをコンパイルしlinux(32bit)、CP/M、RaspberryPi、AT互換機の起動可能なフロッピーのイメージなどで実行できるバイナリを生成します。またZ8000や6805などのクロスアセンブラもあります。
今回できたのはWSL上のUbuntu 16.04LTS上で動作するAmsterdam Compiler Kitの環境とCP/Mエミュレータ上でのバイナリの動作確認までです。
動作環境の構築(V6.1pre1 20200216)
・Windows10 WSL(Ubuntu18.04LTS)
(1)必要なツールの準備(gcc,make,ninja-build,flex,bison)
$ sudo apt install gcc make ninja-build flex bison
(2)ダウンロード
$ git clone https://github.com/davidgiven/ack
(3)インストール
$ cd ack ; make
...
$ sudo make install
動作環境の構築(V6.0pre5)
Windows10上のWSL(Ubuntu16.04LTS)で確認しました。
(1)ダウンロード
https://github.com/davidgiven/ack/releases/tag/release-6-0-pre-5
注意!Source code(tar.gz)の方でないとビルドできません。以下のURLより取得。
https://github.com/davidgiven/ack/archive/release-6-0-pre-5.tar.gz
(2)Makefile修正
展開後、Makefile内の PREFIX = /usr/local を有効にする。
DEFAULT_PLATFORMの指定はlinux386なりcpmなり書き換え。
(3)必要なソフトウェア
gcc,make,flex,bisonはデフォルトのWSL(Ubuntu16.04LTS)には入っていないのでsudo apt installで入れておく。
(4)インストール
make でwarningが多数出るがビルドは通る。sudo make installで/usr/local/以下にackがインストールされる。
使い方(V6.0pre5の例)
examples/ 以下に各種ソースファイルのサンプルがあります。言語は拡張子で判別します。
.c C言語
.b B言語
.p Pascal
.bas BASIC
.mod Modula-2
.ocm Occam 1
ターゲットとなるシステムは-mで指定。ここでのシステムはプロセッサとその周辺を含んだ計算機システムやOSのことでプロセッサ単体のことではありません。
linux386 Linux 32bitバイナリ
pc86 AT互換機のフロッピーディスクブートイメージ
rpi Raspberry Pi
cpm CP/M
ここではCP/MをターゲットにModula-2で書かれた数当てゲームをコンパイルします。
ack -mcpm examples/hilo.mod
base : 00000100
text = 00007CD3
rom = 00000603
data = 0000011A
bss = 000015BD
TOTAL = 000099AD
これでcpm.comというバイナリができました。これをWindows上で動くCP/Mエミュレータで実行します。
TAKEDA, toshiyaさんのCP/M Player for Win32を使用しました。
http://takeda-toshiya.my.coocan.jp/cpm/index.html
展開しcpmconsというフォルダ内にcpm.exeという実行ファイルを確認します。これがエミュレータ本体です。
Windows10(Update1909適用済)からWSLのファイルイメージにアクセスするにはエクスプローラから\\wsl$と入力して参照します。これで先程のcpm.comをcomconsフォルダ以下にコピーします。
実行はコマンドプロンプトからcpm.exe cpm.comでOK。
※cpm.comはMS-DOSのコマンドとみなされ、かつ同名のcpm.exeよりも優先されるので単にcpm cpm.comと入力するとエラーになります。cpm.exeとコマンド名を打ち込むかcpm.comをリネームすることで対処してください。
※-mlinux386で32bit版のlinux用バイナリが出力できますが、WSLでは32bit版の実行ができません。
その他、-Oで最適化、-fpでソフトウェアによる浮動小数点の指定ができます。
今後の調査
・Ubuntu18.04LTS(実機およびWSL上)ではビルド時にyacc周りでエラーが出てインストールできない
・ソフトFPUの指定(ack -mcpm -fp xxx)でライブラリが見つからない
・ackで指定できるオプションの種類
・各種クロスアセンブラの方法