if (M.x86.mode & SYSMODE_PREFIX_ADDR) { u32* rp = decode_rm_long_register(rm); return (*rp + displacement); }
unsigned decode_rm01_address(	int rm){	int displacement = (s8)fetch_byte_imm();	switch (rm) {      case 0:		DECODE_PRINTF2("%d[BX+SI]", displacement);		return M.x86.R_BX + M.x86.R_SI + displacement;	  case 1:		DECODE_PRINTF2("%d[BX+DI]", displacement);		return M.x86.R_BX + M.x86.R_DI + displacement;	  case 2:		DECODE_PRINTF2("%d[BP+SI]", displacement);		M.x86.mode |= SYSMODE_SEG_DS_SS;		return M.x86.R_BP + M.x86.R_SI + displacement;	  case 3:		DECODE_PRINTF2("%d[BP+DI]", displacement);		M.x86.mode |= SYSMODE_SEG_DS_SS;		return M.x86.R_BP + M.x86.R_DI + displacement;	  case 4:		DECODE_PRINTF2("%d[SI]", displacement);		return M.x86.R_SI + displacement;	  case 5:		DECODE_PRINTF2("%d[DI]", displacement);		return M.x86.R_DI + displacement;	  case 6:		DECODE_PRINTF2("%d[BP]", displacement);		M.x86.mode |= SYSMODE_SEG_DS_SS;		return M.x86.R_BP + displacement;	  case 7:		DECODE_PRINTF2("%d[BX]", displacement);		return M.x86.R_BX + displacement;	}	HALT_SYS();    return 0;                   /* SHOULD NOT HAPPEN */}