MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第128回]
●ファンクション24(2)
ファンクション24は「ワンボードマイコンでCP/Mを!」[第233回]〜「ワンボードマイコンでCP/Mを!」[第235回]でテストをしています。
前回は「ワンボードマイコンでCP/Mを!」[第233回]と同じように、ファンクション24のテストをするための前準備として、シーケンシャルファイルTEST.SAFを作成しました。
そしてTEST.SAFが正しく作成されたかどうかを確かめるために、VFDUMPでBドライブのセクタを直接読んで確認をしました。
「ワンボードマイコンでCP/Mを!」[第234回ではVFTST24.COMを作って、TEST.SAFの内容を読み出しています。
今回もそれと同じテストをしてみることにします。
テストプログラムVFTST24のソースプログラムをインテルニーモニックに書き直してMFTST24を作りました。
●テストプログラムMFTST24
MFTST24のソースプログラムです。
; BDOS VFTST24 file read ; from ftest4-1.txt & ftest3dm.txt ;2012/2/28 ;4/30 ;10/18 ; ORG $0100 FCALL=$0005 FCB=$005C RECNO=$007C DMA=$0080 ; MVI C,0F;open LXI D,FCB CALL FCALL INR A;if FFH? JZ ERR XRA A STA RECNO ; LOOP1:MVI C,14;read LXI D,FCB CALL FCALL ORA A RNZ;read end ; LDA RECNO CALL B2HEXDP MVI A,28;( CALL ADP LXI H,DMA MOV C,M INX H MOV A,M CALL B2HEXDP MOV A,C CALL B2HEXDP MVI A,29;) CALL ADP CALL SPDP CALL SPDP JMP LOOP1 ; ;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 ;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 ;hex to binary, ascii 1charactor to low 4bit HTOB1:CPI 30;>="0"? RC;no CPI 3A;<="9"? JC HTOB1_2;yes,"0" to "9" CPI 41;>="A" ? RC;no CPI 47;<="F"? JC HTOB1_1 CPI 61;>="a"? RC;no CPI 67;<="f"? CMC RC;no HTOB1_1:ADI 09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F HTOB1_2:ANI 0F 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 ; ERR:LXI D,ERRMSG MVI C,09 CALL FCALL RET ERRMSG:"can'" "t op" "en" DB 0D DB 0A DB 24;$ ; |
2015/2/3 15:13 mftst24.txt END=01D1 ; BDOS VFTST24 file read ; from ftest4-1.txt & ftest3dm.txt ;2012/2/28 ;4/30 ;10/18 ; ORG $0100 FCALL=$0005 FCB=$005C RECNO=$007C DMA=$0080 ; 0100 0E0F MVI C,0F;open 0102 115C00 LXI D,FCB 0105 CD0500 CALL FCALL 0108 3C INR A;if FFH? 0109 CABC01 JZ ERR 010C AF XRA A 010D 327C00 STA RECNO ; 0110 0E14 LOOP1:MVI C,14;read 0112 115C00 LXI D,FCB 0115 CD0500 CALL FCALL 0118 B7 ORA A 0119 C0 RNZ;read end ; 011A 3A7C00 LDA RECNO 011D CDA301 CALL B2HEXDP 0120 3E28 MVI A,28;( 0122 CD4C01 CALL ADP 0125 218000 LXI H,DMA 0128 4E MOV C,M 0129 23 INX H 012A 7E MOV A,M 012B CDA301 CALL B2HEXDP 012E 79 MOV A,C 012F CDA301 CALL B2HEXDP 0132 3E29 MVI A,29;) 0134 CD4C01 CALL ADP 0137 CD4A01 CALL SPDP 013A CD4A01 CALL SPDP 013D C31001 JMP LOOP1 ; ;CL & LF 0140 3E0D CRLF:MVI A,0D 0142 CD4C01 CALL ADP 0145 3E0A MVI A,0A 0147 C34C01 JMP ADP ;space disp 014A 3E20 SPDP:MVI A,20 ;A disp 014C C5 ADP:PUSH B 014D E5 PUSH H 014E 5F MOV E,A 014F 0E02 MVI C,02 0151 CD0500 CALL FCALL 0154 E1 POP H 0155 C1 POP B 0156 C9 RET ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE 0157 7C B2HEX4:MOV A,H 0158 CD5D01 CALL B2HEX2 015B EB XCHG 015C 7B MOV A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE 015D F5 B2HEX2:PUSH PSW 015E 0F RRC 015F 0F RRC 0160 0F RRC 0161 0F RRC 0162 CD6C01 CALL B2HEX1 0165 57 MOV D,A 0166 F1 POP PSW 0167 CD6C01 CALL B2HEX1 016A 5F MOV E,A 016B C9 RET ;binary to hex, low 4bit to ascii 1charactor 016C E60F B2HEX1:ANI 0F 016E C630 ADI 30 0170 FE3A CPI 3A 0172 D8 RC;0-9 0173 C607 ADI 07;A-F 0175 C9 RET ;hex to binary, ascii 1charactor to low 4bit 0176 FE30 HTOB1:CPI 30;>="0"? 0178 D8 RC;no 0179 FE3A CPI 3A;<="9"? 017B DA8F01 JC HTOB1_2;yes,"0" to "9" 017E FE41 CPI 41;>="A" ? 0180 D8 RC;no 0181 FE47 CPI 47;<="F"? 0183 DA8D01 JC HTOB1_1 0186 FE61 CPI 61;>="a"? 0188 D8 RC;no 0189 FE67 CPI 67;<="f"? 018B 3F CMC 018C D8 RC;no 018D C609 HTOB1_1:ADI 09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F 018F E60F HTOB1_2:ANI 0F 0191 C9 RET ;HL(bynary 2bytes) to asckii 4bytes & disp 0192 C5 HEX4DP:PUSH B 0193 E5 PUSH H 0194 CD5701 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes 0197 D5 PUSH D 0198 EB XCHG 0199 CDAE01 CALL DEDP 019C D1 POP D 019D CDAE01 CALL DEDP 01A0 E1 POP H 01A1 C1 POP B 01A2 C9 RET ;A(binary) to asckii 2bytes HEX & disp 01A3 C5 B2HEXDP:PUSH B 01A4 E5 PUSH H 01A5 CD5D01 CALL B2HEX2 01A8 CDAE01 CALL DEDP 01AB E1 POP H 01AC C1 POP B 01AD C9 RET ; ;DE(asckii 2bytes) disp 01AE D5 DEDP:PUSH D 01AF 5A MOV E,D 01B0 0E02 MVI C,02 01B2 CD0500 CALL FCALL 01B5 D1 POP D 01B6 0E02 MVI C,02 01B8 CD0500 CALL FCALL 01BB C9 RET ; 01BC 11C501 ERR:LXI D,ERRMSG 01BF 0E09 MVI C,09 01C1 CD0500 CALL FCALL 01C4 C9 RET 01C5 63616E27 ERRMSG:"can'" 01C9 74206F70 "t op" 01CD 656E "en" 01CF 0D DB 0D 01D0 0A DB 0A 01D1 24 DB 24;$ ; ADP =014C B2HEX1 =016C B2HEX2 =015D B2HEX4 =0157 B2HEXDP =01A3 CRLF =0140 DEDP =01AE DMA =0080 ERR =01BC ERRMSG =01C5 FCALL =0005 FCB =005C HEX4DP =0192 HTOB1 =0176 HTOB1_1 =018D HTOB1_2 =018F LOOP1 =0110 RECNO =007C SPDP =014A |