CPU実験室

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

モニタ始動

ROM上で動作する原始モニタが動作し始めました。シリアルから入力したプログラムコードをオンチップRAMの0x8000200番地からセットするロード「L」と0x8000200番地に制御を移す実行「G」だけしかありませんが、いままでプログラムを変更するたびにROM4個を焼いて差し替えていた手間に比べ格段に楽になりました。なによりもPLCCのROMを交換するたびにソケットのバネがヘタらないかとひやひやするのから解放されます。

実は最初、LEDチカチカとかシリアル垂れ流しとかROMに固定して動いていたプログラムがモニタ上ではちゃんと動かず悩んだのですが、これはバイナリをROMに焼くときと同じようにわざわざD23D22スワップしていたためでした。オンチップRAMは当然正しく接続されてますからスワップは不要です。同様に今後外付けSRAMに展開する場合も接続は正しいのでやはりそのままロード可能です。

次に少し大きいプログラムとしてロード、実行してみたのが以下のプログラムです。リセット直後にLDLPでWorkspaceポインタの値を取得して8桁HEX表示させるもので先頭部分だけ示します

4bitバイナリ→ASCII変換は手抜きしていて0x30(’0’)とORしているだけなので0x0A以上の入力では文字化けしますが、それはちょっと置いときます。それより相対アドレスでの飛び先がおかしいのはまだ解決できておらず、アセンブラが出力したコードをバイナリエディタで修正する作業は必要です。

さてこのコードを「L」コマンドでロード(転送終了で抜けないので強制リセット)、その後「G」コマンドで実行させた結果が以下です

 

つまりリセット直後のWorkspaceポインタの初期値は0x80000070である、ということです。これは4kbyteあるオンチップRAMのうちユーザに開放された0x80000070~0x80000FFFの先頭部分(MemStart)になります。

言われればああそうなんだ・・という感じでリセット後のレジスタ初期値はマニュアルのどこかに書いてありそうなものなんですが、その記述を見つけられてません。