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

復活!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
;

現在の仮CP/Mシステムのトランジェントエリア8100H〜87FFHに00を書き込みます。
8100H(本来は0100H)から後のエリアに00を書き込みますから、8100Hからロードして実行する、通常のCP/Mのプログラムは使えません。
そこでアドレス8080Hからロードして、ZB3BASIC上で実行します。

説明の途中ですが、本日も時間がなくなってしまいました。
この続きは次回にいたします。

ワンボードマイコンでCP/Mを![第48回]
2012.3.2upload

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