Top secrets sources NedoPC pentevo

Rev

Rev 799 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

#include "defs.h"
#include "tables.h"
#include "op_system.h"
#include "op_noprefix.h"
#include "daa_tabs.h"
#include <stdio.h>
/*  not prefixed opcodes */

//#ifdef Z80_COMMON
Z80OPCODE op_00(Z80 *cpu) { // nop
    (void)cpu;

   /* note: don't inc t: 4 cycles already wasted in m1_cycle() */
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_01(Z80 *cpu) { // ld bc,nnnn
   cpu->c = cpu->MemIf->xm(cpu->pc++);
   cpu->b = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 6;
}
Z80OPCODE op_02(Z80 *cpu) { // ld (bc),a | M:2 T:7 (4, 3)
//   wm(cpu->bc, cpu->a);
   cpu->memh = cpu->a;
   cpu->meml = u8(cpu->bc + 1);
   cpu->t += 3;
   cpu->MemIf->wm(cpu->bc, cpu->a); //Alone Coder
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_03(Z80 *cpu) { // inc bc
   cpu->bc++;
   cpu->t += 2;
}
Z80OPCODE op_04(Z80 *cpu) { // inc b
   inc8(cpu, cpu->b);
}
Z80OPCODE op_05(Z80 *cpu) { // dec b
   dec8(cpu, cpu->b);
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_06(Z80 *cpu) { // ld b,nn
   cpu->b = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_07(Z80 *cpu) { // rlca
   cpu->f = rlcaf[cpu->a] | (cpu->f & (SF | ZF | PV));
   cpu->a = rol[cpu->a];
}
Z80OPCODE op_08(Z80 *cpu) { // ex af,af'
   unsigned tmp = cpu->af;
   cpu->af = cpu->alt.af;
   cpu->alt.af = tmp;
}
static Z80OPCODE op_09(Z80 *cpu) { // add hl,bc
   cpu->memptr = cpu->hl+1;
   cpu->f = (cpu->f & ~(NF | CF | F5 | F3 | HF));
   cpu->f |= (((cpu->hl & 0x0FFF) + (cpu->bc & 0x0FFF)) >> 8) & 0x10; /* HF */
   cpu->hl = (cpu->hl & 0xFFFF) + (cpu->bc & 0xFFFF);
   if (cpu->hl & 0x10000) cpu->f |= CF;
   cpu->f |= (cpu->h & (F5 | F3));
   cpu->t += 7;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_0A(Z80 *cpu) { // ld a,(bc)
   cpu->memptr = cpu->bc+1;
   cpu->a = cpu->MemIf->rm(cpu->bc);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_0B(Z80 *cpu) { // dec bc
   cpu->bc--;
   cpu->t += 2;
}
Z80OPCODE op_0C(Z80 *cpu) { // inc c
   inc8(cpu, cpu->c);
}
Z80OPCODE op_0D(Z80 *cpu) { // dec c
   dec8(cpu, cpu->c);
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_0E(Z80 *cpu) { // ld c,nn
   cpu->c = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_0F(Z80 *cpu) { // rrca
   cpu->f = rrcaf[cpu->a] | (cpu->f & (SF | ZF | PV));
   cpu->a = ror[cpu->a];
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_10(Z80 *cpu) { // djnz rr
    if(--cpu->b)
    {
        signed char offs = (char)cpu->MemIf->xm(cpu->pc);
        cpu->last_branch = u16(cpu->pc - 1);
        cpu->memptr = cpu->pc += unsigned(offs + 1);
        cpu->t += 9;
    }
    else
    {
        cpu->pc++;
        cpu->t += 4;
    }
}
Z80OPCODE op_11(Z80 *cpu) { // ld de,nnnn
   cpu->e = cpu->MemIf->xm(cpu->pc++);
   cpu->d = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 6;
}
Z80OPCODE op_12(Z80 *cpu) { // ld (de),a | M:2 T:7 (4, 3)
//   wm(cpu->de, cpu->a);
   cpu->memh = cpu->a;
   cpu->meml = u8(cpu->de + 1);
   cpu->t += 3;
   cpu->MemIf->wm(cpu->de, cpu->a); //Alone Coder
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_13(Z80 *cpu) { // inc de
   cpu->de++;
   cpu->t += 2;
}
Z80OPCODE op_14(Z80 *cpu) { // inc d
   inc8(cpu, cpu->d);
}
Z80OPCODE op_15(Z80 *cpu) { // dec d
   dec8(cpu, cpu->d);
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_16(Z80 *cpu) { // ld d,nn
   cpu->d = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_17(Z80 *cpu) { // rla
   unsigned char new_a = u8((cpu->a << 1) + (cpu->f & 1));
   cpu->f = rlcaf[cpu->a] | (cpu->f & (SF | ZF | PV)); // use same table with rlca
   cpu->a = new_a;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_18(Z80 *cpu) { // jr rr
   signed char offs = (char)cpu->MemIf->xm(cpu->pc);
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc += unsigned(offs+1);
   cpu->memptr = cpu->pc;
   cpu->t += 8;
}
//#endif
//#ifdef Z80_COMMON
static Z80OPCODE op_19(Z80 *cpu) { // add hl,de
   cpu->memptr = cpu->hl+1;
   cpu->f = (cpu->f & ~(NF | CF | F5 | F3 | HF));
   cpu->f |= (((cpu->hl & 0x0FFF) + (cpu->de & 0x0FFF)) >> 8) & 0x10; /* HF */
   cpu->hl = (cpu->hl & 0xFFFF) + (cpu->de & 0xFFFF);
   if (cpu->hl & 0x10000) cpu->f |= CF;
   cpu->f |= (cpu->h & (F5 | F3));
   cpu->t += 7;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_1A(Z80 *cpu) { // ld a,(de)
   cpu->memptr = cpu->de+1;
   cpu->a = cpu->MemIf->rm(cpu->de);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_1B(Z80 *cpu) { // dec de
   cpu->de--;
   cpu->t += 2;
}
Z80OPCODE op_1C(Z80 *cpu) { // inc e
   inc8(cpu, cpu->e);
}
Z80OPCODE op_1D(Z80 *cpu) { // dec e
   dec8(cpu, cpu->e);
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_1E(Z80 *cpu) { // ld e,nn
   cpu->e = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_1F(Z80 *cpu) { // rra
   unsigned char new_a = u8((cpu->a >> 1) + (cpu->f << 7));
   cpu->f = rrcaf[cpu->a] | (cpu->f & (SF | ZF | PV)); // use same table with rrca
   cpu->a = new_a;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_20(Z80 *cpu) { // jr nz, rr
    if(!(cpu->f & ZF))
    {
        signed char offs = (char)cpu->MemIf->xm(cpu->pc);
        cpu->last_branch = u16(cpu->pc - 1);
        cpu->memptr = cpu->pc += unsigned(offs + 1);
        cpu->t += 8;
    }
    else
    {
        cpu->pc++;
        cpu->t += 3;
    }
}
static Z80OPCODE op_21(Z80 *cpu) { // ld hl,nnnn
   cpu->l = cpu->MemIf->xm(cpu->pc++);
   cpu->h = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 6;
}
Z80OPCODE op_22(Z80 *cpu) { // ld (nnnn),hl | M:5 T:16 (4, 3, 3, 3, 3)
   unsigned adr = cpu->MemIf->xm(cpu->pc++);
   adr += cpu->MemIf->xm(cpu->pc++)*0x100;
   cpu->memptr = adr+1;
//   wm(adr, cpu->l);
//   wm(adr+1, cpu->h);
//   cpu->t += 12;
   cpu->t += 9;
   cpu->MemIf->wm(adr, cpu->l);
   cpu->t += 3;
   cpu->MemIf->wm(adr+1, cpu->h);
 //Alone Coder
}
//#endif
//#ifdef Z80_COMMON
static Z80OPCODE op_23(Z80 *cpu) { // inc hl
   cpu->hl++;
   cpu->t += 2;
}
static Z80OPCODE op_24(Z80 *cpu) { // inc h
   inc8(cpu, cpu->h);
}
static Z80OPCODE op_25(Z80 *cpu) { // dec h
   dec8(cpu, cpu->h);
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_26(Z80 *cpu) { // ld h,nn
   cpu->h = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_27(Z80 *cpu) { // daa
   cpu->af = *(const unsigned short*)
      (daatab+(cpu->a+0x100*((cpu->f & 3) + ((cpu->f >> 2) & 4)))*2);
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_28(Z80 *cpu) { // jr z,rr
    if((cpu->f & ZF))
    {
        signed char offs = (char)cpu->MemIf->xm(cpu->pc);
        cpu->last_branch = u16(cpu->pc - 1);
        cpu->memptr = cpu->pc += unsigned(offs + 1);
        cpu->t += 8;
    }
    else
    {
        cpu->pc++;
        cpu->t += 3;
    }
}
//#endif
//#ifdef Z80_COMMON
static Z80OPCODE op_29(Z80 *cpu) { // add hl,hl
   cpu->memptr = cpu->hl+1;
   cpu->f = (cpu->f & ~(NF | CF | F5 | F3 | HF));
   cpu->f |= ((cpu->hl >> 7) & 0x10); /* HF */
   cpu->hl = (cpu->hl & 0xFFFF)*2;
   if (cpu->hl & 0x10000) cpu->f |= CF;
   cpu->f |= (cpu->h & (F5 | F3));
   cpu->t += 7;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_2A(Z80 *cpu) { // ld hl,(nnnn)
   unsigned adr = cpu->MemIf->xm(cpu->pc++);
   adr += cpu->MemIf->xm(cpu->pc++)*0x100;
   cpu->memptr = adr+1;
   cpu->l = cpu->MemIf->rm(adr);
   cpu->h = cpu->MemIf->rm(adr+1);
   cpu->t += 12;
}
//#endif
//#ifdef Z80_COMMON
static Z80OPCODE op_2B(Z80 *cpu) { // dec hl
   cpu->hl--;
   cpu->t += 2;
}
static Z80OPCODE op_2C(Z80 *cpu) { // inc l
   inc8(cpu, cpu->l);
}
static Z80OPCODE op_2D(Z80 *cpu) { // dec l
   dec8(cpu, cpu->l);
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_2E(Z80 *cpu) { // ld l,nn
   cpu->l = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_2F(Z80 *cpu) { // cpl
   cpu->a ^= 0xFF;
   cpu->f = (cpu->f & ~(F3|F5)) | NF | HF | (cpu->a & (F3|F5));
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_30(Z80 *cpu) { // jr nc, rr
    if(!(cpu->f & CF))
    {
        signed char offs = (char)cpu->MemIf->xm(cpu->pc);
        cpu->last_branch = u16(cpu->pc - 1);
        cpu->memptr = cpu->pc += unsigned(offs + 1);
        cpu->t += 8;
    }
    else
    {
        cpu->pc++;
        cpu->t += 3;
    }
}
Z80OPCODE op_31(Z80 *cpu) { // ld sp,nnnn
   cpu->spl = cpu->MemIf->xm(cpu->pc++);
   cpu->sph = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 6;
}
Z80OPCODE op_32(Z80 *cpu) { // ld (nnnn),a | M:4 T:13 (4, 3, 3, 3)
   unsigned adr = cpu->MemIf->xm(cpu->pc++);
   adr += cpu->MemIf->xm(cpu->pc++)*0x100;
   cpu->memptr = unsigned(((adr+1) & 0xFF) | u8(cpu->a << 8));
//   wm(adr, cpu->a);
   cpu->memh = cpu->a;
   cpu->t += 9;
   cpu->MemIf->wm(adr, cpu->a); //Alone Coder
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_33(Z80 *cpu) { // inc sp
   cpu->sp++;
   cpu->t += 2;
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_34(Z80 *cpu) { // inc (hl) | M:3 T:11 (4, 4, 3)
   unsigned char hl = cpu->MemIf->rm(cpu->hl);
   inc8(cpu, hl);
//   wm(cpu->hl, hl);
   cpu->t += 7;
   cpu->MemIf->wm(cpu->hl, hl); //Alone Coder
}
static Z80OPCODE op_35(Z80 *cpu) { // dec (hl) | M:3 T:11 (4, 4, 3)
   unsigned char hl = cpu->MemIf->rm(cpu->hl);
   dec8(cpu, hl);
//   wm(cpu->hl, hl);
   cpu->t += 7;
   cpu->MemIf->wm(cpu->hl, hl); //Alone Coder
}
static Z80OPCODE op_36(Z80 *cpu) { // ld (hl),nn | M:3 T:10 (4, 3, 3)
//   wm(cpu->hl, rm(cpu->pc++));
   cpu->t += 6;
   cpu->MemIf->wm(cpu->hl, cpu->MemIf->xm(cpu->pc++)); //Alone Coder
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_37(Z80 *cpu) { // scf
   cpu->f = (cpu->f & ~(HF|NF|F3|F5)) | (cpu->a & (F3|F5)) | CF;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_38(Z80 *cpu) { // jr c,rr
    if((cpu->f & CF))
    {
        signed char offs = (char)cpu->MemIf->xm(cpu->pc);
        cpu->last_branch = u16(cpu->pc - 1);
        cpu->memptr = cpu->pc += unsigned(offs + 1);
        cpu->t += 8;
    }
    else
    {
        cpu->pc++;
        cpu->t += 3;
    }
}
//#endif
//#ifdef Z80_COMMON
static Z80OPCODE op_39(Z80 *cpu) { // add hl,sp
   cpu->memptr = cpu->hl+1;
   cpu->f = (cpu->f & ~(NF | CF | F5 | F3 | HF));
   cpu->f |= (((cpu->hl & 0x0FFF) + (cpu->sp & 0x0FFF)) >> 8) & 0x10; /* HF */
   cpu->hl = (cpu->hl & 0xFFFF) + (cpu->sp & 0xFFFF);
   if (cpu->hl & 0x10000) cpu->f |= CF;
   cpu->f |= (cpu->h & (F5 | F3));
   cpu->t += 7;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_3A(Z80 *cpu) { // ld a,(nnnn)
   unsigned adr = cpu->MemIf->xm(cpu->pc++);
   adr += cpu->MemIf->xm(cpu->pc++)*0x100;
   cpu->memptr = adr+1;
   cpu->a = cpu->MemIf->rm(adr);
   cpu->t += 9;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_3B(Z80 *cpu) { // dec sp
   cpu->sp--;
   cpu->t += 2;
}
Z80OPCODE op_3C(Z80 *cpu) { // inc a
   inc8(cpu, cpu->a);
}
Z80OPCODE op_3D(Z80 *cpu) { // dec a
   dec8(cpu, cpu->a);
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_3E(Z80 *cpu) { // ld a,nn
   cpu->a = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_3F(Z80 *cpu) { // ccf
   cpu->f = ((cpu->f & ~(NF|HF)) | ((cpu->f << 4) & HF) | (cpu->a & (F3|F5))) ^ CF;
}
//#endif

//#ifdef Z80_COMMON
Z80OPCODE op_41(Z80 *cpu) { // ld b,c
   cpu->b = cpu->c;
}
Z80OPCODE op_42(Z80 *cpu) { // ld b,d
   cpu->b = cpu->d;
}
Z80OPCODE op_43(Z80 *cpu) { // ld b,e
   cpu->b = cpu->e;
}
static Z80OPCODE op_44(Z80 *cpu) { // ld b,h
   cpu->b = cpu->h;
}
static Z80OPCODE op_45(Z80 *cpu) { // ld b,l
   cpu->b = cpu->l;
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_46(Z80 *cpu) { // ld b,(hl)
   cpu->b = cpu->MemIf->rm(cpu->hl);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_47(Z80 *cpu) { // ld b,a
   cpu->b = cpu->a;
}
Z80OPCODE op_48(Z80 *cpu) { // ld c,b
   cpu->c = cpu->b;
}
Z80OPCODE op_4A(Z80 *cpu) { // ld c,d
   cpu->c = cpu->d;
}
Z80OPCODE op_4B(Z80 *cpu) { // ld c,e
   cpu->c = cpu->e;
}
static Z80OPCODE op_4C(Z80 *cpu) { // ld c,h
   cpu->c = cpu->h;
}
static Z80OPCODE op_4D(Z80 *cpu) { // ld c,l
   cpu->c = cpu->l;
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_4E(Z80 *cpu) { // ld c,(hl)
   cpu->c = cpu->MemIf->rm(cpu->hl);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_4F(Z80 *cpu) { // ld c,a
   cpu->c = cpu->a;
}
Z80OPCODE op_50(Z80 *cpu) { // ld d,b
   cpu->d = cpu->b;
}
Z80OPCODE op_51(Z80 *cpu) { // ld d,c
   cpu->d = cpu->c;
}
Z80OPCODE op_53(Z80 *cpu) { // ld d,e
   cpu->d = cpu->e;
}
static Z80OPCODE op_54(Z80 *cpu) { // ld d,h
   cpu->d = cpu->h;
}
static Z80OPCODE op_55(Z80 *cpu) { // ld d,l
   cpu->d = cpu->l;
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_56(Z80 *cpu) { // ld d,(hl)
   cpu->d = cpu->MemIf->rm(cpu->hl);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_57(Z80 *cpu) { // ld d,a
   cpu->d = cpu->a;
}
Z80OPCODE op_58(Z80 *cpu) { // ld e,b
   cpu->e = cpu->b;
}
Z80OPCODE op_59(Z80 *cpu) { // ld e,c
   cpu->e = cpu->c;
}
Z80OPCODE op_5A(Z80 *cpu) { // ld e,d
   cpu->e = cpu->d;
}
static Z80OPCODE op_5C(Z80 *cpu) { // ld e,h
   cpu->e = cpu->h;
}
static Z80OPCODE op_5D(Z80 *cpu) { // ld e,l
   cpu->e = cpu->l;
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_5E(Z80 *cpu) { // ld e,(hl)
   cpu->e = cpu->MemIf->rm(cpu->hl);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_5F(Z80 *cpu) { // ld e,a
   cpu->e = cpu->a;
}
static Z80OPCODE op_60(Z80 *cpu) { // ld h,b
   cpu->h = cpu->b;
}
static Z80OPCODE op_61(Z80 *cpu) { // ld h,c
   cpu->h = cpu->c;
}
static Z80OPCODE op_62(Z80 *cpu) { // ld h,d
   cpu->h = cpu->d;
}
static Z80OPCODE op_63(Z80 *cpu) { // ld h,e
   cpu->h = cpu->e;
}
static Z80OPCODE op_65(Z80 *cpu) { // ld h,l
   cpu->h = cpu->l;
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_66(Z80 *cpu) { // ld h,(hl)
   cpu->h = cpu->MemIf->rm(cpu->hl);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
static Z80OPCODE op_67(Z80 *cpu) { // ld h,a
   cpu->h = cpu->a;
}
static Z80OPCODE op_68(Z80 *cpu) { // ld l,b
   cpu->l = cpu->b;
}
static Z80OPCODE op_69(Z80 *cpu) { // ld l,c
   cpu->l = cpu->c;
}
static Z80OPCODE op_6A(Z80 *cpu) { // ld l,d
   cpu->l = cpu->d;
}
static Z80OPCODE op_6B(Z80 *cpu) { // ld l,e
   cpu->l = cpu->e;
}
static Z80OPCODE op_6C(Z80 *cpu) { // ld l,h
   cpu->l = cpu->h;
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_6E(Z80 *cpu) { // ld l,(hl)
   cpu->l = cpu->MemIf->rm(cpu->hl);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
static Z80OPCODE op_6F(Z80 *cpu) { // ld l,a
   cpu->l = cpu->a;
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_70(Z80 *cpu) { // ld (hl),b | M:2 T:7 (4, 3)
//   wm(cpu->hl, cpu->b);
   cpu->t += 3;
   cpu->MemIf->wm(cpu->hl, cpu->b); //Alone Coder
}
static Z80OPCODE op_71(Z80 *cpu) { // ld (hl),c | M:2 T:7 (4, 3)
//   wm(cpu->hl, cpu->c);
   cpu->t += 3;
   cpu->MemIf->wm(cpu->hl, cpu->c); //Alone Coder
}
static Z80OPCODE op_72(Z80 *cpu) { // ld (hl),d | M:2 T:7 (4, 3)
//   wm(cpu->hl, cpu->d);
   cpu->t += 3;
   cpu->MemIf->wm(cpu->hl, cpu->d); //Alone Coder
}
static Z80OPCODE op_73(Z80 *cpu) { // ld (hl),e | M:2 T:7 (4, 3)
//   wm(cpu->hl, cpu->e);
   cpu->t += 3;
   cpu->MemIf->wm(cpu->hl, cpu->e); //Alone Coder
}
static Z80OPCODE op_74(Z80 *cpu) { // ld (hl),h | M:2 T:7 (4, 3)
//   wm(cpu->hl, cpu->h);
   cpu->t += 3;
   cpu->MemIf->wm(cpu->hl, cpu->h); //Alone Coder
}
static Z80OPCODE op_75(Z80 *cpu) { // ld (hl),l | M:2 T:7 (4, 3)
//   wm(cpu->hl, cpu->l);
   cpu->t += 3;
   cpu->MemIf->wm(cpu->hl, cpu->l); //Alone Coder
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_76(Z80 *cpu) { // halt
   if(!cpu->halted)
       cpu->haltpos = cpu->t;

   cpu->pc--;
   cpu->halted = 1;
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_77(Z80 *cpu) { // ld (hl),a | M:2 T:7 (4, 3)
//   wm(cpu->hl, cpu->a);
   cpu->t += 3;
   cpu->MemIf->wm(cpu->hl, cpu->a); //Alone Coder
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_78(Z80 *cpu) { // ld a,b
   cpu->a = cpu->b;
}
Z80OPCODE op_79(Z80 *cpu) { // ld a,c
   cpu->a = cpu->c;
}
Z80OPCODE op_7A(Z80 *cpu) { // ld a,d
   cpu->a = cpu->d;
}
Z80OPCODE op_7B(Z80 *cpu) { // ld a,e
   cpu->a = cpu->e;
}
static Z80OPCODE op_7C(Z80 *cpu) { // ld a,h
   cpu->a = cpu->h;
}
static Z80OPCODE op_7D(Z80 *cpu) { // ld a,l
   cpu->a = cpu->l;
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_7E(Z80 *cpu) { // ld a,(hl)
   cpu->a = cpu->MemIf->rm(cpu->hl);
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_80(Z80 *cpu) { // add a,b
   add8(cpu, cpu->b);
}
Z80OPCODE op_81(Z80 *cpu) { // add a,c
   add8(cpu, cpu->c);
}
Z80OPCODE op_82(Z80 *cpu) { // add a,d
   add8(cpu, cpu->d);
}
Z80OPCODE op_83(Z80 *cpu) { // add a,e
   add8(cpu, cpu->e);
}
static Z80OPCODE op_84(Z80 *cpu) { // add a,h
   add8(cpu, cpu->h);
}
static Z80OPCODE op_85(Z80 *cpu) { // add a,l
   add8(cpu, cpu->l);
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_86(Z80 *cpu) { // add a,(hl)
   add8(cpu, cpu->MemIf->rm(cpu->hl));
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_87(Z80 *cpu) { // add a,a
   add8(cpu, cpu->a);
}
Z80OPCODE op_88(Z80 *cpu) { // adc a,b
   adc8(cpu, cpu->b);
}
Z80OPCODE op_89(Z80 *cpu) { // adc a,c
   adc8(cpu, cpu->c);
}
Z80OPCODE op_8A(Z80 *cpu) { // adc a,d
   adc8(cpu, cpu->d);
}
Z80OPCODE op_8B(Z80 *cpu) { // adc a,e
   adc8(cpu, cpu->e);
}
static Z80OPCODE op_8C(Z80 *cpu) { // adc a,h
   adc8(cpu, cpu->h);
}
static Z80OPCODE op_8D(Z80 *cpu) { // adc a,l
   adc8(cpu, cpu->l);
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_8E(Z80 *cpu) { // adc a,(hl)
   adc8(cpu, cpu->MemIf->rm(cpu->hl));
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_8F(Z80 *cpu) { // adc a,a
   adc8(cpu, cpu->a);
}
Z80OPCODE op_90(Z80 *cpu) { // sub b
   sub8(cpu, cpu->b);
}
Z80OPCODE op_91(Z80 *cpu) { // sub c
   sub8(cpu, cpu->c);
}
Z80OPCODE op_92(Z80 *cpu) { // sub d
   sub8(cpu, cpu->d);
}
Z80OPCODE op_93(Z80 *cpu) { // sub e
   sub8(cpu, cpu->e);
}
static Z80OPCODE op_94(Z80 *cpu) { // sub h
   sub8(cpu, cpu->h);
}
static Z80OPCODE op_95(Z80 *cpu) { // sub l
   sub8(cpu, cpu->l);
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_96(Z80 *cpu) { // sub (hl)
   sub8(cpu, cpu->MemIf->rm(cpu->hl));
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_97(Z80 *cpu) { // sub a
   cpu->af = ZF | NF;
}
Z80OPCODE op_98(Z80 *cpu) { // sbc a,b
   sbc8(cpu, cpu->b);
}
Z80OPCODE op_99(Z80 *cpu) { // sbc a,c
   sbc8(cpu, cpu->c);
}
Z80OPCODE op_9A(Z80 *cpu) { // sbc a,d
   sbc8(cpu, cpu->d);
}
Z80OPCODE op_9B(Z80 *cpu) { // sbc a,e
   sbc8(cpu, cpu->e);
}
static Z80OPCODE op_9C(Z80 *cpu) { // sbc a,h
   sbc8(cpu, cpu->h);
}
static Z80OPCODE op_9D(Z80 *cpu) { // sbc a,l
   sbc8(cpu, cpu->l);
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_9E(Z80 *cpu) { // sbc a,(hl)
   sbc8(cpu, cpu->MemIf->rm(cpu->hl));
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_9F(Z80 *cpu) { // sbc a,a
   sbc8(cpu, cpu->a);
}
Z80OPCODE op_A0(Z80 *cpu) { // and b
   and8(cpu, cpu->b);
}
Z80OPCODE op_A1(Z80 *cpu) { // and c
   and8(cpu, cpu->c);
}
Z80OPCODE op_A2(Z80 *cpu) { // and d
   and8(cpu, cpu->d);
}
Z80OPCODE op_A3(Z80 *cpu) { // and e
   and8(cpu, cpu->e);
}
static Z80OPCODE op_A4(Z80 *cpu) { // and h
   and8(cpu, cpu->h);
}
static Z80OPCODE op_A5(Z80 *cpu) { // and l
   and8(cpu, cpu->l);
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_A6(Z80 *cpu) { // and (hl)
   and8(cpu, cpu->MemIf->rm(cpu->hl));
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_A7(Z80 *cpu) { // and a
   and8(cpu, cpu->a); // already optimized by compiler
}
Z80OPCODE op_A8(Z80 *cpu) { // xor b
   xor8(cpu, cpu->b);
}
Z80OPCODE op_A9(Z80 *cpu) { // xor c
   xor8(cpu, cpu->c);
}
Z80OPCODE op_AA(Z80 *cpu) { // xor d
   xor8(cpu, cpu->d);
}
Z80OPCODE op_AB(Z80 *cpu) { // xor e
   xor8(cpu, cpu->e);
}
static Z80OPCODE op_AC(Z80 *cpu) { // xor h
   xor8(cpu, cpu->h);
}
static Z80OPCODE op_AD(Z80 *cpu) { // xor l
   xor8(cpu, cpu->l);
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_AE(Z80 *cpu) { // xor (hl)
   xor8(cpu, cpu->MemIf->rm(cpu->hl));
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_AF(Z80 *cpu) { // xor a
   cpu->af = ZF | PV;
}
Z80OPCODE op_B0(Z80 *cpu) { // or b
   or8(cpu, cpu->b);
}
Z80OPCODE op_B1(Z80 *cpu) { // or c
   or8(cpu, cpu->c);
}
Z80OPCODE op_B2(Z80 *cpu) { // or d
   or8(cpu, cpu->d);
}
Z80OPCODE op_B3(Z80 *cpu) { // or e
   or8(cpu, cpu->e);
}
static Z80OPCODE op_B4(Z80 *cpu) { // or h
   or8(cpu, cpu->h);
}
static Z80OPCODE op_B5(Z80 *cpu) { // or l
   or8(cpu, cpu->l);
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_B6(Z80 *cpu) { // or (hl)
   or8(cpu, cpu->MemIf->rm(cpu->hl));
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_B7(Z80 *cpu) { // or a
   or8(cpu, cpu->a);  // already optimized by compiler
}
Z80OPCODE op_B8(Z80 *cpu) { // cp b
   cp8(cpu, cpu->b);
}
Z80OPCODE op_B9(Z80 *cpu) { // cp c
   cp8(cpu, cpu->c);
}
Z80OPCODE op_BA(Z80 *cpu) { // cp d
   cp8(cpu, cpu->d);
}
Z80OPCODE op_BB(Z80 *cpu) { // cp e
   cp8(cpu, cpu->e);
}
static Z80OPCODE op_BC(Z80 *cpu) { // cp h
   cp8(cpu, cpu->h);
}
static Z80OPCODE op_BD(Z80 *cpu) { // cp l
   cp8(cpu, cpu->l);
}
//#endif
//#ifndef Z80_COMMON
static Z80OPCODE op_BE(Z80 *cpu) { // cp (hl)
   cp8(cpu, cpu->MemIf->rm(cpu->hl));
   cpu->t += 3;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_BF(Z80 *cpu) { // cp a
   cp8(cpu, cpu->a); // can't optimize: F3,F5 depends on A
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_C0(Z80 *cpu) { // ret nz
   if (!(cpu->f & ZF)) {
      unsigned addr = cpu->MemIf->rm(cpu->sp++);
      addr += 0x100*cpu->MemIf->rm(cpu->sp++);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->memptr = addr;
      cpu->t += 7;
   } else cpu->t += 1;
}
Z80OPCODE op_C1(Z80 *cpu) { // pop bc
   cpu->c = cpu->MemIf->rm(cpu->sp++);
   cpu->b = cpu->MemIf->rm(cpu->sp++);
   cpu->t += 6;
}
Z80OPCODE op_C2(Z80 *cpu) { // jp nz,nnnn
   cpu->t += 6;
   unsigned addr = cpu->MemIf->xm(cpu->pc);
   addr += 0x100*cpu->MemIf->xm(cpu->pc+1);
   cpu->memptr = addr;
   if (!(cpu->f & ZF)) {
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
   } else cpu->pc += 2;
}
Z80OPCODE op_C3(Z80 *cpu) { // jp nnnn
   cpu->last_branch = u16(cpu->pc-1);
   unsigned lo = cpu->MemIf->xm(cpu->pc++);
   cpu->pc = lo + 0x100*cpu->MemIf->xm(cpu->pc);
   cpu->memptr = cpu->pc;
   cpu->t += 6;
}
Z80OPCODE op_C4(Z80 *cpu) { // call nz,nnnn | cc==true M:5 T:17 (4, 3, 4, 3, 3) | cc==false M:3 T:10 (4, 3, 3)
   cpu->pc += 2;
   unsigned addr = cpu->MemIf->xm(cpu->pc-2);
   addr += 0x100*cpu->MemIf->xm(cpu->pc-1);
   cpu->memptr = addr;
   if (!(cpu->f & ZF)) {
      cpu->MemIf->wm(--cpu->sp, cpu->pch);
      cpu->MemIf->wm(--cpu->sp, cpu->pcl);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->t += 13;
   } else cpu->t += 6;
}
Z80OPCODE op_C5(Z80 *cpu) { // push bc | M:3 T:11 (5, 3, 3)
//   wm(--cpu->sp, cpu->b);
//   wm(--cpu->sp, cpu->c);
   cpu->t += 7;
   cpu->MemIf->wm(--cpu->sp, cpu->b);
   cpu->MemIf->wm(--cpu->sp, cpu->c);
 //Alone Coder
}
Z80OPCODE op_C6(Z80 *cpu) { // add a,nn
   add8(cpu, cpu->MemIf->xm(cpu->pc++));
   cpu->t += 3;
}
Z80OPCODE op_C7(Z80 *cpu) { // rst 00 | M:3 T:11 (5, 3, 3)
   cpu->MemIf->wm(--cpu->sp, cpu->pch);
   cpu->MemIf->wm(--cpu->sp, cpu->pcl);
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc = 0x00;
   cpu->memptr = 0x00;
   cpu->t += 7;
}
Z80OPCODE op_C8(Z80 *cpu) { // ret z
   if (cpu->f & ZF) {
      unsigned addr = cpu->MemIf->rm(cpu->sp++);
      addr += 0x100*cpu->MemIf->rm(cpu->sp++);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->memptr = addr;
      cpu->t += 7;
   } else cpu->t += 1;
}
Z80OPCODE op_C9(Z80 *cpu) { // ret
   unsigned addr = cpu->MemIf->rm(cpu->sp++);
   addr += 0x100*cpu->MemIf->rm(cpu->sp++);
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc = addr;
   cpu->memptr = addr;
   cpu->t += 6;
}
Z80OPCODE op_CA(Z80 *cpu) { // jp z,nnnn
   cpu->t += 6;
   unsigned addr = cpu->MemIf->xm(cpu->pc);
   addr += 0x100*cpu->MemIf->xm(cpu->pc+1);
   cpu->memptr = addr;
   if (cpu->f & ZF) {
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
   } else cpu->pc += 2;
}
Z80OPCODE op_CC(Z80 *cpu) { // call z,nnnn | cc==true M:5 T:17 (4, 3, 4, 3, 3) | cc==false M:3 T:10 (4, 3, 3)
   cpu->pc += 2;
   unsigned addr = cpu->MemIf->xm(cpu->pc-2);
   addr += 0x100*cpu->MemIf->xm(cpu->pc-1);
   cpu->memptr = addr;
   if (cpu->f & ZF) {
      cpu->MemIf->wm(--cpu->sp, cpu->pch);
      cpu->MemIf->wm(--cpu->sp, cpu->pcl);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->t += 13;
   } else cpu->t += 6;
}
Z80OPCODE op_CD(Z80 *cpu) { // call | M:5 T:17 (4, 3, 4, 3, 3)
   cpu->last_branch = u16(cpu->pc-1);
   unsigned addr = cpu->MemIf->xm(cpu->pc++);
   addr += 0x100*cpu->MemIf->xm(cpu->pc++);
   cpu->MemIf->wm(--cpu->sp, cpu->pch);
   cpu->MemIf->wm(--cpu->sp, cpu->pcl);
   cpu->pc = addr;
   cpu->memptr = addr;
   cpu->t += 13;
}
Z80OPCODE op_CE(Z80 *cpu) { // adc a,nn
   adc8(cpu, cpu->MemIf->xm(cpu->pc++));
   cpu->t += 3;
}
Z80OPCODE op_CF(Z80 *cpu) { // rst 08 | M:3 T:11 (5, 3, 3)
   cpu->MemIf->wm(--cpu->sp, cpu->pch);
   cpu->MemIf->wm(--cpu->sp, cpu->pcl);
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc = 0x08;
   cpu->memptr = 0x08;
   cpu->memh = 0;
   cpu->t += 7;
}
Z80OPCODE op_D0(Z80 *cpu) { // ret nc
   if (!(cpu->f & CF)) {
      unsigned addr = cpu->MemIf->rm(cpu->sp++);
      addr += 0x100*cpu->MemIf->rm(cpu->sp++);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->memptr = addr;
      cpu->t += 7;
   } else cpu->t += 1;
}
Z80OPCODE op_D1(Z80 *cpu) { // pop de
   cpu->e = cpu->MemIf->rm(cpu->sp++);
   cpu->d = cpu->MemIf->rm(cpu->sp++);
   cpu->t += 6;
}
Z80OPCODE op_D2(Z80 *cpu) { // jp nc,nnnn
   cpu->t += 6;
   unsigned addr = cpu->MemIf->xm(cpu->pc);
   addr += 0x100*cpu->MemIf->xm(cpu->pc+1);
   cpu->memptr = addr;
   if (!(cpu->f & CF)) {
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
   } else cpu->pc += 2;
}
Z80OPCODE op_D3(Z80 *cpu) { // out (nn),a | M:3 T:11 (4, 3, 4)
   unsigned port = cpu->MemIf->xm(cpu->pc++);
   cpu->t += 7;
   cpu->memptr = ((port+1) & 0xFF) + unsigned(cpu->a << 8);
   cpu->out(port + unsigned(cpu->a << 8), cpu->a);
}
Z80OPCODE op_D4(Z80 *cpu) { // call nc,nnnn | cc==true M:5 T:17 (4, 3, 4, 3, 3) | cc==false M:3 T:10 (4, 3, 3)
   cpu->pc += 2;
   unsigned addr = cpu->MemIf->xm(cpu->pc-2);
   addr += 0x100*cpu->MemIf->xm(cpu->pc-1);
   cpu->memptr = addr;
   if (!(cpu->f & CF)) {
      cpu->MemIf->wm(--cpu->sp, cpu->pch);
      cpu->MemIf->wm(--cpu->sp, cpu->pcl);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->t += 13;
   } else cpu->t += 6;
}
Z80OPCODE op_D5(Z80 *cpu) { // push de | M:3 T:11 (5, 3, 3)
//   wm(--cpu->sp, cpu->d);
//   wm(--cpu->sp, cpu->e);
   cpu->t += 7;
   cpu->MemIf->wm(--cpu->sp, cpu->d);
   cpu->MemIf->wm(--cpu->sp, cpu->e);
 //Alone Coder
}
Z80OPCODE op_D6(Z80 *cpu) { // sub nn
   sub8(cpu, cpu->MemIf->xm(cpu->pc++));
   cpu->t += 3;
}
Z80OPCODE op_D7(Z80 *cpu) { // rst 10 | M:3 T:11 (5, 3, 3)
   cpu->MemIf->wm(--cpu->sp, cpu->pch);
   cpu->MemIf->wm(--cpu->sp, cpu->pcl);
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc = 0x10;
   cpu->memptr = 0x10;
   cpu->t += 7;
}
Z80OPCODE op_D8(Z80 *cpu) { // ret c
   if (cpu->f & CF) {
      unsigned addr = cpu->MemIf->rm(cpu->sp++);
      addr += 0x100*cpu->MemIf->rm(cpu->sp++);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->memptr = addr;
      cpu->t += 7;
   } else cpu->t += 1;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_D9(Z80 *cpu) { // exx
   unsigned tmp = cpu->bc; cpu->bc = cpu->alt.bc; cpu->alt.bc = tmp;
   tmp = cpu->de; cpu->de = cpu->alt.de; cpu->alt.de = tmp;
   tmp = cpu->hl; cpu->hl = cpu->alt.hl; cpu->alt.hl = tmp;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_DA(Z80 *cpu) { // jp c,nnnn
   cpu->t += 6;
   unsigned addr = cpu->MemIf->xm(cpu->pc);
   addr += 0x100*cpu->MemIf->xm(cpu->pc+1);
   cpu->memptr = addr;
   if (cpu->f & CF) {
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
   } else cpu->pc += 2;
}
Z80OPCODE op_DB(Z80 *cpu) { // in a,(nn)
   unsigned port = cpu->MemIf->xm(cpu->pc++) + unsigned(cpu->a << 8);
   cpu->memptr = port + 1;
   cpu->t += 7;
   cpu->a = cpu->in(port);
}
Z80OPCODE op_DC(Z80 *cpu) { // call c,nnnn | cc==true M:5 T:17 (4, 3, 4, 3, 3) | cc==false M:3 T:10 (4, 3, 3)
   cpu->pc += 2;
   unsigned addr = cpu->MemIf->xm(cpu->pc-2);
   addr += 0x100*cpu->MemIf->xm(cpu->pc-1);
   cpu->memptr = addr;
   if (cpu->f & CF) {
      cpu->MemIf->wm(--cpu->sp, cpu->pch);
      cpu->MemIf->wm(--cpu->sp, cpu->pcl);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->t += 13;
   } else cpu->t += 6;
}
Z80OPCODE op_DE(Z80 *cpu) { // sbc a,nn
   sbc8(cpu, cpu->MemIf->xm(cpu->pc++));
   cpu->t += 3;
}
Z80OPCODE op_DF(Z80 *cpu) { // rst 18 | M:3 T:11 (5, 3, 3)
   cpu->MemIf->wm(--cpu->sp, cpu->pch);
   cpu->MemIf->wm(--cpu->sp, cpu->pcl);
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc = 0x18;
   cpu->memptr = 0x18;
   cpu->t += 7;
}
Z80OPCODE op_E0(Z80 *cpu) { // ret po
   if (!(cpu->f & PV)) {
      unsigned addr = cpu->MemIf->rm(cpu->sp++);
      addr += 0x100*cpu->MemIf->rm(cpu->sp++);
      cpu->pc = addr;
      cpu->memptr = addr;
      cpu->t += 7;
   } else cpu->t += 1;
}
static Z80OPCODE op_E1(Z80 *cpu) { // pop hl
   cpu->l = cpu->MemIf->rm(cpu->sp++);
   cpu->h = cpu->MemIf->rm(cpu->sp++);
   cpu->t += 6;
}
Z80OPCODE op_E2(Z80 *cpu) { // jp po,nnnn
   cpu->t += 6;
   unsigned addr = cpu->MemIf->xm(cpu->pc);
   addr += 0x100*cpu->MemIf->xm(cpu->pc+1);
   cpu->memptr = addr;
   if (!(cpu->f & PV)) {
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
   } else cpu->pc += 2;
}
static Z80OPCODE op_E3(Z80 *cpu) { // ex (sp),hl | M:5 T:19 (4, 3, 4, 3, 5)
   unsigned tmp = cpu->MemIf->rm(cpu->sp) + 0x100*cpu->MemIf->rm(cpu->sp + 1);
   cpu->MemIf->wm(cpu->sp, cpu->l);
   cpu->MemIf->wm(cpu->sp+1, cpu->h);
   cpu->memptr = tmp;
   cpu->hl = tmp;
   cpu->t += 15;
}
Z80OPCODE op_E4(Z80 *cpu) { // call po,nnnn | cc==true M:5 T:17 (4, 3, 4, 3, 3) | cc==false M:3 T:10 (4, 3, 3)
   cpu->pc += 2;
   unsigned addr = cpu->MemIf->xm(cpu->pc-2);
   addr += 0x100*cpu->MemIf->xm(cpu->pc-1);
   cpu->memptr = addr;
   if (!(cpu->f & PV)) {
      cpu->MemIf->wm(--cpu->sp, cpu->pch);
      cpu->MemIf->wm(--cpu->sp, cpu->pcl);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->t += 13;
   } else cpu->t += 6;
}
static Z80OPCODE op_E5(Z80 *cpu) { // push hl | M:3 T:11 (5, 3, 3)
//   wm(--cpu->sp, cpu->h);
//   wm(--cpu->sp, cpu->l);
   cpu->t += 7;
   cpu->MemIf->wm(--cpu->sp, cpu->h);
   cpu->MemIf->wm(--cpu->sp, cpu->l);
 //Alone Coder
}
Z80OPCODE op_E6(Z80 *cpu) { // and nn
   and8(cpu, cpu->MemIf->xm(cpu->pc++));
   cpu->t += 3;
}
Z80OPCODE op_E7(Z80 *cpu) { // rst 20 | M:3 T:11 (5, 3, 3)
   cpu->MemIf->wm(--cpu->sp, cpu->pch);
   cpu->MemIf->wm(--cpu->sp, cpu->pcl);
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc = 0x20;
   cpu->memptr = 0x20;
   cpu->t += 7;
}
Z80OPCODE op_E8(Z80 *cpu) { // ret pe
   if (cpu->f & PV) {
      unsigned addr = cpu->MemIf->rm(cpu->sp++);
      addr += 0x100*cpu->MemIf->rm(cpu->sp++);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->memptr = addr;
      cpu->t += 7;
   } else cpu->t += 1;
}
//#endif
//#ifdef Z80_COMMON
static Z80OPCODE op_E9(Z80 *cpu) { // jp (hl)
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc = cpu->hl;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_EA(Z80 *cpu) { // jp pe,nnnn
   cpu->t += 6;
   unsigned addr = cpu->MemIf->xm(cpu->pc);
   addr += 0x100*cpu->MemIf->xm(cpu->pc+1);
   cpu->memptr = addr;
   if (cpu->f & PV) {
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
   } else cpu->pc += 2;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_EB(Z80 *cpu) { // ex de,hl
   unsigned tmp = cpu->de;
   cpu->de = cpu->hl;
   cpu->hl = tmp;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_EC(Z80 *cpu) { // call pe,nnnn | cc==true M:5 T:17 (4, 3, 4, 3, 3) | cc==false M:3 T:10 (4, 3, 3)
   cpu->pc += 2;
   unsigned addr = cpu->MemIf->xm(cpu->pc-2);
   addr += 0x100*cpu->MemIf->xm(cpu->pc-1);
   cpu->memptr = addr;
   if (cpu->f & PV) {
      cpu->MemIf->wm(--cpu->sp, cpu->pch);
      cpu->MemIf->wm(--cpu->sp, cpu->pcl);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->t += 13;
   } else cpu->t += 6;
}
Z80OPCODE op_EE(Z80 *cpu) { // xor nn
   xor8(cpu, cpu->MemIf->xm(cpu->pc++));
   cpu->t += 3;
}
Z80OPCODE op_EF(Z80 *cpu) { // rst 28 | M:3 T:11 (5, 3, 3)
   cpu->MemIf->wm(--cpu->sp, cpu->pch);
   cpu->MemIf->wm(--cpu->sp, cpu->pcl);
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc = 0x28;
   cpu->memptr = 0x28;
   cpu->t += 7;
}
Z80OPCODE op_F0(Z80 *cpu) { // ret p
   if (!(cpu->f & SF)) {
      unsigned addr = cpu->MemIf->rm(cpu->sp++);
      addr += 0x100*cpu->MemIf->rm(cpu->sp++);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->memptr = addr;
      cpu->t += 7;
   } else cpu->t += 1;
}
Z80OPCODE op_F1(Z80 *cpu) { // pop af
   cpu->f = cpu->MemIf->rm(cpu->sp++);
   cpu->a = cpu->MemIf->rm(cpu->sp++);
   cpu->t += 6;
}
Z80OPCODE op_F2(Z80 *cpu) { // jp p,nnnn
   cpu->t += 6;
   unsigned addr = cpu->MemIf->xm(cpu->pc);
   addr += 0x100*cpu->MemIf->xm(cpu->pc+1);
   cpu->memptr = addr;
   if (!(cpu->f & SF)) {
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
   } else cpu->pc += 2;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_F3(Z80 *cpu) { // di
   cpu->iff1 = cpu->iff2 = 0;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_F4(Z80 *cpu) { // call p,nnnn | cc==true M:5 T:17 (4, 3, 4, 3, 3) | cc==false M:3 T:10 (4, 3, 3)
   cpu->pc += 2;
   unsigned addr = cpu->MemIf->xm(cpu->pc-2);
   addr += 0x100*cpu->MemIf->xm(cpu->pc-1);
   cpu->memptr = addr;
   if (!(cpu->f & SF)) {
      cpu->MemIf->wm(--cpu->sp, cpu->pch);
      cpu->MemIf->wm(--cpu->sp, cpu->pcl);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->t += 13;
   } else cpu->t += 6;
}
Z80OPCODE op_F5(Z80 *cpu) { // push af | M:3 T:11 (5, 3, 3)
//   wm(--cpu->sp, cpu->a);
//   wm(--cpu->sp, cpu->f);
   cpu->t += 7;
   cpu->MemIf->wm(--cpu->sp, cpu->a);
   cpu->MemIf->wm(--cpu->sp, cpu->f);
 //Alone Coder
}
Z80OPCODE op_F6(Z80 *cpu) { // or nn
   or8(cpu, cpu->MemIf->xm(cpu->pc++));
   cpu->t += 3;
}
Z80OPCODE op_F7(Z80 *cpu) { // rst 30 | M:3 T:11 (5, 3, 3)
   cpu->MemIf->wm(--cpu->sp, cpu->pch);
   cpu->MemIf->wm(--cpu->sp, cpu->pcl);
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc = 0x30;
   cpu->memptr = 0x30;
   cpu->t += 7;
}
Z80OPCODE op_F8(Z80 *cpu) { // ret m
   if (cpu->f & SF) {
      unsigned addr = cpu->MemIf->rm(cpu->sp++);
      addr += 0x100*cpu->MemIf->rm(cpu->sp++);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->memptr = addr;
      cpu->t += 7;
   } else cpu->t += 1;
}
//#endif
//#ifdef Z80_COMMON
static Z80OPCODE op_F9(Z80 *cpu) { // ld sp,hl
   cpu->sp = cpu->hl;
   cpu->t += 2;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_FA(Z80 *cpu) { // jp m,nnnn
   cpu->t += 6;
   unsigned addr = cpu->MemIf->xm(cpu->pc);
   addr += 0x100*cpu->MemIf->xm(cpu->pc+1);
   cpu->memptr = addr;
   if (cpu->f & SF) {
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
   } else cpu->pc += 2;
}
//#endif
//#ifdef Z80_COMMON
Z80OPCODE op_FB(Z80 *cpu) { // ei
   cpu->iff1 = cpu->iff2 = 1;
   cpu->eipos = cpu->t;
}
//#endif
//#ifndef Z80_COMMON
Z80OPCODE op_FC(Z80 *cpu) { // call m,nnnn | cc==true M:5 T:17 (4, 3, 4, 3, 3) | cc==false M:3 T:10 (4, 3, 3)
   cpu->pc += 2;
   unsigned addr = cpu->MemIf->xm(cpu->pc-2);
   addr += 0x100*cpu->MemIf->xm(cpu->pc-1);
   cpu->memptr = addr;
   if (cpu->f & SF) {
      cpu->MemIf->wm(--cpu->sp, cpu->pch);
      cpu->MemIf->wm(--cpu->sp, cpu->pcl);
      cpu->last_branch = u16(cpu->pc-1);
      cpu->pc = addr;
      cpu->t += 13;
   } else cpu->t += 6;
}
Z80OPCODE op_FE(Z80 *cpu) { // cp nn
   cp8(cpu, cpu->MemIf->xm(cpu->pc++));
   cpu->t += 3;
}
Z80OPCODE op_FF(Z80 *cpu) { // rst 38 | M:3 T:11 (5, 3, 3)
   cpu->MemIf->wm(--cpu->sp, cpu->pch);
   cpu->MemIf->wm(--cpu->sp, cpu->pcl);
   cpu->last_branch = u16(cpu->pc-1);
   cpu->pc = 0x38;
   cpu->memptr = 0x38;
   cpu->t += 7;
}

Z80OPCODE op_CB(Z80 *cpu);
Z80OPCODE op_ED(Z80 *cpu);
Z80OPCODE op_DD(Z80 *cpu);
Z80OPCODE op_FD(Z80 *cpu);

STEPFUNC const normal_opcode[0x100] = {

   op_00, op_01, op_02, op_03, op_04, op_05, op_06, op_07,
   op_08, op_09, op_0A, op_0B, op_0C, op_0D, op_0E, op_0F,
   op_10, op_11, op_12, op_13, op_14, op_15, op_16, op_17,
   op_18, op_19, op_1A, op_1B, op_1C, op_1D, op_1E, op_1F,
   op_20, op_21, op_22, op_23, op_24, op_25, op_26, op_27,
   op_28, op_29, op_2A, op_2B, op_2C, op_2D, op_2E, op_2F,
   op_30, op_31, op_32, op_33, op_34, op_35, op_36, op_37,
   op_38, op_39, op_3A, op_3B, op_3C, op_3D, op_3E, op_3F,

   op_40, op_41, op_42, op_43, op_44, op_45, op_46, op_47,
   op_48, op_49, op_4A, op_4B, op_4C, op_4D, op_4E, op_4F,
   op_50, op_51, op_52, op_53, op_54, op_55, op_56, op_57,
   op_58, op_59, op_5A, op_5B, op_5C, op_5D, op_5E, op_5F,
   op_60, op_61, op_62, op_63, op_64, op_65, op_66, op_67,
   op_68, op_69, op_6A, op_6B, op_6C, op_6D, op_6E, op_6F,
   op_70, op_71, op_72, op_73, op_74, op_75, op_76, op_77,
   op_78, op_79, op_7A, op_7B, op_7C, op_7D, op_7E, op_7F,

   op_80, op_81, op_82, op_83, op_84, op_85, op_86, op_87,
   op_88, op_89, op_8A, op_8B, op_8C, op_8D, op_8E, op_8F,
   op_90, op_91, op_92, op_93, op_94, op_95, op_96, op_97,
   op_98, op_99, op_9A, op_9B, op_9C, op_9D, op_9E, op_9F,
   op_A0, op_A1, op_A2, op_A3, op_A4, op_A5, op_A6, op_A7,
   op_A8, op_A9, op_AA, op_AB, op_AC, op_AD, op_AE, op_AF,
   op_B0, op_B1, op_B2, op_B3, op_B4, op_B5, op_B6, op_B7,
   op_B8, op_B9, op_BA, op_BB, op_BC, op_BD, op_BE, op_BF,

   op_C0, op_C1, op_C2, op_C3, op_C4, op_C5, op_C6, op_C7,
   op_C8, op_C9, op_CA, op_CB, op_CC, op_CD, op_CE, op_CF,
   op_D0, op_D1, op_D2, op_D3, op_D4, op_D5, op_D6, op_D7,
   op_D8, op_D9, op_DA, op_DB, op_DC, op_DD, op_DE, op_DF,
   op_E0, op_E1, op_E2, op_E3, op_E4, op_E5, op_E6, op_E7,
   op_E8, op_E9, op_EA, op_EB, op_EC, op_ED, op_EE, op_EF,
   op_F0, op_F1, op_F2, op_F3, op_F4, op_F5, op_F6, op_F7,
   op_F8, op_F9, op_FA, op_FB, op_FC, op_FD, op_FE, op_FF,

};
//#endif