CPU実験室

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

ブート処理(2)

リンク先のボードをブートするコードはこうなります。

まず制御コード1バイト:BOOT_CMDの内容はジャンプコード(J 0x00000000)の長さ8バイトを示す0x08を送り、その後ジャンプコードの実体が続きます

では実際に動作させるユーザアプリケーションの方はというと。これは何でも良いのですがCPUが正常に動いていることがわかるようにパラレルLEDにインクリメントデータを出力してチカチカさせるものを用意しました。単純ループだとLEDの点滅が速すぎて動いているかわかりません。16bitカウントアップするwaitloopで時間稼ぎして目視できるチカチカとしました。

このコードはロードアドレスを0x00000000からとしているので、このままROMモニタで直接DLLしても動作します。

モニタから動作させる場合には既にモニタが起動しているので、内部/外部レジスタ等の初期化処理も行われていてユーザプログラムはその環境を継承しますが、リンク先で起動する場合はそれらの初期化処理を経ずにダイレクトに起動しようとします。

たとえばシリアル出力処理を挿入したら全然キャラクタ送出が行われず送信完了フラグ待ちでロックしてしまうのがなかなか理由がわからなかったのですが、これは単純にシリアルコントローラの初期化が行われていなかったからでした。ただしROMからブートしていなくてもメモリマップ上にROMは見えるのでROM内ルーチンを呼ぶことは可能です