|
|
| version 1.4, 2003/11/24 09:14:01 | version 1.6, 2003/12/08 00:55:31 |
|---|---|
| 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 "memory.h" |
| #include "i286c.mcr" | #include "i286c.mcr" |
| Line 37 enum { | Line 37 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 45 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 53 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 66 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 74 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 87 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 95 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 108 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 116 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 129 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 137 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 150 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 158 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 166 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 174 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 182 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 195 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 203 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 411 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 656 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 848 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 916 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 930 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 944 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; |