UINT32 am2PCDoubleDisplacement32(void) { amFlag = 0; amOut = MemRead32(PC + OpRead32(modAdd+1)) + OpRead32(modAdd+5); return 9; }
UINT32 am2PCDoubleDisplacement8(void) { amFlag = 0; amOut = MemRead32(PC + (INT8)OpRead8(modAdd+1)) + (INT8)OpRead8(modAdd+2); return 3; }
UINT32 am2PCDoubleDisplacement16(void) { amFlag = 0; amOut = MemRead32(PC + (INT16)OpRead16(modAdd+1)) + (INT16)OpRead16(modAdd+3); return 5; }
UINT32 am2DoubleDisplacement16(void) { amFlag = 0; amOut = MemRead32(v60.reg[modVal&0x1F] + (INT16)OpRead16(modAdd+1)) + (INT16)OpRead16(modAdd+3); return 5; }
UINT32 am2DoubleDisplacement32(void) { amFlag = 0; amOut = MemRead32(v60.reg[modVal&0x1F] + OpRead32(modAdd+1)) + OpRead32(modAdd+5); return 9; }
UINT32 am2PCDisplacementIndirect32(void) { amFlag = 0; amOut = MemRead32(PC + OpRead32(modAdd+1)); return 5; }
UINT32 am2DoubleDisplacement8(void) { amFlag = 0; amOut = MemRead32(v60.reg[modVal&0x1F] + (INT8)OpRead8(modAdd+1)) + (INT8)OpRead8(modAdd+2); return 3; }
UINT32 am2PCDisplacementIndirect16(void) { amFlag = 0; amOut = MemRead32(PC + (INT16)OpRead16(modAdd+1)); return 3; }
UINT32 am2PCDisplacementIndirect8(void) { amFlag = 0; amOut = MemRead32(PC + (INT8)OpRead8(modAdd+1)); return 2; }
UINT32 am2DisplacementIndirect32(void) { amFlag = 0; amOut = MemRead32(v60.reg[modVal&0x1F] + OpRead32(modAdd+1)); return 5; }
UINT32 am2DirectAddressDeferred(void) { amFlag = 0; amOut = MemRead32(OpRead32(modAdd+1)); return 5; }
UINT32 am2DisplacementIndirect8(void) { amFlag = 0; amOut = MemRead32(v60.reg[modVal&0x1F] + (INT8)OpRead8(modAdd+1)); return 2; }
UINT32 opPOPM(void) { int i; modAdd=PC+1; modDim=2; /* Read the bit register list */ amLength1=ReadAM(); for (i=0;i<31;i++) if (amOut & (1<<i)) { v60.reg[i] = MemRead32(SP); SP += 4; } if (amOut & (1<<31)) { v60WritePSW((v60ReadPSW() & 0xffff0000) | MemRead16(SP)); SP += 4; } return amLength1 + 1; }
UINT32 bam2DisplacementIndirect16(void) { amFlag = 0; amOut = MemRead32(v60.reg[modVal&0x1F] + (INT16)OpRead16(modAdd+1)); bamOffset = 0; return 3; }
static UINT32 am3DoubleDisplacement8(void) { switch (modDim) { case 0: MemWrite8(MemRead32(v60.reg[modVal&0x1F] + (INT8)OpRead8(modAdd+1)) + (INT8)OpRead8(modAdd+2), modWriteValB); break; case 1: MemWrite16(MemRead32(v60.reg[modVal&0x1F] + (INT8)OpRead8(modAdd+1)) + (INT8)OpRead8(modAdd+2), modWriteValH); break; case 2: MemWrite32(MemRead32(v60.reg[modVal&0x1F] + (INT8)OpRead8(modAdd+1)) + (INT8)OpRead8(modAdd+2), modWriteValW); break; } return 3; }
static UINT32 am3PCDisplacementIndirectIndexed32(void) { switch (modDim) { case 0: MemWrite8(MemRead32(PC + OpRead32(modAdd+2)) + v60.reg[modVal&0x1F], modWriteValB); break; case 1: MemWrite16(MemRead32(PC + OpRead32(modAdd+2)) + v60.reg[modVal&0x1F] * 2, modWriteValH); break; case 2: MemWrite32(MemRead32(PC + OpRead32(modAdd+2)) + v60.reg[modVal&0x1F] * 4, modWriteValW); break; } return 6; }
static UINT32 am3PCDisplacementIndirect8(void) { switch (modDim) { case 0: MemWrite8(MemRead32(PC + (INT8)OpRead8(modAdd+1)), modWriteValB); break; case 1: MemWrite16(MemRead32(PC + (INT8)OpRead8(modAdd+1)), modWriteValH); break; case 2: MemWrite32(MemRead32(PC + (INT8)OpRead8(modAdd+1)), modWriteValW); break; } return 2; }
static UINT32 am3DisplacementIndirect32(void) { switch (modDim) { case 0: MemWrite8(MemRead32(v60.reg[modVal&0x1F] + OpRead32(modAdd+1)), modWriteValB); break; case 1: MemWrite16(MemRead32(v60.reg[modVal&0x1F] + OpRead32(modAdd+1)), modWriteValH); break; case 2: MemWrite32(MemRead32(v60.reg[modVal&0x1F] + OpRead32(modAdd+1)), modWriteValW); break; } return 5; }
static UINT32 bam2DirectAddressDeferredIndexed(void) { amFlag = 0; amOut = MemRead32(OpRead32(modAdd+2)); bamOffset = v60.reg[modVal&0x1F]; return 6; }
static UINT32 bam2DirectAddressDeferred(void) { amFlag = 0; amOut = MemRead32(OpRead32(modAdd+1)); bamOffset = 0; return 5; }
static UINT32 bam2PCDoubleDisplacement32(void) { amFlag = 0; amOut = MemRead32(PC + OpRead32(modAdd+1)); bamOffset = OpRead32(modAdd+5); return 9; }
static UINT32 bam2PCDoubleDisplacement16(void) { amFlag = 0; amOut = MemRead32(PC + (INT16)OpRead16(modAdd+1)); bamOffset = (INT8)OpRead8(modAdd+3); return 5; }
static UINT32 bam2DoubleDisplacement16(void) { amFlag = 0; amOut = MemRead32(v60.reg[modVal&0x1F] + (INT16)OpRead16(modAdd+1)); bamOffset = (INT8)OpRead8(modAdd+3); return 5; }
static UINT32 bam2PCDisplacementIndirectIndexed32(void) { amFlag = 0; amOut = MemRead32(PC + OpRead32(modAdd+2)); bamOffset = v60.reg[modVal&0x1F]; return 6; }
static UINT32 am3DirectAddressDeferred(void) { switch (modDim) { case 0: MemWrite8(MemRead32(OpRead32(modAdd+1)), modWriteValB); break; case 1: MemWrite16(MemRead32(OpRead32(modAdd+1)), modWriteValH); break; case 2: MemWrite32(MemRead32(OpRead32(modAdd+1)), modWriteValW); break; } return 5; }
static UINT32 am3PCDoubleDisplacement16(void) { switch (modDim) { case 0: MemWrite8(MemRead32(PC + (INT16)OpRead16(modAdd+1)) + (INT16)OpRead16(modAdd+3), modWriteValB); break; case 1: MemWrite16(MemRead32(PC + (INT16)OpRead16(modAdd+1)) + (INT16)OpRead16(modAdd+3), modWriteValH); break; case 2: MemWrite32(MemRead32(PC + (INT16)OpRead16(modAdd+1)) + (INT16)OpRead16(modAdd+3), modWriteValW); break; } return 5; }
static UINT32 am3PCDoubleDisplacement32(void) { switch (modDim) { case 0: MemWrite8(MemRead32(PC + OpRead32(modAdd+1)) + OpRead32(modAdd+5), modWriteValB); break; case 1: MemWrite16(MemRead32(PC + OpRead32(modAdd+1)) + OpRead32(modAdd+5), modWriteValH); break; case 2: MemWrite32(MemRead32(PC + OpRead32(modAdd+1)) + OpRead32(modAdd+5), modWriteValW); break; } return 9; }
static UINT32 bam2DisplacementIndirectIndexed16(void) { amFlag = 0; amOut = MemRead32(v60.reg[modVal2&0x1F] + (INT16)OpRead16(modAdd+2)); bamOffset = v60.reg[modVal&0x1F]; return 4; }
static UINT32 am3DirectAddressDeferredIndexed(void) { switch (modDim) { case 0: MemWrite8(MemRead32(OpRead32(modAdd+2)) + v60.reg[modVal&0x1F], modWriteValB); break; case 1: MemWrite16(MemRead32(OpRead32(modAdd+2)) + v60.reg[modVal&0x1F], modWriteValH); break; case 2: MemWrite32(MemRead32(OpRead32(modAdd+2)) + v60.reg[modVal&0x1F], modWriteValW); break; } return 6; }
static UINT32 bam2PCDisplacementIndirect32(void) { amFlag = 0; amOut = MemRead32(PC + OpRead32(modAdd+1)); bamOffset = 0; return 5; }