MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第108回]
●ファンクション0A
ファンクション0Aはコンソールバッファ入力です。
あらかじめ設定したバッファサイズ(最大255バイト)に入力文字数が達するか[Enter]が押されるとリターンします。
ファンクション0Aは「ワンボードマイコンでCP/Mを」[第198回]で説明をしています。
そこではテストプログラムVFTST9を使ってテストを行なっています。
そこで今回はいままでと同様にVFTST9をインテルニーモニックに変換してMFTST9を作りました。
●テストプログラムMFTST9
下はMFTST9のソースプログラムです。
; BDOS TEST9 console buffer read ;2012/3/16 8/16 ;2013/4/17 ; ORG $0100 FCALL=$0005 CONBF=$0200 CONBF1=$0201 CONBF2=$0202 ; MVI A,FF;=255 STA CONBF LOOP:LXI D,STRIN MVI C,09;string out CALL FCALL LXI D,CONBF MVI C,0A;console buffer in CALL FCALL CALL CRLF LXI H,CONBF1 MOV B,M INX H INR B LOOP1:DCR B JZ BFDMP MOV A,M CALL ADP INX H JMP LOOP1 BFDMP:CALL CRLF LXI H,CONBF MVI B,17;=23 BFDMP1:MOV A,M CALL B2HEXDP CALL SPDP INX H DCR B JNZ BFDMP1 CALL CRLF LHLD CONBF2 MOV A,L CPI 2F;/ JNZ LOOP MOV A,H CPI 45;E JNZ LOOP 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 ; STRIN:"in" DB 3A;: DB 24;$ ; |
2015/1/21 14:56 mftst9.txt END=01B4 ; BDOS TEST9 console buffer read ;2012/3/16 8/16 ;2013/4/17 ; ORG $0100 FCALL=$0005 CONBF=$0200 CONBF1=$0201 CONBF2=$0202 ; 0100 3EFF MVI A,FF;=255 0102 320002 STA CONBF 0105 11B101 LOOP:LXI D,STRIN 0108 0E09 MVI C,09;string out 010A CD0500 CALL FCALL 010D 110002 LXI D,CONBF 0110 0E0A MVI C,0A;console buffer in 0112 CD0500 CALL FCALL 0115 CD5101 CALL CRLF 0118 210102 LXI H,CONBF1 011B 46 MOV B,M 011C 23 INX H 011D 04 INR B 011E 05 LOOP1:DCR B 011F CA2A01 JZ BFDMP 0122 7E MOV A,M 0123 CD5D01 CALL ADP 0126 23 INX H 0127 C31E01 JMP LOOP1 012A CD5101 BFDMP:CALL CRLF 012D 210002 LXI H,CONBF 0130 0617 MVI B,17;=23 0132 7E BFDMP1:MOV A,M 0133 CD7901 CALL B2HEXDP 0136 CD5B01 CALL SPDP 0139 23 INX H 013A 05 DCR B 013B C23201 JNZ BFDMP1 013E CD5101 CALL CRLF 0141 2A0202 LHLD CONBF2 0144 7D MOV A,L 0145 FE2F CPI 2F;/ 0147 C20501 JNZ LOOP 014A 7C MOV A,H 014B FE45 CPI 45;E 014D C20501 JNZ LOOP 0150 C9 RET ; ;CL & LF 0151 3E0D CRLF:MVI A,0D 0153 CD5D01 CALL ADP 0156 3E0A MVI A,0A 0158 C35D01 JMP ADP ;space disp 015B 3E20 SPDP:MVI A,20 ;A disp 015D C5 ADP:PUSH B 015E E5 PUSH H 015F 5F MOV E,A 0160 0E02 MVI C,02 0162 CD0500 CALL FCALL 0165 E1 POP H 0166 C1 POP B 0167 C9 RET ;HL(bynary 2bytes) to asckii 4bytes & disp 0168 C5 HEX4DP:PUSH B 0169 E5 PUSH H 016A CD9201 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes 016D D5 PUSH D 016E EB XCHG 016F CD8401 CALL DEDP 0172 D1 POP D 0173 CD8401 CALL DEDP 0176 E1 POP H 0177 C1 POP B 0178 C9 RET ;A(binary) to asckii 2bytes HEX & disp 0179 C5 B2HEXDP:PUSH B 017A E5 PUSH H 017B CD9801 CALL B2HEX2 017E CD8401 CALL DEDP 0181 E1 POP H 0182 C1 POP B 0183 C9 RET ; ;DE(asckii 2bytes) disp 0184 D5 DEDP:PUSH D 0185 5A MOV E,D 0186 0E02 MVI C,02 0188 CD0500 CALL FCALL 018B D1 POP D 018C 0E02 MVI C,02 018E CD0500 CALL FCALL 0191 C9 RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE 0192 7C B2HEX4:MOV A,H 0193 CD9801 CALL B2HEX2 0196 EB XCHG 0197 7B MOV A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE 0198 F5 B2HEX2:PUSH PSW 0199 0F RRC 019A 0F RRC 019B 0F RRC 019C 0F RRC 019D CDA701 CALL B2HEX1 01A0 57 MOV D,A 01A1 F1 POP PSW 01A2 CDA701 CALL B2HEX1 01A5 5F MOV E,A 01A6 C9 RET ;binary to hex, low 4bit to ascii 1charactor 01A7 E60F B2HEX1:ANI 0F 01A9 C630 ADI 30 01AB FE3A CPI 3A 01AD D8 RC;0-9 01AE C607 ADI 07;A-F 01B0 C9 RET ; 01B1 696E STRIN:"in" 01B3 3A DB 3A;: 01B4 24 DB 24;$ ; ADP =015D B2HEX1 =01A7 B2HEX2 =0198 B2HEX4 =0192 B2HEXDP =0179 BFDMP =012A BFDMP1 =0132 CONBF =0200 CONBF1 =0201 CONBF2 =0202 CRLF =0151 DEDP =0184 FCALL =0005 HEX4DP =0168 LOOP =0105 LOOP1 =011E SPDP =015B STRIN =01B1 |
2015/1/21 14:57 mftst92.txt END=01B4 ; BDOS TEST9 console buffer read ;2012/3/16 8/16 ;2013/4/17 ; ORG $0100 FCALL=$0005 CONBF=$0200 CONBF1=$0201 CONBF2=$0202 ; 0100 3E05 MVI A,05;=5 0102 320002 STA CONBF 0105 11B101 LOOP:LXI D,STRIN |