            SECTION         text,CODE


            include         'regs.i'
            include         'vga.i'
            include         'tools.i'


            XREF            TabDDCB
            XREF            Z80
            XREF            _SendDebug
            XREF            _IntZ80


GETNNIY     MACRO
            GETN            \1
            EXT.W           \1
            ADD.W           REG_IY(A4),\1
            ENDM


FIY0_B:     ;   LD  B,(IY+nn)
            GETNNIY         D0
            PEEK8           REG_B(A4)
            JMP             (A6)


FIY0_C:     ;   LD  C,(IY+nn)
            GETNNIY         D0
            PEEK8           REG_C(A4)
            JMP             (A6)


FIY0_D:     ;   LD  D,(IY+nn)
            GETNNIY         D0
            PEEK8           REG_D(A4)
            JMP             (A6)


FIY0_E:     ;   LD  E,(IY+nn)
            GETNNIY         D0
            PEEK8           REG_E(A4)
            JMP             (A6)


FIY0_H:     ;   LD  H,(IY+nn)
            GETNNIY         D0
            PEEK8           REG_H(A4)
            JMP             (A6)


FIY0_L:     ;   LD  L,(IY+nn)
            GETNNIY         D0
            PEEK8           REG_L(A4)
            JMP             (A6)


FIY0_A:     ;   LD  A,(IY+nn)
            GETNNIY         D0
            PEEK8           (A4)
            JMP             (A6)


FIY1_B:     ;   LD  (IY+nn),B
            GETNNIY         D0
            POKE8           REG_B(A4)
            JMP             (A6)


FIY1_C:     ;   LD  (IY+nn),C
            GETNNIY         D0
            POKE8           REG_C(A4)
            JMP             (A6)


FIY1_D:     ;   LD  (IY+nn),D
            GETNNIY         D0
            POKE8           REG_D(A4)
            JMP             (A6)


FIY1_E:     ;   LD  (IY+nn),E
            GETNNIY         D0
            POKE8           REG_E(A4)
            JMP             (A6)


FIY1_H:     ;   LD  (IY+nn),H
            GETNNIY         D0
            POKE8           REG_H(A4)
            JMP             (A6)


FIY1_L:     ;   LD  (IY+nn),L
            GETNNIY         D0
            POKE8           REG_L(A4)
            JMP             (A6)


FIY1_A:     ;   LD  (IY+nn),A
            GETNNIY         D0
            POKE8           (A4)
            JMP             (A6)


FIY2:       ;   LD  (IY+nn),nn
            GETNNIY         D3
            GETN            D1
            MOVE.W          D3,D0
            POKE8           D1
            JMP             (A6)


FIY3:       ;   LD  IY,nnnn
            GETNN           D3
            MOVE.W          D3,REG_IY(A4)
            JMP             (A6)


FIY4:       ;   LD  IY, (nnnn)
            GETNN           D3
            PEEK16          D3,D0
            MOVE.W          D0,REG_IY(A4)
            JMP             (A6)


FIY5:       ;   LD  (nnnn),IY
            GETNN           D3
            MOVE.W          D3,D0
            POKE8           REG_IYL(A4)
            MOVE.W          D3,D0
            ADDQ.W          #1,D0
            POKE8           REG_IY(A4)
            JMP             (A6)


FIY6:       ;   LD  SP,IY
            MOVE.W          REG_IY(A4),D6
            JMP             (A6)


FIY7:      ;   PUSH IY
            SUBQ.W          #1,D6
            MOVE.W          D6,D0
            POKE8           REG_IY(A4)
            SUBQ.W          #1,D6
            MOVE.W          D6,D0
            POKE8           REG_IYL(A4)
            JMP             (A6)


FIY8:       ;   POP IY
            MOVE.W          D6,D0
            ADDQ.W          #2,D6
            PEEK16          D0,D3
            MOVE.W          D3,REG_IY(A4)
            JMP             (A6)


FIY9:       ;   EX  (SP), IY
            MOVE.W          D6,D0
            PEEK16          D0,D3
            MOVE.W          REG_IY(A4),D0
            MOVE.W          D3,REG_IY(A4)
            MOVE.W          D0,D3
            MOVE.W          D6,D0
            POKE8           D3
            MOVE.W          D6,D0
            ADDQ.W          #1,D0
            LSR.W           #8,D3
            POKE8           D3
            JMP             (A6)


FIY10:      ;   ADD A,(IY+nn)
            GETNNIY         D0
            PEEK8           D1
            ADD_R8
            JMP             (A6)


FIY11:      ;   ADC A,(IY+nn)
            GETNNIY         D0
            PEEK8           D1
            ADC_R8
            JMP             (A6)

    
FIY12:      ;   SUB   (IY+nn)
            GETNNIY         D0
            PEEK8           D1
            SUB_R8
            JMP             (A6)


FIY13:      ;   SBC A,(IY+nn)
            GETNNIY         D0
            PEEK8           D1
            SBC_R8
            JMP             (A6)


FIY14:      ;   AND (IY+nn)
            GETNNIY         D0
            PEEK8           D0
            AND.B           D0,(A4)
            FLAG_LOG
            OR.B            #FLAG_H,(A3)
            JMP             (A6)


FIY15:      ;   XOR (IY+nn)
            GETNNIY         D0
            PEEK8           D0
            EOR.B           D0,(A4)
            FLAG_LOG
            JMP             (A6)


FIY16:      ;   OR  (IY+nn)
            GETNNIY         D0
            PEEK8           D0
            OR.B            D0,(A4)
            FLAG_LOG
            JMP             (A6)


FIY17:      ;   CP  (IY+nn)
            GETNNIY         D0
            PEEK8           D1
            CP_R8
            JMP             (A6)


FIY18:      ;   INC  (IY+nn)
            GETNNIY         D0
            PEEKA
            ADDQ.B          #1,D2
            MOVE            CCR,D3
            POKEA
            FLAG_INC        D2
            JMP             (A6)


FIY19:      ;   DEC  (IY+nn)
            GETNNIY         D0
            PEEKA
            SUBQ.B          #1,D2
            MOVE            CCR,D3
            POKEA
            FLAG_DEC        D2
            JMP             (A6)


FIY20_BC:   ;   ADD IY,BC
            AND.B           #N_FLAG_N&N_FLAG_C,(A3)
            MOVE.W          REG_B(A4),D1
            ADD.W           D1,REG_IY(A4)
            C_CARRY
            JMP             (A6)



FIY20_DE:   ;   ADD IY,DE
            AND.B           #N_FLAG_N&N_FLAG_C,(A3)
            MOVE.W          REG_D(A4),D1
            ADD.W           D1,REG_IY(A4)
            C_CARRY
            JMP             (A6)



FIY20_IY:   ;   ADD IY,HL
            AND.B           #N_FLAG_N&N_FLAG_C,(A3)
            MOVE.W          REG_IY(A4),D1
            ADD.W           D1,REG_IY(A4)
            C_CARRY
            JMP             (A6)



FIY20_SP:   ;   ADD IY,SP
            AND.B           #N_FLAG_N&N_FLAG_C,(A3)
            ADD.W           D6,REG_IY(A4)
            C_CARRY
            JMP             (A6)


FIY21:      ;   INC IY
            ADDQ.W          #1,REG_IY(A4)
            JMP             (A6)


FIY22:      ;   DEC IY
            SUBQ.W          #1,REG_IY(A4)
            JMP             (A6)


FIY23:      ;   JP  (IY)
            MOVE.W          REG_IY(A4),D7
            JMP             (A6)


FIYCB:      ;   Special code FD CB
            GETNNIY         D2
            GETN            D3
            MOVE.W          D2,D0
            PEEKA
            AND.W           #$FF,D3
            ADDQ.B          #1,REG_R(A4)
            LEA             TabDDCB,A0
            JMP             ([A0,D3.W*4])


;
; Instructions non documentées
;
FIY24:      ;   LD  IYh,nn
            GETN            REG_IY(A4)
            JMP             (A6)


FIY25:      ;   LD  IYl,nn
            GETN            REG_IYL(A4)
            JMP             (A6)


FIY26:      ;   INC IYh
            ADDQ.B          #1,REG_IY(A4)
            FLAG_INC        REG_IY(A4)
            JMP             (A6)


FIY27:      ;   INC IYl
            ADDQ.B          #1,REG_IYL(A4)
            FLAG_INC        REG_IYL(A4)
            JMP             (A6)


FIY28:      ;   DEC IYh
            SUBQ.B          #1,REG_IY(A4)
            FLAG_DEC        REG_IY(A4)
            JMP             (A6)


FIY29:      ;   DEC IYl
            SUBQ.B          #1,REG_IYL(A4)
            FLAG_DEC        REG_IYL(A4)
            JMP             (A6)


FIY32:      ;   LD  IYh,IYl
            MOVE.B          REG_IYL(A4),REG_IY(A4)
            JMP             (A6)


FIY34:      ;   LD  IYh,A
            MOVE.B          (A4),REG_IY(A4)
            JMP             (A6)


FIY35:      ;   LD  IYl,A
            MOVE.B          (A4),REG_IYL(A4)
            JMP             (A6)


FIY36:      ;   LD  IYl,IYh
            MOVE.B          REG_IY(A4),REG_IYL(A4)
            JMP             (A6)


FIY37:      ;   LD  A,IYh
            MOVE.B          REG_IY(A4),(A4)
            JMP             (A6)


FIY38:      ;   LD  A,IYl
            MOVE.B          REG_IYL(A4),(A4)
            JMP             (A6)


FIY21_H:    ;   ADD A,IYh
            MOVE.B          REG_IY(A4),D1
            ADD_R8
            JMP             (A6)


FIY21_L:    ;   ADD A,IYl
            MOVE.B          REG_IYL(A4),D1
            ADD_R8
            JMP             (A6)


FIY24_H:    ;   ADC A,IYh
            MOVE.B          REG_IY(A4),D1
            ADC_R8
            JMP             (A6)


FIY24_L:    ;   ADC A,IYl
            MOVE.B          REG_IYL(A4),D1
            ADC_R8
            JMP             (A6)


FIY25_H:    ;   SUB   IYh
            MOVE.B          REG_IY(A4),D1
            SUB_R8
            JMP             (A6)


FIY25_L:    ;   SUB   IYl
            MOVE.B          REG_IYL(A4),D1
            SUB_R8
            JMP             (A6)


FIY26_H:    ;   SBC A,IYh
            MOVE.B          REG_IY(A4),D1
            SBC_R8
            JMP             (A6)


FIY26_L:    ;   SBC A,IYl
            MOVE.B          REG_IYL(A4),D1
            SBC_R8
            JMP             (A6)


FIY27_H:    ;   AND IYh
            MOVE.B          REG_IY(A4),D0
            AND.B           D0,(A4)
            FLAG_LOG
            OR.B            #FLAG_H,(A3)
            JMP             (A6)


FIY27_L:    ;   AND IYl
            MOVE.B          REG_IYL(A4),D0
            AND.B           D0,(A4)
            FLAG_LOG
            OR.B            #FLAG_H,(A3)
            JMP             (A6)


FIY28_H:    ;   XOR IYh
            MOVE.B          REG_IY(A4),D0
            EOR.B           D0,(A4)
            FLAG_LOG
            JMP             (A6)


FIY28_L:    ;   XOR IYl
            MOVE.B          REG_IYL(A4),D0
            EOR.B           D0,(A4)
            FLAG_LOG
            JMP             (A6)


FIY29_H:    ;   OR  IYh
            MOVE.B          REG_IY(A4),D0
            OR.B            D0,(A4)
            FLAG_LOG
            JMP             (A6)


FIY29_L:    ;   OR  IYl
            MOVE.B          REG_IYL(A4),D0
            OR.B            D0,(A4)
            FLAG_LOG
            JMP             (A6)


FIY30_H:    ;   CP    IYh
            MOVE.B          REG_IY(A4),D1
            CP_R8
            JMP             (A6)


FIY30_L:    ;   CP    IYl
            MOVE.B          REG_IYL(A4),D1
            CP_R8
            JMP             (A6)


FIY_BH:     ;   LD  B,H
            MOVE.B         REG_IY(A4),REG_B(A4)  
            JMP             (A6)             


FIY_BL:     ;   LD  B,L
            MOVE.B         REG_IYL(A4),REG_B(A4)           
            JMP             (A6)             


FIY_CH:     ;   LD  C,H
            MOVE.B         REG_IY(A4),REG_C(A4)           
            JMP             (A6)             


FIY_CL:     ;   LD  C,L
            MOVE.B         REG_IYL(A4),REG_C(A4)        
            JMP             (A6)             


FIY_DH:     ;   LD  D,H
            MOVE.B         REG_IY(A4),REG_D(A4)  
            JMP             (A6)             


FIY_DL:     ;   LD  D,L
            MOVE.B         REG_IYL(A4),REG_D(A4)           
            JMP             (A6)             


FIY_EH:     ;   LD  E,H
            MOVE.B         REG_IY(A4),REG_E(A4)           
            JMP             (A6)             


FIY_EL:     ;   LD  E,L
            MOVE.B         REG_IYL(A4),REG_E(A4)        
            JMP             (A6)             


FIY_HB:     ;   LD  H,B
            MOVE.B         REG_B(A4),REG_IY(A4)  
            JMP             (A6)             


FIY_HC:     ;   LD  H,C
            MOVE.B         REG_C(A4),REG_IY(A4)           
            JMP             (A6)             


FIY_HD:     ;   LD  H,D
            MOVE.B         REG_D(A4),REG_IY(A4)  
            JMP             (A6)             


FIY_HE:     ;   LD  H,E
            MOVE.B         REG_E(A4),REG_IY(A4)           
            JMP             (A6)             


FIY_HL:     ;   LD  H,L
            MOVE.B         REG_IYL(A4),REG_IY(A4)           
            JMP             (A6)             


FIY_LB:     ;   LD  L,B
            MOVE.B         REG_B(A4),REG_IYL(A4)           
            JMP             (A6)             


FIY_LC:     ;   LD  L,C
            MOVE.B         REG_C(A4),REG_IYL(A4)        
            JMP             (A6)             


FIY_LD:     ;   LD  L,D
            MOVE.B         REG_D(A4),REG_IYL(A4)           
            JMP             (A6)             


FIY_LE:     ;   LD  L,E
            MOVE.B         REG_E(A4),REG_IYL(A4)        
            JMP             (A6)             


FIY_LH:     ;   LD  L,H
            MOVE.B         REG_IY(A4),REG_IYL(A4)           
            JMP             (A6)             


FIY255:     ;   INTERDIT !
            CLR.W           _ErreurIY
            MOVE.B          D0,_ErreurIY+1
            MOVEM.L         D1-D7/A0-A6,-(A7)
            BSR.W           _SendDebug
            MOVE.B          #1,_IntZ80
            MOVEM.L         (A7)+,D1-D7/A0-A6
            JMP             (A6)


            SECTION         data,DATA


TabIY:
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255
            DC.L            FIY255,FIY20_BC,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255
            DC.L            FIY255,FIY20_DE,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255
            DC.L            FIY255,FIY3,FIY5,FIY21,FIY26,FIY28,FIY24,FIY255
            DC.L            FIY255,FIY20_IY,FIY4,FIY22,FIY27,FIY29,FIY25,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY18,FIY19,FIY2,FIY255
            DC.L            FIY255,FIY20_SP,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255

            DC.L            FIY255,FIY255,FIY255,FIY255,FIY_BH,FIY_BL,FIY0_B,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY_CH,FIY_CL,FIY0_C,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY_DH,FIY_DL,FIY0_D,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY_EH,FIY_EL,FIY0_E,FIY255
            DC.L            FIY_HB,FIY_HC,FIY_HD,FIY_HE,Z80,FIY32,FIY0_H,FIY34
            DC.L            FIY_LB,FIY_LC,FIY_LD,FIY_LE,FIY36,Z80,FIY0_L,FIY35
            DC.L            FIY1_B,FIY1_C,FIY1_D,FIY1_E,FIY1_H,FIY1_L,FIY255,FIY1_A
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY37,FIY38,FIY0_A,FIY255

            DC.L            FIY255,FIY255,FIY255,FIY255,FIY21_H,FIY21_L,FIY10,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY24_H,FIY24_L,FIY11,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY25_H,FIY25_L,FIY12,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY26_H,FIY26_L,FIY13,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY27_H,FIY27_L,FIY14,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY28_H,FIY28_L,FIY15,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY29_H,FIY29_L,FIY16,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY30_H,FIY30_L,FIY17,FIY255

            DC.L            FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255
            DC.L            FIY255,FIY255,FIY255,FIYCB,FIY255,FIY255,FIY255,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255
            DC.L            FIY255,FIY8,FIY255,FIY9,FIY255,FIY7,FIY255,FIY255
            DC.L            FIY255,FIY23,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255
            DC.L            FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255
            DC.L            FIY255,FIY6,FIY255,FIY255,FIY255,FIY255,FIY255,FIY255


_ErreurIY:  DC.W            $FFFF


            XDEF            TabIY
            XDEF            _ErreurIY


            END
