Diff for /np2/i286x/i286x.cpp between versions 1.21 and 1.28

version 1.21, 2004/02/18 20:11:36 version 1.28, 2005/04/04 11:50:59
Line 11 Line 11
 #include        "i286xea.mcr"  #include        "i286xea.mcr"
 #include        "v30patch.h"  #include        "v30patch.h"
 #include        "bios.h"  #include        "bios.h"
 #include        "dmap.h"  #include        "dmax86.h"
   #if defined(ENABLE_TRAP)
   #include        "steptrap.h"
   #include        "inttrap.h"
   #endif
   
   
         I286CORE        i286core;          I286CORE        i286core;
   
 const BYTE iflags[256] = {                                      // Z_FLAG, S_FLAG, P_FLAG  const UINT8 iflags[256] = {                                     // Z_FLAG, S_FLAG, P_FLAG
                         0x44, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00,                          0x44, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00,
                         0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04,                          0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04,
                         0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04,                          0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04,
Line 95  void i286x_setextsize(UINT32 size) { Line 99  void i286x_setextsize(UINT32 size) {
                         CPU_EXTMEM = NULL;                          CPU_EXTMEM = NULL;
                 }                  }
                 if (size) {                  if (size) {
                         CPU_EXTMEM = (BYTE *)_MALLOC(size + 16, "EXTMEM");                          CPU_EXTMEM = (UINT8 *)_MALLOC(size + 16, "EXTMEM");
                         if (CPU_EXTMEM == NULL) {                          if (CPU_EXTMEM == NULL) {
                                 size = 0;                                  size = 0;
                         }                          }
Line 110  void i286x_setextsize(UINT32 size) { Line 114  void i286x_setextsize(UINT32 size) {
   
 void i286x_setemm(UINT frame, UINT32 addr) {  void i286x_setemm(UINT frame, UINT32 addr) {
   
         BYTE    *ptr;          UINT8   *ptr;
   
         frame &= 3;          frame &= 3;
         if (addr < USE_HIMEM) {          if (addr < USE_HIMEM) {
Line 138  LABEL void i286x_resetprefetch(void) { Line 142  LABEL void i286x_resetprefetch(void) {
         }          }
 }  }
   
 LABEL void __fastcall i286x_interrupt(BYTE vect) {  LABEL void __fastcall i286x_interrupt(UINT8 vect) {
   
         __asm {          __asm {
                                 pushad                                  pushad
Line 264  LABEL void i286x(void) { Line 268  LABEL void i286x(void) {
                                 cmp             dmac.working, 0                                  cmp             dmac.working, 0
                                 jne             short i286_dma_mnlp                                  jne             short i286_dma_mnlp
   
 i286_mnlp:              movzx   eax, bl  i286_mnlp:
   #if defined(ENABLE_TRAP)
                                   mov             edx, esi
                                   movzx   ecx, I286_CS
                                   call    steptrap
   #endif
                                   movzx   eax, bl
                                 call    i286op[eax*4]                                  call    i286op[eax*4]
                                 cmp             I286_REMCLOCK, 0                                  cmp             I286_REMCLOCK, 0
                                 jg              i286_mnlp                                  jg              i286_mnlp
Line 274  i286_mnlp:  movzx eax, bl Line 284  i286_mnlp:  movzx eax, bl
                                 ret                                  ret
   
                                 align   16                                  align   16
 i286_dma_mnlp:  movzx   eax, bl  i286_dma_mnlp:
   #if defined(ENABLE_TRAP)
                                   mov             edx, esi
                                   movzx   ecx, I286_CS
                                   call    steptrap
   #endif
                                   movzx   eax, bl
                                 call    i286op[eax*4]                                  call    i286op[eax*4]
                                 call    dmap_i286                                  call    dmax86
                                 cmp             I286_REMCLOCK, 0                                  cmp             I286_REMCLOCK, 0
                                 jg              i286_dma_mnlp                                  jg              i286_dma_mnlp
                                 mov             dword ptr (i286core.s.prefetchque), ebx                                  mov             dword ptr (i286core.s.prefetchque), ebx
Line 285  i286_dma_mnlp: movzx eax, bl Line 301  i286_dma_mnlp: movzx eax, bl
                                 ret                                  ret
   
                                 align   16                                  align   16
 i286_trapping:  movzx   eax, bl  i286_trapping:
   #if defined(ENABLE_TRAP)
                                   mov             edx, esi
                                   movzx   ecx, I286_CS
                                   call    steptrap
   #endif
                                   movzx   eax, bl
                                 call    i286op[eax*4]                                  call    i286op[eax*4]
                                 cmp             I286_TRAP, 0                                  cmp             I286_TRAP, 0
                                 je              i286notrap                                  je              i286notrap
Line 307  LABEL void i286x_step(void) { Line 329  LABEL void i286x_step(void) {
                                 mov             ebx, dword ptr (i286core.s.prefetchque)                                  mov             ebx, dword ptr (i286core.s.prefetchque)
                                 movzx   esi, I286_IP                                  movzx   esi, I286_IP
   
   #if defined(ENABLE_TRAP)
                                   mov             edx, esi
                                   movzx   ecx, I286_CS
                                   call    steptrap
   #endif
   
                                 movzx   eax, bl                                  movzx   eax, bl
                                 call    i286op[eax*4]                                  call    i286op[eax*4]
   
Line 318  nexts: Line 346  nexts:
                                 mov             dword ptr (i286core.s.prefetchque), ebx                                  mov             dword ptr (i286core.s.prefetchque), ebx
                                 mov             I286_IP, si                                  mov             I286_IP, si
   
                                 call    dmap_i286                                  call    dmax86
                                 popad                                  popad
                                 ret                                  ret
                 }                  }
Line 343  LABEL void removeprefix(void) { Line 371  LABEL void removeprefix(void) {
 I286 _reserved(void) {  I286 _reserved(void) {
   
                 __asm {                  __asm {
                                 inc             si                                              // 01/08/31  //                              inc             si                                              // 01/08/31
                                 INT_NUM(6)                                  INT_NUM(6)
                 }                  }
 }  }
Line 1695  I286 _arpl(void) { Line 1723  I286 _arpl(void) {
                                 xor             eax, eax                                  xor             eax, eax
                                 cmp             bh, 0c0h                                  cmp             bh, 0c0h
                                 setc    al                                  setc    al
                                 add             si, ax                  //              add             si, ax
                                 add             eax, 10                                  add             eax, 10
                                 I286CLOCK(eax)                                  I286CLOCK(eax)
                                 INT_NUM(6)                                  INT_NUM(6)
Line 3431  I286 mov_ea8_data8(void) {      // C6: m Line 3459  I286 mov_ea8_data8(void) {      // C6: m
                                 bt              bp, 2                                  bt              bp, 2
                                 rcl             ebp, 1                                  rcl             ebp, 1
                                 and             ebp, 7                                  and             ebp, 7
                                 GET_NEXTPRE2                                  GET_NEXTPRE3
                                 mov             byte ptr I286_REG[ebp], dh                                  mov             byte ptr I286_REG[ebp], dh
                                 ret                                  ret
                                 align   16                                  align   16
Line 3487  I286 _enter(void) {        // C8: enter  Line 3515  I286 _enter(void) {        // C8: enter 
                                 je              enter0                                  je              enter0
                                 dec             eax                                  dec             eax
                                 je              enter1                                  je              enter1
                                 lea             ecx, [eax*4 + 12]                                  lea             ecx, [eax*4 + 12 + 4]
                                 I286CLOCK(ecx)                                  I286CLOCK(ecx)
                                 push    ebx                                  push    ebx
                                 movzx   ebx, I286_BP                                  movzx   ebx, I286_BP
Line 3635  I286 int_data8(void) {       // CD: int  Line 3663  I286 int_data8(void) {       // CD: int 
                                 lea             ecx, [edi + ebp]                                  lea             ecx, [edi + ebp]
                                 mov             dx, I286_CS                                  mov             dx, I286_CS
                                 call    i286_memorywrite_w                                  call    i286_memorywrite_w
   #if defined(ENABLE_TRAP)
                                   movzx   eax, bh
                                   push    eax
                                   lea             edx, [esi - 1]
                                   movzx   ecx, I286_CS
                                   call    softinttrap
   #endif
                                 movzx   eax, bh                                  movzx   eax, bh
                                 sub             bp, 2                                  sub             bp, 2
                                 mov             I286_SP, bp                                  mov             I286_SP, bp
Line 3660  I286 _into(void) {        // CE: into Line 3695  I286 _into(void) {        // CE: into
                                 GET_NEXTPRE1                                  GET_NEXTPRE1
                                 ret                                  ret
   
                 intovf: INT_NUM(4)                  intovf: inc             si                                                                                      // ver0.80
                                   INT_NUM(4)
                 }                  }
 }  }
   
Line 4348  I286 _ope0xff(void) {       // FF:  Line 4384  I286 _ope0xff(void) {       // FF: 
   
 // -------------------------------------------------------------------------  // -------------------------------------------------------------------------
   
 void (*i286op[])(void) = {  const I286TBL i286op[256] = {
                         add_ea_r8,                                              // 00:  add             EA, REG8                          add_ea_r8,                                              // 00:  add             EA, REG8
                         add_ea_r16,                                             // 01:  add             EA, REG16                          add_ea_r16,                                             // 01:  add             EA, REG16
                         add_r8_ea,                                              // 02:  add             REG8, EA                          add_r8_ea,                                              // 02:  add             REG8, EA
Line 4672  I286 repe_segprefix_ds(void) { Line 4708  I286 repe_segprefix_ds(void) {
                 }                  }
 }  }
   
 void (*i286op_repe[])(void) = {  const I286TBL i286op_repe[256] = {
                         add_ea_r8,                                              // 00:  add             EA, REG8                          add_ea_r8,                                              // 00:  add             EA, REG8
                         add_ea_r16,                                             // 01:  add             EA, REG16                          add_ea_r16,                                             // 01:  add             EA, REG16
                         add_r8_ea,                                              // 02:  add             REG8, EA                          add_r8_ea,                                              // 02:  add             REG8, EA
Line 4996  I286 repne_segprefix_ds(void) { Line 5032  I286 repne_segprefix_ds(void) {
                 }                  }
 }  }
   
 void (*i286op_repne[])(void) = {  const I286TBL i286op_repne[256] = {
                         add_ea_r8,                                              // 00:  add             EA, REG8                          add_ea_r8,                                              // 00:  add             EA, REG8
                         add_ea_r16,                                             // 01:  add             EA, REG16                          add_ea_r16,                                             // 01:  add             EA, REG16
                         add_r8_ea,                                              // 02:  add             REG8, EA                          add_r8_ea,                                              // 02:  add             REG8, EA

Removed from v.1.21  
changed lines
  Added in v.1.28


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