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

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第84回]

●RAMディスクの再構築

前回からの続きです。
前回は、AドライブとBドライブの2つに分けた新しい仮のRAMディスクシステムにアクセスできるようにCP/Mを変更しました。
変更したCP/Mを実際に走らせるには、RAMディスクをそのように整えておく必要があります。

でもその前に、まずは現在のAドライブだけのRAMディスクを保存しておくことにします。

logfile nd80zlog\04041833.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>jp d233

a>dir
A: FNC0BTST COM : FNC0BT2  COM : FNC0BT3  COM : FNC0BT4  COM
A: FNC0BT1  COM : FNC0BT6  COM : FNC0BT7  COM : FNC04T1  COM
A: FNC0BT5  COM : FNC0304T COM : SOUSINT  COM : FN0304T2 COM
A: FNC06T2  COM : FNC06T3  COM : FNC06T4  COM : FNC06T5  COM
A: FNC06T6  COM
a>^D>a>^D>

ERR:23 
>/sv ramdskb.bin,8800,b7ff
3000(12288)bytes saved
>

一旦CP/Mを起動して(まだ変更前のCPM22J.BINのままです)、DIRコマンドでディレクトリを確認してから、ZB3BASICに戻ります。
ZB3BASICの/SVコマンドで、RAMの8800〜B7FFをRAMDSKB.BINの名前でハードディスクに保存します。

またこの状態に戻したいときは、いつでも/LDコマンドで元に戻すことができます。
しかし、そのときはCPM22J.BINも再ロードする必要があります。

さて、いよいよ、RAMディスクの再構築です。
と言っても、8800〜B7FFをE5でクリアするだけです。
この段階ではAドライブとBドライブを分ける必要はありません(それはBIOSによって行なわれます)。

>/ld fille5.bin,8100
loading FILLE5.BIN ...0010(16)bytes loaded,from 8100 to 810F
>jp 8100
>dm 8800,88ff
8800  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8810  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8820  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8830  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8840  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8850  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8860  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8870  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8880  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
8890  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88A0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88B0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88C0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88D0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88E0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88F0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
>

RAMディスク領域をE5でクリアするプログラム(FILLE5.BIN)は[第38回]で説明をしています。
アドレスの8100にロードしますが、CP/Mのトランジェントプログラムではありません。
ZB3BASIC上で実行します。
/LD FILLE5.BIN,8100[Enter]でロード後、
JP 8100[Enter]で実行します。

実行後、念の為にRAMディスク領域の始めのあたりを、DMコマンドで表示させてみました。
ちゃんとクリアできたようです。

●CPM22K.BINのロードと実行

前回作成したCPM22K.BINをロードして、JP D233[Enter]で実行しました。


>/ld cpm22k.bin,bc00
loading CPM22K.BIN ...177b(6011)bytes loaded,from BC00 to D37A
>jp d233

a>dir
No file
a>b:
b>dir
No file
b>c:
Bdos Err On C: Select
a>


a>の表示にDIR[Enter]と入力しました。
FILLE5.BINを実行してRAMディスク領域をクリアした直後ですから、No fileと表示されました。
次に
a>b:[Enter]
と入力したところ、
b>
と表示されました。
カレントドライブがBドライブになりました。
DIR[Enter]
と入力したところ、ここでも
No file
と表示されました。
次は
b>c:[Enter]
と入力しました。
Cドライブは定義していませんから、アクセスできません。
Bdos Err On C: Select
と表示されて、ここでキー入力待ちになりました。
ここで何かキーを入力すると、リブートが行なわれて、
a>
と表示されます。

エラー表示のあと、キー入力待ちになるのは、たとえばディスクドライブにディスクが挿入されていなかったというような場合などに、アクセスできる状態にしてから、リブートさせるようにするためだと思われます。

ともあれ、Bドライブの追加はうまくいったようです。
これでやっと、ファンクションコール0Eのテスト作業に入れます。

●最も簡単なファンクションコール0Eテストプログラム

もうこれ以上はない、という超シンプルなテストプログラムです。

; BDOS function 0E test
;
     ORG $8100
     FCALL=$8005
;
	LD C,0E
	LD E,00;drive a
	CALL FCALL
	RET
;

デフォルトのドライブにAドライブを指定して、すぐにリターンします。

こちらは、アセンブルリストです。

2012/4/4  18:44  fnc0e_0.txt
END=8107
              ; BDOS function 0E test
              ;
                   ORG $8100
                   FCALL=$8005
              ;
8100 0E0E     	LD C,0E
8102 1E00     	LD E,00;drive a
8104 CD0580   	CALL FCALL
8107 C9       	RET
              ;
              
FCALL        =8005  

このプログラムをBドライブにセーブします。
ZB3BASICにエントリして、
/LD FNC0E_0.BIN,8100[Enter]
を実行します。
そのあと
JP D233[Enter]
でCP/Mを起動します。

>/ld fnc0e_0.bin,8100
loading FNC0E_0.BIN ...0008(8)bytes loaded,from 8100 to 8107
>jp d233

a>b:
b>save 1 fnc0e-0.com
b>dir
B: FNC0E-0  COM
b>fnc0e-0

b>

CP/Mを起動したあと
a>b:[Enter]
で、カレントドライブをBドライブにしました。
SAVE 1 FNC0E−0.COM[Enter]
で、FNC0E−0.COMというファイル名でBドライブにセーブしました。

ファイル名を’_’から’−’に変えたのは、CP/Mではファイル名に’_’が使えないからです。
DIRコマンドを実行して、FNC0E−0.COMがセーブされたことを確認しました。

そのあと、
FNC0E−0[Enter]
と入力しました。
瞬時に実行は完了し
b>
と表示されました。

?????
おかしいです。
FNC0E−0.COMはデフォルトドライブ(カレントドライブ)をAドライブにするはずです。
実行終了後は、
a>
と表示されることを期待したのですが…。

念の為に、別のテストプログラムを作って、もう一度試してみることにしました。

こちらはそのソースプログラムです。

; BDOS function 0E test
;
     ORG $8100
     FCALL=$8005
;
	LD C,0E
	LD E,01;drive b
	CALL FCALL
	RET
;

さきほどのプログラムはデフォルトドライブをAドライブにしましたが、このプログラムはデフォルトドライブをBドライブにしてリターンします。

こちらはアセンブルリストです。

2012/4/4  21:45  fnc0e_1.txt
END=8107
              ; BDOS function 0E test
              ;
                   ORG $8100
                   FCALL=$8005
              ;
8100 0E0E     	LD C,0E
8102 1E01     	LD E,01;drive b
8104 CD0580   	CALL FCALL
8107 C9       	RET
              ;
              
FCALL        =8005  

このプログラムはAドライブにセーブします。

さきほどと同じように、ZB3BASICにエントリして、
/LD FNC0E_1.BIN,8100[Enter]
を実行したあと
JP D233[Enter]
で、CP/Mを起動しました。

>/ld fnc0e_1.bin,8100
loading FNC0E_1.BIN ...0008(8)bytes loaded,from 8100 to 8107
>jp d233

a>save 1 fnc0e-1.com
a>dir
A: FNC0E-1  COM
a>fnc0e-1

a>

a>
の表示に
SAVE 1 FNC0E−1.COM[Enter]
を実行して、Aドライブにセーブしました。

そのあとDIRコマンドで、Aドライブにセーブされていることを確認しました。

FNC0E−1[Enter]
と入力して実行してみたのですが…。

実行後は、やはり期待に反して、
a>
と表示されてしまいました。

むむむ。
デフォルトドライブとカレントドライブは別物なのでしょうか?

やっぱりテストプログラムが簡単過ぎたようです。
次回はもう少し、ましなプログラムを作って、試してみることにいたします。

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

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