CPU実験室

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

OCCAMでLチカ

I/Oポートのアクセスは出来ているようなのでパラレルLEDにインクリメントデータを出力してLEDチカチカをやってみます

OCCAMで書いたソースはこうなりました。mainプロシージャの中でLEDへデータを出力するledプロシージャと時間待ちをするwaitプロシージャを定義してあります。こうすることでmainプロシージャのエントリポイントがバイナリの先頭になります

できあがったバイナリは48H(72)byteでした

これをモニタで0番地からロード、0番地から実行するとLチカ成功しました。SCN2681の下に並んだ8個のLEDがチカチカしてます。

ところがよく見ると基板左下隅にある黄色のエラーLEDが点灯しています。これはCPU内部のエラープラグを反映したものでIMST805データシートによるとエラーフラグが立つのは算術オーバーフロー、ゼロ除算、配列境界違反、またはソフトウェアによるフラグの直接設定である、とあります。いやそんなことはしてないはずなんですが・・

 

そこでこれもバイナリコードをハンド逆アセンブルしてみました。適宜ラベルを挿入していますが非常に効率が良くわかりやすいコードが出力されています

ほとんどソースコードそのままの処理でエラーが出る要因はなさそうなのですが、ちょっとよくわからないのがledプロシージャの引数dataに、
  LDC    #100
  CSUB0

という処理をしている所です。これは何をやってるのかです