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

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

[第38回]

●フォーマットプログラムのアセンブルと実行

前回お見せしました、仮RAMディスクのフォーマットプログラムはnd80z3フォルダーで作成保存します。

; FILL E5 for CP/M RAM DISK
;
     ORG $8100
     REENT=$1033
;          
	LD HL,$8800
	LD B,E5
LOOP:LD (HL),B
	INC HL
	LD A,H
	CP B8
	JP NZ,LOOP
	JP REENT
;

このプログラムはND80ZVに附属のZ80アセンブラ(ZASM.COM)でアセンブルします。
CP/MソースをアセンブルしたフリーのZ80アセンブラZASM1.64を使ってもよいのですが、文法が少し違いますから、このリストのままだとエラーになってしまいます。
小さいプログラムでしたら、ZASM.COMを使った方が簡単です。
アセンブラを起動するコマンドはどちらも同じ ZASM ですから、それで作業フォルダを使い分けているのです。
CP/Mソースのアセンブルはzasm164mフォルダで作業します。
ND80ZV用のプログラムの作成、アセンブルや実行はnd80z3フォルダで行ないます。

下は、フォーマットプログラムfille5.txtをアセンブルし、続いてusbでND80ZVと接続し、zb3コマンドを入力して、接続を確立したところです。



この作業は本当はnd80z3フォルダで行なうのですが、ここでは開発上の都合から、別のフォルダ¥cpp¥nd3cpmで行なっています。
zasm fille5.txt の実行によって、fille5.binが作成されました。
参考までに、zasmの実行によってバイナリファイルの作成と同じに作られたアセンブルリストをお見せします。

2012/2/18  22:17  fille5.txt
END=810F
              ; FILL E5 for CP/M RAM DISK
              ;
                   ORG $8100
                   REENT=$1033
              ;          
8100 210088   	LD HL,$8800
8103 06E5     	LD B,E5
8105 70       LOOP:LD (HL),B
8106 23       	INC HL
8107 7C       	LD A,H
8108 FEB8     	CP B8
810A C20581   	JP NZ,LOOP
810D C33310   	JP REENT
              ;
              
LOOP         =8105  REENT        =1033  

そのあとzb3[Enter]でND80ZVと接続しました。
このあと z[Enter]と入力するとZB3BASICが起動します。

下の画像は、ZB3BASICの起動後に、fille5.binをロードし、それから実行し、次にcpm22g.binをロードしたところです。



/ld fille5.bin,8100[Enter]で、fille5.binが8100Hにロードされました。
そのあと続いて、jp 8100[Enter]でfille5.binが実行されました。
その下のところでは、実行された結果を確認しています。
ダンプメモリコマンド(DM。ここでは省略形D.を使っています)で、まずRAMディスクの先頭部分(8800〜884F)を表示させ、続いて終わりの部分(B7C0〜B7FF)を表示させています。
続いて、/ld cpm22g.bin,bc00[Enter]で、cpm22g.binをbc00にロードしました。
そのあと、jp d233で、CP/Mの初期設定ルーチンにジャンプします。

以上の実行はND80ZVのZB3BASICのコマンドを使って実行しています。
最後の jp d233 の実行によって、いよいよCP/Mにエントリします。

●CP/Mの起動

jp d233[Enter]の実行によって、CP/Mが起動し、a>が表示されたところです。



CP/Mシステムを起動すると、起動メーセージが表示されるのですが、ここではいきなりCP/M本体にエントリしていますから、メーセージなしですぐに、a>が表示されます。

●DIRコマンドの実行

ディレクトリ表示コマンドdir[Enter]を入力してみました。



フォーマット直後で何も保存していませんから、No file と表示されました。

●SAVEコマンドの実行

試しにさきほどロードして実行した、fille5.binを保存してみました。



ファイルをディスクに保存するにはsaveコマンドを使います。
saveコマンドはトランジェントエリアにあるプログラムをページ単位(256バイト)でディスクに保存します。
ページについては[第14回][第15回]で説明をしています。

トランジェントエリア(ユーザーズエリア)は0100Hから始まりますが、今はまだメモリ増設基板は実装していませんから、仮に8100Hからということにしてあります。

fille5.binプログラムはZB3BASICの/LDコマンドで8100Hにロードしました。
今はZB3BASICからCP/Mに制御が移っていますが、8100Hにロードしたfille5.binプログラムはそのまま残っています。

8100〜810Fまでの短いプログラムで、当然1ページ(256バイト)以内ですから、
save 1 fille5.com[Enter]と入力しました。
    ↑ ページを示す数値
CP/Mでは実行形式のファイル(バイナリファイル)は拡張子COMをつけて保存します。

そのあともう一度dir[Enter]を実行すると、今度はファイル名FILLE5.COMが表示されました。

●ユーザープログラムの実行

ディスクに保存したFILLE5.COMファイルを実行してみます。
COMファイルはファイル名をコマンドとして入力すると、ディスクからトランジェントエリアにロードされて、直ちに実行されます。



fille5[Enter]と入力しました。
fille5はプログラムの終わりでZB3BASICのエントリポイント(1033H)にジャンプしますから、その実行の結果、a>ではなくて>が表示されています。
CP/MからZB3BASICに制御が戻ったことを示しています。

実はこのあと時間が無くなったため、このあと行なった作業の画面コピーはしませんでした。
この続きはログファイルで説明することにいたします。
こういうときにログファイルの機能は重宝します。

logfile nd80zlog\02182218.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>/ld fille5.bin,8100
loading FILLE5.BIN ...0010(16)bytes loaded,from 8100 to 810F
>jp 8100
>d.,8800,884f
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  ................
>d.,b7c0,b7ff
B7C0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
B7D0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
B7E0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
B7F0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
>/ld cpm22g.bin,bc00
loading CPM22G.BIN ...1709(5897)bytes loaded,from BC00 to D308
>jp d233

a>dir
No file
a>save 1 fille5.com
a>dir
A: FILLE5   COM
a>fille5

>jp d233  もう一度CP/Mに戻ります

a>dir
No file
a>save 1 fille5.com
a>dir
A: FILLE5   COM
a>^D>a>^D> ZB3BASICに戻ります

ERR:23 
>d.,8800,887f
8800  00 46 49 4C 4C 45 35 20-20 43 4F 4D 00 00 00 02  .FILLE5  COM....
8810  02 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
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  ................
>/exit
0000 00C3 - 
リモート接続を終了しました
logfile closed at Sat Feb 18 22:38:20 2012

ZB3BASICに戻った後、jp d233[Enter]でもう一度CP/Mに戻りました。
上の「もう一度CP/Mに戻ります」とコメントしたところです。

FILLE5プログラムの実行によって、RAMディスクエリアをE5でクリアしてしまいましたから、DIRコマンドを実行すると、No Fileと表示されました。

そこで、もう一度さきほどと同じように、save 1 fille5.com[Enter]を実行して、ファイルを保存したあと、今度はFILLE5.COMを実行しないで、[Ctrl][D]を入力してCP/Mを強制終了して、ZB3BASICに戻りました。

CP/Mの終了は本当は[Ctrl][C]を入力するのですが、そうするとZB3BASICそのものが強制終了してしまいますから、代わりに[Ctrl][D]を使います([第20回]参照)。

^D>の表示後に[Enter]を押すと改行してERR:23が表示されますが、これはZB3BASICがそのような操作を想定していないからです。
これ以後ZB3BASICの通常の操作が可能になります。

RAMディスクの先頭のディレクトリエリアをダンプメモリコマンドで表示させてみました。
D.,8800,887F[Enter]の実行です。
FILLE5.COMがファイルとして登録されています。
ディレクトリエリアは1ファイルにつき32バイトを使います。
ファイル名の後、右端に02と表示されているところがファイルサイズです。1ページ(2セクタ=256バイト)を示しています。
後半の16バイトにはデータ(プログラム)が保存されているブロックb格納します。
ここにも02が表示されています。
これはブロックbQを示しています。
ブロック0とブロック1はディレクトリエリアに割り当てられていますから、その後のブロック2からがデータの保存用に使われます。

ND80ZVをお持ちの皆様は、これまでの説明の通りに作業していただきましたら(メモリ増設基板の作成やROMの変更作業は除外します)、今回説明しました通りのことを実際に体験していただくことができます。
ぜひ皆様ご自身で体験してみてください。

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

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