2015.1.19

前へ
次へ
ホームページトップへ戻る

MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!


[第105回]


●ファンクション06のテスト

前回からの続きです。
ファンクション06のテストは「ワンボードマイコンでCP/Mを!」[第205回]で行なっています。
そこで使ったテストプログラムはFNC06T−2です。
それをインテルニーモニックに書き直してMF06T−2を作りました。

●テストプログラムMF06T−2

下はMF06T−2のソースプログラムリストです。

; BDOS function06 test
;2012/3/31 8/25
;
        ORG $0100
        FCALL=$0005
;
LOOP:MVI C,06
        MVI E,FF
        CALL FCALL
        PUSH PSW
        CALL B2HEXDP
        POP PSW
        ORA A
        JNZ AOUT
NEXT:CALL SPDP
        JMP LOOP
AOUT:PUSH PSW
        MVI C,06
        MOV E,A
        CALL FCALL
        POP PSW
        CPI 1A;^z
        RZ
        JMP NEXT
;
;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;$
;

下はMF06T−2のアセンブルリストです。

2015/1/14  9:52  mf06t-2.txt
END=0187
              ; BDOS function06 test
              ;2012/3/31 8/25
              ;
                ORG $0100
                FCALL=$0005
              ;
0100 0E06     LOOP:MVI C,06
0102 1EFF       MVI E,FF
0104 CD0500     CALL FCALL
0107 F5         PUSH PSW
0108 CD4C01     CALL B2HEXDP
010B F1         POP PSW
010C B7         ORA A
010D C21601     JNZ AOUT
0110 CD2E01   NEXT:CALL SPDP
0113 C30001     JMP LOOP
0116 F5       AOUT:PUSH PSW
0117 0E06       MVI C,06
0119 5F         MOV E,A
011A CD0500     CALL FCALL
011D F1         POP PSW
011E FE1A       CPI 1A;^z
0120 C8         RZ
0121 C31001     JMP NEXT
              ;
              ;CL & LF
0124 3E0D     CRLF:MVI A,0D
0126 CD3001     CALL ADP
0129 3E0A       MVI A,0A
012B C33001     JMP ADP
              ;space disp
012E 3E20     SPDP:MVI A,20
              ;A disp
0130 C5       ADP:PUSH B
0131 E5         PUSH H
0132 5F         MOV E,A
0133 0E02       MVI C,02
0135 CD0500     CALL FCALL
0138 E1         POP H
0139 C1         POP B
013A C9         RET
              ;HL(bynary 2bytes) to asckii 4bytes & disp
013B C5       HEX4DP:PUSH B
013C E5         PUSH H
013D CD6501     CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
0140 D5         PUSH D
0141 EB         XCHG
0142 CD5701     CALL DEDP
0145 D1         POP D
0146 CD5701     CALL DEDP
0149 E1         POP H
014A C1         POP B
014B C9         RET
              ;A(binary) to asckii 2bytes HEX & disp
014C C5       B2HEXDP:PUSH B
014D E5         PUSH H
014E CD6B01     CALL B2HEX2
0151 CD5701     CALL DEDP
0154 E1         POP H
0155 C1         POP B
0156 C9         RET
              ;
              ;DE(asckii 2bytes) disp
0157 D5       DEDP:PUSH D
0158 5A         MOV E,D
0159 0E02       MVI C,02
015B CD0500     CALL FCALL
015E D1         POP D
015F 0E02       MVI C,02
0161 CD0500     CALL FCALL
0164 C9         RET
              ;
              ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
0165 7C       B2HEX4:MOV A,H
0166 CD6B01     CALL B2HEX2
0169 EB         XCHG
016A 7B         MOV A,E
              ;binary to hex, 1byte data to ascii 2charactors,A to DE
016B F5       B2HEX2:PUSH PSW
016C 0F         RRC
016D 0F         RRC
016E 0F         RRC
016F 0F         RRC
0170 CD7A01     CALL B2HEX1
0173 57         MOV D,A
0174 F1         POP PSW
0175 CD7A01     CALL B2HEX1
0178 5F         MOV E,A
0179 C9         RET
              ;binary to hex, low 4bit to ascii 1charactor
017A E60F     B2HEX1:ANI 0F
017C C630       ADI 30
017E FE3A       CPI 3A
0180 D8         RC;0-9
0181 C607       ADI 07;A-F
0183 C9         RET
              ;
0184 696E     STRIN:"in"
0186 3A         DB 3A;:
0187 24               DB 24;$
              ;
ADP          =0130  AOUT         =0116  B2HEX1       =017A  
B2HEX2       =016B  B2HEX4       =0165  B2HEXDP      =014C  
CRLF         =0124  DEDP         =0157  FCALL        =0005  
HEX4DP       =013B  LOOP         =0100  NEXT         =0110  
SPDP         =012E  STRIN        =0184  

ND80Z3.5(ND80ZV)用のZB3DOS(CP/M互換DOS)操作説明書を見ますと、ファンクション06の参考プログラムとして上で説明しましたFNC06T−2のほかにFNC06Tというのも書いてあります。
確かに付属CDROMにはFNC06Tも入っています。
過去記事のどこかで説明しているか探してみたのですがみつかりませんでした。
ま、しかし、これも参考プログラムとしてリストアップしてありますから、このFNC06Tもインテルニーモニックで書き直してMF06Tを作りました。

●テストプログラムMF06T

下はMF06Tのソースプログラムリストです。

; BDOS function06 test
;2012/3/31 8/25
;13/5/9
;
	ORG $0100
	FCALL=$0005
;
LOOP:MVI C,06
	MVI E,FF
	CALL FCALL
	ORA A
	JNZ AOUT
	MVI A,2D
AOUT:PUSH PSW
	MVI C,06
	MOV E,A
	CALL FCALL
	POP PSW
	CPI 1A;^z
	RZ
	JMP LOOP
;

下はMF06Tのアセンブルリストです。

2015/1/14  9:48  mf06t.txt
END=011A
              ; BDOS function06 test
              ;2012/3/31 8/25
              ;13/5/9
              ;
              	ORG $0100
              	FCALL=$0005
              ;
0100 0E06     LOOP:MVI C,06
0102 1EFF     	MVI E,FF
0104 CD0500   	CALL FCALL
0107 B7       	ORA A
0108 C20D01   	JNZ AOUT
010B 3E2D     	MVI A,2D
010D F5       AOUT:PUSH PSW
010E 0E06     	MVI C,06
0110 5F       	MOV E,A
0111 CD0500   	CALL FCALL
0114 F1       	POP PSW
0115 FE1A     	CPI 1A;^z
0117 C8       	RZ
0118 C30001   	JMP LOOP
              ;
AOUT         =010D  FCALL        =0005  LOOP         =0100  

うむむ。
どうやらこれは「応用CP/M」(村瀬康治著。アスキー出版局)にあったテストプログラムをほとんどそのまま拝借してしまったようです。
簡単なプログラムですから特に説明は要りませんでしょう。

●テストプログラムを実行しました

上の2つのテストプログラムを実行してみました。



プログラムの動作としてはキーを押し続けたときは連続してそのキーのコードが入力されるはずなのですが、Windowsのキー入力ではオートリピートとの関係で間歇的な入力になってしまいます。

MYCPU80でCP/Mを![第105回]
2015.1.19upload

前へ
次へ
ホームページトップへ戻る