MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第4回]
●ROMからRAMへの切換え
前回の続きです。
前回はメモリアドレス9000〜で動くように書き換えたTK−80モニタプログラムをRAMの9000〜にロードしたところまでで終ってしまいました。
今回はそこからの続きです。
TK−80モニタではLOADキーによるロードが完了すると7セグメントの左4桁(アドレス表示部)にロードしたデータ(プログラム)の先頭アドレスが表示されます。
ADRSSETキーによってアドレスをセットしたのと同じ結果になっています。
そこでそのままRUNキーを押すと、9000〜のTK−80モニタが実行されます。
すると下の図のように、メモリアドレスの0000〜7FFFには増設メモリボードのRAMが選択されます。
え?
まだI/Oアドレス9C〜9Fに何も出力していないのに?
いえいえ。それがちゃんと出力しているのです。
I/Oアドレスの9C〜9Fはキースキャンに使用されていて、増設メモリボードを取り付ける前までは、9C〜9Fには、キー入力をスキャンするためにFE、FD、FBが出力されていました。
そのままではビット3=1なのでキー入力ルーチンが実行されるとRAMが選択されてしまいます。
それでは都合が悪いのでF6、F5、F3を出力するようにROMのTK−80モニタプログラムを書き換えました。
そのことについては[第2回]で説明しました。
もうおわかりいただけたと思います。
そうです。
9000〜に置いたTK−80モニタプログラムはキースキャンのときの出力の値を、ROM書き換え前のFE、FD、FBにしてあるのです。
なので9000〜に第2のTK−80モニタプログラムをロードして、それを実行するだけでROMからRAMへの切換えがいわば自動的に行なわれることになります。
このことは最初から狙ってそのようにしたのではなくて、たまたまそのような都合のよいことになる、ということに偶然気が付いたのでした。
実のところ余りに簡単に都合よくROMからRAMへ切り換わってしまったので、かえって最初は、ほんまかいなあ?とちょっと疑ってしまいました。
なにしろROMからRAMに切り換わっても、RAM上でもROMのときと同じTK−80モニタプログラムが動いているわけですから、ただ見ただけではどちらのプログラムが動いているのか判断できません。
試しに1000番地台のメモリアドレスの値をちょこちょこと書き換えて、それが本当に書き換わっていることを確認してみてやっとROMからRAMに切り換わっていることを実感できました。
しかしこれはちょっと面白くありません。
そこで、見ただけでROMのTK−80モニタかRAMのTK−80モニタかがわかるようにちょいと7セグメントの表示に細工をしました。
RAMの9000〜にTK−80モニタプログラムをロード後にRUNキーを押した直後の写真です。
この時点でRAMのTK−80モニタが実行されて、アドレス0000〜7FFFは増設メモリボードのRAMに切り換わっています。
こちらはROMのTK−80での普通の表示です。
ご覧いただいてわかりますように、ゼロの形を変えました。
これで一目瞭然です。
ゼロの形を見ればそれだけでROMからRAMに切り換わったことがわかりますから、これで安心してこの先のデバッグ作業が行なえます。
ここまでを読んでいただきますと、実に簡単にことが運んだように思えますが、現実はそんなに甘いもんじゃありません。
最初は9000〜にTK−80モニタプログラムをロードした後、RUNキーを押すといきなり暴走してしまいました。
なぜだ?
ひょっとすると増設メモリ回路に問題が?
ま。実際回路にミスがあったのですが。
繰り返し試していますと、ゼロの表示が一瞬大きいゼロの形になったあと暴走するらしいことがわかりました。
RAM上のTK−80モニタに切り換わった直後に暴走する???
しばし沈思黙考。
やっと原因らしきものがわかりました。
TK−80モニタはエントリ直後にワークエリアとともに7セグメント表示部をクリアしています。
そのためにリセット後には7セグメント表示がオールゼロになります。
当然それはアドレス表示部が0000であることにもなります。
そこに問題がありました。
RUNキーを押す→9000〜のTK−80モニタが実行される→7セグメントのアドレス表示部が0000になる→キースキャンが開始される→アドレス0000〜7FFFがROMからRAMに切り換わる
ここまでは一瞬の内に実行されます。
当然。
まだRUNキーは押されたままです。
すると、(RAMの)アドレス0000のプログラムが実行されます。
しかし。
そこにはまだ何もプログラムは書かれていませんから、それで暴走してしまうことになったのではないか、と推理しました。
そこで9000〜にロードするTK−80モニタプログラムは先頭で7セグメント表示部のクリアを行なわないように書き改めて、再度実行してみたところ、それ以後は暴走しなくなりました。
めでたし、めでたしです。
そこで最後の仕上げです。
RAMのアドレス0000〜にTK−80モニタプログラム(3)をロードします。
このモニタプログラムは実はROMのTK−80モニタプログラムと同じものです。
TK−80モニタ(3)をロードするわけは、このモニタプログラムの中のSAVE、LOADサブルーチン(PIC、FT232RLを介してパソコンとの間で送受信をおこなうサブルーチン)を、これから作り上げていく予定のZB3BASICとCP/M互換DOSがコールしているからです。
ほんとうは、そのサブルーチン部分だけあればよいのですが、わざわざその部分だけをとりだして別のプログラムにしてロードするのは、今の段階ではかえって面倒なので、このようにTK−80モニタを丸ごとロードしています。
これで準備が整いました。
いよいよZB3BASICの改造です。
MYCPU80でCP/Mを![第4回]
2014.7.24upload
前へ
次へ
ホームページトップへ戻る