しばらく前にFUZIXで遊んだが、FUZIXのアプリケーションにBCPLが含まれていた。
まだFUZIXをZ80-MBC2で動かすことには成功していないが、linux用のMakefileがあり容易に動かせそう。
昔NiftyServeのFPLフォーラムでBCPLがあり、intel486に移植したことがあり懐かしい。本家のMartin Richardsのページを見るとお元気のようで、最近でも更新されている。ソフトウエアを確認したところ、CYGWIN32 やMac、Linux、SUN4、Sparc、ALPHA, MSDOS, OS2などさまざまな機器に対応するようだが、単純にLinuxで使用したい場合はややこしい。(RaspberryPIやGP2Xなどの選択もあり)
そこでわりと単純なFUZIX付属のBCPLをLinux上で動かしてみた。
$ make -f Makefile.linux
gcc -c -o icint.o icint.c
gcc -c -o blib.o blib.c
gcc -o icint icint.o blib.o
gcc -c -DPAGEDMEM -o icintv.o icint.c
gcc -c -DPAGEDMEM -o blibv.o blib.c
gcc -o icintv icintv.o blibv.o
cat blib16.i iclib.i > run-time.i
cat cg.i run-time.i > codegen.i
cat syn.i trn.i run-time.i > b.i
ls -l icint icintv run-time.i codegen.i b.i > size.report
使い方はbcpl(シェルスクリプト)内に記載があるとおり、bcpl myprog.b でコンパイル。myprog.i が作成されicint myprog.i あるいは icintv myprog.iで実行(icintvは仮想記憶使用 大きなBCPLプログラム例えばコンパイラなどを実行するためにはicintでは容量が足りないようだ)
myprog.b ----------------> OCODE -------------> INTCODE -----------------> myprog.i
b.i codegen.i
(syn.i+trn.i+runtime.i) (cg.i+runtime.i) (cat INTCODE runtime.i > myprog.i)
出来たmyprog.iはicint myprog.i として実行
Makefileに記載のなかった、iclink.c、icex.cについては、myprog.iをINTコードのテキスト形式からバイナリ形式(直接実行出来るわけではない)に変換して、速度と容量を稼ぐもの。
$ gcc -O3 -o iclink iclink.c
$ gcc -O3 -o icex icex.c blib.c
$ ./iclink examples/hello.i hello
$ ./icex hello
hello: Permission denied
$ ls -al hello
--wx------ 1 ishi ishi 2096 10月 24 08:43 hello
これはiclink.cで、open(argv[2], O_WRONLY|O_CREAT|O_TRUNC)
としているため。本来はmodeが必要? 実験なので手動で変更して実行
$ chmod 666 hello
$ ./icex hello
Sum of 1 + 2 + 3 is 6
Hello, World
※コメント投稿者のブログIDはブログ作成者のみに通知されます