MSX Datapack wiki化計画

B R800 かけ算命令マクロ

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※

 B.1 R800のかけ算命令

 R800には、以下のかけ算命令があります。

B.1.1 8ビットのかけ算

 8ビットレジスタ同士を乗算して、その結果をHLレジスタに返します。かけ算は符号なしで実行されます。インストラクションなどは以下の通りです。

演算インストラクションクロック数
HL←A*BED C114
HL←A*CED C914
HL←A*DED D114
HL←A*EED C914

B.1.2 16ビットのかけ算

 16ビットレジスタ同士を乗算して、その結果をDE:HLレジスタに返します。かけ算は符号なしで実行されます。インストラクションなどは以下のとおりです。

演算インストラクションクロック数
DE:HL←HL*BCED C336
DE:HL←HL*SPED F336

 B.2 M80のかけ算用マクロ

 M80でこれらのかけ算命令を使うときは、以下のようなマクロを定義します。

mult8   macro    reg
        ifidn  <reg>, <b>
        defb     0edh, 0c1h
        else
        ifidn  <reg>, <B>
        defb     0edh, 0c1h
        else
        ifidn  <reg>, <c>
        defb     0edh, 0c9h
        else
        ifidn  <reg>, <C>
        defb     0edh, 0c9h
        else
        ifidn  <reg>, <d>
        defb     0edh, 0d1h
        else
        ifidn  <reg>, <D>
        defb     0edh, 0d1h
        else
        ifidn  <reg>, <e>
        defb     0edh, 0d9h
        else
        ifidn  <reg>, <E>
        defb     0edh, 0d9h
        else
        if1
        .printx *MULT8: illegal argument*
        defb    00h,  00h
        err
        endif
        endif
        endif
        endif
        endif
        endif
        endif
        endif
        endif
        endm

mult16  macro
        ifidn  <reg>, <bc>
        defb     0edh, 0c3h
        else
        ifidn  <reg>, <BC>
        defb     0edh, 0c3h
        else
        ifidn  <reg>, <sp>
        defb     0edh, 0f3h
        else
        ifidn  <reg>, <SP>
        defb     0edh, 0f3h
        else
        if1
        .printx *MULT16: illegal argument*
        defb    00h,  00h
        err
        endif
        endif
        endif
        endif
        endif
        endm