標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第237回]

●ブートプログラムを変更しました

前回、「つくるCPU版」TK80モニタプログラムのリストをお見せしました。
ソースプログラムを自作の8080アセンブラにかけて出力したリストです。
同時にオブジェクトファイル(バイナリファイル)とヘキサASCIIファイル(16進コードをASCIIで表現したファイルです。[第182回]参照)も作成されました。

このヘキサASCIIファイルを、[第189回]で作成したUSBシリアル送信プログラムで、「つくるCPU」に送信します。
ところで、問題は「つくるCPU」の受信プログラム(ブートプログラム)です。
このブートプログラムは[第182回]で説明をしました。
もう一度お見せしましょう。



もうおわかりになった方もみえると思います。
このブートプログラムはメモリアドレスの0000から始まっています。
パソコンから送られてきたデータ(プログラム)はメモリアドレス0100から後ろに書き込まれていきます。
ところが今回パソコンから送るTK80モニタプログラムは、このブートプログラムと同じ、メモリアドレス0000から書き込まなければなりません。
当然、受信と同時にブートプログラムが破壊されてしまいます。

そこで、ブートプログラムを変更することにしました。
こういうときに、アセンブラはじつにありがたいツールです。
先頭のORGとLXI Hのところを直すだけで、あとのジャンプ先アドレスの変更などは、全部8080アセンブラが自動的に変更してくれます。
こんな具合です。



たったこれだけの短いプログラムですから、トグルスイッチをパチパチやって、メモリに書き込んでいってもたかが知れていますけれど、まだRAMの0000番地には、もとのプートプログラムが残っていますから、これを利用して、パソコンから送ることにしました。
もとのプログラムの先頭の210001のところだけ、トグルスイッチをパチパチやって、210010にすれば準備OKです。
もとのプログラムの最後のご奉公です。

●かくして新しいブートプログラムが「ブート」されました

受信プログラムを使って、新しい受信プログラムを受信してしまうってのは、面白い発想ですが、パソコンのOSなども、それと同じ発想で簡単なローダーからだんだんとより高度なローダーへと、ロードを繰り返しながら制御を移していきます。

かくして、無事、新しいブートプログラムがRAMの1000番地から書き込まれました。
この新しいブートプログラムを実行するためには、ちょいと作業が必要です。

データ書き込みモードにします。
古いブートプログラムが書かれている0000番地には、LXI H命令があります。
210010です。この最初の21を、トグルスイッチを使ってC3に書き換えます。
LXI H,$1000だったところが、JMP $1000(C30010)になりました。

これだけ書き換えれば準備OKです。
ふたたび実行モードにしてリセットスイッチを押せば、新しいブートプログラムが受信スタンバイになります。
そこで、パソコン側でUSBシリアル送信プログラムを実行すれば、TK80モニタプログラムが「つくるCPU」に送信されます。

以上の操作で、TK80モニタプログラムが、無事「つくるCPU」のRAMに書き込まれました。
もう一度、リセットスイッチを押すと、TK80モニタプログラムがスタートします。
[第235回]でお見せした写真です。

2009.6.1upload

前へ
次へ
ホームページトップへ戻る