--- np2/i286c/i286c_ea.c 2003/10/17 11:10:02 1.2 +++ np2/i286c/i286c_ea.c 2003/11/28 08:01:32 1.5 @@ -1,15 +1,43 @@ #include "compiler.h" #include "i286.h" #include "i286c.h" -#include "i286c.mcr" #include "memory.h" +#include "i286c.mcr" + +enum { + EA_BX_SI = 0, + EA_BX_DI, + EA_BP_SI, + EA_BP_DI, + EA_SI, + EA_DI, + EA_DISP16, + EA_BX, + EA_BX_SI_DISP8, + EA_BX_DI_DISP8, + EA_BP_SI_DISP8, + EA_BP_DI_DISP8, + EA_SI_DISP8, + EA_DI_DISP8, + EA_BP_DISP8, + EA_BX_DISP8, + EA_BX_SI_DISP16, + EA_BX_DI_DISP16, + EA_BP_SI_DISP16, + EA_BP_DI_DISP16, + EA_SI_DISP16, + EA_DI_DISP16, + EA_BP_DISP16, + EA_BX_DISP16 +}; -// --------------------------------------------------------------------------- + +#if !defined(MEMOPTIMIZE) || (MEMOPTIMIZE < 2) static UINT32 ea_bx_si(void) { - return(((I286_BX + I286_SI) & 0x0000ffff) + DS_FIX); + return(LOW16(I286_BX + I286_SI) + DS_FIX); } static UINT32 ea_bx_si_disp8(void) { @@ -17,7 +45,7 @@ static UINT32 ea_bx_si_disp8(void) { SINT32 adrs; GET_PCBYTESD(adrs); - return(((adrs + I286_BX + I286_SI) & 0x0000ffff) + DS_FIX); + return(LOW16(adrs + I286_BX + I286_SI) + DS_FIX); } static UINT32 ea_bx_si_disp16(void) { @@ -25,12 +53,12 @@ static UINT32 ea_bx_si_disp16(void) { UINT32 adrs; GET_PCWORD(adrs); - return(((adrs + I286_BX + I286_SI) & 0x0000ffff) + DS_FIX); + return(LOW16(adrs + I286_BX + I286_SI) + DS_FIX); } static UINT32 ea_bx_di(void) { - return(((I286_BX + I286_DI) & 0x0000ffff) + DS_FIX); + return(LOW16(I286_BX + I286_DI) + DS_FIX); } static UINT32 ea_bx_di_disp8(void) { @@ -38,7 +66,7 @@ static UINT32 ea_bx_di_disp8(void) { SINT32 adrs; GET_PCBYTESD(adrs); - return(((adrs + I286_BX + I286_DI) & 0x0000ffff) + DS_FIX); + return(LOW16(adrs + I286_BX + I286_DI) + DS_FIX); } static UINT32 ea_bx_di_disp16(void) { @@ -46,12 +74,12 @@ static UINT32 ea_bx_di_disp16(void) { UINT32 adrs; GET_PCWORD(adrs); - return(((adrs + I286_BX + I286_DI) & 0x0000ffff) + DS_FIX); + return(LOW16(adrs + I286_BX + I286_DI) + DS_FIX); } static UINT32 ea_bp_si(void) { - return(((I286_BP + I286_SI) & 0x0000ffff) + SS_FIX); + return(LOW16(I286_BP + I286_SI) + SS_FIX); } static UINT32 ea_bp_si_disp8(void) { @@ -59,7 +87,7 @@ static UINT32 ea_bp_si_disp8(void) { SINT32 adrs; GET_PCBYTESD(adrs); - return(((adrs + I286_BP + I286_SI) & 0x0000ffff) + SS_FIX); + return(LOW16(adrs + I286_BP + I286_SI) + SS_FIX); } static UINT32 ea_bp_si_disp16(void) { @@ -67,12 +95,12 @@ static UINT32 ea_bp_si_disp16(void) { UINT32 adrs; GET_PCWORD(adrs); - return(((adrs + I286_BP + I286_SI) & 0x0000ffff) + SS_FIX); + return(LOW16(adrs + I286_BP + I286_SI) + SS_FIX); } static UINT32 ea_bp_di(void) { - return(((I286_BP + I286_DI) & 0x0000ffff) + SS_FIX); + return(LOW16(I286_BP + I286_DI) + SS_FIX); } static UINT32 ea_bp_di_disp8(void) { @@ -80,7 +108,7 @@ static UINT32 ea_bp_di_disp8(void) { SINT32 adrs; GET_PCBYTESD(adrs); - return(((adrs + I286_BP + I286_DI) & 0x0000ffff) + SS_FIX); + return(LOW16(adrs + I286_BP + I286_DI) + SS_FIX); } static UINT32 ea_bp_di_disp16(void) { @@ -88,7 +116,7 @@ static UINT32 ea_bp_di_disp16(void) { UINT32 adrs; GET_PCWORD(adrs); - return(((adrs + I286_BP + I286_DI) & 0x0000ffff) + SS_FIX); + return(LOW16(adrs + I286_BP + I286_DI) + SS_FIX); } static UINT32 ea_si(void) { @@ -101,7 +129,7 @@ static UINT32 ea_si_disp8(void) { SINT32 adrs; GET_PCBYTESD(adrs); - return(((adrs + I286_SI) & 0x0000ffff) + DS_FIX); + return(LOW16(adrs + I286_SI) + DS_FIX); } static UINT32 ea_si_disp16(void) { @@ -109,7 +137,7 @@ static UINT32 ea_si_disp16(void) { UINT32 adrs; GET_PCWORD(adrs); - return(((adrs + I286_SI) & 0x0000ffff) + DS_FIX); + return(LOW16(adrs + I286_SI) + DS_FIX); } static UINT32 ea_di(void) { @@ -122,7 +150,7 @@ static UINT32 ea_di_disp8(void) { SINT32 adrs; GET_PCBYTESD(adrs); - return(((adrs + I286_DI) & 0x0000ffff) + DS_FIX); + return(LOW16(adrs + I286_DI) + DS_FIX); } static UINT32 ea_di_disp16(void) { @@ -130,7 +158,7 @@ static UINT32 ea_di_disp16(void) { UINT32 adrs; GET_PCWORD(adrs); - return(((adrs + I286_DI) & 0x0000ffff) + DS_FIX); + return(LOW16(adrs + I286_DI) + DS_FIX); } static UINT32 ea_disp16(void) { @@ -138,7 +166,7 @@ static UINT32 ea_disp16(void) { UINT32 adrs; GET_PCWORD(adrs); - return((adrs & 0x0000ffff) + DS_FIX); + return(adrs + DS_FIX); } static UINT32 ea_bp_disp8(void) { @@ -146,7 +174,7 @@ static UINT32 ea_bp_disp8(void) { SINT32 adrs; GET_PCBYTESD(adrs); - return(((adrs + I286_BP) & 0x0000ffff) + SS_FIX); + return(LOW16(adrs + I286_BP) + SS_FIX); } static UINT32 ea_bp_disp16(void) { @@ -154,7 +182,7 @@ static UINT32 ea_bp_disp16(void) { UINT32 adrs; GET_PCWORD(adrs); - return(((adrs + I286_BP) & 0x0000ffff) + SS_FIX); + return(LOW16(adrs + I286_BP) + SS_FIX); } static UINT32 ea_bx(void) { @@ -167,7 +195,7 @@ static UINT32 ea_bx_disp8(void) { SINT32 adrs; GET_PCBYTESD(adrs); - return(((adrs + I286_BX) & 0x0000ffff) + DS_FIX); + return(LOW16(adrs + I286_BX) + DS_FIX); } static UINT32 ea_bx_disp16(void) { @@ -175,10 +203,10 @@ static UINT32 ea_bx_disp16(void) { UINT32 adrs; GET_PCWORD(adrs); - return(((adrs + I286_BX) & 0x0000ffff) + DS_FIX); + return(LOW16(adrs + I286_BX) + DS_FIX); } -const CALCEA i286c_ea_dst_tbl[] = { +static const CALCEA i286c_ea_dst_tbl[] = { ea_bx_si, ea_bx_di, ea_bp_si, ea_bp_di, ea_si, ea_di, @@ -193,7 +221,7 @@ const CALCEA i286c_ea_dst_tbl[] = { ea_bp_disp16, ea_bx_disp16}; -// -------------------------------------------------------------------------- +// ---- static UINT16 lea_bx_si(void) { @@ -366,7 +394,7 @@ static UINT16 lea_bx_disp16(void) { return(adrs + I286_BX); } -const CALCLEA i286c_lea_tbl[] = { +static const CALCLEA i286c_lea_tbl[] = { lea_bx_si, lea_bx_di, lea_bp_si, lea_bp_di, lea_si, lea_di, @@ -380,204 +408,205 @@ const CALCLEA i286c_lea_tbl[] = { lea_si_disp16, lea_di_disp16, lea_bp_disp16, lea_bx_disp16}; -// -------------------------------------------------------------------------- -static UINT16 a_bx_si(void) { +// ---- - EA_FIX = DS_FIX; - return(I286_BX + I286_SI); +static UINT a_bx_si(UINT32 *seg) { + + *seg = DS_FIX; + return(LOW16(I286_BX + I286_SI)); } -static UINT16 a_bx_si_disp8(void) { +static UINT a_bx_si_disp8(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCBYTES(adrs); - return(adrs + I286_BX + I286_SI); + return(LOW16(adrs + I286_BX + I286_SI)); } -static UINT16 a_bx_si_disp16(void) { +static UINT a_bx_si_disp16(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCWORD(adrs); - return(adrs + I286_BX + I286_SI); + return(LOW16(adrs + I286_BX + I286_SI)); } -static UINT16 a_bx_di(void) { +static UINT a_bx_di(UINT32 *seg) { - EA_FIX = DS_FIX; - return(I286_BX + I286_DI); + *seg = DS_FIX; + return(LOW16(I286_BX + I286_DI)); } -static UINT16 a_bx_di_disp8(void) { +static UINT a_bx_di_disp8(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCBYTES(adrs); - return(adrs + I286_BX + I286_DI); + return(LOW16(adrs + I286_BX + I286_DI)); } -static UINT16 a_bx_di_disp16(void) { +static UINT a_bx_di_disp16(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCWORD(adrs); - return(adrs + I286_BX + I286_DI); + return(LOW16(adrs + I286_BX + I286_DI)); } -static UINT16 a_bp_si(void) { +static UINT a_bp_si(UINT32 *seg) { - EA_FIX = SS_FIX; - return(I286_BP + I286_SI); + *seg = SS_FIX; + return(LOW16(I286_BP + I286_SI)); } -static UINT16 a_bp_si_disp8(void) { +static UINT a_bp_si_disp8(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = SS_FIX; + *seg = SS_FIX; GET_PCBYTES(adrs); - return(adrs + I286_BP + I286_SI); + return(LOW16(adrs + I286_BP + I286_SI)); } -static UINT16 a_bp_si_disp16(void) { +static UINT a_bp_si_disp16(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = SS_FIX; + *seg = SS_FIX; GET_PCWORD(adrs); - return(adrs + I286_BP + I286_SI); + return(LOW16(adrs + I286_BP + I286_SI)); } -static UINT16 a_bp_di(void) { +static UINT a_bp_di(UINT32 *seg) { - EA_FIX = SS_FIX; - return(I286_BP + I286_DI); + *seg = SS_FIX; + return(LOW16(I286_BP + I286_DI)); } -static UINT16 a_bp_di_disp8(void) { +static UINT a_bp_di_disp8(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = SS_FIX; + *seg = SS_FIX; GET_PCBYTES(adrs); - return(adrs + I286_BP + I286_DI); + return(LOW16(adrs + I286_BP + I286_DI)); } -static UINT16 a_bp_di_disp16(void) { +static UINT a_bp_di_disp16(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = SS_FIX; + *seg = SS_FIX; GET_PCWORD(adrs); - return(adrs + I286_BP + I286_DI); + return(LOW16(adrs + I286_BP + I286_DI)); } -static UINT16 a_si(void) { +static UINT a_si(UINT32 *seg) { - EA_FIX = DS_FIX; + *seg = DS_FIX; return(I286_SI); } -static UINT16 a_si_disp8(void) { +static UINT a_si_disp8(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCBYTES(adrs); - return(adrs + I286_SI); + return(LOW16(adrs + I286_SI)); } -static UINT16 a_si_disp16(void) { +static UINT a_si_disp16(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCWORD(adrs); - return(adrs + I286_SI); + return(LOW16(adrs + I286_SI)); } -static UINT16 a_di(void) { +static UINT a_di(UINT32 *seg) { - EA_FIX = DS_FIX; + *seg = DS_FIX; return(I286_DI); } -static UINT16 a_di_disp8(void) { +static UINT a_di_disp8(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCBYTES(adrs); - return(adrs + I286_DI); + return(LOW16(adrs + I286_DI)); } -static UINT16 a_di_disp16(void) { +static UINT a_di_disp16(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCWORD(adrs); - return(adrs + I286_DI); + return(LOW16(adrs + I286_DI)); } -static UINT16 a_disp16(void) { +static UINT a_disp16(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCWORD(adrs); return(adrs); } -static UINT16 a_bp_disp8(void) { +static UINT a_bp_disp8(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = SS_FIX; + *seg = SS_FIX; GET_PCBYTES(adrs); - return(adrs + I286_BP); + return(LOW16(adrs + I286_BP)); } -static UINT16 a_bp_disp16(void) { +static UINT a_bp_disp16(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = SS_FIX; + *seg = SS_FIX; GET_PCWORD(adrs); - return(adrs + I286_BP); + return(LOW16(adrs + I286_BP)); } -static UINT16 a_bx(void) { +static UINT a_bx(UINT32 *seg) { - EA_FIX = DS_FIX; + *seg = DS_FIX; return(I286_BX); } -static UINT16 a_bx_disp8(void) { +static UINT a_bx_disp8(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCBYTES(adrs); - return(adrs + I286_BX); + return(LOW16(adrs + I286_BX)); } -static UINT16 a_bx_disp16(void) { +static UINT a_bx_disp16(UINT32 *seg) { - UINT16 adrs; + UINT adrs; - EA_FIX = DS_FIX; + *seg = DS_FIX; GET_PCWORD(adrs); - return(adrs + I286_BX); + return(LOW16(adrs + I286_BX)); } -const GETLEA i286c_ea_tbl[] = { +static const GETLEA i286c_ea_tbl[] = { a_bx_si, a_bx_di, a_bp_si, a_bp_di, a_si, a_di, @@ -591,3 +620,357 @@ const GETLEA i286c_ea_tbl[] = { a_si_disp16, a_di_disp16, a_bp_disp16, a_bx_disp16}; + +// ---- + + CALCEA _calc_ea_dst[256]; + CALCLEA _calc_lea[192]; + GETLEA _get_ea[192]; + +static UINT32 ea_nop(void) { + + return(0); +} + +void i286cea_initialize(void) { + + UINT i; + UINT pos; + + for (i=0; i<0xc0; i++) { + pos = ((i >> 3) & 0x18) + (i & 0x07); + _calc_ea_dst[i] = i286c_ea_dst_tbl[pos]; + _calc_lea[i] = i286c_lea_tbl[pos]; + _get_ea[i] = i286c_ea_tbl[pos]; + } + for (; i<0x100; i++) { + _calc_ea_dst[i] = ea_nop; + } +} + +#else // ARMだとswitchにしたほーが早いはず… + +UINT32 calc_ea_dst(UINT op) { + + UINT32 adrs; + + switch(((op >> 3) & 0x18) + (op & 0x07)) { + case EA_BX_SI: + return(LOW16(I286_BX + I286_SI) + DS_FIX); + + case EA_BX_SI_DISP8: + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BX + I286_SI) + DS_FIX); + + case EA_BX_SI_DISP16: + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BX + I286_SI) + DS_FIX); + + case EA_BX_DI: + return(LOW16(I286_BX + I286_DI) + DS_FIX); + + case EA_BX_DI_DISP8: + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BX + I286_DI) + DS_FIX); + + case EA_BX_DI_DISP16: + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BX + I286_DI) + DS_FIX); + + case EA_BP_SI: + return(LOW16(I286_BP + I286_SI) + SS_FIX); + + case EA_BP_SI_DISP8: + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BP + I286_SI) + SS_FIX); + + case EA_BP_SI_DISP16: + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BP + I286_SI) + SS_FIX); + + case EA_BP_DI: + return(LOW16(I286_BP + I286_DI) + SS_FIX); + + case EA_BP_DI_DISP8: + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BP + I286_DI) + SS_FIX); + + case EA_BP_DI_DISP16: + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BP + I286_DI) + SS_FIX); + + case EA_SI: + return(I286_SI + DS_FIX); + + case EA_SI_DISP8: + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_SI) + DS_FIX); + + case EA_SI_DISP16: + GET_PCWORD(adrs); + return(LOW16(adrs + I286_SI) + DS_FIX); + + case EA_DI: + return(I286_DI + DS_FIX); + + case EA_DI_DISP8: + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_DI) + DS_FIX); + + case EA_DI_DISP16: + GET_PCWORD(adrs); + return(LOW16(adrs + I286_DI) + DS_FIX); + + case EA_BX: + return(I286_BX + DS_FIX); + + case EA_BX_DISP8: + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BX) + DS_FIX); + + case EA_BX_DISP16: + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BX) + DS_FIX); + + case EA_BP_DISP8: + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BP) + SS_FIX); + + case EA_BP_DISP16: + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BP) + SS_FIX); + + case EA_DISP16: + GET_PCWORD(adrs); + return(adrs + DS_FIX); + + default: + return(0); + } +} + +UINT16 calc_lea(UINT op) { + + UINT16 adrs; + + switch(((op >> 3) & 0x18) + (op & 0x07)) { + case EA_BX_SI: + return(I286_BX + I286_SI); + + case EA_BX_SI_DISP8: + GET_PCBYTESD(adrs); + return(adrs + I286_BX + I286_SI); + + case EA_BX_SI_DISP16: + GET_PCWORD(adrs); + return(adrs + I286_BX + I286_SI); + + case EA_BX_DI: + return(I286_BX + I286_DI); + + case EA_BX_DI_DISP8: + GET_PCBYTESD(adrs); + return(adrs + I286_BX + I286_DI); + + case EA_BX_DI_DISP16: + GET_PCWORD(adrs); + return(adrs + I286_BX + I286_DI); + + case EA_BP_SI: + return(I286_BP + I286_SI); + + case EA_BP_SI_DISP8: + GET_PCBYTESD(adrs); + return(adrs + I286_BP + I286_SI); + + case EA_BP_SI_DISP16: + GET_PCWORD(adrs); + return(adrs + I286_BP + I286_SI); + + case EA_BP_DI: + return(I286_BP + I286_DI); + + case EA_BP_DI_DISP8: + GET_PCBYTESD(adrs); + return(adrs + I286_BP + I286_DI); + + case EA_BP_DI_DISP16: + GET_PCWORD(adrs); + return(adrs + I286_BP + I286_DI); + + case EA_SI: + return(I286_SI); + + case EA_SI_DISP8: + GET_PCBYTESD(adrs); + return(adrs + I286_SI); + + case EA_SI_DISP16: + GET_PCWORD(adrs); + return(adrs + I286_SI); + + case EA_DI: + return(I286_DI); + + case EA_DI_DISP8: + GET_PCBYTESD(adrs); + return(adrs + I286_DI); + + case EA_DI_DISP16: + GET_PCWORD(adrs); + return(adrs + I286_DI); + + case EA_BX: + return(I286_BX); + + case EA_BX_DISP8: + GET_PCBYTESD(adrs); + return(adrs + I286_BX); + + case EA_BX_DISP16: + GET_PCWORD(adrs); + return(adrs + I286_BX); + + case EA_BP_DISP8: + GET_PCBYTESD(adrs); + return(adrs + I286_BP); + + case EA_BP_DISP16: + GET_PCWORD(adrs); + return(adrs + I286_BP); + + case EA_DISP16: + GET_PCWORD(adrs); + return(adrs); + + default: + return(0); + } +} + +UINT calc_a(UINT op, UINT32 *seg) { + + UINT adrs; + + switch(((op >> 3) & 0x18) + (op & 0x07)) { + case EA_BX_SI: + *seg = DS_FIX; + return(LOW16(I286_BX + I286_SI)); + + case EA_BX_SI_DISP8: + *seg = DS_FIX; + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BX + I286_SI)); + + case EA_BX_SI_DISP16: + *seg = DS_FIX; + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BX + I286_SI)); + + case EA_BX_DI: + *seg = DS_FIX; + return(LOW16(I286_BX + I286_DI)); + + case EA_BX_DI_DISP8: + *seg = DS_FIX; + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BX + I286_DI)); + + case EA_BX_DI_DISP16: + *seg = DS_FIX; + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BX + I286_DI)); + + case EA_BP_SI: + *seg = SS_FIX; + return(LOW16(I286_BP + I286_SI)); + + case EA_BP_SI_DISP8: + *seg = SS_FIX; + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BP + I286_SI)); + + case EA_BP_SI_DISP16: + *seg = SS_FIX; + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BP + I286_SI)); + + case EA_BP_DI: + *seg = SS_FIX; + return(LOW16(I286_BP + I286_DI)); + + case EA_BP_DI_DISP8: + *seg = SS_FIX; + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BP + I286_DI)); + + case EA_BP_DI_DISP16: + *seg = SS_FIX; + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BP + I286_DI)); + + case EA_SI: + *seg = DS_FIX; + return(I286_SI); + + case EA_SI_DISP8: + *seg = DS_FIX; + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_SI)); + + case EA_SI_DISP16: + *seg = DS_FIX; + GET_PCWORD(adrs); + return(LOW16(adrs + I286_SI)); + + case EA_DI: + *seg = DS_FIX; + return(I286_DI); + + case EA_DI_DISP8: + *seg = DS_FIX; + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_DI)); + + case EA_DI_DISP16: + *seg = DS_FIX; + GET_PCWORD(adrs); + return(LOW16(adrs + I286_DI)); + + case EA_BX: + *seg = DS_FIX; + return(I286_BX); + + case EA_BX_DISP8: + *seg = DS_FIX; + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BX)); + + case EA_BX_DISP16: + *seg = DS_FIX; + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BX)); + + case EA_BP_DISP8: + *seg = SS_FIX; + GET_PCBYTESD(adrs); + return(LOW16(adrs + I286_BP)); + + case EA_BP_DISP16: + *seg = SS_FIX; + GET_PCWORD(adrs); + return(LOW16(adrs + I286_BP)); + + case EA_DISP16: + *seg = DS_FIX; + GET_PCWORD(adrs); + return(adrs); + + default: + *seg = 0; + return(0); + } +} + +#endif +