chibicc compiler を6800向けに改造する (1)
去年の末から、 rui314 (Rui Ueyama) さんの rui314/chibicc: A small C compiler を MC6800向けに改造しています。 簡単なプログラムが動作するようになったので、公開しました。 zu2 ...
6800用のコンパイラを探して – CC6303 (3)(ベーシックマスター開発 その45)
6800用のコンパイラを探して – CC6303 (2)(ベーシックマスター開発 その44) | ず@沖縄の続き。 今回はCC6303の生成するオブジェクトについてについてのメモです。 zu2/CC6303: A C compiler fo ...
MC6800のプログラミングテクニック(11) シフト操作の高速化
複数回の左右シフト操作を効率化したい。例えば、AccABを左に8bitシフトする場合は、TBAが使える。 LSLB/ROLA が4クロック必要なので、普通に書くと32cyc,16bytes必要。下記の方法なら 4cyc, 2bytesである ...
6800用のコンパイラを探して – CC6303 (2)(ベーシックマスター開発 その44)
6800用のコンパイラを探して – Fuzix/CC6303(ベーシックマスター開発 その22) | ず@沖縄にて、CC6303について書いたのだけど、事実誤認があったので訂正。 CC6303が、6502用のCコンパイラであるCC65を68 ...
Fuzix-Compiler-Kitの6800用コンパイラ(9) peep hole optimizer(2)
EtchedPixels/Fuzix-Compiler-Kit: Fuzix C Compiler ProjectのCコンパイラ付属のpeephole optimizer (のぞき穴的最適化プログラム)の話の続き。 簡単な最適化でどれぐらい ...
Fuzix-Compiler-Kitの6800用コンパイラ(8) peep hole optimizer(1)
EtchedPixels/Fuzix-Compiler-Kit: Fuzix C Compiler ProjectのCコンパイラには、peephole optimizer (のぞき穴的最適化プログラム)が付属している。 このoptimize ...
6800の未定義命令(1) 歴史と概要
現代のCPUは、定義されていない命令(利用されていないオペコード)を実行すると、未定義命令エラーが検出されてOS trapが発生する。 けれども、往年のコンピューターでは、定義済みの命令と同じ動作をしたり、似たようで違う動作をしたり、はたま ...
MC6800のプログラミングテクニック(10) PSHX はできないけど、PSHSはできる
6800でプログラムを書いていて困るのは、IXレジスタの加算減算命令がないことと、IXレジスタがPUSH/POPできないことである。 加算ができない弱点は1976年の富士通MB8861で解決されたのだけど、この改良はモトローラや日立にフィー ...
MC6800のプログラミングテクニック(9) シフト・ローテート命令のVフラグ
NEG命令が意外に使える命令だとわかったので、他にも特殊なフラグ変化をする命令がないか探してみた。あった。 シフト・ローテート命令群のVフラグの変化に特記事項⑥がついている。 M6800 Microprocessor Application ...
MC6800のプログラミングテクニック(8) 分岐条件の生成(3)
NEG命令の続きである。NEGを使うとある1byteが00であるか80であるかそれ以外かを1命令で判断できる。 $00のとき C=0, V=0, Z=1, N=0 $80のとき C=1, V=1, Z=0, N=1 その他 C=1, V=0 ...
MC6800のプログラミングテクニック(7) 分岐条件の生成(2)
前回記事を投稿した後で気がついたけど、NEG命令が意外に使えそうである。 NEGはAccやメモリの内容の2の補数を取る命令。この命令だけ、CとVの変化が覚えにくい。 Cは、元々の値が0(結果も0)のときだけ、C=0。そうでなければC=1であ ...
MC6800のプログラミングテクニック(6) 分岐条件の生成(1)
Fuzix-Compiler-Kit の Cコンパイラ(fcc)の現在のバージョンは、分岐の場合は下記のようなコードを生成する。 比較がサブルーチンになっているのは、オブジェクトサイズを小さくするためと、分岐条件を beq/bne (Z f ...