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
|
