MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第123回]
●ファンクション22
ファンクション22はランダムWRITEです。
ファンクション22は「ワンボードマイコンでCP/Mを!」[第216回]から「ワンボードマイコンでCP/Mを!」[第224回]で試行錯誤しながらテストをしています。
その後にCP/M互換DOSを大幅に修正したため、再テストが必要になりました。
結局「ワンボードマイコンでCP/Mを!」[第393回]で最終的なテストを行ないました。
そこで作ったテストプログラムはVFTST20Bです。
またレコード番号表プログラムRAFTDOUTも作りました。
テストプログラムVFTST20Bのソースプログラムをインテルニーモニックに書き直してMFTST20Bを作りました。
●テストプログラムMFTST20B
MFTST20Bのソースプログラムです。
; BDOS TEST20-2 function22 random write ;2012/3/4 3/7 4/16 4/17 4/27 ;9/15 ; ORG $0100 FCALL=$0005 NMBRTBL=$0300 FCB=$005C FCBR0=$007D FCBR1=$007E FCBR2=$007F DMA=$0080 ; MVI C,16;make file LXI D,FCB CALL FCALL INR A;if FFH? JZ DFULERR ; XRA A STA FCBR2 LXI H,NMBRTBL PUSH H LOOP:POP H MOV A,M STA FCBR0 MOV C,A INX H MOV A,M CPI FF JZ CLOSE STA FCBR1 MOV B,A INX H PUSH H MOV H,B MOV L,C CALL HEX4DP CALL CRLF ;data fill LXI H,DMA MVI D,40 LOOP2:MOV M,C INX H MOV M,B INX H DCR D JNZ LOOP2 ; MVI C,22;random write LXI D,FCB CALL FCALL ORA A JZ LOOP POP H ORI 30 PUSH PSW LXI D,ERRT CALL MSGOUT POP PSW MOV E,A MVI C,02 CALL FCALL RET ; CLOSE:MVI C,10;close LXI D,FCB CALL FCALL INR A;if FFH? JZ CLOSERR LXI D,OK JMP MSGOUT ; DFULERR:LXI D,DFULL JMP MSGOUT CLOSERR:LXI D,CANTCLS MSGOUT:MVI C,09 CALL FCALL RET ; ;CL & LF CRLF:MVI A,0D CALL ADP MVI A,0A ADP:PUSH B PUSH H MOV E,A MVI C,02 CALL FCALL POP H POP B 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 ;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 ;DE(asckii 2bytes) disp DEDP:PUSH D MOV E,D MVI C,02 CALL FCALL POP D MVI C,02 CALL FCALL RET ; CANTOPN:"can'" "t op" "en!" DB 0D DB 0A DB 24;$ DFULL:"disk" " ful" "l!" DB 0D DB 0A DB 24;$ CANTCLS:"can'" "t cl" "ose!" DB 0D DB 0A DB 24;$ OK:"done" DB 0D DB 0A DB 24;$ ERRT:"err " DB 24;$ ; |
2015/2/1 9:38 mftst20b.txt END=0200 ; BDOS TEST20-2 function22 random write ;2012/3/4 3/7 4/16 4/17 4/27 ;9/15 ; ORG $0100 FCALL=$0005 NMBRTBL=$0300 FCB=$005C FCBR0=$007D FCBR1=$007E FCBR2=$007F DMA=$0080 ; 0100 0E16 MVI C,16;make file 0102 115C00 LXI D,FCB 0105 CD0500 CALL FCALL 0108 3C INR A;if FFH? 0109 CA6C01 JZ DFULERR ; 010C AF XRA A 010D 327F00 STA FCBR2 0110 210003 LXI H,NMBRTBL 0113 E5 PUSH H 0114 E1 LOOP:POP H 0115 7E MOV A,M 0116 327D00 STA FCBR0 0119 4F MOV C,A 011A 23 INX H 011B 7E MOV A,M 011C FEFF CPI FF 011E CA5A01 JZ CLOSE 0121 327E00 STA FCBR1 0124 47 MOV B,A 0125 23 INX H 0126 E5 PUSH H 0127 60 MOV H,B 0128 69 MOV L,C 0129 CDAC01 CALL HEX4DP 012C CD7B01 CALL CRLF ;data fill 012F 218000 LXI H,DMA 0132 1640 MVI D,40 0134 71 LOOP2:MOV M,C 0135 23 INX H 0136 70 MOV M,B 0137 23 INX H 0138 15 DCR D 0139 C23401 JNZ LOOP2 ; 013C 0E22 MVI C,22;random write 013E 115C00 LXI D,FCB 0141 CD0500 CALL FCALL 0144 B7 ORA A 0145 CA1401 JZ LOOP 0148 E1 POP H 0149 F630 ORI 30 014B F5 PUSH PSW 014C 11FC01 LXI D,ERRT 014F CD7501 CALL MSGOUT 0152 F1 POP PSW 0153 5F MOV E,A 0154 0E02 MVI C,02 0156 CD0500 CALL FCALL 0159 C9 RET ; 015A 0E10 CLOSE:MVI C,10;close 015C 115C00 LXI D,FCB 015F CD0500 CALL FCALL 0162 3C INR A;if FFH? 0163 CA7201 JZ CLOSERR 0166 11F501 LXI D,OK 0169 C37501 JMP MSGOUT ; 016C 11D901 DFULERR:LXI D,DFULL 016F C37501 JMP MSGOUT 0172 11E601 CLOSERR:LXI D,CANTCLS 0175 0E09 MSGOUT:MVI C,09 0177 CD0500 CALL FCALL 017A C9 RET ; ;CL & LF 017B 3E0D CRLF:MVI A,0D 017D CD8201 CALL ADP 0180 3E0A MVI A,0A 0182 C5 ADP:PUSH B 0183 E5 PUSH H 0184 5F MOV E,A 0185 0E02 MVI C,02 0187 CD0500 CALL FCALL 018A E1 POP H 018B C1 POP B 018C C9 RET ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE 018D 7C B2HEX4:MOV A,H 018E CD9301 CALL B2HEX2 0191 EB XCHG 0192 7B MOV A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE 0193 F5 B2HEX2:PUSH PSW 0194 0F RRC 0195 0F RRC 0196 0F RRC 0197 0F RRC 0198 CDA201 CALL B2HEX1 019B 57 MOV D,A 019C F1 POP PSW 019D CDA201 CALL B2HEX1 01A0 5F MOV E,A 01A1 C9 RET ;binary to hex, low 4bit to ascii 1charactor 01A2 E60F B2HEX1:ANI 0F 01A4 C630 ADI 30 01A6 FE3A CPI 3A 01A8 D8 RC;0-9 01A9 C607 ADI 07;A-F 01AB C9 RET ;HL(bynary 2bytes) to asckii 4bytes & disp 01AC C5 HEX4DP:PUSH B 01AD E5 PUSH H 01AE CD8D01 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes 01B1 D5 PUSH D 01B2 EB XCHG 01B3 CDBD01 CALL DEDP 01B6 D1 POP D 01B7 CDBD01 CALL DEDP 01BA E1 POP H 01BB C1 POP B 01BC C9 RET ;DE(asckii 2bytes) disp 01BD D5 DEDP:PUSH D 01BE 5A MOV E,D 01BF 0E02 MVI C,02 01C1 CD0500 CALL FCALL 01C4 D1 POP D 01C5 0E02 MVI C,02 01C7 CD0500 CALL FCALL 01CA C9 RET ; 01CB 63616E27 CANTOPN:"can'" 01CF 74206F70 "t op" 01D3 656E21 "en!" 01D6 0D DB 0D 01D7 0A DB 0A 01D8 24 DB 24;$ 01D9 6469736B DFULL:"disk" 01DD 2066756C " ful" 01E1 6C21 "l!" 01E3 0D DB 0D 01E4 0A DB 0A 01E5 24 DB 24;$ 01E6 63616E27 CANTCLS:"can'" 01EA 7420636C "t cl" 01EE 6F736521 "ose!" 01F2 0D DB 0D 01F3 0A DB 0A 01F4 24 DB 24;$ 01F5 646F6E65 OK:"done" 01F9 0D DB 0D 01FA 0A DB 0A 01FB 24 DB 24;$ 01FC 65727220 ERRT:"err " 0200 24 DB 24;$ ; ADP =0182 B2HEX1 =01A2 B2HEX2 =0193 B2HEX4 =018D CANTCLS =01E6 CANTOPN =01CB CLOSE =015A CLOSERR =0172 CRLF =017B DEDP =01BD DFULERR =016C DFULL =01D9 DMA =0080 ERRT =01FC FCALL =0005 FCB =005C FCBR0 =007D FCBR1 =007E FCBR2 =007F HEX4DP =01AC LOOP =0114 LOOP2 =0134 MSGOUT =0175 NMBRTBL =0300 OK =01F5 |
;raf test data sakusei ;2013/4/20 ; ORG $0100 LXI D,$0300 LXI H,DATA LOOP:MOV C,M INX H MOV B,M XCHG MOV M,C INX H MOV M,B XCHG INX H INX D INX B MOV A,B ORA C JNZ LOOP RET DATA:DW $01A2 DW $03B5 DW $009E DW $0044 DW $03B6 DW $01A7 DW $009F DW $009A DW $03B3 DW $01A5 DW $0098 DW $0047 DW $0042 DW $0028 DW $00C7 DW $0182 DW $03E5 DW $FFFF |
2015/2/1 9:38 mraftdot.txt END=013A ;raf test data sakusei ;2013/4/20 ; ORG $0100 0100 110003 LXI D,$0300 0103 211701 LXI H,DATA 0106 4E LOOP:MOV C,M 0107 23 INX H 0108 46 MOV B,M 0109 EB XCHG 010A 71 MOV M,C 010B 23 INX H 010C 70 MOV M,B 010D EB XCHG 010E 23 INX H 010F 13 INX D 0110 03 INX B 0111 78 MOV A,B 0112 B1 ORA C 0113 C20601 JNZ LOOP 0116 C9 RET 0117 A201 DATA:DW $01A2 0119 B503 DW $03B5 011B 9E00 DW $009E 011D 4400 DW $0044 011F B603 DW $03B6 0121 A701 DW $01A7 0123 9F00 DW $009F 0125 9A00 DW $009A 0127 B303 DW $03B3 0129 A501 DW $01A5 012B 9800 DW $0098 012D 4700 DW $0047 012F 4200 DW $0042 0131 2800 DW $0028 0133 C700 DW $00C7 0135 8201 DW $0182 0137 E503 DW $03E5 0139 FFFF DW $FFFF DATA =0117 LOOP =0106 |