6800用のコンパイラを探して – CC6303 (2)(ベーシックマスター開発 その44)
6800用のコンパイラを探して – Fuzix/CC6303(ベーシックマスター開発 その22) | ず@沖縄にて、CC6303について書いたのだけど、事実誤認があったので訂正。
CC6303が、6502用のCコンパイラであるCC65を68系用に書き直したものであるのは正しいのだが、Fuzix用の6800 Cコンパイラはまったく別物でした。何を勘違いしていたんだろう。
CC6303の6800コンパイラ部分は、kwhr0さんがバグ修正をされていて(6800エミュレータを書いたのでベーシックマスターJr.に載せてCC6303でクロス開発してみた)、ベーシックマスターでも動く状態だったようです。
- EtchedPixels/Fuzix-Compiler-Kit: Fuzix C Compiler Project
- EtchedPixels/CC6303: A C compiler for the 6800 series processors (古い?)
- EtchedPixels/Fuzix-Bintools: Assembler, linker etc to go with the compiler
- kwhr0/bm2-baremetal-demo
CC6303の使い方
最低限の入出力として、__putc, __getc が必要です。AccBを表示・入力するルーチンです。Xを保存する必要があります。mc10とflex用のcrt0はありますが、その他は自分で用意する必要があります。
emu6800用のcrt0はpull requestを出してあります。BASICMASTER用のcrt0は、kwhr0さんが作成されたものがあります(kwhr0/bm2-baremetal-demo)。
以下、emu6800用のcrt0がlib6800/crt0.sに存在する前提での使い方です。emu6800はmapファイルを引数に取りますので、何かダミーを書いてください。
export PATH=/opt/cc68/bin:/opt/fcc/bin:$PATH cc68 -m6800 a.c emu6800 6800 a.out a.map
コンパイラが生成するオブジェクトについて
ASTを作らずに、パースしながらオブジェクトを生成しています。スタックマシン風のコードを生成しますが、それほど遅くありません。
8queenを測定すると、CC6303が 5,419,559cyc, Fuzix-CCが 3,594,201cycで、3割ほど遅いです。
騎士巡歴問題は、CC6303が 100,828,326cyc, Fuzix-CCが 104,223,823cycで CC6303の方が速いです。
Fuzix CC は && や || で非効率的なコードを出すので、そこで差が縮まっているようです。これは後でもっと詳しく調べてみます。
pull requestを出しました
long関連にバグが多数あったので修正してpull requestを出しました。そのうち反映されると思います。
(ただ、What is the state of the CC6303 cpu 6800 code generation? · Issue #30 · EtchedPixels/CC6303 によると “then this compiler is indeed going to get retired” とのことなので、少し心配)。
追記: archiveしたいとのことでしたので、私の方で作業を進めることにしました。
zu2/CC6303 を使ってください。
ディスカッション
コメント一覧
まだ、コメントがありません