CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

Cコーディング

CC900コンパイラに付属している標準ライブラリには文字列処理is~、str~、mem~、printf系関数やsin/cosなど数学関数、malloc/freeといったヒープ操作も含まれているのであとはハードウェアに依存した入出力関数などをちょこちょこっと作ってやればそれで全てです。

いままで他のボードにも作ってきたような1文字出力putcom、1文字入力getcom、文字列出力putstrといったもので、見るステータスが違うくらいでほとんどコピペで持ってこれます

ただちょっと嵌まったのが1文字出力putcomでした。定石通り送信バッファエンプティをみて送信バッファに送信文字をセットするという動作をしているだけです。ただステータスがハードウェアのステータスレジスタを読んでいるのではなく送信割込みでセットされるメモリ上のフラグを読んでいるということと、フラグをクリアするのもソフトでやっている、という違いはあります

ところがこの関数はポツンポツンと呼ぶ分には正常動作しますが文字列出力などで連続コールするとふん詰まり状態になって全く文字を送信してくれません、割込みによるタイムラグかとおもい処理の順番を変えたりしたのですがうまくいかず結局コマンド間にウェイトを置く(赤枠部分のwait(200))で成功しています。wait(200)は実測270usかかっていて38400baudで1文字10bit送信に要する時間1/38400*10=260usとほぼ同じです。このため送信に時間ロスが発生することはありません。でもそれなら送信バッファ空TXEMPTYのチェックも不要になるわけで何か気になりますが一応これで動作はするのでとりあえずOKとしておきます。

 

CC900コンパイラはもちろん浮動小数点演算もサポートしているでまたまたマンデルブロ集合を描かせてみました。TLCS900/H1浮動小数アクセラレータを内蔵しているわけではないのでソフト処理による力技でそれほど速くはありません。高解像度はやめておいてキャラクタベースの80×40メッシュでやってみます。

 

生成されたバイナリは2474byte、描画時間は20秒でした

 

いま、ボード上には20MHzの水晶が付いていますがこれを10MHzに付け替えてクロックギアでPLL4逓倍に切り替えれば2倍速になるかもです