CPU実験室

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

モデム制御線(3)

ポインタレジスタWR0→コントロールレジスタWR5のアクセスの方法、タイミングは間違いないはずなんですが、念のためリカバリタイムを稼ぐiowait()ループをインラインで埋め込んでみました

GCCアセンブラ中間ファイルを確認してみるとソース通りの効率の良いコードを出力しています。ソース中の16進表記が全て10進になってしまうのがちょっとあれですが

これを実行してみるとサブルーチンコールが無くなった分、レジスタ間インターバルは2.3usと少し短くなりますがまだ十分規格内です。あとはスタック操作が無くなるので2回のI/Oレジスタ書込みの間に/WRが動かなくなっていることがわかります

これがどう効いたのかこのルーチンではDTRピンがちゃんと制御できLEDがチカチカするのです。

2回のI/Oレジスタアクセスの間の/WRはメモリに対するもので、その間はAm85C30の/CSは閉じてるわけで影響しようが無いはずなんでちょっと腑に落ちません。とりあえず動いたので良しとしますがCPUバスクロックに対してAm85C30のPCLKが低すぎというのはいまいちなのでこれは修正することにします