復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第10回]
●仮想フロッピーディスク(RAMディスク)
今回はND80ZVのRAMエリアに仮設する仮想フロッピーディスクについて説明をいたします。
フロッピーディスクの制御はなかなかに大変ですが(通常はFDC、フロッピーディスクコントローラを使います)、それがRAMディスクということになれば、なおのこと大変だろう、と思われるかもしれませんが、そんなことはありません。
以外と簡単なのです。
なんといっても現物のフロッピーディスクと違って、ハードウェアからくる制約がありませんから、自由に設計ができます。
といってもあくまでモデルとして扱うのが目的ですから、あまり現物とかけ離れたものにしてしまっては意味がありません。
そこそこ現実にありそうなものとして設計をします。
[第8回]でメモリマップ図で説明をしましたように、仮想フロッピーディスク(RAMディスク)として、8800〜B7FFのRAMエリアを使うことにします。
12KBのエリアです。
いくらモデルとはいえ、それでは余りに小さすぎるのではないか?
と思われるかもしれません。
確かに小さいことは事実なのですが、でもまあテスト的に使うだけですから、ほら、よく映画のセットであるような、ごく一部分だけを切り取って作った模型のようなものだと考えてください。
さて、ここにトラックとセクタを配置します。
CP/Mでは1セクタを128バイトとして扱います。
実際のフロッピーディスク上のセクタは128バイトとは限りません。
ですが、ここではなるべくソフトに余計な負担はかけないように、できるだけシンプルに考えたいと思いますから、仮想フロッピーディスクの1セクタも128バイトということにします。
そして1トラックは16セクタにします。
すると1トラックは128×16=2048バイトになります。
下図はそのようにしたときのメモリマップです。
1トラックが2KBですから、8800〜B7FFの12KBのエリアには、ちょうど6トラックが配置されることになります。
トラックの中のセクタも図のように割り当てられます。
このようにメモリマップに実際に割りつけてみると、メモリを規則正しく分割して、そこに番号をつけただけだということが見えてきます。
さて、ここまで決まったらいよいよBIOSの作成です。
BIOSの仕事は簡単に言ってしまうと、BDOSから要求されたXXトラックの〇〇セクタのデータ(128バイト)を読み出して、指定のDMAバッファにCOPYするか、逆にDMAバッファにある128バイトのデータを指定のセクタに書き込むことです。
いかがでしょう。
上のメモリマップを見ると、おお、そんなことならできそうだ、という気になってきませんでしょうか?
まだ実際のCP/Mの移植作業にもかかっていないうちから、いきなりBIOSの話になってしまいました。
そういうつもりではなかったのですが、話の成り行きでこういうことになってしまいました。
でもまあ、どうせ作業しなければなりませんから、先にこの部分のBIOSについて説明をしてしまうことにいたします。
●BIOSのディスクアクセスルーチン
BIOSはCP/Mのメインルーチン(CCP、BDOS)からコールされる機種固有のアクセスプログラムです。
ここではまずそのうちのディスクアクセスに関するルーチンについて説明をします。
ディスクアクセスに関係するルーチンには次のものがあります。
1)SETTRACK
Cレジスタで指定されるトラック番号をセットする
2)SETSECTOR
Cレジスタで指定されるセクタ番号をセットする
3)SEEKHOME
読み出し書き込み開始位置をトラック0、セクタ0にセットする
4)READSECTOR
現在セットされているトラック、セクタの128バイトのデータをDMAアドレスエリアにCOPYする
5)WRITESECTOR
現在セットされているトラック、セクタに、DMAアドレスエリアの128バイトのデータを書き込む
このほか、ドライブユニットを選択するルーチンなどもありますが、いまのところそれはあっても意味のないルーチンですから、ちょっと横においておくことにします(Aドライブしかありませんから)。
というところで、時間がなくなってしまいました。
でも、8080やZ80についてある程度の知識をお持ちの方でしたら、上のメモリマップと1)〜5)の機能解説を見れば、なーんだ、それなら簡単じゃないの、と思われたのではありませんでしょうか。
そのとおり、簡単なのです。
次回までに皆様、1)〜5)のプログラムを考えてみてください。
ワンボードマイコンでCP/Mを![第10回]
2012.1.20upload
前へ
次へ
ホームページトップへ戻る