Diff for /np2/i286c/i286c_rp.c between versions 1.5 and 1.8

version 1.5, 2003/10/19 14:56:15 version 1.8, 2003/12/01 10:45:46
Line 13  I286EXT i286c_rep_insb(void) { Line 13  I286EXT i286c_rep_insb(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIR;                  int stp = STRING_DIR;
                 do {                  do {
                         BYTE dat = iocore_inp8(I286_DX);                          REG8 dat = iocore_inp8(I286_DX);
                         i286_memorywrite(I286_DI + ES_BASE, dat);                          i286_memorywrite(I286_DI + ES_BASE, dat);
                         I286_DI += stp;                          I286_DI += stp;
                         I286_WORKCLOCK(4);                          I286_WORKCLOCK(4);
Line 27  I286EXT i286c_rep_insw(void) { Line 27  I286EXT i286c_rep_insw(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIRx2;                  int stp = STRING_DIRx2;
                 do {                  do {
                         UINT16 dat = iocore_inp16(I286_DX);                          REG16 dat = iocore_inp16(I286_DX);
                         i286_memorywrite_w(I286_DI + ES_BASE, dat);                          i286_memorywrite_w(I286_DI + ES_BASE, dat);
                         I286_DI += stp;                          I286_DI += stp;
                         I286_WORKCLOCK(4);                          I286_WORKCLOCK(4);
Line 43  I286EXT i286c_rep_outsb(void) { Line 43  I286EXT i286c_rep_outsb(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIR;                  int stp = STRING_DIR;
                 do {                  do {
                         BYTE 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, dat);                          iocore_out8(I286_DX, (BYTE)dat);
                         I286_WORKCLOCK(4);                          I286_WORKCLOCK(4);
                 } while(--I286_CX);                  } while(--I286_CX);
         }          }
Line 57  I286EXT i286c_rep_outsw(void) { Line 57  I286EXT i286c_rep_outsw(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIRx2;                  int stp = STRING_DIRx2;
                 do {                  do {
                         UINT16 dat = i286_memoryread_w(I286_SI + DS_FIX);                          REG16 dat = i286_memoryread_w(I286_SI + DS_FIX);
                         I286_SI += stp;                          I286_SI += stp;
                         iocore_out16(I286_DX, dat);                          iocore_out16(I286_DX, (UINT16)dat);
                         I286_WORKCLOCK(4);                          I286_WORKCLOCK(4);
                 } while(--I286_CX);                  } while(--I286_CX);
         }          }
 }  }
   
   
 // ---------------------------------------------------------------------- movs  // ---------------------------------------------------------------------- movs
   
 #if 1  
 I286EXT i286c_rep_movsb(void) {  I286EXT i286c_rep_movsb(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIR;                  int stp = STRING_DIR;
                 while(1) {                  while(1) {
                         BYTE dat = i286_memoryread(I286_SI + DS_FIX);                          REG8 dat = i286_memoryread(I286_SI + DS_FIX);
                         i286_memorywrite(I286_DI + ES_BASE, dat);                          i286_memorywrite(I286_DI + ES_BASE, dat);
                         I286_SI += stp;                          I286_SI += stp;
                         I286_DI += stp;                          I286_DI += stp;
Line 86  I286EXT i286c_rep_movsb(void) { Line 86  I286EXT i286c_rep_movsb(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= i286core.s.prefix + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
Line 97  I286EXT i286c_rep_movsw(void) { Line 97  I286EXT i286c_rep_movsw(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIRx2;                  int stp = STRING_DIRx2;
                 while(1) {                  while(1) {
                         UINT16 dat = i286_memoryread_w(I286_SI + DS_FIX);                          REG16 dat = i286_memoryread_w(I286_SI + DS_FIX);
                         i286_memorywrite_w(I286_DI + ES_BASE, dat);                          i286_memorywrite_w(I286_DI + ES_BASE, dat);
                         I286_SI += stp;                          I286_SI += stp;
                         I286_DI += stp;                          I286_DI += stp;
Line 109  I286EXT i286c_rep_movsw(void) { Line 109  I286EXT i286c_rep_movsw(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= i286core.s.prefix + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
         }          }
 }  }
 #else  
 I286EXT i286c_rep_movsb(void) {  
   
         I286_WORKCLOCK(5);  
         if (I286_CX) {  
                 SINT16 stp = STRING_DIR;  
                 do {  
                         BYTE dat = i286_memoryread(I286_SI + DS_FIX);  
                         i286_memorywrite(I286_DI + ES_BASE, dat);  
                         I286_SI += stp;  
                         I286_DI += stp;  
                         I286_WORKCLOCK(4);  
                 } while(--I286_CX);  
         }  
 }  
   
 I286EXT i286c_rep_movsw(void) {  
   
         I286_WORKCLOCK(5);  
         if (I286_CX) {  
                 SINT16 stp = STRING_DIRx2;  
                 do {  
                         UINT16 dat = i286_memoryread_w(I286_SI + DS_FIX);  
                         i286_memorywrite_w(I286_DI + ES_BASE, dat);  
                         I286_SI += stp;  
                         I286_DI += stp;  
                         I286_WORKCLOCK(4);  
                 } while(--I286_CX);  
         }  
 }  
 #endif  
   
 // ---------------------------------------------------------------------- lods  // ---------------------------------------------------------------------- lods
   
 #if 1  
 I286EXT i286c_rep_lodsb(void) {  I286EXT i286c_rep_lodsb(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIR;                  int stp = STRING_DIR;
                 while(1) {                  while(1) {
                         I286_AL = i286_memoryread(I286_SI + DS_FIX);                          I286_AL = i286_memoryread(I286_SI + DS_FIX);
                         I286_SI += stp;                          I286_SI += stp;
Line 164  I286EXT i286c_rep_lodsb(void) { Line 133  I286EXT i286c_rep_lodsb(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= i286core.s.prefix + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
Line 175  I286EXT i286c_rep_lodsw(void) { Line 144  I286EXT i286c_rep_lodsw(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIRx2;                  int stp = STRING_DIRx2;
                 while(1) {                  while(1) {
                         I286_AX = i286_memoryread_w(I286_SI + DS_FIX);                          I286_AX = i286_memoryread_w(I286_SI + DS_FIX);
                         I286_SI += stp;                          I286_SI += stp;
Line 185  I286EXT i286c_rep_lodsw(void) { Line 154  I286EXT i286c_rep_lodsw(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= i286core.s.prefix + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
         }          }
 }  }
 #else  
 I286EXT i286c_rep_lodsb(void) {  
   
         I286_WORKCLOCK(5);  
         if (I286_CX) {  
                 SINT16 stp = STRING_DIR;  
                 do {  
                         I286_AL = i286_memoryread(I286_SI + DS_FIX);  
                         I286_SI += stp;  
                         I286_WORKCLOCK(4);  
                 } while(--I286_CX);  
         }  
 }  
   
 I286EXT i286c_rep_lodsw(void) {  
   
         I286_WORKCLOCK(5);  
         if (I286_CX) {  
                 SINT16 stp = STRING_DIRx2;  
                 do {  
                         I286_AX = i286_memoryread_w(I286_SI + DS_FIX);  
                         I286_SI += stp;  
                         I286_WORKCLOCK(4);  
                 } while(--I286_CX);  
         }  
 }  
 #endif  
   
 // ---------------------------------------------------------------------- stos  // ---------------------------------------------------------------------- stos
   
 #if 1  
 I286EXT i286c_rep_stosb(void) {  I286EXT i286c_rep_stosb(void) {
   
         I286_WORKCLOCK(4);          I286_WORKCLOCK(4);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIR;                  int stp = STRING_DIR;
                 while(1) {                  while(1) {
                         i286_memorywrite(I286_DI + ES_BASE, I286_AL);                          i286_memorywrite(I286_DI + ES_BASE, I286_AL);
                         I286_DI += stp;                          I286_DI += stp;
Line 236  I286EXT i286c_rep_stosb(void) { Line 178  I286EXT i286c_rep_stosb(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= i286core.s.prefix + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
Line 247  I286EXT i286c_rep_stosw(void) { Line 189  I286EXT i286c_rep_stosw(void) {
   
         I286_WORKCLOCK(4);          I286_WORKCLOCK(4);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIRx2;                  int stp = STRING_DIRx2;
                 while(1) {                  while(1) {
                         i286_memorywrite_w(I286_DI + ES_BASE, I286_AX);                          i286_memorywrite_w(I286_DI + ES_BASE, I286_AX);
                         I286_DI += stp;                          I286_DI += stp;
Line 257  I286EXT i286c_rep_stosw(void) { Line 199  I286EXT i286c_rep_stosw(void) {
                                 break;                                  break;
                         }                          }
                         if (I286_REMCLOCK <= 0) {                          if (I286_REMCLOCK <= 0) {
                                 I286_IP -= i286reg.prefix + 1;                                  I286_IP -= i286core.s.prefix + 1;
                                 break;                                  break;
                         }                          }
                 }                  }
         }          }
 }  }
 #else  
 I286EXT i286c_rep_stosb(void) {  
   
         I286_WORKCLOCK(4);  
         if (I286_CX) {  
                 SINT16 stp = STRING_DIR;  
                 do {  
                         i286_memorywrite(I286_DI + ES_BASE, I286_AL);  
                         I286_DI += stp;  
                         I286_WORKCLOCK(3);  
                 } while(--I286_CX);  
         }  
 }  
   
 I286EXT i286c_rep_stosw(void) {  
   
         I286_WORKCLOCK(4);  
         if (I286_CX) {  
                 SINT16 stp = STRING_DIRx2;  
                 do {  
                         i286_memorywrite_w(I286_DI + ES_BASE, I286_AX);  
                         I286_DI += stp;  
                         I286_WORKCLOCK(3);  
                 } while(--I286_CX);  
         }  
 }  
 #endif  
   
 // ---------------------------------------------------------------------- cmps  // ---------------------------------------------------------------------- cmps
   
Line 297  I286EXT i286c_repe_cmpsb(void) { Line 213  I286EXT i286c_repe_cmpsb(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIR;                  int stp = STRING_DIR;
                 do {                  do {
                         UINT res;                          UINT res;
                         UINT dst = i286_memoryread(I286_SI + DS_FIX);                          UINT dst = i286_memoryread(I286_SI + DS_FIX);
Line 305  I286EXT i286c_repe_cmpsb(void) { Line 221  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 315  I286EXT i286c_repne_cmpsb(void) { Line 231  I286EXT i286c_repne_cmpsb(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIR;                  int stp = STRING_DIR;
                 do {                  do {
                         UINT res;                          UINT res;
                         UINT dst = i286_memoryread(I286_SI + DS_FIX);                          UINT dst = i286_memoryread(I286_SI + DS_FIX);
Line 323  I286EXT i286c_repne_cmpsb(void) { Line 239  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 333  I286EXT i286c_repe_cmpsw(void) { Line 249  I286EXT i286c_repe_cmpsw(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIRx2;                  int stp = STRING_DIRx2;
                 do {                  do {
                         UINT32 res;                          UINT32 res;
                         UINT32 dst = i286_memoryread_w(I286_SI + DS_FIX);                          UINT32 dst = i286_memoryread_w(I286_SI + DS_FIX);
Line 341  I286EXT i286c_repe_cmpsw(void) { Line 257  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 351  I286EXT i286c_repne_cmpsw(void) { Line 267  I286EXT i286c_repne_cmpsw(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIRx2;                  int stp = STRING_DIRx2;
                 do {                  do {
                         UINT32 res;                          UINT32 res;
                         UINT32 dst = i286_memoryread_w(I286_SI + DS_FIX);                          UINT32 dst = i286_memoryread_w(I286_SI + DS_FIX);
Line 359  I286EXT i286c_repne_cmpsw(void) { Line 275  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)));
         }          }
 }  }
   
   
 // ---------------------------------------------------------------------- scas  // ---------------------------------------------------------------------- scas
   
 I286EXT i286c_repe_scasb(void) {  I286EXT i286c_repe_scasb(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIR;                  int stp = STRING_DIR;
                 UINT dst = I286_AL;                  UINT dst = I286_AL;
                 do {                  do {
                         UINT res;                          UINT res;
                         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 388  I286EXT i286c_repne_scasb(void) { Line 305  I286EXT i286c_repne_scasb(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIR;                  int stp = STRING_DIR;
                 UINT dst = I286_AL;                  UINT dst = I286_AL;
                 do {                  do {
                         UINT res;                          UINT res;
                         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 405  I286EXT i286c_repe_scasw(void) { Line 322  I286EXT i286c_repe_scasw(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIRx2;                  int stp = STRING_DIRx2;
                 UINT32 dst = I286_AX;                  UINT32 dst = I286_AX;
                 do {                  do {
                         UINT32 res;                          UINT32 res;
                         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 422  I286EXT i286c_repne_scasw(void) { Line 339  I286EXT i286c_repne_scasw(void) {
   
         I286_WORKCLOCK(5);          I286_WORKCLOCK(5);
         if (I286_CX) {          if (I286_CX) {
                 SINT16 stp = STRING_DIRx2;                  int stp = STRING_DIRx2;
                 UINT32 dst = I286_AX;                  UINT32 dst = I286_AX;
                 do {                  do {
                         UINT32 res;                          UINT32 res;
                         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.5  
changed lines
  Added in v.1.8


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