Z80 CPU アセンブラ Program-Technic Ⅱ

MC-8では、テンキーなどで、コマンドを使うと思いますが

ソフトウェア的Commandが、Dataから使う事が出来ます。

自分で、勝手に決める事ができ非常に便利です。

僕は、00h~7Fhをnote-dataとしていますので

80h~0FFh迄をCommandとして使います。

ちょっと変わった、ProgramジャンプTechnicを紹介します。

     JP_TBL:DW xxxx xxxx xxxx xxxx・・・

とジャンプテーブルにアドレスを書いておきます

その上で、80hからのData番号で、CommandジャンプさせるTechnicです   

     Aレジスタに、Dataが入っている事を想定します。

     

                   PUSH   AF

                   AND     80h

                   JP         NZ,JP_PRG

     JP_PRG:

                   POP      AF

                   AND     7Fh

                   LD        HL,JP_TBL

                   LD        B,0

                   LD        C,A

                   ADD     HL,BC

                   ADD     HL,BC

                   LD        E,(HL)

                   INC      HL

                   LD        D,(HL)

                   EX       DE,HL

                   JP        (HL)

と言う少し変わったプログラムを使います

また、プログラムを作る上で、フラグという物が必要になります

1Byte 8Bit有るので、1Bitごとをフラグに当てます

         フラグのAddressをF_ADRとします

また、何番目のフラグというのは、Aレジスタに置きます

まず、SHFT_1と言うサブルーチンを作ります。

SHFT_1:  OR        A

               PUSH      AF

               RRCA

               RRCA

               RRCA

               AND      1Fh

               LD          B,0

               LD          C,A    

               LD          HL,F_ADR

               ADD       HL,BC

               POP        AF

               LD          C,1

               RRCA

               JR           C,STEP_1

STEP_1:

               RLC         C

               RRCA

               JR           C,STEP_2

STEP_2:

               RLC        C

               RLC        C

               RRCA

               JR          C,STEP_3

               RLC        C

               RLC        C

               RLC        C

               RLC        C

               RET                 

フラグのSet

SET_F:

             CALL       SHFT_1

             LD           A,(HL)

             OR          C

             LD           (HL),A

と言うProgramです

フラグのRESET

RES_F:

            CALL       SHIFT_1

            LD           A,C

            CPL

            LD           C,A

            LD           A,(HL)

            AND        C

            LD           (HL),A

と言うProgramです

フラグのテスト

TES_F:

           CALL        SHFT_1

           LD            A,(HL)

           AND         C

           JP             Z,ZERO

           "1"で動くProgram

   JP            STEP

ZERO:

           "0"で動くProgram

 

STEP:Programの続き

別に JP           Zを

   JP           NZ,ICHI

でも構いません。

以上僕のプログラミング技法です

f:id:Analogue-Synthesizer:20200405075916j:plain