MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第120回]
●ファンクション1A
ファンクション1AはDMAアドレスセットです。
ファンクション1Aは「ワンボードマイコンでCP/Mを!」[第202回]でテストをしました。
そこで作ったテストプログラムはVFTST6です。
2つのファイルを比較するプログラムです。
VFTST6のもとになったプログラムとDMAアドレスについては「ワンボードマイコンでCP/Mを!」[第56回]で説明をしています。
今ではかなり前のことになってしまいますが、ND80Z3.5(ND80ZV)用ZB3DOS(CP/M互換DOS)操作説明書を作成中に、ファンクション1Aの動作についての上記ページでの説明に誤りがあることに気が付きました。
同ページでは「ファンクション1AでDMAアドレスを変更すると、プログラムを終了してもその状態が持続するので、プログラムを終了する前にDMAアドレスをデフォルトの設定に戻しておく必要がある」と書きましたが、私の思い違いでした。
ファンクション1AによるDMAアドレスの変更はユーザープログラムの中だけで有効で、プログラムが終了するとデフォルトの設定に戻ります。
そのことにはND80Z3.5(ND80ZV)用ZB3DOS(CP/M互換DOS)の発売開始前に気が付きましたので、上記説明書では訂正文をつけるとともに、テストプログラムVFTST6ではDMAアドレスをデフォルトの設定に戻してから終了していたのを、デフォルトに戻さずに終了するように変更したプログラムVFTST6−2を新たに作り、その変更箇所を示しました。
しかし「ワンボードマイコンでCP/Mを!」[第56回]を訂正することはうっかり忘れておりました。
今頃になってですけれど、同記事も訂正いたしました。
ということでテストプログラムVFTST6−2のソースプログラムをインテルニーモニックに書き直してMFTST6−2を作りました。
●テストプログラムMFTST6−2
MFTST6−2のソースプログラムです。
; BDOS TEST6-2 ***** ;2013/4/18**** ; ORG $0100 FCALL=$0005 FCBWK=$003B RECNO2=$005B FCB=$005C FCB2=$006C RECNO=$007C DMA1=$0080 DMA2=$0300 BYTECNTR=$0380 AWK=$0382 ; LXI H,FCB2 LXI D,FCBWK MVI B,11;=17 LOOP1:MOV A,M STAX D INX H INX D DCR B JNZ LOOP1 ; MVI C,0F;open LXI D,FCB CALL FCALL INR A;if FFH? JZ NOFILERR ; MVI C,0F;open LXI D,FCBWK CALL FCALL INR A;if FFH? JZ NOFILERR ; XRA A STA RECNO STA RECNO2 LXI H,BYTECNTR MOV M,A INX H MOV M,A ; LOOP2:MVI C,1A;DMA address set LXI D,DMA1 CALL FCALL MVI C,14;read LXI D,FCB CALL FCALL ORA A JNZ CMPEND;read end ; MVI C,1A;DMA address set LXI D,DMA2 CALL FCALL MVI C,14;read LXI D,FCBWK CALL FCALL ORA A JNZ CMPEND;read end ; MVI C,80 LXI H,DMA1 LXI D,DMA2 LOOP3:LDAX D CMP M CNZ NOTEQ INX H INX D PUSH H LHLD BYTECNTR INX H SHLD BYTECNTR POP H DCR C JNZ LOOP3 JMP LOOP2 ; NOFILERR:LXI D,CANTOPN MVI C,09 CALL FCALL CMPEND:RET;,1A;DMA address set LXI D,DMA1 CALL FCALL RET ; NOTEQ:PUSH B PUSH D PUSH H LHLD BYTECNTR CALL HEX4DP CALL SPDP POP H MOV A,M STA AWK POP D LDAX D PUSH D PUSH H PUSH PSW LDA AWK CALL B2HEXDP MVI A,2D;"-" CALL ADP POP PSW CALL B2HEXDP CALL CRLF POP H POP D POP B RET ; ;CL & LF CRLF:MVI A,0D CALL ADP MVI A,0A JMP ADP ;space disp SPDP:MVI A,20 ;A disp ADP:PUSH B PUSH H MOV E,A MVI C,02 CALL FCALL POP H POP B RET ;HL(bynary 2bytes) to asckii 4bytes & disp HEX4DP:PUSH B PUSH H CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes PUSH D XCHG CALL DEDP POP D CALL DEDP POP H POP B RET ;A(binary) to asckii 2bytes HEX & disp B2HEXDP:PUSH B PUSH H CALL B2HEX2 CALL DEDP POP H POP B RET ; ;DE(asckii 2bytes) disp DEDP:PUSH D MOV E,D MVI C,02 CALL FCALL POP D MVI C,02 CALL FCALL RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE B2HEX4:MOV A,H CALL B2HEX2 XCHG MOV A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE B2HEX2:PUSH PSW RRC RRC RRC RRC CALL B2HEX1 MOV D,A POP PSW CALL B2HEX1 MOV E,A RET ;binary to hex, low 4bit to ascii 1charactor B2HEX1:ANI 0F ADI 30 CPI 3A RC;0-9 ADI 07;A-F RET ; CANTOPN:"can'" "t op" "en!" DB 0D DB 0A DB 24;$ ; |
2015/1/30 9:25 mftst6-2.txt END=0225 ; BDOS TEST6-2 ***** ;2013/4/18**** ; ORG $0100 FCALL=$0005 FCBWK=$003B RECNO2=$005B FCB=$005C FCB2=$006C RECNO=$007C DMA1=$0080 DMA2=$0300 BYTECNTR=$0380 AWK=$0382 ; 0100 216C00 LXI H,FCB2 0103 113B00 LXI D,FCBWK 0106 0611 MVI B,11;=17 0108 7E LOOP1:MOV A,M 0109 12 STAX D 010A 23 INX H 010B 13 INX D 010C 05 DCR B 010D C20801 JNZ LOOP1 ; 0110 0E0F MVI C,0F;open 0112 115C00 LXI D,FCB 0115 CD0500 CALL FCALL 0118 3C INR A;if FFH? 0119 CA7C01 JZ NOFILERR ; 011C 0E0F MVI C,0F;open 011E 113B00 LXI D,FCBWK 0121 CD0500 CALL FCALL 0124 3C INR A;if FFH? 0125 CA7C01 JZ NOFILERR ; 0128 AF XRA A 0129 327C00 STA RECNO 012C 325B00 STA RECNO2 012F 218003 LXI H,BYTECNTR 0132 77 MOV M,A 0133 23 INX H 0134 77 MOV M,A ; 0135 0E1A LOOP2:MVI C,1A;DMA address set 0137 118000 LXI D,DMA1 013A CD0500 CALL FCALL 013D 0E14 MVI C,14;read 013F 115C00 LXI D,FCB 0142 CD0500 CALL FCALL 0145 B7 ORA A 0146 C28401 JNZ CMPEND;read end ; 0149 0E1A MVI C,1A;DMA address set 014B 110003 LXI D,DMA2 014E CD0500 CALL FCALL 0151 0E14 MVI C,14;read 0153 113B00 LXI D,FCBWK 0156 CD0500 CALL FCALL 0159 B7 ORA A 015A C28401 JNZ CMPEND;read end ; 015D 0E80 MVI C,80 015F 218000 LXI H,DMA1 0162 110003 LXI D,DMA2 0165 1A LOOP3:LDAX D 0166 BE CMP M 0167 C48C01 CNZ NOTEQ 016A 23 INX H 016B 13 INX D 016C E5 PUSH H 016D 2A8003 LHLD BYTECNTR 0170 23 INX H 0171 228003 SHLD BYTECNTR 0174 E1 POP H 0175 0D DCR C 0176 C26501 JNZ LOOP3 0179 C33501 JMP LOOP2 ; 017C 111802 NOFILERR:LXI D,CANTOPN 017F 0E09 MVI C,09 0181 CD0500 CALL FCALL 0184 C9 CMPEND:RET;,1A;DMA address set 0185 118000 LXI D,DMA1 0188 CD0500 CALL FCALL 018B C9 RET ; 018C C5 NOTEQ:PUSH B 018D D5 PUSH D 018E E5 PUSH H 018F 2A8003 LHLD BYTECNTR 0192 CDCF01 CALL HEX4DP 0195 CDC201 CALL SPDP 0198 E1 POP H 0199 7E MOV A,M 019A 328203 STA AWK 019D D1 POP D 019E 1A LDAX D 019F D5 PUSH D 01A0 E5 PUSH H 01A1 F5 PUSH PSW 01A2 3A8203 LDA AWK 01A5 CDE001 CALL B2HEXDP 01A8 3E2D MVI A,2D;"-" 01AA CDC401 CALL ADP 01AD F1 POP PSW 01AE CDE001 CALL B2HEXDP 01B1 CDB801 CALL CRLF 01B4 E1 POP H 01B5 D1 POP D 01B6 C1 POP B 01B7 C9 RET ; ;CL & LF 01B8 3E0D CRLF:MVI A,0D 01BA CDC401 CALL ADP 01BD 3E0A MVI A,0A 01BF C3C401 JMP ADP ;space disp 01C2 3E20 SPDP:MVI A,20 ;A disp 01C4 C5 ADP:PUSH B 01C5 E5 PUSH H 01C6 5F MOV E,A 01C7 0E02 MVI C,02 01C9 CD0500 CALL FCALL 01CC E1 POP H 01CD C1 POP B 01CE C9 RET ;HL(bynary 2bytes) to asckii 4bytes & disp 01CF C5 HEX4DP:PUSH B 01D0 E5 PUSH H 01D1 CDF901 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes 01D4 D5 PUSH D 01D5 EB XCHG 01D6 CDEB01 CALL DEDP 01D9 D1 POP D 01DA CDEB01 CALL DEDP 01DD E1 POP H 01DE C1 POP B 01DF C9 RET ;A(binary) to asckii 2bytes HEX & disp 01E0 C5 B2HEXDP:PUSH B 01E1 E5 PUSH H 01E2 CDFF01 CALL B2HEX2 01E5 CDEB01 CALL DEDP 01E8 E1 POP H 01E9 C1 POP B 01EA C9 RET ; ;DE(asckii 2bytes) disp 01EB D5 DEDP:PUSH D 01EC 5A MOV E,D 01ED 0E02 MVI C,02 01EF CD0500 CALL FCALL 01F2 D1 POP D 01F3 0E02 MVI C,02 01F5 CD0500 CALL FCALL 01F8 C9 RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE 01F9 7C B2HEX4:MOV A,H 01FA CDFF01 CALL B2HEX2 01FD EB XCHG 01FE 7B MOV A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE 01FF F5 B2HEX2:PUSH PSW 0200 0F RRC 0201 0F RRC 0202 0F RRC 0203 0F RRC 0204 CD0E02 CALL B2HEX1 0207 57 MOV D,A 0208 F1 POP PSW 0209 CD0E02 CALL B2HEX1 020C 5F MOV E,A 020D C9 RET ;binary to hex, low 4bit to ascii 1charactor 020E E60F B2HEX1:ANI 0F 0210 C630 ADI 30 0212 FE3A CPI 3A 0214 D8 RC;0-9 0215 C607 ADI 07;A-F 0217 C9 RET ; 0218 63616E27 CANTOPN:"can'" 021C 74206F70 "t op" 0220 656E21 "en!" 0223 0D DB 0D 0224 0A DB 0A 0225 24 DB 24;$ ; ADP =01C4 AWK =0382 B2HEX1 =020E B2HEX2 =01FF B2HEX4 =01F9 B2HEXDP =01E0 BYTECNTR =0380 CANTOPN =0218 CMPEND =0184 CRLF =01B8 DEDP =01EB DMA1 =0080 DMA2 =0300 FCALL =0005 FCB =005C FCB2 =006C FCBWK =003B HEX4DP =01CF LOOP1 =0108 LOOP2 =0135 LOOP3 =0165 NOFILERR =017C NOTEQ =018C RECNO =007C RECNO2 =005B SPDP =01C2 |
>cm@03df 03DF B2-1a 03E0 BF- >/cpm,d drive D ................................ drive C ................................ drive B ................................ drive A ................................ A>save 3 testdat3.txt A>dir A: MBASIC COM : STARTREK BAS : PIP COM : ESC4 MAC A: MFTST102 COM : VFDUMP1 COM : VFDUMP2 COM : VFDUMP COM A: VFD05 COM : STARTRK2 BAS : TREKINST BAS : VFTST11 COM A: VFTST12 COM : MFTST4 COM : MFTST4-1 TXT : TESTDAT2 TXT A: MFTST11 COM : MFTST18 COM : MFTST19 COM : TESTDAT3 TXT A>z:mftst6-2 mftst4-1.txt testdat3.txt 0020 31-41 0021 37-42 0022 20-43 02E0 1A-BF 02E1 1A-7B 02E2 1A-25 02E3 1A-F7 02E4 1A-8A 02E5 1A-89 02E6 1A-0E 02E7 1A-0D 02E8 1A-CE 02E9 1A-CA 02EA 1A-74 02EB 1A-2B 02EC 1A-DF 02ED 1A-4D 02EE 1A-6C 02EF 1A-CA 02F0 1A-97 02F1 1A-FD 02F2 1A-98 02F3 1A-ED 02F4 1A-9F 02F5 1A-E5 02F6 1A-4F 02F7 1A-C3 02F8 1A-59 02F9 1A-7A 02FA 1A-D1 02FB 1A-12 02FC 1A-77 02FD 1A-57 02FE 1A-DC 02FF 1A-7C A>/exit > 0000 00C3 - リモート接続を終了しました logfile closed at Fri Jan 30 12:01:04 2015 |
; BDOS TEST6-2 ***** TEST6-3 ;2013/4/18**** ;2015/1/30 ; ORG $0100 FCALL=$0005 FCBWK=$003B RECNO2=$005B FCB=$005C FCB2=$006C RECNO=$007C DMA1=$0080 DMA2=$0300 BYTECNTR=$0380 AWK=$0382 ; LXI H,FCB2 LXI D,FCBWK MVI B,11;=17 LOOP1:MOV A,M STAX D INX H INX D DCR B JNZ LOOP1 ; MVI C,0F;open LXI D,FCB CALL FCALL INR A;if FFH? JZ NOFILERR ; MVI C,0F;open LXI D,FCBWK CALL FCALL INR A;if FFH? JZ NOFILERR ; XRA A STA RECNO STA RECNO2 LXI H,$0100 SHLD BYTECNTR ; LOOP2:MVI C,1A;DMA address set LXI D,DMA1 CALL FCALL MVI C,14;read LXI D,FCB CALL FCALL ORA A RNZ;read end ; MVI C,1A;DMA address set LXI D,DMA2 CALL FCALL MVI C,14;read LXI D,FCBWK CALL FCALL ORA A RNZ;read end ; MVI C,80 LXI H,DMA1 LXI D,DMA2 LOOP3:LDAX D CMP M PUSH PSW CNZ NOTEQ POP PSW JNZ FECK CPI 1A RZ LOOP4:INX H INX D PUSH H LHLD BYTECNTR INX H SHLD BYTECNTR POP H DCR C JNZ LOOP3 JMP LOOP2 FECK:CPI 1A JZ ERREND MOV A,M CPI 1A JNZ LOOP4 ERREND:LXI D,ENDERR MVI C,09 CALL FCALL RET ; NOFILERR:LXI D,CANTOPN MVI C,09 CALL FCALL RET ; NOTEQ:PUSH B PUSH D PUSH H LHLD BYTECNTR CALL HEX4DP CALL SPDP POP H MOV A,M STA AWK POP D LDAX D PUSH D PUSH H PUSH PSW LDA AWK CALL B2HEXDP MVI A,2D;"-" CALL ADP POP PSW CALL B2HEXDP CALL CRLF POP H POP D POP B RET ; ;CL & LF CRLF:MVI A,0D CALL ADP MVI A,0A JMP ADP ;space disp SPDP:MVI A,20 ;A disp ADP:PUSH B PUSH H MOV E,A MVI C,02 CALL FCALL POP H POP B RET ;HL(bynary 2bytes) to asckii 4bytes & disp HEX4DP:PUSH B PUSH H CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes PUSH D XCHG CALL DEDP POP D CALL DEDP POP H POP B RET ;A(binary) to asckii 2bytes HEX & disp B2HEXDP:PUSH B PUSH H CALL B2HEX2 CALL DEDP POP H POP B RET ; ;DE(asckii 2bytes) disp DEDP:PUSH D MOV E,D MVI C,02 CALL FCALL POP D MVI C,02 CALL FCALL RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE B2HEX4:MOV A,H CALL B2HEX2 XCHG MOV A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE B2HEX2:PUSH PSW RRC RRC RRC RRC CALL B2HEX1 MOV D,A POP PSW CALL B2HEX1 MOV E,A RET ;binary to hex, low 4bit to ascii 1charactor B2HEX1:ANI 0F ADI 30 CPI 3A RC;0-9 ADI 07;A-F RET ; CANTOPN:"can'" "t op" "en!" DB 0D DB 0A DB 24;$ ENDERR:"end " "err!" DB 0D DB 0A DB 24;$ ; |
2015/1/30 22:43 mftst6-3.txt END=0241 ; BDOS TEST6-2 ***** TEST6-3 ;2013/4/18**** ;2015/1/30 ; ORG $0100 FCALL=$0005 FCBWK=$003B RECNO2=$005B FCB=$005C FCB2=$006C RECNO=$007C DMA1=$0080 DMA2=$0300 BYTECNTR=$0380 AWK=$0382 ; 0100 216C00 LXI H,FCB2 0103 113B00 LXI D,FCBWK 0106 0611 MVI B,11;=17 0108 7E LOOP1:MOV A,M 0109 12 STAX D 010A 23 INX H 010B 13 INX D 010C 05 DCR B 010D C20801 JNZ LOOP1 ; 0110 0E0F MVI C,0F;open 0112 115C00 LXI D,FCB 0115 CD0500 CALL FCALL 0118 3C INR A;if FFH? 0119 CA9401 JZ NOFILERR ; 011C 0E0F MVI C,0F;open 011E 113B00 LXI D,FCBWK 0121 CD0500 CALL FCALL 0124 3C INR A;if FFH? 0125 CA9401 JZ NOFILERR ; 0128 AF XRA A 0129 327C00 STA RECNO 012C 325B00 STA RECNO2 012F 210001 LXI H,$0100 0132 228003 SHLD BYTECNTR ; 0135 0E1A LOOP2:MVI C,1A;DMA address set 0137 118000 LXI D,DMA1 013A CD0500 CALL FCALL 013D 0E14 MVI C,14;read 013F 115C00 LXI D,FCB 0142 CD0500 CALL FCALL 0145 B7 ORA A 0146 C0 RNZ;read end ; 0147 0E1A MVI C,1A;DMA address set 0149 110003 LXI D,DMA2 014C CD0500 CALL FCALL 014F 0E14 MVI C,14;read 0151 113B00 LXI D,FCBWK 0154 CD0500 CALL FCALL 0157 B7 ORA A 0158 C0 RNZ;read end ; 0159 0E80 MVI C,80 015B 218000 LXI H,DMA1 015E 110003 LXI D,DMA2 0161 1A LOOP3:LDAX D 0162 BE CMP M 0163 F5 PUSH PSW 0164 C49D01 CNZ NOTEQ 0167 F1 POP PSW 0168 C28001 JNZ FECK 016B FE1A CPI 1A 016D C8 RZ 016E 23 LOOP4:INX H 016F 13 INX D 0170 E5 PUSH H 0171 2A8003 LHLD BYTECNTR 0174 23 INX H 0175 228003 SHLD BYTECNTR 0178 E1 POP H 0179 0D DCR C 017A C26101 JNZ LOOP3 017D C33501 JMP LOOP2 0180 FE1A FECK:CPI 1A 0182 CA8B01 JZ ERREND 0185 7E MOV A,M 0186 FE1A CPI 1A 0188 C26E01 JNZ LOOP4 018B 113702 ERREND:LXI D,ENDERR 018E 0E09 MVI C,09 0190 CD0500 CALL FCALL 0193 C9 RET ; 0194 112902 NOFILERR:LXI D,CANTOPN 0197 0E09 MVI C,09 0199 CD0500 CALL FCALL 019C C9 RET ; 019D C5 NOTEQ:PUSH B 019E D5 PUSH D 019F E5 PUSH H 01A0 2A8003 LHLD BYTECNTR 01A3 CDE001 CALL HEX4DP 01A6 CDD301 CALL SPDP 01A9 E1 POP H 01AA 7E MOV A,M 01AB 328203 STA AWK 01AE D1 POP D 01AF 1A LDAX D 01B0 D5 PUSH D 01B1 E5 PUSH H 01B2 F5 PUSH PSW 01B3 3A8203 LDA AWK 01B6 CDF101 CALL B2HEXDP 01B9 3E2D MVI A,2D;"-" 01BB CDD501 CALL ADP 01BE F1 POP PSW 01BF CDF101 CALL B2HEXDP 01C2 CDC901 CALL CRLF 01C5 E1 POP H 01C6 D1 POP D 01C7 C1 POP B 01C8 C9 RET ; ;CL & LF 01C9 3E0D CRLF:MVI A,0D 01CB CDD501 CALL ADP 01CE 3E0A MVI A,0A 01D0 C3D501 JMP ADP ;space disp 01D3 3E20 SPDP:MVI A,20 ;A disp 01D5 C5 ADP:PUSH B 01D6 E5 PUSH H 01D7 5F MOV E,A 01D8 0E02 MVI C,02 01DA CD0500 CALL FCALL 01DD E1 POP H 01DE C1 POP B 01DF C9 RET ;HL(bynary 2bytes) to asckii 4bytes & disp 01E0 C5 HEX4DP:PUSH B 01E1 E5 PUSH H 01E2 CD0A02 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes 01E5 D5 PUSH D 01E6 EB XCHG 01E7 CDFC01 CALL DEDP 01EA D1 POP D 01EB CDFC01 CALL DEDP 01EE E1 POP H 01EF C1 POP B 01F0 C9 RET ;A(binary) to asckii 2bytes HEX & disp 01F1 C5 B2HEXDP:PUSH B 01F2 E5 PUSH H 01F3 CD1002 CALL B2HEX2 01F6 CDFC01 CALL DEDP 01F9 E1 POP H 01FA C1 POP B 01FB C9 RET ; ;DE(asckii 2bytes) disp 01FC D5 DEDP:PUSH D 01FD 5A MOV E,D 01FE 0E02 MVI C,02 0200 CD0500 CALL FCALL 0203 D1 POP D 0204 0E02 MVI C,02 0206 CD0500 CALL FCALL 0209 C9 RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE 020A 7C B2HEX4:MOV A,H 020B CD1002 CALL B2HEX2 020E EB XCHG 020F 7B MOV A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE 0210 F5 B2HEX2:PUSH PSW 0211 0F RRC 0212 0F RRC 0213 0F RRC 0214 0F RRC 0215 CD1F02 CALL B2HEX1 0218 57 MOV D,A 0219 F1 POP PSW 021A CD1F02 CALL B2HEX1 021D 5F MOV E,A 021E C9 RET ;binary to hex, low 4bit to ascii 1charactor 021F E60F B2HEX1:ANI 0F 0221 C630 ADI 30 0223 FE3A CPI 3A 0225 D8 RC;0-9 0226 C607 ADI 07;A-F 0228 C9 RET ; 0229 63616E27 CANTOPN:"can'" 022D 74206F70 "t op" 0231 656E21 "en!" 0234 0D DB 0D 0235 0A DB 0A 0236 24 DB 24;$ 0237 656E6420 ENDERR:"end " 023B 65727221 "err!" 023F 0D DB 0D 0240 0A DB 0A 0241 24 DB 24;$ ; ADP =01D5 AWK =0382 B2HEX1 =021F B2HEX2 =0210 B2HEX4 =020A B2HEXDP =01F1 BYTECNTR =0380 CANTOPN =0229 CRLF =01C9 DEDP =01FC DMA1 =0080 DMA2 =0300 ENDERR =0237 ERREND =018B FCALL =0005 FCB =005C FCB2 =006C FCBWK =003B FECK =0180 HEX4DP =01E0 LOOP1 =0108 LOOP2 =0135 LOOP3 =0161 LOOP4 =016E NOFILERR =0194 NOTEQ =019D RECNO =007C RECNO2 =005B SPDP =01D3 |
ここまで変更すると、もうCMPEND:のところをもとのまま残す意味はなくなってしまいますから、そこはRETのみにして不要になった部分は削除しました。
●MFTST6−3の実行
MFTST6−3ではファイルエンドを確認するようにプログラムを変更しましたから、そのテストもできるようにファイルエンドマークを追加しないで、ファイルエンドマークがないままのファイルTESTDAT4.TXTを新たに作りました。
さきほどMFTST6−2で行なったのと同じことをMFTST6−3で行ないました。
MFTST4−1.TXTとTESTDAT3.TXTの比較です。
今回はファイルエンドを検出してそこでプログラムが終了しました。
さらに進んでテストを行ないました。
さきほど新たに作った、わざとファイルエンドコードを追記しなかったTESTDAT4.TXTとMFTST4−1.TXTとの比較です。
03DFでMFTST4−1.TXTはファイルエンドコード1Aがあるのに、TESTDAT4.TXTはそれがないため、不一致が表示されたあと一方のファイルにファイルエンドがないときのエラーとして”end err!”が表示されました。
次に念のため比較するファイル名パラメータの記述順序を入れ替えてテストしてみました。
順序を入れ替えても正しく比較が行なわれました。
さらに念のため、エンドコードを含めて内容が全く同じファイルを比較してみました。
おや can’t open! と表示されてしまいました。
うっかりしてMFTST4−1.TXTとするところをMFTST4.TXTとしてしまいました。
DIRで確認してみましたが、AドライブにはMFTST4.TXTはありませんでした。
おお、そうでした。
MFTST4.TXTはRENでMFTST4−1.TXTに名前を変更したのでした([第115回])。
あらためてMFTST4−1.TXTとTESTDAT2.TXTを比較しました。
TESTDAT2.TXTは[第116回]でMFTST5をテストしたときに、MFTST4−1.TXTのコピーとして作成されたファイルですから中身は同じです。
MFTST6−3で両者を比較した結果は何も表示されずにプログラムが終了しました。
ファイルエンドコードを含めて両者が一致していることが確認できました。
MYCPU80でCP/Mを![第120回]
2015.2.3upload
前へ
次へ
ホームページトップへ戻る