復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第113回]
●ファンクションコール24H(ランダムレコードアクセスポインタの更新)その3
前回からの続きです。
前回は、[第111回]で作成したシーケンシャルファイルのレコードを順に読んで、その内容を表示するプログラムを作成して実行しました。
今回はそのプログラムにファンクションコール24Hを追加して、そのファンクションコールによって、ランダムアクセスのためのレコードbェFCB上に作成されることを確認します。
●テストプログラムFTST25
こちらが前回作成したFTST24.TXTにファンクションコール24Hを追加して作成したFTST25のソースリストFTST25.TXTです。
; BDOS TEST25 functioncall 24
; from ftest4-1.txt & ftest3dm.txt
;from test24
;2012/2/28
;4/30 5/2
;
ORG $8100
FCALL=$8005
FCB=$805C
RECNO=$807C
FCBR0=$807D
FCBR1=$807E
FCBR2=$807F
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
LD A,(HL)
CALL B2HEXDP
CALL SPDP
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
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/5/2 11:50 ftst25.txt
END=81F8
; BDOS TEST25 functioncall 24
; from ftest4-1.txt & ftest3dm.txt
;from test24
;2012/2/28
;4/30 5/2
;
ORG $8100
FCALL=$8005
FCB=$805C
RECNO=$807C
FCBR0=$807D
FCBR1=$807E
FCBR2=$807F
DMA=$8080
;
8100 0E0F LD C,0F;open
8102 115C80 LD DE,FCB
8105 CD0580 CALL FCALL
8108 3C INC A;if FFH?
8109 CAE381 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 CD7381 CALL ADP
811F 3E3D LD A,3D;=
8121 CD7381 CALL ADP
8124 3A7C80 LD A,(RECNO)
8127 CDCA81 CALL B2HEXDP
812A CD7181 CALL SPDP
812D 3E64 LD A,64;d
812F CD7381 CALL ADP
8132 3E3D LD A,3D;=
8134 CD7381 CALL ADP
8137 218080 LD HL,DMA
813A 7E LD A,(HL)
813B CDCA81 CALL B2HEXDP
813E CD7181 CALL SPDP
8141 115C80 LD DE,FCB
8144 0E24 LD C,24
8146 CD0580 CALL FCALL
8149 3A7F80 LD A,(FCBR2)
814C CDCA81 CALL B2HEXDP
814F CD7181 CALL SPDP
8152 3A7E80 LD A,(FCBR1)
8155 CDCA81 CALL B2HEXDP
8158 CD7181 CALL SPDP
815B 3A7D80 LD A,(FCBR0)
815E CDCA81 CALL B2HEXDP
8161 CD6781 CALL CRLF
8164 C31081 JP LOOP1
;
;CL & LF
8167 3E0D CRLF:LD A,0D
8169 CD7381 CALL ADP
816C 3E0A LD A,0A
816E C37381 JP ADP
;space disp
8171 3E20 SPDP:LD A,20
;A disp
8173 C5 ADP:PUSH BC
8174 E5 PUSH HL
8175 5F LD E,A
8176 0E02 LD C,02
8178 CD0580 CALL FCALL
817B E1 POP HL
817C C1 POP BC
817D C9 RET
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
817E 7C B2HEX4:LD A,H
817F CD8481 CALL B2HEX2
8182 EB EX DE,HL
8183 7B LD A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
8184 F5 B2HEX2:PUSH AF
8185 0F RRCA
8186 0F RRCA
8187 0F RRCA
8188 0F RRCA
8189 CD9381 CALL B2HEX1
818C 57 LD D,A
818D F1 POP AF
818E CD9381 CALL B2HEX1
8191 5F LD E,A
8192 C9 RET
;binary to hex, low 4bit to ascii 1charactor
8193 E60F B2HEX1:AND 0F
8195 C630 ADD A,30
8197 FE3A CP 3A
8199 D8 RET C;0-9
819A C607 ADD A,07;A-F
819C C9 RET
;hex to binary, ascii 1charactor to low 4bit
819D FE30 HTOB1:CP 30;>="0"?
819F D8 RET C;no
81A0 FE3A CP 3A;<="9"?
81A2 DAB681 JP C,HTOB1_2;yes,"0" to "9"
81A5 FE41 CP 41;>="A" ?
81A7 D8 RET C;no
81A8 FE47 CP 47;<="F"?
81AA DAB481 JP C,HTOB1_1
81AD FE61 CP 61;>="a"?
81AF D8 RET C;no
81B0 FE67 CP 67;<="f"?
81B2 3F CCF
81B3 D8 RET C;no
81B4 C609 HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F
81B6 E60F HTOB1_2:AND 0F
81B8 C9 RET
;HL(bynary 2bytes) to asckii 4bytes & disp
81B9 C5 HEX4DP:PUSH BC
81BA E5 PUSH HL
81BB CD7E81 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
81BE D5 PUSH DE
81BF EB EX DE,HL
81C0 CDD581 CALL DEDP
81C3 D1 POP DE
81C4 CDD581 CALL DEDP
81C7 E1 POP HL
81C8 C1 POP BC
81C9 C9 RET
;A(binary) to asckii 2bytes HEX & disp
81CA C5 B2HEXDP:PUSH BC
81CB E5 PUSH HL
81CC CD8481 CALL B2HEX2
81CF CDD581 CALL DEDP
81D2 E1 POP HL
81D3 C1 POP BC
81D4 C9 RET
;
;DE(asckii 2bytes) disp
81D5 D5 DEDP:PUSH DE
81D6 5A LD E,D
81D7 0E02 LD C,02
81D9 CD0580 CALL FCALL
81DC D1 POP DE
81DD 0E02 LD C,02
81DF CD0580 CALL FCALL
81E2 C9 RET
;
81E3 11EC81 ERR:LD DE,ERRMSG
81E6 0E09 LD C,09
81E8 CD0580 CALL FCALL
81EB C9 RET
81EC 63616E27 ERRMSG:"can'"
81F0 74206F70 "t op"
81F4 656E "en"
81F6 0D DB 0D
81F7 0A DB 0A
81F8 24 DB 24;$
;
ADP =8173 B2HEX1 =8193 B2HEX2 =8184
B2HEX4 =817E B2HEXDP =81CA CRLF =8167
DEDP =81D5 DMA =8080 ERR =81E3
ERRMSG =81EC FCALL =8005 FCB =805C
FCBR0 =807D FCBR1 =807E FCBR2 =807F
HEX4DP =81B9 HTOB1 =819D HTOB1_1 =81B4
HTOB1_2 =81B6 LOOP1 =8110 RECNO =807C
SPDP =8171
|
logfile nd80zlog\05021130.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld ftst25.bin,8100 loading FTST25.BIN ...00f9(249)bytes loaded,from 8100 to 81F8 >jp d233 a>save 1 ftst25.com a>dir A: FTST23 COM : TEST SAF : FTST24 COM : FTST25 COM a>ftst25 test.saf r=01 d=00 00 00 01 r=02 d=01 00 00 02 r=03 d=02 00 00 03 r=04 d=03 00 00 04 r=05 d=04 00 00 05 r=06 d=05 00 00 06 r=07 d=06 00 00 07 r=08 d=07 00 00 08 r=09 d=08 00 00 09 r=0A d=09 00 00 0A r=0B d=0A 00 00 0B r=0C d=0B 00 00 0C r=0D d=0C 00 00 0D r=0E d=0D 00 00 0E r=0F d=0E 00 00 0F r=10 d=0F 00 00 10 a> |