Diff for /np2/i386c/ia32/cpu.c between versions 1.17 and 1.24

version 1.17, 2004/03/30 07:12:03 version 1.24, 2005/03/12 12:32:54
Line 12 Line 12
  * 2. Redistributions in binary form must reproduce the above copyright   * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the   *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.   *    documentation and/or other materials provided with the distribution.
  * 3. The name of the author may not be used to endorse or promote products  
  *    derived from this software without specific prior written permission.  
  *   *
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
Line 34 Line 32
   
 #include "inst_table.h"  #include "inst_table.h"
   
   #if defined(ENABLE_TRAP)
   #include "steptrap.h"
   #endif
   
   
 sigjmp_buf exec_1step_jmpbuf;  sigjmp_buf exec_1step_jmpbuf;
   
Line 55  int cpu_inst_trace = 0; Line 57  int cpu_inst_trace = 0;
 #endif  #endif
   
   
 #define IPTRACE                 (1 << 14)  
   
 #if defined(TRACE) && IPTRACE  
 static  UINT    trpos = 0;  
 static  UINT32  trcs[IPTRACE];  
 static  UINT32  treip[IPTRACE];  
   
 void iptrace_out(void) {  
   
         FILEH   fh;  
         UINT    s;  
         UINT32  cs;  
         UINT32  eip;  
         char    buf[32];  
   
         s = trpos;  
         if (s > IPTRACE) {  
                 s -= IPTRACE;  
         }  
         else {  
                 s = 0;  
         }  
         fh = file_create_c("his.txt");  
         while(s < trpos) {  
                 cs = trcs[s & (IPTRACE - 1)];  
                 eip = treip[s & (IPTRACE - 1)];  
                 s++;  
                 SPRINTF(buf, "%.4x:%.8x\r\n", cs, eip);  
                 file_write(fh, buf, strlen(buf));  
         }  
         file_close(fh);  
 }  
 #endif  
   
   
 void  void
 exec_1step(void)  exec_1step(void)
 {  {
Line 99  exec_1step(void) Line 66  exec_1step(void)
         CPU_PREV_EIP = CPU_EIP;          CPU_PREV_EIP = CPU_EIP;
         CPU_STATSAVE.cpu_inst = CPU_STATSAVE.cpu_inst_default;          CPU_STATSAVE.cpu_inst = CPU_STATSAVE.cpu_inst_default;
   
 #if defined(TRACE) && IPTRACE  #if defined(ENABLE_TRAP)
         trcs[trpos & (IPTRACE - 1)] = CPU_CS;          steptrap(CPU_CS, CPU_EIP);
         treip[trpos & (IPTRACE - 1)] = CPU_EIP;  
         trpos++;  
 #endif  #endif
   
 #if defined(IA32_INSTRUCTION_TRACE)  #if defined(IA32_INSTRUCTION_TRACE)
Line 205  exec_1step(void) Line 170  exec_1step(void)
                 if (CPU_CX != 0) {                  if (CPU_CX != 0) {
                         if (!(insttable_info[op] & REP_CHECKZF)) {                          if (!(insttable_info[op] & REP_CHECKZF)) {
                                 /* rep */                                  /* rep */
                                 do {                                  for (;;) {
                                         (*insttable_1byte[CPU_INST_OP32][op])();                                          (*insttable_1byte[CPU_INST_OP32][op])();
                                 } while (--CPU_CX);                                          if (--CPU_CX == 0)
                                                   break;
                                           if (CPU_REMCLOCK <= 0) {
                                                   CPU_EIP = CPU_PREV_EIP;
                                                   break;
                                           }
                                   }
                         } else if (CPU_INST_REPUSE != 0xf2) {                          } else if (CPU_INST_REPUSE != 0xf2) {
                                 /* repe */                                  /* repe */
                                 do {                                  for (;;) {
                                         (*insttable_1byte[CPU_INST_OP32][op])();                                          (*insttable_1byte[CPU_INST_OP32][op])();
                                 } while (--CPU_CX && (CPU_FLAGL & Z_FLAG));                                          if (--CPU_CX == 0 || CC_NZ)
                                                   break;
                                           if (CPU_REMCLOCK <= 0) {
                                                   CPU_EIP = CPU_PREV_EIP;
                                                   break;
                                           }
                                   }
                         } else {                          } else {
                                 /* repne */                                  /* repne */
                                 do {                                  for (;;) {
                                         (*insttable_1byte[CPU_INST_OP32][op])();                                          (*insttable_1byte[CPU_INST_OP32][op])();
                                 } while (--CPU_CX && !(CPU_FLAGL & Z_FLAG));                                          if (--CPU_CX == 0 || CC_Z)
                                                   break;
                                           if (CPU_REMCLOCK <= 0) {
                                                   CPU_EIP = CPU_PREV_EIP;
                                                   break;
                                           }
                                   }
                         }                          }
                 }                  }
         } else {          } else {
                 if (CPU_ECX != 0) {                  if (CPU_ECX != 0) {
                         if (!(insttable_info[op] & REP_CHECKZF)) {                          if (!(insttable_info[op] & REP_CHECKZF)) {
                                 /* rep */                                  /* rep */
                                 do {                                  for (;;) {
                                         (*insttable_1byte[CPU_INST_OP32][op])();                                          (*insttable_1byte[CPU_INST_OP32][op])();
                                 } while (--CPU_ECX);                                          if (--CPU_ECX == 0)
                                                   break;
                                           if (CPU_REMCLOCK <= 0) {
                                                   CPU_EIP = CPU_PREV_EIP;
                                                   break;
                                           }
                                   }
                         } else if (CPU_INST_REPUSE != 0xf2) {                          } else if (CPU_INST_REPUSE != 0xf2) {
                                 /* repe */                                  /* repe */
                                 do {                                  for (;;) {
                                         (*insttable_1byte[CPU_INST_OP32][op])();                                          (*insttable_1byte[CPU_INST_OP32][op])();
                                 } while (--CPU_ECX && (CPU_FLAGL & Z_FLAG));                                          if (--CPU_ECX == 0 || CC_NZ)
                                                   break;
                                           if (CPU_REMCLOCK <= 0) {
                                                   CPU_EIP = CPU_PREV_EIP;
                                                   break;
                                           }
                                   }
                         } else {                          } else {
                                 /* repne */                                  /* repne */
                                 do {                                  for (;;) {
                                         (*insttable_1byte[CPU_INST_OP32][op])();                                          (*insttable_1byte[CPU_INST_OP32][op])();
                                 } while (--CPU_ECX && !(CPU_FLAGL & Z_FLAG));                                          if (--CPU_ECX == 0 || CC_Z)
                                                   break;
                                           if (CPU_REMCLOCK <= 0) {
                                                   CPU_EIP = CPU_PREV_EIP;
                                                   break;
                                           }
                                   }
                         }                          }
                 }                  }
         }          }

Removed from v.1.17  
changed lines
  Added in v.1.24


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