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