復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第235回]
●ファンクションコール24H(ランダムレコードアクセスポインタの更新)その3
前々回([第233回])はファンクションコール24Hのテストをするための前準備として、シーケンシャルファイルTEST.SAFを作成し、それを確かめるために、VFDUMPでBドライブのセクタを直接読んで確認をしました。
前回は[第112回]と同じようにして、VFTST24を作って、TEST.SAFを読み出してみました。
今回はそのVFTST24にファンクションコール24を追加して、そのファンクションコールによって、ランダムアクセスのためのレコードbェFCB上に作成されることを確認します。
これは[第113回]で行った作業です。
[第113回]ではFTST24をもとにしてFTST25を作成しましたが、前回FTST24からVFTST24を作成するのに2バイトのレコードbノ対応するようにあるていどの部分を書き換えました。
それと同様に今回もFTST25をもとにするよりは、FTST25を参考にしつつ、VFTST24をもとにしてVFTST25を作成したほうが簡単にできる、と判断してそのようにしました。
そのようにして作成したVFTST25のソースリストをお見せします。
●ソースプログラムVFTST25
; BDOS VFTST25 function call 24
; from ftest4-1.txt & ftest3dm.txt
;2012/2/28
;4/30
;10/18
;from vftst24.txt & ftst25.txt 10/21
;
ORG $0100
FCALL=$0005
FCB=$005C
RECNO=$007C
FCBR0=$007D
FCBR1=$007E
FCBR2=$007F
DMA=$0080
;
LD C,0F;open
LD DE,FCB
CALL FCALL
INC A;if FFH?
JP Z,ERR
XOR A
LD (RECNO),A
;
LOOP1: LD C,14;read
LD DE,FCB
CALL FCALL
OR A
RET NZ;read end
;
LD A,(RECNO)
CALL B2HEXDP
LD A,28;(
CALL ADP
LD HL,DMA
LD C,(HL)
INC HL
LD A,(HL)
CALL B2HEXDP
LD A,C
CALL B2HEXDP
LD A,29;)
CALL ADP
LD A,5B;[
CALL ADP
LD DE,FCB
LD C,24
CALL FCALL
LD A,(FCBR2)
CALL B2HEXDP
CALL SPDP
LD A,(FCBR1)
CALL B2HEXDP
CALL SPDP
LD A,(FCBR0)
CALL B2HEXDP
LD A,5D;]
CALL ADP
CALL SPDP
CALL SPDP
JP LOOP1
;
;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
;
ERR:LD DE,ERRMSG
LD C,09
CALL FCALL
RET
ERRMSG:"can'"
"t op"
"en"
DB 0D
DB 0A
DB 24;$
;
|


logfile nd80zlog\10212052.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** can't open D.vfd >jp d233 A>b: B>dir B: VFTST23 COM : TEST SAF : VFTST24 COM B>copy z:vftst25.bin B>dir B: VFTST23 COM : TEST SAF : VFTST24 COM : VFTST25 COM B>vftst25 test.saf 01(0000)[00 00 01] 02(0001)[00 00 02] 03(0002)[00 00 03] 04(0003)[00 00 04] 05(0004)[00 00 05] 06(0005)[00 00 06] 07(0006)[00 00 07] 08(0007)[00 00 08] 09(0008)[00 00 09] 0A(0009)[00 00 0A] 0B(000A)[00 00 0B] 0C(000B)[00 00 0C] 0D(000C)[00 00 0D] 0E(000D)[00 00 0E] 0F(000E)[00 00 0F] 10(000F)[00 00 10] 11(0010)[00 00 11] 12(0011)[00 00 12] 13(0012)[00 00 13] 14(0013)[00 00 14] 15(0014)[00 00 15] 16(0015)[00 00 16] 17(0016)[00 00 17] 18(0017)[00 00 18] 19(0018)[00 00 19] 1A(0019)[00 00 1A] 1B(001A)[00 00 1B] 1C(001B)[00 00 1C] 1D(001C)[00 00 1D] 1E(001D)[00 00 1E] 1F(001E)[00 00 1F] 20(001F)[00 00 20] 21(0020)[00 00 21] 22(0021)[00 00 22] 23(0022)[00 00 23] 24(0023)[00 00 24] 25(0024)[00 00 25] 26(0025)[00 00 26] 27(0026)[00 00 27] 28(0027)[00 00 28] 29(0028)[00 00 29] 2A(0029)[00 00 2A] 2B(002A)[00 00 2B] 2C(002B)[00 00 2C] 2D(002C)[00 00 2D] 2E(002D)[00 00 2E] 2F(002E)[00 00 2F] 30(002F)[00 00 30] 31(0030)[00 00 31] 32(0031)[00 00 32] 33(0032)[00 00 33] 34(0033)[00 00 34] 35(0034)[00 00 35] 36(0035)[00 00 36] 37(0036)[00 00 37] 38(0037)[00 00 38] 39(0038)[00 00 39] 3A(0039)[00 00 3A] 3B(003A)[00 00 3B] 3C(003B)[00 00 3C] 3D(003C)[00 00 3D] 3E(003D)[00 00 3E] 3F(003E)[00 00 3F] 40(003F)[00 00 40] 41(0040)[00 00 41] 42(0041)[00 00 42] 43(0042)[00 00 43] 44(0043)[00 00 44] 45(0044)[00 00 45] 46(0045)[00 00 46] 47(0046)[00 00 47] 48(0047)[00 00 48] 49(0048)[00 00 49] 4A(0049)[00 00 4A] 4B(004A)[00 00 4B] 4C(004B)[00 00 4C] 4D(004C)[00 00 4D] 4E(004D)[00 00 4E] 4F(004E)[00 00 4F] 50(004F)[00 00 50] 51(0050)[00 00 51] 52(0051)[00 00 52] 53(0052)[00 00 53] 54(0053)[00 00 54] 55(0054)[00 00 55] 56(0055)[00 00 56] 57(0056)[00 00 57] 58(0057)[00 00 58] 59(0058)[00 00 59] 5A(0059)[00 00 5A] 5B(005A)[00 00 5B] 5C(005B)[00 00 5C] 5D(005C)[00 00 5D] 5E(005D)[00 00 5E] 5F(005E)[00 00 5F] 60(005F)[00 00 60] 61(0060)[00 00 61] 62(0061)[00 00 62] 63(0062)[00 00 63] 64(0063)[00 00 64] 65(0064)[00 00 65] 66(0065)[00 00 66] 67(0066)[00 00 67] 68(0067)[00 00 68] 69(0068)[00 00 69] 6A(0069)[00 00 6A] 6B(006A)[00 00 6B] 6C(006B)[00 00 6C] 6D(006C)[00 00 6D] 6E(006D)[00 00 6E] 6F(006E)[00 00 6F] 70(006F)[00 00 70] 71(0070)[00 00 71] 72(0071)[00 00 72] 73(0072)[00 00 73] 74(0073)[00 00 74] 75(0074)[00 00 75] 76(0075)[00 00 76] 77(0076)[00 00 77] 78(0077)[00 00 78] 79(0078)[00 00 79] 7A(0079)[00 00 7A] 7B(007A)[00 00 7B] 7C(007B)[00 00 7C] 7D(007C)[00 00 7D] 7E(007D)[00 00 7E] 7F(007E)[00 00 7F] 80(007F)[00 00 80] 01(0080)[00 01 01] 02(0081)[00 01 02] 03(0082)[00 01 03] 04(0083)[00 01 04] |