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

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第190回]


●MACRO−80(2)

前回は、CP/M互換DOS上でMACRO−80がうまく動作しました、というご報告をいたしました。
MACRO−80そのものはちゃんと起動いたしました。

私の腹積もりでは、用意したサンプルプログラムをMACRO−80でアセンブルして、それからリンカー(L80)でマシン語プログラムファイルを作成して、それがうまく実行できれば、めでたしめでたし、という段取りだったのでありますが。
そうは問屋が卸してくれないのでありますね。

テスト用に用意しましたソースプログラムは、[第39回]でCP/M2.2の動作テストに使ったFTEST1.COMのソースをMACRO−80用に直したものです。
もともとのソースプログラムはND80ZVに附属しております当社オリジナルのZ80アセンブラZASM.COM用ですので、16進数の表記やEQU文が一般的なアセンブラとは異なっています。

もとのソースプログラムでは
     ORG $8100
     FCALL=$8005
となっていたところを
     ORG 0100H
     FCALL EQU 0005H
に変更しました。

下がそのように変更して作成したMVFTST1.MACです。
MACRO−80のソースプログラムは拡張子をMACにすることになっています(そうしないとアセンブルできないというわけではありません)。

; BDOS function 1 & 2 test for ZBDOS
;for MACRO-80
;12/8/4
;
     ORG 0100H
     FCALL EQU 0005H
;
LOOP:LD E,3F;?
        LD C,02
        CALL FCALL          
        LD C,01
        CALL FCALL
        CP 1A;^z?
        RET Z
        PUSH AF
        LD E,3D;=
        LD C,02
        CALL FCALL
        POP AF
        LD D,A
        CALL HEX1
        LD E,A
        LD A,D
        RRCA
        RRCA
        RRCA
        RRCA
        CALL HEX1
        PUSH DE
        LD E,A
        LD C,02
        CALL FCALL
        POP DE
        LD C,02
        CALL FCALL
        LD E,0D
        LD C,02
        CALL FCALL
        LD E,0A
        LD C,02
        CALL FCALL
        JP LOOP
HEX1:AND 0F
        ADD A,30
        CP 3A
        RET C;0-9
        ADD A,07;A-F
        RET     
;
        END

あ。最後に’END’を追加しました。

で。
M80.COMとMVFTST1.MACをAドライブにCOPYして(COPY Z:については[第175回]で説明をしています)、M80(MACRO−80)を起動して、MVFTST1.MACをアセンブルしてみましたところ。

なんと。
22個も(!) Fatal Error(s)になってしまいました。

A>dir
A: F80      COM : HELL1    FOR : HELL1    REL : HELLO    FOR
A: HELLO    REL : HELL2    FOR : HELL2    REL : HELL3    FOR
A: HELL3    REL
A>copy z:m80.com

A>dir
A: F80      COM : HELL1    FOR : HELL1    REL : HELLO    FOR
A: HELLO    REL : HELL2    FOR : HELL2    REL : HELL3    FOR
A: HELL3    REL : M80      COM
A>copy z:mvftst1.mac

A>m80

*=mvftst1
U 0100'   03 2D                 LOOP:LD E,3F;?
U 0102'   01 02                         LD C,02
U 0107'   01 01                         LD C,01
N 010C'   F4 0014                       CP 1A;^z?
Q 010F'   C9                            RET Z
U 0111'   03 03                         LD E,3D;=
U 0113'   01 02                         LD C,02
U 0119'   02 07                         LD D,A
U 011E'   03 07                         LD E,A
U 0120'   07 02                         LD A,D
U 0122'   00                            RRCA
U 0123'   00                            RRCA
U 0124'   00                            RRCA
U 0125'   00                            RRCA
U 012A'   03 07                         LD E,A
U 012C'   01 02                         LD C,02
U 0132'   01 02                         LD C,02
U 0137'   03 00                         LD E,0D
U 0139'   01 02                         LD C,02
U 013E'   03 0A                         LD E,0A
U 0140'   01 02                         LD C,02
O 0148'   F1                    HEX1:AND 0F
Q 0149'   87                            ADD A,30
N 014A'   F4 0028                       CP 3A
Q 014D'   C9                            RET C;0-9
Q 014E'   87                            ADD A,07;A-F

22 Fatal error(s),4 Warning(s)

*
’U’というのはUnknownということらしいです。
むむ。
Unknown?
おお。
MACRO−80はデフォルトでは8080ソースをアセンブルするらしいことがわかりました。

ならばということで
/z
をつけてみたところ、5 Fatal Error(s)になりました。


*=mvftst1/z
N 0100'   1E 2D                 LOOP:LD E,3F;?
N 010C'   FE 14                         CP 1A;^z?
N 0139'   1E 0A                         LD E,0A
N 0143'   E6 0F                 HEX1:AND 0F
N 0147'   FE 28                         CP 3A

5 Fatal error(s)

*

時間がなくなってしまいました。
この続きは次回にいたします。

ワンボードマイコンでCP/Mを![第190回]
2012.8.5upload

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