復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第78回]
●RS232C通信のテスト(ファンクションコール03及び04のテスト)
[第74回]で、ファンクションコール0BHの動作確認をするために、ファンクションコール04(パンチ出力)にRS232C送信を割り当ててテストを行ないました。
また[第76回]では、BIOSのパンチ出力としてRS232C送信を、READER入力としてRS232C受信を割り当てて、そのためのプログラムを追加しました。
RS232C送信については、[第74回]で、ファンクションコール0BHのテストプログラムの中で使いましたから、それで動作の確認はできたことになります。
しかしRS232C受信については、何もテストをしていませんから、あらためて送信と受信をあわせてテストすることにします。
[第74回]でのテストでは、RS232C送信の相手としては、最も簡単なものとして、ZBKシリーズのZB28K+RS232Cレベル変換ボードを選びました。
今回も同じ構成でテストをすることにいたします。
テストプログラムのソースプログラムリストです。
FNC0304T.TXTというファイル名でハードディスクに保存しました。
; BDOS function0304 test
;2012/3/29
;
ORG $8100
FCALL=$8005
SINBF=$8300
;
;
;sousin
;
LD HL,MSG
LOOP:LD A,(HL)
CP 24;$
JP Z,END
CALL SOUT
INC HL
JP LOOP
END:LD DE,MSG
LD C,09
CALL FCALL
;jusin
LD HL,SINBF
LD B,00
LOOP2:CALL SIN
CP 05
JP C,ERR
CP 0A
JP Z,MSGOUT
LD A,B
OR A
JP NZ,LOOP2
;
MSGOUT:LD HL,SINBF
LOOP3:LD A,(HL)
CALL ADP
NEXT:INC HL
DEC B
JP NZ,LOOP3
RET
;
ERR:LD DE,ERRT
PUSH AF
LD C,09
CALL FCALL
POP AF
CALL B2HEXDP
RET
;
SOUT:PUSH HL
LD E,A
LD C,04
CALL FCALL
POP HL
RET
;
SIN:PUSH HL
PUSH BC
LD C,03
CALL FCALL
POP BC
POP HL
LD (HL),A
INC HL
INC B
RET
;
MSG:"Hell"
"o"
DB 2C;','
"How "
"are "
"you"
DB 3F;'?'
DB 0D
DB 0A
DB 24;$
;
ERRT:"ERR "
DB 24;'$'
;
;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/30 12:39 fnc0304t.txt
END=81DD
; BDOS function0304 test
;2012/3/29
;
ORG $8100
FCALL=$8005
SINBF=$8300
;
;
;sousin
;
8100 216081 LD HL,MSG
8103 7E LOOP:LD A,(HL)
8104 FE24 CP 24;$
8106 CA1081 JP Z,END
8109 CD4A81 CALL SOUT
810C 23 INC HL
810D C30381 JP LOOP
8110 116081 END:LD DE,MSG
8113 0E09 LD C,09
8115 CD0580 CALL FCALL
;jusin
8118 210083 LD HL,SINBF
811B 0600 LD B,00
811D CD5381 LOOP2:CALL SIN
8120 FE05 CP 05
8122 DA3C81 JP C,ERR
8125 FE0A CP 0A
8127 CA2F81 JP Z,MSGOUT
812A 78 LD A,B
812B B7 OR A
812C C21D81 JP NZ,LOOP2
;
812F 210083 MSGOUT:LD HL,SINBF
8132 7E LOOP3:LD A,(HL)
8133 CD8681 CALL ADP
8136 23 NEXT:INC HL
8137 05 DEC B
8138 C23281 JP NZ,LOOP3
813B C9 RET
;
813C 117581 ERR:LD DE,ERRT
813F F5 PUSH AF
8140 0E09 LD C,09
8142 CD0580 CALL FCALL
8145 F1 POP AF
8146 CDA281 CALL B2HEXDP
8149 C9 RET
;
814A E5 SOUT:PUSH HL
814B 5F LD E,A
814C 0E04 LD C,04
814E CD0580 CALL FCALL
8151 E1 POP HL
8152 C9 RET
;
8153 E5 SIN:PUSH HL
8154 C5 PUSH BC
8155 0E03 LD C,03
8157 CD0580 CALL FCALL
815A C1 POP BC
815B E1 POP HL
815C 77 LD (HL),A
815D 23 INC HL
815E 04 INC B
815F C9 RET
;
8160 48656C6C MSG:"Hell"
8164 6F "o"
8165 2C DB 2C;','
8166 486F7720 "How "
816A 61726520 "are "
816E 796F75 "you"
8171 3F DB 3F;'?'
8172 0D DB 0D
8173 0A DB 0A
8174 24 DB 24;$
;
8175 45525220 ERRT:"ERR "
8179 24 DB 24;'$'
;
;CL & LF
817A 3E0D CRLF:LD A,0D
817C CD8681 CALL ADP
817F 3E0A LD A,0A
8181 C38681 JP ADP
;space disp
8184 3E20 SPDP:LD A,20
;A disp
8186 C5 ADP:PUSH BC
8187 E5 PUSH HL
8188 5F LD E,A
8189 0E02 LD C,02
818B CD0580 CALL FCALL
818E E1 POP HL
818F C1 POP BC
8190 C9 RET
;HL(bynary 2bytes) to asckii 4bytes & disp
8191 C5 HEX4DP:PUSH BC
8192 E5 PUSH HL
8193 CDBB81 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
8196 D5 PUSH DE
8197 EB EX DE,HL
8198 CDAD81 CALL DEDP
819B D1 POP DE
819C CDAD81 CALL DEDP
819F E1 POP HL
81A0 C1 POP BC
81A1 C9 RET
;A(binary) to asckii 2bytes HEX & disp
81A2 C5 B2HEXDP:PUSH BC
81A3 E5 PUSH HL
81A4 CDC181 CALL B2HEX2
81A7 CDAD81 CALL DEDP
81AA E1 POP HL
81AB C1 POP BC
81AC C9 RET
;
;DE(asckii 2bytes) disp
81AD D5 DEDP:PUSH DE
81AE 5A LD E,D
81AF 0E02 LD C,02
81B1 CD0580 CALL FCALL
81B4 D1 POP DE
81B5 0E02 LD C,02
81B7 CD0580 CALL FCALL
81BA C9 RET
;
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
81BB 7C B2HEX4:LD A,H
81BC CDC181 CALL B2HEX2
81BF EB EX DE,HL
81C0 7B LD A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
81C1 F5 B2HEX2:PUSH AF
81C2 0F RRCA
81C3 0F RRCA
81C4 0F RRCA
81C5 0F RRCA
81C6 CDD081 CALL B2HEX1
81C9 57 LD D,A
81CA F1 POP AF
81CB CDD081 CALL B2HEX1
81CE 5F LD E,A
81CF C9 RET
;binary to hex, low 4bit to ascii 1charactor
81D0 E60F B2HEX1:AND 0F
81D2 C630 ADD A,30
81D4 FE3A CP 3A
81D6 D8 RET C;0-9
81D7 C607 ADD A,07;A-F
81D9 C9 RET
;
81DA 696E STRIN:"in"
81DC 3A DB 3A;:
81DD 24 DB 24;$
;
ADP =8186 B2HEX1 =81D0 B2HEX2 =81C1
B2HEX4 =81BB B2HEXDP =81A2 CRLF =817A
DEDP =81AD END =8110 ERR =813C
ERRT =8175 FCALL =8005 HEX4DP =8191
LOOP =8103 LOOP2 =811D LOOP3 =8132
MSG =8160 MSGOUT =812F NEXT =8136
SIN =8153 SINBF =8300 SOUT =814A
SPDP =8184 STRIN =81DA
|
