先日のgcc6809用の libgcc関係の 改変ソースを上げる 毎度おなじみ 4shared のサーバです。 前回と変わったのは、tek4010関係のtek40.cの形で 丸ごと インクルードしてたのを lib化して 使う 関数だけリンクするようにしました。 libgccなどの元ソースは gcc6809に含まれるモノの中から借りたものを 適当に端折ったり簡略化したものになります。どこをどう改変したかはソースを丸ごと上げてるのでそちらを参照して欲しいとしか言えません。float関係は 内部演算は単精度限定に、表示のみ小数点以下3桁までに限定。三角関数は90度までのデータを32分割でテーブル化して簡略化してます。ですので、計算精度を求めるものには不向きです。自分的には今どきSBC6809にそれを求めることはまず無いと切り捨てました。
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 ...