石原 博の覚書

電子工作に関する日々の覚書を記載します

bcplを動かした

2022-10-24 09:52:36 | 日記

しばらく前に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


最新の画像もっと見る

コメントを投稿