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

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

[第209回]


このところいろんな作業が集中してしまって、記事の更新がままなりません。
ぼちぼち夏も終わりそうな気配ですが、私はと言えばまだまだしばらくはホットな日々が続きそうです。
ファンクションコールの最終的な動作テストを進める傍らで、複数の作業が進行中です。
その作業につきましては、近日中に皆様にご報告申しあげますので、いましばらくはちょいと退屈な検証作業の記事にお付き合いくださいませ。

●ファンクションコール25H(ディスクドライブのリセット)

前回テストしましたファンクションコール0Dはディスクドライブをリセットしましたが、ファンクションコール25Hもディスクドライブのリセットです。
ファンクションコール0DHは全てのドライブのライトプロテクトを解除しますが、それ以外はなにも変更しません。
ファンクションコール25Hはドライブb指定して(複数のドライブを指定可能)、そのドライブのライトプロテクトを解除するとともに、ログインベクトルの該当するビットも0にします。

ファンクションコール25Hは[第100回]で説明しました。
そこで作ったテストプログラムはFTST18です。
また結果を確認するために、ログインベクトルとR/Oベクトルを取り出して表示するプログラムも作りました。
FTST19です。

[第142回]ではRAMディスク版での動作テストをしています。

今回はFTST18を64KBフルRAM用に一部を書き換えてファイル名をVFTST18にしました。
またFTST19を64KBフルRAM用に一部を書き換えてファイル名をVFTST19にしました。
下はそのソースプログラムリストです。

●ソースプログラムVFTST18.TXT

; BDOS TEST18 function25 (disk reset )
;2012/4/16 8/31
;
     	ORG $0100
     	FCALL=$0005
	FCB=$005C
;
	LD HL,FCB
	LD A,(HL)
	LD HL,$0001
	DEC A
	JP Z,DISKRS
	ADD HL,HL
	DEC A
	JP Z,DISKRS
	LD E,3F;'?'
	LD C,02
	CALL FCALL
	RET
DISKRS:LD C,25
	EX DE,HL
	CALL FCALL
	RET

●ソースプログラムVFTST19.TXT

; BDOS TEST19 login vector & r/o vector    function18,1D
;2012/4/10 test12
;4/16 test19
;9/3
;
        ORG $0100
        FCALL=$0005
        FCB=$005C
;
        LD C,18
        CALL FCALL
        LD A,4C;'L' login vector
        CALL ADP
        CALL SPDP
        CALL HEX4DP
        CALL CRLF
        LD C,1D
        CALL FCALL
        LD A,52;'R' R/O vector
        CALL ADP
        CALL SPDP
        CALL HEX4DP
        RET
        ;
;CL & LF
CRLF:LD A,0D
        CALL ADP
        LD A,0A
        JP ADP
;space disp
SPDP:LD A,20
;A disp
ADP:PUSH BC
        PUSH HL
        LD E,A
        LD C,02
        CALL FCALL
        POP HL
        POP BC
        RET
;
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
B2HEX4:LD A,H
        CALL B2HEX2
        EX DE,HL
        LD A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
B2HEX2:PUSH AF
        RRCA
        RRCA
        RRCA
        RRCA
        CALL B2HEX1
        LD D,A
        POP AF
        CALL B2HEX1
        LD E,A
        RET
;binary to hex, low 4bit to ascii 1charactor
B2HEX1:AND 0F
        ADD A,30
        CP 3A
        RET C;0-9
        ADD A,07;A-F
        RET
;hex to binary, ascii 1charactor to low 4bit 
HTOB1:CP 30;>="0"?
        RET C;no
        CP 3A;<="9"?
        JP C,HTOB1_2;yes,"0" to "9"
        CP 41;>="A" ?
        RET C;no
        CP 47;<="F"?
        JP C,HTOB1_1
        CP 61;>="a"?
        RET C;no
        CP 67;<="f"?
        CCF
        RET C;no
HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F
HTOB1_2:AND 0F
        RET
;HL(bynary 2bytes) to asckii 4bytes & disp
HEX4DP:PUSH BC
        PUSH HL
        CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
        PUSH DE
        EX DE,HL
        CALL DEDP
        POP DE
        CALL DEDP
        POP HL
        POP BC
        RET
;A(binary) to asckii 2bytes HEX & disp
B2HEXDP:PUSH BC
        PUSH HL
        CALL B2HEX2
        CALL DEDP
        POP HL
        POP BC
        RET
;
;DE(asckii 2bytes) disp
DEDP:PUSH DE
        LD E,D
        LD C,02
        CALL FCALL
        POP DE
        LD C,02
        CALL FCALL
        RET
;

●VFTST18、VFTST19の実行

[第142回]を開いて、それをバックにしてVFTST18、VFTST19を実行しました。



[第142回]と同じことをVFTST18、VFTST19を使って行ない、全く同じ結果が得られました。
以下は[第142回]の説明をVFTST18、VFTST19のところだけ名前を変更して引用しました。

最初にAドライブとBドライブでVFTST11を実行し、そのあとVFTST19を実行しました。
ログインベクトル(L)もR/Oベクトル(R)も0003と表示されました。
次に vftst18 a: を実行してからVFTST19を実行すると、VFTST18によってAドライブのライトプロテクトが解除されたため、Rは0002と表示されました。

そのあとAドライブでVFTST11を実行すると、それによってまたAドライブにライトプロテクトがセットされたため、R=0003になりました。
次にAドライブで vftst18 b: を実行すると、ログインベクトルとR/Oベクトルの、Bドライブのビットがクリアされたため、L=0001、R=0001と表示されました。

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

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