復活!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> |