復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第48回]
●FILL00プログラム
前回からの続きです。
前回はファイルオープン(ファンクションコール0FH)とシーケンシャルリード(ファンクションコール14H)を使ったテストプログラムとして、TYPEプログラムをご紹介しました。
確かにファンクションコールはなかなかに便利です。
ファイルオープンとか、ファイルリードとかを全てマシン語で書く、ということになりますと、これは大変なプログラムになってしまいます。
それがファンクションコールを使うことによって、その部分はほとんど何も考えなくても、簡単にプログラムできてしまうのですから、これは便利に違い有りません。
8ビットパソコンのOSとしてCP/Mが一世を風靡したのもなるほどとうなずけます。
ただ今日からあらためて見ますと、いろいろ気になるところがあるのも事実です。
TYPEプログラムは以前に[第15回]で、「応用CP/M」に載っていたサンプルプログラムとしてご紹介したプログラムと機能的には全く同じものです。
そのときは、実行時にEOFコードの有無によって、テキスト末尾にゴミが表示されてしまうという問題点について書きました。
CP/Mの標準的なファイルシステムでは、ファイルのセーブ、ロードはページ単位(256バイト)で行なわれ、実バイト数単位ではないため、ファイルの終わりが見えない、という短所があります。
[第15回]では、その対策としてEOFコードというものについて説明をしました。
しかしその後に「応用CP/M」を読んでいましたら、どうやら著者は別の方法で、それを回避していたようです。
それは、テキストファイルをロードする前に、メモリ範囲を00でクリアしておく、という方法です。
それも面倒であることには違いはありませんが、確かにひとつの解決策であることは事実でしょう。
そこで今回は、TYPEプログラムの対象にするつもりのテキストプログラムを、メモリにロードしてRAMディスクに保存する前に、メモリエリアを00でクリアしておくプログラムを作って、それを先に実行しておくことにいたします。
下がそのソースリストです。
たったこれだけの簡単なプログラムです。
; FILL 00 8100-87ff ; ORG $8080 REENT=$1033 ; LD HL,$8100 LD B,00 LOOP:LD (HL),B INC HL LD A,H CP 88 JP NZ,LOOP JP REENT ; |