復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第453回]
●回路図を修正しました
お得意さまから急ぎの注文をいただきましたので、この2日ほどはHPの更新ができませんでした。
やっと本日納品できましたので、ほっと一息ついたところです。
E−80ミニコンの試作品作業もやっと完了し、こちらも本日Y様宛に発送できました。
でも、まだやらなければいけない注文などが残っていますので、今年も私にはお盆休みはなさそうです。
前回の続きです。
回路の間違いに気が付きましたので、基板の配線を直すとともに、回路図も訂正いたしました。
下は訂正後の回路図です。
(4)クロック回路
「CP/M」信号が74HC139(1)のpin10からの出力になっていたところをpin9からに直しました。
●DIPSW1とDIPSW2の行き先
74HC139(1)の出力信号はフロントパネルのLEDを点灯させるためのもので、OSの起動には関係はありません。
ディップスイッチの設定をOSの選択起動に結びつけるためには、ディップスイッチの状態をソフトウェアで読む必要があります。
ND80ZV(ND80Z3.5)でもTK−80モニタとND80Zモニタを選択するのに同じようにディップスイッチの状態をソフトウェアで読み込むことで行なっています。
上の回路図を見るとDIPSW1とDIPSW2の信号は二手に分かれています。
その行き先の一方はここに来ています。
(8)I/Oアドレス回路/プリンタ&スピーカー回路
82C55のPC5とPC6に入っています。
そしてもう一方はここに来ています。
(9)PIC16F886回路
74HC157のPIN2とPIN14に入っています。
これはこのように設計した時点では、OSの選択起動の仕組みについてはっきりと考えがまとまっていなかったため、迷いがあったからです。
82C55への入力はプログラムで直接読み込みます。
74HC157への入力はPIC16F886が読み込みます。
PIC16F886はイニシャルローダーのセットを行ないます。
当初はイニシャルローダーの段階でPIC16F886の中でOSの選択起動を行なうようにできないか、という考えもあってこのようにしたのです。
しかし結局はイニシャルローダーは単一のローダーにしておいて、OSの起動はその先のところで行なうことに決めました。
あれえ。
今気が付きました。
現在のプログラムではそのところを結構面倒な方法で行なっています。
むむ。
82C55にもDIPSWの値を読み込ませていたことをすっかり忘れてしまっていたようです。
今はPIC16F886がDIPSWの値を読んで、イニシャルローダーをロードする過程で、そのDIPSWの値をPIC16F886がRAMに書き込んで、その後にプログラムでその値を読み出すという面倒なことをしています。
82C55から読み込むならそんな面倒なことはしなくてすみましたのに。
いずれのちほどこの部分は変更しておくことにいたしましょう。
いかにもみっともない話ですから。
おお。
こういうところまで話が来てしまいましたから、イニシャルローダーについて、説明をすることにいたしましょう。
●イニシャルローダー(IPL)の仕組み
すでに何回も書いておりますように、E−80ミニコンにはRAMだけがあってROMはありません。
代わりにフロントパネルからスイッチパチパチでRAMに直接プログラムを書き込むことができますから、そのようにしてイニシャルローダーをRAMに書き込むこともできます。
事実、Y様のお考えで、そういう仕組みもほしい、ということでしたので、そのようにしてOSを起動することもできます。
しかし、なんたってE−80はスーパーミニコンでありますから、それだけではいかにもなんだかなあ、という感じになってしまいます。
もちろん、ですからフロントパネルのスイッチパチパチ以外にも電源を投入すると同時にオートマチックにOSを選択起動する仕組みもちゃんと備わっています。
あ、もっとも、Windows側でZB3DOS.EXEを起動させるための操作は必要ですけれど。
それじゃあROMもないのに、一体どうやって、ということなのですが、経験豊富な読者諸賢におかれましては、すでにその方法は十分おわかりかと思います。
そのネタは上でお見せしましたPIC16F886の回路図に仕込んであります。
見ていただきますと通常のPICではない変わった回路になっています。
まず目に付きますのがRA4の出力です。
ずらっとダイオードが並んでいます。
その先はアドレスバスにつながっています。
RA4の出力をLにするとアドレスバスのA7〜A19が全部0になってしまいます。
それだけではなくて、これは[第448回]の回路図で確認していただければはっきりわかりますが、RA4をLにすると、実はなんとCPUのRESETを強制的に継続してリセット状態にしてしまいます。
と同時にRAMのCEをアクディブにして、RAMをアクセス状態にします。
そして、RC0〜RC6がアドレスバスのA0〜A6に出力されています。
またRB0〜RB7が74HC244を介してデータバスにつながっています。
そしてちょっと作図の都合で反対側を向いていて気持ちが悪いのですが、RA5がMEMWRにつながっています。
もうおわかりいただけたと思います。
そうなのです。
ROMを使う代わりに、イニシャルローダーをPIC16F886に仕込んでおいて、それを(PIC16F886がCPUを押さえておいて)RAMに書き込んでしまうのです。
PIC16F886がアドレスバスのA0〜A6を制御しますから(そしてA7〜A19はオール0にしますから)、アドレス0000〜007Fまでの最大128バイトのプログラムを書くことができます。
イニシャルローダーとしては十分なサイズです。
次回はPIC16F886に仕込んだイニシャルローダーと、それをRAMに書き込むためのPICプログラムについて説明いたします。
ワンボードマイコンでCP/Mを![第453回]
2013.8.8upload
前へ
次へ
ホームページトップへ戻る