Diff for /np2/i286c/i286c_ea.c between versions 1.4 and 1.7

version 1.4, 2003/11/24 09:14:01 version 1.7, 2003/12/12 01:04:40
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "i286.h"  #include        "cpucore.h"
 #include        "i286c.h"  #include        "i286c.h"
 #include        "memory.h"  
 #include        "i286c.mcr"  #include        "i286c.mcr"
   
   
Line 37  enum { Line 36  enum {
   
 static UINT32 ea_bx_si(void) {  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) {  static UINT32 ea_bx_si_disp8(void) {
Line 45  static UINT32 ea_bx_si_disp8(void) { Line 44  static UINT32 ea_bx_si_disp8(void) {
         SINT32  adrs;          SINT32  adrs;
   
         GET_PCBYTESD(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) {  static UINT32 ea_bx_si_disp16(void) {
Line 53  static UINT32 ea_bx_si_disp16(void) { Line 52  static UINT32 ea_bx_si_disp16(void) {
         UINT32  adrs;          UINT32  adrs;
   
         GET_PCWORD(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) {  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) {  static UINT32 ea_bx_di_disp8(void) {
Line 66  static UINT32 ea_bx_di_disp8(void) { Line 65  static UINT32 ea_bx_di_disp8(void) {
         SINT32  adrs;          SINT32  adrs;
   
         GET_PCBYTESD(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) {  static UINT32 ea_bx_di_disp16(void) {
Line 74  static UINT32 ea_bx_di_disp16(void) { Line 73  static UINT32 ea_bx_di_disp16(void) {
         UINT32  adrs;          UINT32  adrs;
   
         GET_PCWORD(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) {  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) {  static UINT32 ea_bp_si_disp8(void) {
Line 87  static UINT32 ea_bp_si_disp8(void) { Line 86  static UINT32 ea_bp_si_disp8(void) {
         SINT32  adrs;          SINT32  adrs;
   
         GET_PCBYTESD(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) {  static UINT32 ea_bp_si_disp16(void) {
Line 95  static UINT32 ea_bp_si_disp16(void) { Line 94  static UINT32 ea_bp_si_disp16(void) {
         UINT32  adrs;          UINT32  adrs;
   
         GET_PCWORD(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) {  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) {  static UINT32 ea_bp_di_disp8(void) {
Line 108  static UINT32 ea_bp_di_disp8(void) { Line 107  static UINT32 ea_bp_di_disp8(void) {
         SINT32  adrs;          SINT32  adrs;
   
         GET_PCBYTESD(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) {  static UINT32 ea_bp_di_disp16(void) {
Line 116  static UINT32 ea_bp_di_disp16(void) { Line 115  static UINT32 ea_bp_di_disp16(void) {
         UINT32  adrs;          UINT32  adrs;
   
         GET_PCWORD(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) {  static UINT32 ea_si(void) {
Line 129  static UINT32 ea_si_disp8(void) { Line 128  static UINT32 ea_si_disp8(void) {
         SINT32  adrs;          SINT32  adrs;
   
         GET_PCBYTESD(adrs);          GET_PCBYTESD(adrs);
         return(((adrs + I286_SI) & 0x0000ffff) + DS_FIX);          return(LOW16(adrs + I286_SI) + DS_FIX);
 }  }
   
 static UINT32 ea_si_disp16(void) {  static UINT32 ea_si_disp16(void) {
Line 137  static UINT32 ea_si_disp16(void) { Line 136  static UINT32 ea_si_disp16(void) {
         UINT32  adrs;          UINT32  adrs;
   
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(((adrs + I286_SI) & 0x0000ffff) + DS_FIX);          return(LOW16(adrs + I286_SI) + DS_FIX);
 }  }
   
 static UINT32 ea_di(void) {  static UINT32 ea_di(void) {
Line 150  static UINT32 ea_di_disp8(void) { Line 149  static UINT32 ea_di_disp8(void) {
         SINT32  adrs;          SINT32  adrs;
   
         GET_PCBYTESD(adrs);          GET_PCBYTESD(adrs);
         return(((adrs + I286_DI) & 0x0000ffff) + DS_FIX);          return(LOW16(adrs + I286_DI) + DS_FIX);
 }  }
   
 static UINT32 ea_di_disp16(void) {  static UINT32 ea_di_disp16(void) {
Line 158  static UINT32 ea_di_disp16(void) { Line 157  static UINT32 ea_di_disp16(void) {
         UINT32  adrs;          UINT32  adrs;
   
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(((adrs + I286_DI) & 0x0000ffff) + DS_FIX);          return(LOW16(adrs + I286_DI) + DS_FIX);
 }  }
   
 static UINT32 ea_disp16(void) {  static UINT32 ea_disp16(void) {
Line 166  static UINT32 ea_disp16(void) { Line 165  static UINT32 ea_disp16(void) {
         UINT32  adrs;          UINT32  adrs;
   
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return((adrs & 0x0000ffff) + DS_FIX);          return(adrs + DS_FIX);
 }  }
   
 static UINT32 ea_bp_disp8(void) {  static UINT32 ea_bp_disp8(void) {
Line 174  static UINT32 ea_bp_disp8(void) { Line 173  static UINT32 ea_bp_disp8(void) {
         SINT32  adrs;          SINT32  adrs;
   
         GET_PCBYTESD(adrs);          GET_PCBYTESD(adrs);
         return(((adrs + I286_BP) & 0x0000ffff) + SS_FIX);          return(LOW16(adrs + I286_BP) + SS_FIX);
 }  }
   
 static UINT32 ea_bp_disp16(void) {  static UINT32 ea_bp_disp16(void) {
Line 182  static UINT32 ea_bp_disp16(void) { Line 181  static UINT32 ea_bp_disp16(void) {
         UINT32  adrs;          UINT32  adrs;
   
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(((adrs + I286_BP) & 0x0000ffff) + SS_FIX);          return(LOW16(adrs + I286_BP) + SS_FIX);
 }  }
   
 static UINT32 ea_bx(void) {  static UINT32 ea_bx(void) {
Line 195  static UINT32 ea_bx_disp8(void) { Line 194  static UINT32 ea_bx_disp8(void) {
         SINT32  adrs;          SINT32  adrs;
   
         GET_PCBYTESD(adrs);          GET_PCBYTESD(adrs);
         return(((adrs + I286_BX) & 0x0000ffff) + DS_FIX);          return(LOW16(adrs + I286_BX) + DS_FIX);
 }  }
   
 static UINT32 ea_bx_disp16(void) {  static UINT32 ea_bx_disp16(void) {
Line 203  static UINT32 ea_bx_disp16(void) { Line 202  static UINT32 ea_bx_disp16(void) {
         UINT32  adrs;          UINT32  adrs;
   
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(((adrs + I286_BX) & 0x0000ffff) + DS_FIX);          return(LOW16(adrs + I286_BX) + DS_FIX);
 }  }
   
 static const CALCEA i286c_ea_dst_tbl[] = {  static const CALCEA i286c_ea_dst_tbl[] = {
Line 411  static const CALCLEA i286c_lea_tbl[] = { Line 410  static const CALCLEA i286c_lea_tbl[] = {
   
 // ----  // ----
   
 static UINT16 a_bx_si(UINT32 *seg) {  static UINT a_bx_si(UINT32 *seg) {
   
         *seg = DS_FIX;          *seg = DS_FIX;
         return(I286_BX + I286_SI);          return(LOW16(I286_BX + I286_SI));
 }  }
   
 static UINT16 a_bx_si_disp8(UINT32 *seg) {  static UINT a_bx_si_disp8(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCBYTES(adrs);          GET_PCBYTES(adrs);
         return(adrs + I286_BX + I286_SI);          return(LOW16(adrs + I286_BX + I286_SI));
 }  }
   
 static UINT16 a_bx_si_disp16(UINT32 *seg) {  static UINT a_bx_si_disp16(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(adrs + I286_BX + I286_SI);          return(LOW16(adrs + I286_BX + I286_SI));
 }  }
   
 static UINT16 a_bx_di(UINT32 *seg) {  static UINT a_bx_di(UINT32 *seg) {
   
         *seg = DS_FIX;          *seg = DS_FIX;
         return(I286_BX + I286_DI);          return(LOW16(I286_BX + I286_DI));
 }  }
   
 static UINT16 a_bx_di_disp8(UINT32 *seg) {  static UINT a_bx_di_disp8(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCBYTES(adrs);          GET_PCBYTES(adrs);
         return(adrs + I286_BX + I286_DI);          return(LOW16(adrs + I286_BX + I286_DI));
 }  }
   
 static UINT16 a_bx_di_disp16(UINT32 *seg) {  static UINT a_bx_di_disp16(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(adrs + I286_BX + I286_DI);          return(LOW16(adrs + I286_BX + I286_DI));
 }  }
   
 static UINT16 a_bp_si(UINT32 *seg) {  static UINT a_bp_si(UINT32 *seg) {
   
         *seg = SS_FIX;          *seg = SS_FIX;
         return(I286_BP + I286_SI);          return(LOW16(I286_BP + I286_SI));
 }  }
   
 static UINT16 a_bp_si_disp8(UINT32 *seg) {  static UINT a_bp_si_disp8(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = SS_FIX;          *seg = SS_FIX;
         GET_PCBYTES(adrs);          GET_PCBYTES(adrs);
         return(adrs + I286_BP + I286_SI);          return(LOW16(adrs + I286_BP + I286_SI));
 }  }
   
 static UINT16 a_bp_si_disp16(UINT32 *seg) {  static UINT a_bp_si_disp16(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = SS_FIX;          *seg = SS_FIX;
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(adrs + I286_BP + I286_SI);          return(LOW16(adrs + I286_BP + I286_SI));
 }  }
   
 static UINT16 a_bp_di(UINT32 *seg) {  static UINT a_bp_di(UINT32 *seg) {
   
         *seg = SS_FIX;          *seg = SS_FIX;
         return(I286_BP + I286_DI);          return(LOW16(I286_BP + I286_DI));
 }  }
   
 static UINT16 a_bp_di_disp8(UINT32 *seg) {  static UINT a_bp_di_disp8(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = SS_FIX;          *seg = SS_FIX;
         GET_PCBYTES(adrs);          GET_PCBYTES(adrs);
         return(adrs + I286_BP + I286_DI);          return(LOW16(adrs + I286_BP + I286_DI));
 }  }
   
 static UINT16 a_bp_di_disp16(UINT32 *seg) {  static UINT a_bp_di_disp16(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = SS_FIX;          *seg = SS_FIX;
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(adrs + I286_BP + I286_DI);          return(LOW16(adrs + I286_BP + I286_DI));
 }  }
   
 static UINT16 a_si(UINT32 *seg) {  static UINT a_si(UINT32 *seg) {
   
         *seg = DS_FIX;          *seg = DS_FIX;
         return(I286_SI);          return(I286_SI);
 }  }
   
 static UINT16 a_si_disp8(UINT32 *seg) {  static UINT a_si_disp8(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCBYTES(adrs);          GET_PCBYTES(adrs);
         return(adrs + I286_SI);          return(LOW16(adrs + I286_SI));
 }  }
   
 static UINT16 a_si_disp16(UINT32 *seg) {  static UINT a_si_disp16(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(adrs + I286_SI);          return(LOW16(adrs + I286_SI));
 }  }
   
 static UINT16 a_di(UINT32 *seg) {  static UINT a_di(UINT32 *seg) {
   
         *seg = DS_FIX;          *seg = DS_FIX;
         return(I286_DI);          return(I286_DI);
 }  }
   
 static UINT16 a_di_disp8(UINT32 *seg) {  static UINT a_di_disp8(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCBYTES(adrs);          GET_PCBYTES(adrs);
         return(adrs + I286_DI);          return(LOW16(adrs + I286_DI));
 }  }
   
 static UINT16 a_di_disp16(UINT32 *seg) {  static UINT a_di_disp16(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(adrs + I286_DI);          return(LOW16(adrs + I286_DI));
 }  }
   
 static UINT16 a_disp16(UINT32 *seg) {  static UINT a_disp16(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(adrs);          return(adrs);
 }  }
   
 static UINT16 a_bp_disp8(UINT32 *seg) {  static UINT a_bp_disp8(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = SS_FIX;          *seg = SS_FIX;
         GET_PCBYTES(adrs);          GET_PCBYTES(adrs);
         return(adrs + I286_BP);          return(LOW16(adrs + I286_BP));
 }  }
   
 static UINT16 a_bp_disp16(UINT32 *seg) {  static UINT a_bp_disp16(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = SS_FIX;          *seg = SS_FIX;
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(adrs + I286_BP);          return(LOW16(adrs + I286_BP));
 }  }
   
 static UINT16 a_bx(UINT32 *seg) {  static UINT a_bx(UINT32 *seg) {
   
         *seg = DS_FIX;          *seg = DS_FIX;
         return(I286_BX);          return(I286_BX);
 }  }
   
 static UINT16 a_bx_disp8(UINT32 *seg) {  static UINT a_bx_disp8(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCBYTES(adrs);          GET_PCBYTES(adrs);
         return(adrs + I286_BX);          return(LOW16(adrs + I286_BX));
 }  }
   
 static UINT16 a_bx_disp16(UINT32 *seg) {  static UINT a_bx_disp16(UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         *seg = DS_FIX;          *seg = DS_FIX;
         GET_PCWORD(adrs);          GET_PCWORD(adrs);
         return(adrs + I286_BX);          return(LOW16(adrs + I286_BX));
 }  }
   
 static const GETLEA i286c_ea_tbl[] = {  static const GETLEA i286c_ea_tbl[] = {
Line 656  UINT32 calc_ea_dst(UINT op) { Line 655  UINT32 calc_ea_dst(UINT op) {
   
         switch(((op >> 3) & 0x18) + (op & 0x07)) {          switch(((op >> 3) & 0x18) + (op & 0x07)) {
                 case EA_BX_SI:                  case EA_BX_SI:
                         return(((I286_BX + I286_SI) & 0x0000ffff) + DS_FIX);                          return(LOW16(I286_BX + I286_SI) + DS_FIX);
   
                 case EA_BX_SI_DISP8:                  case EA_BX_SI_DISP8:
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(((adrs + I286_BX + I286_SI) & 0x0000ffff) + DS_FIX);                          return(LOW16(adrs + I286_BX + I286_SI) + DS_FIX);
   
                 case EA_BX_SI_DISP16:                  case EA_BX_SI_DISP16:
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(((adrs + I286_BX + I286_SI) & 0x0000ffff) + DS_FIX);                          return(LOW16(adrs + I286_BX + I286_SI) + DS_FIX);
   
                 case EA_BX_DI:                  case EA_BX_DI:
                         return(((I286_BX + I286_DI) & 0x0000ffff) + DS_FIX);                          return(LOW16(I286_BX + I286_DI) + DS_FIX);
   
                 case EA_BX_DI_DISP8:                  case EA_BX_DI_DISP8:
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(((adrs + I286_BX + I286_DI) & 0x0000ffff) + DS_FIX);                          return(LOW16(adrs + I286_BX + I286_DI) + DS_FIX);
   
                 case EA_BX_DI_DISP16:                  case EA_BX_DI_DISP16:
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(((adrs + I286_BX + I286_DI) & 0x0000ffff) + DS_FIX);                          return(LOW16(adrs + I286_BX + I286_DI) + DS_FIX);
   
                 case EA_BP_SI:                  case EA_BP_SI:
                         return(((I286_BP + I286_SI) & 0x0000ffff) + SS_FIX);                          return(LOW16(I286_BP + I286_SI) + SS_FIX);
   
                 case EA_BP_SI_DISP8:                  case EA_BP_SI_DISP8:
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(((adrs + I286_BP + I286_SI) & 0x0000ffff) + SS_FIX);                          return(LOW16(adrs + I286_BP + I286_SI) + SS_FIX);
   
                 case EA_BP_SI_DISP16:                  case EA_BP_SI_DISP16:
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(((adrs + I286_BP + I286_SI) & 0x0000ffff) + SS_FIX);                          return(LOW16(adrs + I286_BP + I286_SI) + SS_FIX);
   
                 case EA_BP_DI:                  case EA_BP_DI:
                         return(((I286_BP + I286_DI) & 0x0000ffff) + SS_FIX);                          return(LOW16(I286_BP + I286_DI) + SS_FIX);
   
                 case EA_BP_DI_DISP8:                  case EA_BP_DI_DISP8:
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(((adrs + I286_BP + I286_DI) & 0x0000ffff) + SS_FIX);                          return(LOW16(adrs + I286_BP + I286_DI) + SS_FIX);
   
                 case EA_BP_DI_DISP16:                  case EA_BP_DI_DISP16:
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(((adrs + I286_BP + I286_DI) & 0x0000ffff) + SS_FIX);                          return(LOW16(adrs + I286_BP + I286_DI) + SS_FIX);
   
                 case EA_SI:                  case EA_SI:
                         return(I286_SI + DS_FIX);                          return(I286_SI + DS_FIX);
   
                 case EA_SI_DISP8:                  case EA_SI_DISP8:
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(((adrs + I286_SI) & 0x0000ffff) + DS_FIX);                          return(LOW16(adrs + I286_SI) + DS_FIX);
   
                 case EA_SI_DISP16:                  case EA_SI_DISP16:
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(((adrs + I286_SI) & 0x0000ffff) + DS_FIX);                          return(LOW16(adrs + I286_SI) + DS_FIX);
   
                 case EA_DI:                  case EA_DI:
                         return(I286_DI + DS_FIX);                          return(I286_DI + DS_FIX);
   
                 case EA_DI_DISP8:                  case EA_DI_DISP8:
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(((adrs + I286_DI) & 0x0000ffff) + DS_FIX);                          return(LOW16(adrs + I286_DI) + DS_FIX);
   
                 case EA_DI_DISP16:                  case EA_DI_DISP16:
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(((adrs + I286_DI) & 0x0000ffff) + DS_FIX);                          return(LOW16(adrs + I286_DI) + DS_FIX);
   
                 case EA_BX:                  case EA_BX:
                         return(I286_BX + DS_FIX);                          return(I286_BX + DS_FIX);
   
                 case EA_BX_DISP8:                  case EA_BX_DISP8:
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(((adrs + I286_BX) & 0x0000ffff) + DS_FIX);                          return(LOW16(adrs + I286_BX) + DS_FIX);
   
                 case EA_BX_DISP16:                  case EA_BX_DISP16:
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(((adrs + I286_BX) & 0x0000ffff) + DS_FIX);                          return(LOW16(adrs + I286_BX) + DS_FIX);
   
                 case EA_BP_DISP8:                  case EA_BP_DISP8:
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(((adrs + I286_BP) & 0x0000ffff) + SS_FIX);                          return(LOW16(adrs + I286_BP) + SS_FIX);
   
                 case EA_BP_DISP16:                  case EA_BP_DISP16:
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(((adrs + I286_BP) & 0x0000ffff) + SS_FIX);                          return(LOW16(adrs + I286_BP) + SS_FIX);
   
                 case EA_DISP16:                  case EA_DISP16:
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return((adrs & 0x0000ffff) + DS_FIX);                          return(adrs + DS_FIX);
   
                 default:                  default:
                         return(0);                          return(0);
Line 848  UINT16 calc_lea(UINT op) { Line 847  UINT16 calc_lea(UINT op) {
         }          }
 }  }
   
 UINT16 calc_a(UINT op, UINT32 *seg) {  UINT calc_a(UINT op, UINT32 *seg) {
   
         UINT16  adrs;          UINT    adrs;
   
         switch(((op >> 3) & 0x18) + (op & 0x07)) {          switch(((op >> 3) & 0x18) + (op & 0x07)) {
                 case EA_BX_SI:                  case EA_BX_SI:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         return(I286_BX + I286_SI);                          return(LOW16(I286_BX + I286_SI));
   
                 case EA_BX_SI_DISP8:                  case EA_BX_SI_DISP8:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(adrs + I286_BX + I286_SI);                          return(LOW16(adrs + I286_BX + I286_SI));
   
                 case EA_BX_SI_DISP16:                  case EA_BX_SI_DISP16:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(adrs + I286_BX + I286_SI);                          return(LOW16(adrs + I286_BX + I286_SI));
   
                 case EA_BX_DI:                  case EA_BX_DI:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         return(I286_BX + I286_DI);                          return(LOW16(I286_BX + I286_DI));
   
                 case EA_BX_DI_DISP8:                  case EA_BX_DI_DISP8:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(adrs + I286_BX + I286_DI);                          return(LOW16(adrs + I286_BX + I286_DI));
   
                 case EA_BX_DI_DISP16:                  case EA_BX_DI_DISP16:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(adrs + I286_BX + I286_DI);                          return(LOW16(adrs + I286_BX + I286_DI));
   
                 case EA_BP_SI:                  case EA_BP_SI:
                         *seg = SS_FIX;                          *seg = SS_FIX;
                         return(I286_BP + I286_SI);                          return(LOW16(I286_BP + I286_SI));
   
                 case EA_BP_SI_DISP8:                  case EA_BP_SI_DISP8:
                         *seg = SS_FIX;                          *seg = SS_FIX;
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(adrs + I286_BP + I286_SI);                          return(LOW16(adrs + I286_BP + I286_SI));
   
                 case EA_BP_SI_DISP16:                  case EA_BP_SI_DISP16:
                         *seg = SS_FIX;                          *seg = SS_FIX;
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(adrs + I286_BP + I286_SI);                          return(LOW16(adrs + I286_BP + I286_SI));
   
                 case EA_BP_DI:                  case EA_BP_DI:
                         *seg = SS_FIX;                          *seg = SS_FIX;
                         return(I286_BP + I286_DI);                          return(LOW16(I286_BP + I286_DI));
   
                 case EA_BP_DI_DISP8:                  case EA_BP_DI_DISP8:
                         *seg = SS_FIX;                          *seg = SS_FIX;
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(adrs + I286_BP + I286_DI);                          return(LOW16(adrs + I286_BP + I286_DI));
   
                 case EA_BP_DI_DISP16:                  case EA_BP_DI_DISP16:
                         *seg = SS_FIX;                          *seg = SS_FIX;
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(adrs + I286_BP + I286_DI);                          return(LOW16(adrs + I286_BP + I286_DI));
   
                 case EA_SI:                  case EA_SI:
                         *seg = DS_FIX;                          *seg = DS_FIX;
Line 916  UINT16 calc_a(UINT op, UINT32 *seg) { Line 915  UINT16 calc_a(UINT op, UINT32 *seg) {
                 case EA_SI_DISP8:                  case EA_SI_DISP8:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(adrs + I286_SI);                          return(LOW16(adrs + I286_SI));
   
                 case EA_SI_DISP16:                  case EA_SI_DISP16:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(adrs + I286_SI);                          return(LOW16(adrs + I286_SI));
   
                 case EA_DI:                  case EA_DI:
                         *seg = DS_FIX;                          *seg = DS_FIX;
Line 930  UINT16 calc_a(UINT op, UINT32 *seg) { Line 929  UINT16 calc_a(UINT op, UINT32 *seg) {
                 case EA_DI_DISP8:                  case EA_DI_DISP8:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(adrs + I286_DI);                          return(LOW16(adrs + I286_DI));
   
                 case EA_DI_DISP16:                  case EA_DI_DISP16:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(adrs + I286_DI);                          return(LOW16(adrs + I286_DI));
   
                 case EA_BX:                  case EA_BX:
                         *seg = DS_FIX;                          *seg = DS_FIX;
Line 944  UINT16 calc_a(UINT op, UINT32 *seg) { Line 943  UINT16 calc_a(UINT op, UINT32 *seg) {
                 case EA_BX_DISP8:                  case EA_BX_DISP8:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(adrs + I286_BX);                          return(LOW16(adrs + I286_BX));
   
                 case EA_BX_DISP16:                  case EA_BX_DISP16:
                         *seg = DS_FIX;                          *seg = DS_FIX;
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(adrs + I286_BX);                          return(LOW16(adrs + I286_BX));
   
                 case EA_BP_DISP8:                  case EA_BP_DISP8:
                         *seg = SS_FIX;                          *seg = SS_FIX;
                         GET_PCBYTESD(adrs);                          GET_PCBYTESD(adrs);
                         return(adrs + I286_BP);                          return(LOW16(adrs + I286_BP));
   
                 case EA_BP_DISP16:                  case EA_BP_DISP16:
                         *seg = SS_FIX;                          *seg = SS_FIX;
                         GET_PCWORD(adrs);                          GET_PCWORD(adrs);
                         return(adrs + I286_BP);                          return(LOW16(adrs + I286_BP));
   
                 case EA_DISP16:                  case EA_DISP16:
                         *seg = DS_FIX;                          *seg = DS_FIX;

Removed from v.1.4  
changed lines
  Added in v.1.7


RetroPC.NET-CVS <cvs@retropc.net>