復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第112回]
●ファンクションコール24H(ランダムレコードアクセスポインタの更新)その2
前回からの続きです。
前回はファンクションコール24Hの動作を確認するために、まずシーケンシャルファイルを作成することからスタートしました。
ファンクションコール24Hはシーケンシャルファイルをアクセスした後で使うことが前提だからです。
前回はそのシーケンシャルファイルを作成するためのテストプログラムを作って実行し、シーケンシャルファイルを作成しました。
今回は、前回作成したシーケンシャルファイルのレコードを順に読んで、その内容を表示するプログラムを作成します。
●シーケンシャルファイルリードプログラム
シーケンシャルリードについては、[第46回]で、ファンクションコール14H(シーケンシャルリード)を使ったテストプログラムを作成しました。
しかし前回、シーケンシャルファイル作成プログラムを新規に作成することにした理由と同じで、[第46回]で作ったテストプログラムは、今回のテストには不向きなところがありますから、今回のテスト用にあらためて作成することにしました。
こちらがシーケンシャルファイルリードプログラム(FTST24)のソースリストFTST24.TXTです。
; BDOS TEST24 file read
; from ftest4-1.txt & ftest3dm.txt
;2012/2/28
;4/30
;
ORG $8100
FCALL=$8005
FCB=$805C
RECNO=$807C
DMA=$8080
;
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,72;r
CALL ADP
LD A,3D;=
CALL ADP
LD A,(RECNO)
CALL B2HEXDP
CALL SPDP
LD A,64;d
CALL ADP
LD A,3D;=
CALL ADP
LD HL,DMA
LOOP2:LD A,(HL)
CALL B2HEXDP
CALL CRLF
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;$
;
;
|
2012/4/30 11:41 ftst24.txt
END=81D5
; BDOS TEST24 file read
; from ftest4-1.txt & ftest3dm.txt
;2012/2/28
;4/30
;
ORG $8100
FCALL=$8005
FCB=$805C
RECNO=$807C
DMA=$8080
;
8100 0E0F LD C,0F;open
8102 115C80 LD DE,FCB
8105 CD0580 CALL FCALL
8108 3C INC A;if FFH?
8109 CAC081 JP Z,ERR
810C AF XOR A
810D 327C80 LD (RECNO),A
;
8110 0E14 LOOP1: LD C,14;read
8112 115C80 LD DE,FCB
8115 CD0580 CALL FCALL
8118 B7 OR A
8119 C0 RET NZ;read end
;
811A 3E72 LD A,72;r
811C CD5081 CALL ADP
811F 3E3D LD A,3D;=
8121 CD5081 CALL ADP
8124 3A7C80 LD A,(RECNO)
8127 CDA781 CALL B2HEXDP
812A CD4E81 CALL SPDP
812D 3E64 LD A,64;d
812F CD5081 CALL ADP
8132 3E3D LD A,3D;=
8134 CD5081 CALL ADP
8137 218080 LD HL,DMA
813A 7E LOOP2:LD A,(HL)
813B CDA781 CALL B2HEXDP
813E CD4481 CALL CRLF
8141 C31081 JP LOOP1
;
;CL & LF
8144 3E0D CRLF:LD A,0D
8146 CD5081 CALL ADP
8149 3E0A LD A,0A
814B C35081 JP ADP
;space disp
814E 3E20 SPDP:LD A,20
;A disp
8150 C5 ADP:PUSH BC
8151 E5 PUSH HL
8152 5F LD E,A
8153 0E02 LD C,02
8155 CD0580 CALL FCALL
8158 E1 POP HL
8159 C1 POP BC
815A C9 RET
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
815B 7C B2HEX4:LD A,H
815C CD6181 CALL B2HEX2
815F EB EX DE,HL
8160 7B LD A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
8161 F5 B2HEX2:PUSH AF
8162 0F RRCA
8163 0F RRCA
8164 0F RRCA
8165 0F RRCA
8166 CD7081 CALL B2HEX1
8169 57 LD D,A
816A F1 POP AF
816B CD7081 CALL B2HEX1
816E 5F LD E,A
816F C9 RET
;binary to hex, low 4bit to ascii 1charactor
8170 E60F B2HEX1:AND 0F
8172 C630 ADD A,30
8174 FE3A CP 3A
8176 D8 RET C;0-9
8177 C607 ADD A,07;A-F
8179 C9 RET
;hex to binary, ascii 1charactor to low 4bit
817A FE30 HTOB1:CP 30;>="0"?
817C D8 RET C;no
817D FE3A CP 3A;<="9"?
817F DA9381 JP C,HTOB1_2;yes,"0" to "9"
8182 FE41 CP 41;>="A" ?
8184 D8 RET C;no
8185 FE47 CP 47;<="F"?
8187 DA9181 JP C,HTOB1_1
818A FE61 CP 61;>="a"?
818C D8 RET C;no
818D FE67 CP 67;<="f"?
818F 3F CCF
8190 D8 RET C;no
8191 C609 HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F
8193 E60F HTOB1_2:AND 0F
8195 C9 RET
;HL(bynary 2bytes) to asckii 4bytes & disp
8196 C5 HEX4DP:PUSH BC
8197 E5 PUSH HL
8198 CD5B81 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
819B D5 PUSH DE
819C EB EX DE,HL
819D CDB281 CALL DEDP
81A0 D1 POP DE
81A1 CDB281 CALL DEDP
81A4 E1 POP HL
81A5 C1 POP BC
81A6 C9 RET
;A(binary) to asckii 2bytes HEX & disp
81A7 C5 B2HEXDP:PUSH BC
81A8 E5 PUSH HL
81A9 CD6181 CALL B2HEX2
81AC CDB281 CALL DEDP
81AF E1 POP HL
81B0 C1 POP BC
81B1 C9 RET
;
;DE(asckii 2bytes) disp
81B2 D5 DEDP:PUSH DE
81B3 5A LD E,D
81B4 0E02 LD C,02
81B6 CD0580 CALL FCALL
81B9 D1 POP DE
81BA 0E02 LD C,02
81BC CD0580 CALL FCALL
81BF C9 RET
;
81C0 11C981 ERR:LD DE,ERRMSG
81C3 0E09 LD C,09
81C5 CD0580 CALL FCALL
81C8 C9 RET
81C9 63616E27 ERRMSG:"can'"
81CD 74206F70 "t op"
81D1 656E "en"
81D3 0D DB 0D
81D4 0A DB 0A
81D5 24 DB 24;$
;
;
ADP =8150 B2HEX1 =8170 B2HEX2 =8161
B2HEX4 =815B B2HEXDP =81A7 CRLF =8144
DEDP =81B2 DMA =8080 ERR =81C0
ERRMSG =81C9 FCALL =8005 FCB =805C
HEX4DP =8196 HTOB1 =817A HTOB1_1 =8191
HTOB1_2 =8193 LOOP1 =8110 LOOP2 =813A
RECNO =807C SPDP =814E
|
logfile nd80zlog\04301139.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld ftst24.bin,8100 loading FTST24.BIN ...00d6(214)bytes loaded,from 8100 to 81D5 >jp d233 a>save 1 ftst24.com a>dir A: FTST23 COM : TEST SAF : FTST24 COM a>ftst24 test.saf r=01 d=00 r=02 d=01 r=03 d=02 r=04 d=03 r=05 d=04 r=06 d=05 r=07 d=06 r=08 d=07 r=09 d=08 r=0A d=09 r=0B d=0A r=0C d=0B r=0D d=0C r=0E d=0D r=0F d=0E r=10 d=0F a>^D end of CP/M >0000 00C3 - リモート接続を終了しました logfile closed at Mon Apr 30 11:44:52 2012 |