復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第64回]
●ファンクションコール0A(コンソールバッファ入力)
コンソール入力としてはファンクションコール01があります([第39回])。
ファンクションコール01はコンソールから1バイト(1文字)を入力します。
これに対して今回のファンクションコール0Aは、指定した文字数の入力があるか、または[Enter]が押されるまで、入力された文字を指定したバッファに入力します。
入力途中の[BackSpace]も有効です。
ただし[Enter]の文字コードはバッファには入れられません。
ファンクションコール0Aを使ったテストプログラムです。
ソースプログラムリストです。
; BDOS TEST9 console buffer read
;2012/3/16
;
ORG $8100
FCALL=$8005
CONBF=$8200
CONBF1=$8201
;
LD A,14;=20
LD (CONBF),A
LOOP:LD DE,STRIN
LD C,09;string out
CALL FCALL
LD DE,CONBF
LD C,0A;console buffer in
CALL FCALL
CALL CRLF
LD HL,CONBF1
LD B,(HL)
INC HL
INC B
LOOP1:DEC B
JP Z,BFDMP
LD A,(HL)
CALL ADP
INC HL
JP LOOP1
BFDMP:CALL CRLF
LD HL,CONBF
LD B,17;=23
BFDMP1:LD A,(HL)
CALL B2HEXDP
CALL SPDP
INC HL
DEC B
JP NZ,BFDMP1
CALL CRLF
JP LOOP
;
;CL & LF
CRLF:LD A,0D
CALL ADP
LD A,0A
JP ADP
;space disp
SPDP:LD A,20
;A disp
ADP:PUSH BC
PUSH HL
LD E,A
LD C,02
CALL FCALL
POP HL
POP BC
RET
;HL(bynary 2bytes) to asckii 4bytes & disp
HEX4DP:PUSH BC
PUSH HL
CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
PUSH DE
EX DE,HL
CALL DEDP
POP DE
CALL DEDP
POP HL
POP BC
RET
;A(binary) to asckii 2bytes HEX & disp
B2HEXDP:PUSH BC
PUSH HL
CALL B2HEX2
CALL DEDP
POP HL
POP BC
RET
;
;DE(asckii 2bytes) disp
DEDP:PUSH DE
LD E,D
LD C,02
CALL FCALL
POP DE
LD C,02
CALL FCALL
RET
;
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
B2HEX4:LD A,H
CALL B2HEX2
EX DE,HL
LD A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
B2HEX2:PUSH AF
RRCA
RRCA
RRCA
RRCA
CALL B2HEX1
LD D,A
POP AF
CALL B2HEX1
LD E,A
RET
;binary to hex, low 4bit to ascii 1charactor
B2HEX1:AND 0F
ADD A,30
CP 3A
RET C;0-9
ADD A,07;A-F
RET
;
STRIN:"in"
DB 3A;:
DB 24;$
;
|
2012/3/16 18:4 ftst9.txt
END=81A7
; BDOS TEST9 console buffer read
;2012/3/16
;
ORG $8100
FCALL=$8005
CONBF=$8200
CONBF1=$8201
;
8100 3E14 LD A,14;=20
8102 320082 LD (CONBF),A
8105 11A481 LOOP:LD DE,STRIN
8108 0E09 LD C,09;string out
810A CD0580 CALL FCALL
810D 110082 LD DE,CONBF
8110 0E0A LD C,0A;console buffer in
8112 CD0580 CALL FCALL
8115 CD4481 CALL CRLF
8118 210182 LD HL,CONBF1
811B 46 LD B,(HL)
811C 23 INC HL
811D 04 INC B
811E 05 LOOP1:DEC B
811F CA2A81 JP Z,BFDMP
8122 7E LD A,(HL)
8123 CD5081 CALL ADP
8126 23 INC HL
8127 C31E81 JP LOOP1
812A CD4481 BFDMP:CALL CRLF
812D 210082 LD HL,CONBF
8130 0617 LD B,17;=23
8132 7E BFDMP1:LD A,(HL)
8133 CD6C81 CALL B2HEXDP
8136 CD4E81 CALL SPDP
8139 23 INC HL
813A 05 DEC B
813B C23281 JP NZ,BFDMP1
813E CD4481 CALL CRLF
8141 C30581 JP LOOP
;
;CL & LF
8144 3E0D CRLF:LD A,0D
8146 CD5081 CALL ADP
8149 3E0A LD A,0A
814B C35081 JP ADP
;space disp
814E 3E20 SPDP:LD A,20
;A disp
8150 C5 ADP:PUSH BC
8151 E5 PUSH HL
8152 5F LD E,A
8153 0E02 LD C,02
8155 CD0580 CALL FCALL
8158 E1 POP HL
8159 C1 POP BC
815A C9 RET
;HL(bynary 2bytes) to asckii 4bytes & disp
815B C5 HEX4DP:PUSH BC
815C E5 PUSH HL
815D CD8581 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
8160 D5 PUSH DE
8161 EB EX DE,HL
8162 CD7781 CALL DEDP
8165 D1 POP DE
8166 CD7781 CALL DEDP
8169 E1 POP HL
816A C1 POP BC
816B C9 RET
;A(binary) to asckii 2bytes HEX & disp
816C C5 B2HEXDP:PUSH BC
816D E5 PUSH HL
816E CD8B81 CALL B2HEX2
8171 CD7781 CALL DEDP
8174 E1 POP HL
8175 C1 POP BC
8176 C9 RET
;
;DE(asckii 2bytes) disp
8177 D5 DEDP:PUSH DE
8178 5A LD E,D
8179 0E02 LD C,02
817B CD0580 CALL FCALL
817E D1 POP DE
817F 0E02 LD C,02
8181 CD0580 CALL FCALL
8184 C9 RET
;
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
8185 7C B2HEX4:LD A,H
8186 CD8B81 CALL B2HEX2
8189 EB EX DE,HL
818A 7B LD A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
818B F5 B2HEX2:PUSH AF
818C 0F RRCA
818D 0F RRCA
818E 0F RRCA
818F 0F RRCA
8190 CD9A81 CALL B2HEX1
8193 57 LD D,A
8194 F1 POP AF
8195 CD9A81 CALL B2HEX1
8198 5F LD E,A
8199 C9 RET
;binary to hex, low 4bit to ascii 1charactor
819A E60F B2HEX1:AND 0F
819C C630 ADD A,30
819E FE3A CP 3A
81A0 D8 RET C;0-9
81A1 C607 ADD A,07;A-F
81A3 C9 RET
;
81A4 696E STRIN:"in"
81A6 3A DB 3A;:
81A7 24 DB 24;$
;
ADP =8150 B2HEX1 =819A B2HEX2 =818B
B2HEX4 =8185 B2HEXDP =816C BFDMP =812A
BFDMP1 =8132 CONBF =8200 CONBF1 =8201
CRLF =8144 DEDP =8177 FCALL =8005
HEX4DP =815B LOOP =8105 LOOP1 =811E
SPDP =814E STRIN =81A4
|

logfile nd80zlog\03161804.txt open
ND80ZVに接続しました
0001 0000 - z
1000 00C3 -
*** nd80z3 basic ****
>/ld ftst9.bin,8100
loading FTST9.BIN ...00a8(168)bytes loaded,from 8100 to 81A7
>jp d233
a>save 1 ftst9.com
a>dir
A: FILLE5 COM : FTEST1 COM : FTEST2 COM : DM COM
A: TEST COM : FTEST4 COM : FTEST4-1 TXT : FTEST4-2 COM
A: FTEST4-3 COM : COPY COM : TESTDATA TXT : FILLFF COM
A: TESTDAT2 TXT : CMP COM : FILL00 BIN : FTST7 COM
A: FTST8 COM : FTST9 COM
a>ftst9
in:abcxyz
abcxyz
14 06 61 62 63 78 79 7A 80 54 D0 14 13 8C CD 35 FA 7B 89 79 EE B7 9E
in:123456789ABCXYZ
123456789ABCXYZ
14 0F 31 32 33 34 35 36 37 38 39 41 42 43 58 59 5A 7B 89 79 EE B7 9E
in:12345678901234567890
12345678901234567890
14 14 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30 9E
in:abcde#
abcd#
abc
abc
14 03 61 62 63 64 65 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30 9E
in:^D>in:^D>
WHAT?
>dm 8200,823f
8200 14 03 04 62 63 64 65 36-37 38 39 30 31 32 33 34 ...bcde678901234
8210 35 36 37 38 39 30 9E FF-6B F5 7B 57 EE F7 E9 7F 567890..k.{W...
8220 F2 00 80 30 09 12 0B 1A-A2 0C 20 10 02 40 C1 85 ...0....「. ..@チ.
8230 BF B4 76 5E C9 EC E8 FF-F7 FB EF AD 07 CB 3C C3 ソエv^ノ......ュ.ヒ<テ
>0000 00C3 -
リモート接続を終了しました
logfile closed at Fri Mar 16 18:10:02 2012
|