TRON-GCCによるBTRON (3B)プログラムのクロス開発

MCUBEで動作するBTRON (3B)の開発環境として頒布されていた以下のフロッピーの内容を使うことで、ユーザプログラムのコンパイルができ、実際に3Bで動く実行ファイルを作ることができた。

  1. 3B開発用 TRON-GCC DOS/V版 PM090-121-01 (1994年10月) MS-DOS形式 2HD-1.44MB [LHA圧縮]
  2. 3B周辺核 開発環境 PM090-122-01 (1994年10月) MS-DOS形式 2DD-720KB [LHA圧縮]
  3. 3Bアプリケーション 開発環境 PM090-126-01 (1995年3月) MS-DOS形式 2DD-720KB [LHA圧縮]

これらは当時のMS-DOS環境を想定して作られたものだが、最近のPC環境でMS-DOSのプログラムを実行することができるDosboxというプログラムを利用することで開発環境として問題なく動作した。

動作を確認した環境

ソフトウェア

ハードウェア

セットアップ

フロッピーからTGCCLZH.EXE, 3BLZH.EXE, APPL.EXEを取り出す。 これらはLha自己解凍形式で、LHa for UNIXでlha e TGCCLZH.EXEなどとすることでファイルを取り出すことができる。 取り出したファイルは、dosboxで使うときの利便性を考えて${HOME}/trondevに配置した。 配置後の構成は:

~/trondev/
├── 3B
│   ├── APPL
│   ├── INCLUDE
│   ├── LIB
│   └── SAMPLE
├── APPL
│   ├── DBOX
│   ├── INCLUDE
│   ├── LIB
│   ├── SAMPLE
│   ├── SAMPLE0
│   └── SCHED
└── TBIN
    └── INCLUDE

GCCを実行するための環境変数を設定するスクリプトとして~/trondev/DIRENV.BATを以下内容で作成した:

set PATH=C:\tbin;%PATH%
set GCC_EXEC_PREFIX=C:\TBIN\
set GO32=EMU C:\TBIN\EMU387

満を持してdosboxを実行する。 開いたMS-DOS風のシェルで以下のように入力し、ディレクトリをマウントして、環境変数をセットして、tron-gccが動作することを確認する:

mount c ~/trondev
c:
direnv.bat
tron-gcc -v

これでgcc version 2.5.7の表示があればGCCは動作するようになったと確認できる。

プログラムを書く

このフロッピーに含まれているヘッダの中身とライブラリのシンボルから判断して、3Bのプログラムを書くには以下の注意が必要:

この辺の工夫を、有名なDhrystoneベンチマークに対して行った際の差分がこちら [gitlab.com]。 プログラムを移植する際の雰囲気はおわかりいただけるのではないだろうか。

コンパイル

コンパイルの際は以下のようなバッチファイルを作るのが便利。 リンカに-lgを複数回渡しているのは私がボケているからではなくて、実際この順序で書くのが必要そう。

tron-gcc -msoft-float -c -O3 -I\3b\include dhry21a.c
tron-gcc -msoft-float -c -O3 -I\3b\include dhry21b.c
tron-gcc -msoft-float -c -O3 -I\3b\include timers.c
tron-gcc -msoft-float -L\3b\lib -z -o dhry dhry21a.o dhry21b.o timers.o -lmain -lknl -lg -lsys -lg -lm

-msoft-floatは必ず必要で、現状の3BではFPUを使うとシステムを巻き込んで落ちてしまう模様。

バイナリを転送して実行

コンパイルしたバイナリをMCUBEに転送するために、MCUBEのディップスイッチ1番 (背面の4連DIPSWのなかで、AUIコネクタに一番近いほう)を下側に倒すことでシリアルコンソールを出した状態で起動するように設定する。 この状態で9600 bps/8n1に設定してminicomを接続して、MCUBEの電源を入れると、起動メッセージが流れたあとで「開発用コンソール」と同じプロンプトがシリアルポートで使える。

MCUBE側でrecvコマンドを実行したあとでminicomでSend files (Ctrl-A S)からxmodemを選択し、上記コンパイルしたバイナリを選択することでMCUBEに実行ファイルが保存される。 転送したファイルはそのまま開発用コンソールから名前を入力することで実行できた。

むすび

3Bでのプログラム開発は、libcの機能やFPUの面など概ね組み込み系で一般的な留意点はあるものの、当時の開発ツールをそのまま用いれば困ることなく実施できそうであることが確認できた。