MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第106回]
●ファンクション07、09、0C
ファンクション07のテストは「ワンボードマイコンでCP/Mを!」[第203回]で行なっています。
ファンクション07はI/Oバイトの取り出しです。
ZB3DOS(CP/M互換DOS)ではI/Oバイトは使いませんから、ファンクション07のテストはやっても意味がないのですが「ワンボードマイコンでCP/Mを!」[第203回]でテストプログラムを作ってテストをしていますので、MYCPU80でもテストしてみることにしました。
テストプログラムはVFTST7です。
それをインテルニーモニックに書き直してMFTST7を作りました。
無意味なテストの割には結構長いプログラムです。
何をやっているのかと思ってプログラムリストをよくよく眺めてみましたら、ファンクション07だけではなくて、ついでにファンクション0Cのテストもしていました。
また結果の表示にはファンクション09を使っています。
ファンクション0Cはバージョンbフ取り出しです。
ファンクション0Cも「ワンボードマイコンでCP/Mを!」[第203回]で説明をしています。
ファンクション09は文字列出力です。
こちらは「ワンボードマイコンでCP/Mを!」[第199回]で説明をしています。
そこでは簡単なテストプログラムVFTST2を使ってテストをしています。
そこでこのVFTST2もインテルニーモニックに書き直してMFTST2を作りました。
●テストプログラムMFTST2
下はMFTST2のソースプログラムリストです。
; BDOS function 9 test ;2012/6/16 ; ORG $0100 FCALL=$0005 ; LXI D,LIST MVI C,09 CALL FCALL RET ; LIST:"Hell" "o Wo" "rld$" ; |
2015/1/20 21:52 mftst2.txt
END=0114
; BDOS function 9 test
;2012/6/16
;
ORG $0100
FCALL=$0005
;
0100 110901 LXI D,LIST
0103 0E09 MVI C,09
0105 CD0500 CALL FCALL
0108 C9 RET
;
0109 48656C6C LIST:"Hell"
010D 6F20576F "o Wo"
0111 726C6424 "rld$"
;
FCALL =0005 LIST =0109 |
; BDOS TEST7 get IOBYTE & version No.
;2012/3/15 8/23
;
ORG $0100
FCALL=$0005
;
;IOBYTE
MVI C,07;get iobyte
CALL FCALL
PUSH PSW
LXI D,IOBYTE
MVI C,09;string out
CALL FCALL
POP PSW
CALL B2HEXDP
CALL CRLF
;version no.
MVI C,0C;version no. get
CALL FCALL
PUSH H
LXI D,VERNO
MVI C,09;string out
CALL FCALL
POP H
CALL HEX4DP
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
;
IOBYTE:"ioby"
"te"
DB 3D;=
DB 24;$
VERNO:"vers"
"ion "
"HL"
DB 3D
DB 24;$
;
|
2015/1/20 21:52 mftst7.txt
END=019B
; BDOS TEST7 get IOBYTE & version No.
;2012/3/15 8/23
;
ORG $0100
FCALL=$0005
;
;IOBYTE
0100 0E07 MVI C,07;get iobyte
0102 CD0500 CALL FCALL
0105 F5 PUSH PSW
0106 118801 LXI D,IOBYTE
0109 0E09 MVI C,09;string out
010B CD0500 CALL FCALL
010E F1 POP PSW
010F CD5001 CALL B2HEXDP
0112 CD2801 CALL CRLF
;version no.
0115 0E0C MVI C,0C;version no. get
0117 CD0500 CALL FCALL
011A E5 PUSH H
011B 119001 LXI D,VERNO
011E 0E09 MVI C,09;string out
0120 CD0500 CALL FCALL
0123 E1 POP H
0124 CD3F01 CALL HEX4DP
0127 C9 RET
;
;CL & LF
0128 3E0D CRLF:MVI A,0D
012A CD3401 CALL ADP
012D 3E0A MVI A,0A
012F C33401 JMP ADP
;space disp
0132 3E20 SPDP:MVI A,20
;A disp
0134 C5 ADP:PUSH B
0135 E5 PUSH H
0136 5F MOV E,A
0137 0E02 MVI C,02
0139 CD0500 CALL FCALL
013C E1 POP H
013D C1 POP B
013E C9 RET
;HL(bynary 2bytes) to asckii 4bytes & disp
013F C5 HEX4DP:PUSH B
0140 E5 PUSH H
0141 CD6901 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
0144 D5 PUSH D
0145 EB XCHG
0146 CD5B01 CALL DEDP
0149 D1 POP D
014A CD5B01 CALL DEDP
014D E1 POP H
014E C1 POP B
014F C9 RET
;A(binary) to asckii 2bytes HEX & disp
0150 C5 B2HEXDP:PUSH B
0151 E5 PUSH H
0152 CD6F01 CALL B2HEX2
0155 CD5B01 CALL DEDP
0158 E1 POP H
0159 C1 POP B
015A C9 RET
;
;DE(asckii 2bytes) disp
015B D5 DEDP:PUSH D
015C 5A MOV E,D
015D 0E02 MVI C,02
015F CD0500 CALL FCALL
0162 D1 POP D
0163 0E02 MVI C,02
0165 CD0500 CALL FCALL
0168 C9 RET
;
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
0169 7C B2HEX4:MOV A,H
016A CD6F01 CALL B2HEX2
016D EB XCHG
016E 7B MOV A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
016F F5 B2HEX2:PUSH PSW
0170 0F RRC
0171 0F RRC
0172 0F RRC
0173 0F RRC
0174 CD7E01 CALL B2HEX1
0177 57 MOV D,A
0178 F1 POP PSW
0179 CD7E01 CALL B2HEX1
017C 5F MOV E,A
017D C9 RET
;binary to hex, low 4bit to ascii 1charactor
017E E60F B2HEX1:ANI 0F
0180 C630 ADI 30
0182 FE3A CPI 3A
0184 D8 RC;0-9
0185 C607 ADI 07;A-F
0187 C9 RET
;
0188 696F6279 IOBYTE:"ioby"
018C 7465 "te"
018E 3D DB 3D;=
018F 24 DB 24;$
0190 76657273 VERNO:"vers"
0194 696F6E20 "ion "
0198 484C "HL"
019A 3D DB 3D
019B 24 DB 24;$
;
ADP =0134 B2HEX1 =017E B2HEX2 =016F
B2HEX4 =0169 B2HEXDP =0150 CRLF =0128
DEDP =015B FCALL =0005 HEX4DP =013F
IOBYTE =0188 SPDP =0132 VERNO =0190
|
; BDOS TEST8 IOBYTE set/get
;2012/3/15 8/23
;
ORG $0100
FCALL=$0005
;
MVI E,55;010101
CALL IOSETGET
MVI E,AA;10101010
CALL IOSETGET
MVI E,FF;11111111
;IOBYTE set/get
IOSETGET:PUSH D
LXI D,SETIO
MVI C,09;string out
CALL FCALL
POP D
MOV A,E
PUSH D
CALL B2HEXDP
CALL CRLF
POP D
MVI C,08;iobyte set
CALL FCALL
MVI C,07;iobyte get
CALL FCALL
CALL B2HEXDP
CALL CRLF
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
;
SETIO:"set "
"ioby"
"te "
DB 24;$
;
|
2015/1/20 21:52 mftst8.txt
END=019B
; BDOS TEST8 IOBYTE set/get
;2012/3/15 8/23
;
ORG $0100
FCALL=$0005
;
0100 1E55 MVI E,55;010101
0102 CD0C01 CALL IOSETGET
0105 1EAA MVI E,AA;10101010
0107 CD0C01 CALL IOSETGET
010A 1EFF MVI E,FF;11111111
;IOBYTE set/get
010C D5 IOSETGET:PUSH D
010D 119001 LXI D,SETIO
0110 0E09 MVI C,09;string out
0112 CD0500 CALL FCALL
0115 D1 POP D
0116 7B MOV A,E
0117 D5 PUSH D
0118 CD5801 CALL B2HEXDP
011B CD3001 CALL CRLF
011E D1 POP D
011F 0E08 MVI C,08;iobyte set
0121 CD0500 CALL FCALL
0124 0E07 MVI C,07;iobyte get
0126 CD0500 CALL FCALL
0129 CD5801 CALL B2HEXDP
012C CD3001 CALL CRLF
012F C9 RET
;
;CL & LF
0130 3E0D CRLF:MVI A,0D
0132 CD3C01 CALL ADP
0135 3E0A MVI A,0A
0137 C33C01 JMP ADP
;space disp
013A 3E20 SPDP:MVI A,20
;A disp
013C C5 ADP:PUSH B
013D E5 PUSH H
013E 5F MOV E,A
013F 0E02 MVI C,02
0141 CD0500 CALL FCALL
0144 E1 POP H
0145 C1 POP B
0146 C9 RET
;HL(bynary 2bytes) to asckii 4bytes & disp
0147 C5 HEX4DP:PUSH B
0148 E5 PUSH H
0149 CD7101 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
014C D5 PUSH D
014D EB XCHG
014E CD6301 CALL DEDP
0151 D1 POP D
0152 CD6301 CALL DEDP
0155 E1 POP H
0156 C1 POP B
0157 C9 RET
;A(binary) to asckii 2bytes HEX & disp
0158 C5 B2HEXDP:PUSH B
0159 E5 PUSH H
015A CD7701 CALL B2HEX2
015D CD6301 CALL DEDP
0160 E1 POP H
0161 C1 POP B
0162 C9 RET
;
;DE(asckii 2bytes) disp
0163 D5 DEDP:PUSH D
0164 5A MOV E,D
0165 0E02 MVI C,02
0167 CD0500 CALL FCALL
016A D1 POP D
016B 0E02 MVI C,02
016D CD0500 CALL FCALL
0170 C9 RET
;
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
0171 7C B2HEX4:MOV A,H
0172 CD7701 CALL B2HEX2
0175 EB XCHG
0176 7B MOV A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
0177 F5 B2HEX2:PUSH PSW
0178 0F RRC
0179 0F RRC
017A 0F RRC
017B 0F RRC
017C CD8601 CALL B2HEX1
017F 57 MOV D,A
0180 F1 POP PSW
0181 CD8601 CALL B2HEX1
0184 5F MOV E,A
0185 C9 RET
;binary to hex, low 4bit to ascii 1charactor
0186 E60F B2HEX1:ANI 0F
0188 C630 ADI 30
018A FE3A CPI 3A
018C D8 RC;0-9
018D C607 ADI 07;A-F
018F C9 RET
;
0190 73657420 SETIO:"set "
0194 696F6279 "ioby"
0198 746520 "te "
019B 24 DB 24;$
;
ADP =013C B2HEX1 =0186 B2HEX2 =0177
B2HEX4 =0171 B2HEXDP =0158 CRLF =0130
DEDP =0163 FCALL =0005 HEX4DP =0147
IOSETGET =010C SETIO =0190 SPDP =013A
|

あれえ?
MFTST7の実行でVersion No.がおかしい値になっていますねえ。
本来ならばVersion2.2を示す0022にならなければいけないのですが…。
どこかにバグがあるようです。
MYCPU80でCP/Mを![第106回]
2015.1.20upload
前へ
次へ
ホームページトップへ戻る