
// NOTE for bit string / field addressing
// ************************************
// cpustate->moddim must be passed as 10 for bit string instructions,
// and as 11 for bit field instructions




// Addressing mode functions and tables
#include "am1.c" // ReadAM
#include "am2.c" // ReadAMAddress
#include "am3.c" // WriteAM

/*
  Input:
  cpustate->modadd
    cpustate->moddim

  Output:
    cpustate->amout
    amLength
*/

static UINT32 ReadAM(v60_state *cpustate)
{
	cpustate->modm = cpustate->modm?1:0;
	cpustate->modval = OpRead8(cpustate->program, cpustate->modadd);
	return AMTable1[cpustate->modm][cpustate->modval >> 5](cpustate);
}

static UINT32 BitReadAM(v60_state *cpustate)
{
	cpustate->modm = cpustate->modm?1:0;
	cpustate->modval = OpRead8(cpustate->program, cpustate->modadd);
	return BAMTable1[cpustate->modm][cpustate->modval >> 5](cpustate);
}



/*
  Input:
  cpustate->modadd
    cpustate->moddim

  Output:
    cpustate->amout
    cpustate->amflag
    amLength
*/

static UINT32 ReadAMAddress(v60_state *cpustate)
{
	cpustate->modm = cpustate->modm?1:0;
	cpustate->modval = OpRead8(cpustate->program, cpustate->modadd);
	return AMTable2[cpustate->modm][cpustate->modval >> 5](cpustate);
}

static UINT32 BitReadAMAddress(v60_state *cpustate)
{
	cpustate->modm = cpustate->modm?1:0;
	cpustate->modval = OpRead8(cpustate->program, cpustate->modadd);
	return BAMTable2[cpustate->modm][cpustate->modval >> 5](cpustate);
}

/*
  Input:
  cpustate->modadd
    cpustate->moddim
    cpustate->modwritevalb / H/W

  Output:
    cpustate->amout
    amLength
*/

static UINT32 WriteAM(v60_state *cpustate)
{
	cpustate->modm = cpustate->modm?1:0;
	cpustate->modval = OpRead8(cpustate->program, cpustate->modadd);
	return AMTable3[cpustate->modm][cpustate->modval >> 5](cpustate);
}


