2018年5月4日金曜日

MicroCを使う(その1)

MicroCのソース

FLEX9にはその昔、太田昌孝さんが作られた有名なMicroCという整数型のCコンパイラがありました。商品としても売られていた記憶があります。
数年前に「C言語と周辺制御」(新津靖、池上晧三 工学社)という、MicroCを使用して制御をするという本を入手してから、ぜひ使ってみたいと思っていました。

そのソースとそれ用のアセンブラが竹岡さんのサイトからダウンロードできます。
しかし、これはBSD用ですので、私が常用しているLinuxではそのままではビルドできません。

MicroCのソースをLinuxでビルドする

全体の流れ
(1)gccでmc.cをコンパイルー>mc(Linux上で動作するクロスコンパイラ)
(2)mcでmc2.cをコンパイル->c.out(クロスコンパイラで作成したアセンブルリスト)
(3)as09でc.txtをアセンブルー>mc2.o(モトローラS形式のオブジェクト)
(4)mot2binでバイナリ形式にー>mc09に名称変更し、先頭の$00~$FFは不要なので削除する(バイナリ形式の実行ファイル)

(1) mcの作成
stdio.hの宣言とバッティングする2つのファイル名を変更する。
  getline() -> getline2()
  index() -> index2()
この変更によって、make中の gcc mc.c -O mc で mcが作られるが、保存されない。
続いて、mc.c 中の printf( を全て fprintf(obuf, に変更すると、ファイル c.out に保存される。

最後に、作成したmc09とC.TXT、そしてライブラリc.txt, stdio.txt, stdio2.txt, alloc.txt, fileio.txt, fileio2.txt. scanf.txt, string.txt、そしてユーティリティuf.cをFLEXへ転送する。
(2014年当時のメモ書きを元に書いていますが、最近のUbuntu 16ではindex()はバッティングしないなど、違いがあるかもしれません...)

mc09を使う

(1)ソース作成上の注意
標準で、stdio.txt, alloc.txtをインクルードしなければならない。(ファイル名は大文字で)
また、アセンブラASMBではTABコードは別のものとみなされてしまうので、Spaceに変換しておく。さらに、行末の$0D,$0Aも$0Dのみに変換しておく。
(2)ビルド
mc09 -O1.C.OUT file.c でドライブ1にC.OUTが作られる。(C.OUT名は変更できない)
(3)アセンブル
あらかじめドライブ1にC.TXTを入れておく。
ASMB C.TXT +YLS でC.TXTのアセンブル中にC.OUTが読み込まれてアセンブルされC.binが作られる。
(4)実行
得られるC.binは$100からにロードされ、$100から実行されるファイルなので、そのまま実行できる。




0 件のコメント:

コメントを投稿