SBC6809でBASICインタプリタとGAME09が使えるようにはなったが、それ以外だとプログラム言語はアセンブラになる。実数演算の必要なものはBASIC一択しか無い。SBC6809(ESP32)でもSDカードからBASIC読み込んで、その後BASテキストロードして実行ってのを毎回やるのは面倒くさい。そこで扱いやすいC言語あたりが欲しくなる。FM-8/7系とかで動くKコンパイラやFORTRANなんかも有るけど それらも、FBASICのROM内ルーチンありきの構造になってる。海外のだとsmall-cなんかも有るが、やはりTRS-cocoのROM内ルーチンがある前提だったりする。それ以外だとflexやOS-9上で動作するC-compilerがあるが、SBC6809の様なROM/RAM 32Kの狭い領域では使い物にならない。gcc6809も四苦八苦しながらビルドしてhelpとversion表示が出るまでは持っていったことが有るが いざ"hello world" とか 表示させようとすると 標準のライブラリがまともに揃っていない。ファイル上は それらしきlibgcc.aとかあるのだが どこに 表示データ送ってるのか? FLEXかOS-9前提のオブジェクト吐いてくるのかと予想している。
m6809-unknown-elf-gcc hello.c
とかやっても、linux の gccなら a.outとか吐き出して。仮に実行できたりするんだが gcc6809では まず できない。ビルトインのライブラリ類を一切当てにしてはいけない。gcc6809のビルドの為のソースに 大体の必要なライブラリソースが含まれてるので それらを流用してsbc6809用のサブセットライブラリを作ってやることにする。
m6809-unknown-elf-gcc -O2 -S -fno-builtin -DFLOAT -DFLOAT_ONLY $1.c -o $1.asm
今使ってる オプションは こんな感じ。
-fno-builtin :ビルトイン関数は使わない
-DFLOAT -DFLOAT_ONLY :実数演算が必要な場合、単精度のみ
-S :アセンブルソースを出力するだけにする。
あと、
-nostdlib :標準ライブラリは使わない。
も入れても 良いかも?
gccが吐き出した .asmファイルを
as6809 -glos $1.asm
で、アセンブラコードからリローケータブルコードにする。
as6809が出した .relを
aslink -i -m -b .text=0x2000 $1 ~/.local/lib/crt0.rel $1.rel ~/.local/lib/libfloat.lib ~/.local/lib/libgcc.lib ~/.local/lib/libsbc09.lib
で、インテルhexファイルにする。
.ihxファイルになるので .hexファイルにリネームするのを忘れない。
crt0.relに sbc6809のACIAアクセスルーチン、スタックの初期化と main関数へのジャンプ命令が組み込まれてるのでリンクの際の先頭に配置するように
libgcc.libは主だった基本関数群
libsbc09.libは sbc6809用の 文字 入出力関数群
libfloat.libは 単精度実数演算関数群、平方根、sin,cos,tan、ほかは 基本の加減乗除など実数演算を使わないのなら リンクから外せば 出来上がりのHEXファイルが少しは小さくなる。
libsbc09にprintf関数があるが、サブセットなので 実数の表示機能はない。
char buf[20];
s = sinf(x);
ftoa_s(s, buf, 3);
printf("sin(x) :");
printf("%s\n", buf);
のように、一旦 ftoa_s関数で 実数から文字列に変換して 表示する。

mountain.c
gcc6809の公開ライセンスに限りなく抵触してると思うので、同梱してるgccやas6809などは 参考程度に、なんせビルドの環境毎上げようとすると6Gくらいの塊になるんで
gcc6809は、自前でビルドすることを薦める。結構四苦八苦するけどchatGPTと相談しながらやればなんとかなります。フリープランのchatGPTでも十分こなせるので頑張って。
アドバイスとしては、関数の戻り処理がバグってるので(rtsが組み込まれない) キーワード「epilog」で探せば見つかる。
実数演算関係で、整数-実数変換の終端処理にバグが有る。細かなchatGPTの対話ログが消えてしまったので 残念ながら 細かくを解答できない。
こちらで用意した、lib類は 後日ソース類をまとめて上げます。
今回挙げた書庫はお試し用のセットくらいに思っていただければ。
コメント
コメントを投稿