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
前へ
次へ
ホームページトップへ戻る