int opIN_AL_imm(uint32_t fetchdat)
{       
        uint16_t port = (uint16_t)getbytef();
        check_io_perm(port);
        AL = inb(port);
        cycles -= 12;
        return 0;
}
int opIN_AX_imm(uint32_t fetchdat)
{
        uint16_t port = (uint16_t)getbytef();
        check_io_perm(port);
        check_io_perm(port + 1);
        AX = inw(port);
        cycles -= 12;
        return 0;
}
int opIN_EAX_imm(uint32_t fetchdat)
{
        uint16_t port = (uint16_t)getbytef();
        check_io_perm(port);
        check_io_perm(port + 1);
        check_io_perm(port + 2);
        check_io_perm(port + 3);
        EAX = inl(port);
        cycles -= 12;
        return 0;
}

int opOUT_AL_imm(uint32_t fetchdat)
{
        uint16_t port = (uint16_t)getbytef();        
        check_io_perm(port);
        outb(port, AL);
        cycles -= 10;
        return 0;
}
int opOUT_AX_imm(uint32_t fetchdat)
{
        uint16_t port = (uint16_t)getbytef();        
        check_io_perm(port);
        check_io_perm(port + 1);
        outw(port, AX);
        cycles -= 10;
        return 0;
}
int opOUT_EAX_imm(uint32_t fetchdat)
{
        uint16_t port = (uint16_t)getbytef();        
        check_io_perm(port);
        check_io_perm(port + 1);
        check_io_perm(port + 2);
        check_io_perm(port + 3);
        outl(port, EAX);
        cycles -= 10;
        return 0;
}

int opIN_AL_DX(uint32_t fetchdat)
{       
        check_io_perm(DX);
        AL = inb(DX);
        cycles -= 12;
        return 0;
}
int opIN_AX_DX(uint32_t fetchdat)
{
        check_io_perm(DX);
        check_io_perm(DX + 1);
        AX = inw(DX);
        cycles -= 12;
        return 0;
}
int opIN_EAX_DX(uint32_t fetchdat)
{
        check_io_perm(DX);
        check_io_perm(DX + 1);
        check_io_perm(DX + 2);
        check_io_perm(DX + 3);
        EAX = inl(DX);
        cycles -= 12;
        return 0;
}

int opOUT_AL_DX(uint32_t fetchdat)
{
        check_io_perm(DX);
        outb(DX, AL);
        cycles -= 11;
        return 0;
}
int opOUT_AX_DX(uint32_t fetchdat)
{
        //pclog("OUT_AX_DX %04X %04X\n", DX, AX);
        check_io_perm(DX);
        check_io_perm(DX + 1);
        outw(DX, AX);
        cycles -= 11;
        return 0;
}
int opOUT_EAX_DX(uint32_t fetchdat)
{
        check_io_perm(DX);
        check_io_perm(DX + 1);
        check_io_perm(DX + 2);
        check_io_perm(DX + 3);
        outl(DX, EAX);
        cycles -= 11;
        return 0;
}
