Diff for /np2/i286c/i286c_rp.c between versions 1.6 and 1.12

version 1.6, 2003/11/29 00:36:00 version 1.12, 2005/02/07 14:46:11
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        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "i286c.mcr"  #include        "i286c.mcr"
Line 47  I286EXT i286c_rep_outsb(void) { Line 46  I286EXT i286c_rep_outsb(void) {
                 do {                  do {
                         REG8 dat = i286_memoryread(I286_SI + DS_FIX);                          REG8 dat = i286_memoryread(I286_SI + DS_FIX);
                         I286_SI += stp;                          I286_SI += stp;
                         iocore_out8(I286_DX, (BYTE)dat);                          iocore_out8(I286_DX, (UINT8)dat);
                         I286_WORKCLOCK(4);                          I286_WORKCLOCK(4);
                 } while(--I286_CX);                  } while(--I286_CX);
         }          }
Line 70  I286EXT i286c_rep_outsw(void) { Line 69  I286EXT i286c_rep_outsw(void) {
   
 // ---------------------------------------------------------------------- movs  // ---------------------------------------------------------------------- movs
   
   #if 1
   I286EXT i286c_rep_movsb(void) {
   
           UINT16  r_cx;
           int             stp;
           UINT16  r_si;
           UINT16  r_di;
   
           I286_WORKCLOCK(5);
           r_cx = I286_CX;
           if (r_cx) {
                   stp = STRING_DIR;
                   r_si = I286_SI;
                   r_di = I286_DI;
                   while(1) {
                           REG8 dat = i286_memoryread(DS_FIX + r_si);
                           i286_memorywrite(ES_BASE + r_di, dat);
                           r_si += stp;
                           r_di += stp;
                           I286_WORKCLOCK(4);
                           r_cx--;
                           if (!r_cx) {
                                   break;
                           }
                           if (I286_REMCLOCK <= 0) {
                                   I286_IP -= I286_PREFIX + 1;
                                   break;
                           }
                   }
                   I286_CX = r_cx;
                   I286_SI = r_si;
                   I286_DI = r_di;
           }
   }
   
   I286EXT i286c_rep_movsw(void) {
   
           UINT16  r_cx;
           int             stp;
           UINT16  r_si;
           UINT16  r_di;
   
           I286_WORKCLOCK(5);
           r_cx = I286_CX;
           if (r_cx) {
                   stp = STRING_DIRx2;
                   r_si = I286_SI;
                   r_di = I286_DI;
                   while(1) {
                           REG16 dat = i286_memoryread_w(DS_FIX + r_si);
                           i286_memorywrite_w(ES_BASE + r_di, dat);
                           r_si += stp;
                           r_di += stp;
                           I286_WORKCLOCK(4);
                           r_cx--;
                           if (!r_cx) {
                                   break;
                           }
                           if (I286_REMCLOCK <= 0) {
                                   I286_IP -= I286_PREFIX + 1;
                                   break;
                           }
                   }
                   I286_CX = r_cx;
                   I286_SI = r_si;
                   I286_DI = r_di;
           }
   }
   #else
 I286EXT i286c_rep_movsb(void) {  I286EXT i286c_rep_movsb(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
Line 86  I286EXT i286c_rep_movsb(void) { Line 154  I286EXT i286c_rep_movsb(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= I286_PREFIX + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
Line 109  I286EXT i286c_rep_movsw(void) { Line 177  I286EXT i286c_rep_movsw(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= I286_PREFIX + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
         }          }
 }  }
   #endif
   
   
 // ---------------------------------------------------------------------- lods  // ---------------------------------------------------------------------- lods
Line 133  I286EXT i286c_rep_lodsb(void) { Line 202  I286EXT i286c_rep_lodsb(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= I286_PREFIX + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
Line 154  I286EXT i286c_rep_lodsw(void) { Line 223  I286EXT i286c_rep_lodsw(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= I286_PREFIX + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
Line 178  I286EXT i286c_rep_stosb(void) { Line 247  I286EXT i286c_rep_stosb(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= I286_PREFIX + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
Line 199  I286EXT i286c_rep_stosw(void) { Line 268  I286EXT i286c_rep_stosw(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= I286_PREFIX + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
Line 221  I286EXT i286c_repe_cmpsb(void) { Line 290  I286EXT i286c_repe_cmpsb(void) {
                         I286_SI += stp;                          I286_SI += stp;
                         I286_DI += stp;                          I286_DI += stp;
                         I286_WORKCLOCK(9);                          I286_WORKCLOCK(9);
                         BYTE_SUB(res, dst, src)                          SUBBYTE(res, dst, src)
                         I286_CX--;                          I286_CX--;
                 } while((I286_CX) && (I286_FLAGL & Z_FLAG));                  } while((I286_CX) && (I286_FLAGL & Z_FLAG));
         }          }
Line 239  I286EXT i286c_repne_cmpsb(void) { Line 308  I286EXT i286c_repne_cmpsb(void) {
                         I286_SI += stp;                          I286_SI += stp;
                         I286_DI += stp;                          I286_DI += stp;
                         I286_WORKCLOCK(9);                          I286_WORKCLOCK(9);
                         BYTE_SUB(res, dst, src)                          SUBBYTE(res, dst, src)
                         I286_CX--;                          I286_CX--;
                 } while((I286_CX) && (!(I286_FLAGL & Z_FLAG)));                  } while((I286_CX) && (!(I286_FLAGL & Z_FLAG)));
         }          }
Line 257  I286EXT i286c_repe_cmpsw(void) { Line 326  I286EXT i286c_repe_cmpsw(void) {
                         I286_SI += stp;                          I286_SI += stp;
                         I286_DI += stp;                          I286_DI += stp;
                         I286_WORKCLOCK(9);                          I286_WORKCLOCK(9);
                         WORD_SUB(res, dst, src)                          SUBWORD(res, dst, src)
                         I286_CX--;                          I286_CX--;
                 } while((I286_CX) && (I286_FLAGL & Z_FLAG));                  } while((I286_CX) && (I286_FLAGL & Z_FLAG));
         }          }
Line 275  I286EXT i286c_repne_cmpsw(void) { Line 344  I286EXT i286c_repne_cmpsw(void) {
                         I286_SI += stp;                          I286_SI += stp;
                         I286_DI += stp;                          I286_DI += stp;
                         I286_WORKCLOCK(9);                          I286_WORKCLOCK(9);
                         WORD_SUB(res, dst, src)                          SUBWORD(res, dst, src)
                         I286_CX--;                          I286_CX--;
                 } while((I286_CX) && (!(I286_FLAGL & Z_FLAG)));                  } while((I286_CX) && (!(I286_FLAGL & Z_FLAG)));
         }          }
Line 295  I286EXT i286c_repe_scasb(void) { Line 364  I286EXT i286c_repe_scasb(void) {
                         UINT src = i286_memoryread(I286_DI + ES_BASE);                          UINT src = i286_memoryread(I286_DI + ES_BASE);
                         I286_DI += stp;                          I286_DI += stp;
                         I286_WORKCLOCK(8);                          I286_WORKCLOCK(8);
                         BYTE_SUB(res, dst, src)                          SUBBYTE(res, dst, src)
                         I286_CX--;                          I286_CX--;
                 } while((I286_CX) && (I286_FLAGL & Z_FLAG));                  } while((I286_CX) && (I286_FLAGL & Z_FLAG));
         }          }
Line 312  I286EXT i286c_repne_scasb(void) { Line 381  I286EXT i286c_repne_scasb(void) {
                         UINT src = i286_memoryread(I286_DI + ES_BASE);                          UINT src = i286_memoryread(I286_DI + ES_BASE);
                         I286_DI += stp;                          I286_DI += stp;
                         I286_WORKCLOCK(8);                          I286_WORKCLOCK(8);
                         BYTE_SUB(res, dst, src)                          SUBBYTE(res, dst, src)
                         I286_CX--;                          I286_CX--;
                 } while((I286_CX) && (!(I286_FLAGL & Z_FLAG)));                  } while((I286_CX) && (!(I286_FLAGL & Z_FLAG)));
         }          }
Line 329  I286EXT i286c_repe_scasw(void) { Line 398  I286EXT i286c_repe_scasw(void) {
                         UINT32 src = i286_memoryread_w(I286_DI + ES_BASE);                          UINT32 src = i286_memoryread_w(I286_DI + ES_BASE);
                         I286_DI += stp;                          I286_DI += stp;
                         I286_WORKCLOCK(8);                          I286_WORKCLOCK(8);
                         WORD_SUB(res, dst, src)                          SUBWORD(res, dst, src)
                         I286_CX--;                          I286_CX--;
                 } while((I286_CX) && (I286_FLAGL & Z_FLAG));                  } while((I286_CX) && (I286_FLAGL & Z_FLAG));
         }          }
Line 346  I286EXT i286c_repne_scasw(void) { Line 415  I286EXT i286c_repne_scasw(void) {
                         UINT32 src = i286_memoryread_w(I286_DI + ES_BASE);                          UINT32 src = i286_memoryread_w(I286_DI + ES_BASE);
                         I286_DI += stp;                          I286_DI += stp;
                         I286_WORKCLOCK(8);                          I286_WORKCLOCK(8);
                         WORD_SUB(res, dst, src)                          SUBWORD(res, dst, src)
                         I286_CX--;                          I286_CX--;
                 } while((I286_CX) && (!(I286_FLAGL & Z_FLAG)));                  } while((I286_CX) && (!(I286_FLAGL & Z_FLAG)));
         }          }

Removed from v.1.6  
changed lines
  Added in v.1.12


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