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
前へ
次へ
ホームページトップへ戻る