Diff for /np2/i286x/i286x.cpp between versions 1.16 and 1.24

version 1.16, 2004/01/25 05:41:29 version 1.24, 2005/02/12 12:13:58
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"
   
   
         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 90  void i286x_shut(void) { Line 90  void i286x_shut(void) {
 void i286x_setextsize(UINT32 size) {  void i286x_setextsize(UINT32 size) {
   
         if (CPU_EXTMEMSIZE != size) {          if (CPU_EXTMEMSIZE != size) {
                 _MFREE(CPU_EXTMEM);                  if (CPU_EXTMEM) {
                           _MFREE(CPU_EXTMEM);
                           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 107  void i286x_setextsize(UINT32 size) { Line 110  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 135  LABEL void i286x_resetprefetch(void) { Line 138  LABEL void i286x_resetprefetch(void) {
         }          }
 }  }
   
 LABEL void __fastcall i286x_interrupt(BYTE vect) {  LABEL void __fastcall i286x_interrupt(UINT8 vect) {
   
         __asm {          __asm {
                                 pushad                                  pushad
Line 273  i286_mnlp:  movzx eax, bl Line 276  i286_mnlp:  movzx eax, bl
                                 align   16                                  align   16
 i286_dma_mnlp:  movzx   eax, bl  i286_dma_mnlp:  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 315  nexts: Line 318  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 340  LABEL void removeprefix(void) { Line 343  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 445  I286 pop_es(void) {        // 07: pop es Line 448  I286 pop_es(void) {        // 07: pop es
                                 I286CLOCK(5)                                  I286CLOCK(5)
                                 REGPOP(I286_ES)                                  REGPOP(I286_ES)
                                 movzx   eax, ax                                  movzx   eax, ax
                                 test    I286_MSW, MSW_PE                                  test    byte ptr (I286_MSW), MSW_PE
                                 jne             short pop_es_pe                                  jne             short pop_es_pe
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
 pop_es_base:    mov             ES_BASE, eax  pop_es_base:    mov             ES_BASE, eax
Line 658  I286 pop_ss(void) {        // 17: pop ss Line 661  I286 pop_ss(void) {        // 17: pop ss
                                 I286CLOCK(5)                                  I286CLOCK(5)
                                 REGPOP(I286_SS)                                  REGPOP(I286_SS)
                                 movzx   eax, ax                                  movzx   eax, ax
                                 test    I286_MSW, MSW_PE                                  test    byte ptr (I286_MSW), MSW_PE
                                 jne             short pop_ss_pe                                  jne             short pop_ss_pe
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
 pop_ss_base:    mov             SS_BASE, eax  pop_ss_base:    mov             SS_BASE, eax
Line 787  I286 pop_ds(void) {        // 1F: pop ds Line 790  I286 pop_ds(void) {        // 1F: pop ds
                                 I286CLOCK(5)                                  I286CLOCK(5)
                                 REGPOP(I286_DS)                                  REGPOP(I286_DS)
                                 movzx   eax, ax                                  movzx   eax, ax
                                 test    I286_MSW, MSW_PE                                  test    byte ptr (I286_MSW), MSW_PE
                                 jne             short pop_ds_pe                                  jne             short pop_ds_pe
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
 pop_ds_base:    mov             DS_BASE, eax  pop_ds_base:    mov             DS_BASE, eax
Line 1692  I286 _arpl(void) { Line 1695  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 2495  I286 mov_seg_ea(void) {       // 8E: mov Line 2498  I286 mov_seg_ea(void) {       // 8E: mov
                 segset:                  segset:
                                 mov             word ptr I286_SEGREG[ebp], ax                                  mov             word ptr I286_SEGREG[ebp], ax
                                 movzx   eax, ax                                  movzx   eax, ax
                                 test    I286_MSW, MSW_PE                                  test    byte ptr (I286_MSW), MSW_PE
                                 jne             short mov_seg_pe                                  jne             short mov_seg_pe
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
 mov_seg_base:   mov             SEG_BASE[ebp*2], eax  mov_seg_base:   mov             SEG_BASE[ebp*2], eax
Line 2711  I286 call_far(void) {       // 9A: call  Line 2714  I286 call_far(void) {       // 9A: call 
                                 mov             si, bx                                  mov             si, bx
                                 shr             ebx, 16                                  shr             ebx, 16
                                 mov             I286_CS, bx                                  mov             I286_CS, bx
                                   test    byte ptr (I286_MSW), MSW_PE
                                   jne             short call_far_pe
                                 shl             ebx, 4                                  shl             ebx, 4
                                 mov             CS_BASE, ebx                                  mov             CS_BASE, ebx
                                 RESET_XPREFETCH  call_far_base:  RESET_XPREFETCH
                                 ret                                  ret
   
   call_far_pe:    mov             eax, ebx
                                   call    i286x_selector
                                   mov             CS_BASE, eax
                                   jmp             short call_far_base
                 }                  }
 }  }
   
Line 2758  I286 _popf(void) {        // 9D: popf Line 2768  I286 _popf(void) {        // 9D: popf
                                 je              irqcheck                                // fast_intr                                  je              irqcheck                                // fast_intr
                                 test    ah, 2                                  test    ah, 2
                                 je              nextop                                  je              nextop
                                 cmp             pic.ext_irq, 0                                  mov             al, pic.pi[0 * (type _PICITEM)].imr
                                 jne             nextop                                  mov             ah, pic.pi[1 * (type _PICITEM)].imr
                                 mov             al, pic.pi[0].imr  
                                 mov             ah, pic.pi[1].imr  
                                 not             ax                                  not             ax
                                 test    al, pic.pi[0].irr                                  test    al, pic.pi[0 * (type _PICITEM)].irr
                                 jne             irqcheck                                  jne             irqcheck
                                 test    ah, pic.pi[1].irr                                  test    ah, pic.pi[1 * (type _PICITEM)].irr
                                 jne             irqcheck                                  jne             irqcheck
 nextop:                 ret  nextop:                 ret
   
Line 2866  I286 _movsb(void) {        // A4: movsb Line 2874  I286 _movsb(void) {        // A4: movsb
                                 add             ecx, DS_FIX                                  add             ecx, DS_FIX
                                 call    i286_memoryread                                  call    i286_memoryread
                                 mov             dl, al                                  mov             dl, al
                                 movzx   ecx, I286_ES                                  movzx   ecx, I286_DI
                                 shl             ecx, 4                                  add             ecx, ES_BASE
                                 movzx   eax, I286_DI  
                                 add             ecx, eax  
                                 STRING_DIR                                  STRING_DIR
                                 add             I286_SI, ax                                  add             I286_SI, ax
                                 add             I286_DI, ax                                  add             I286_DI, ax
Line 2886  I286 _movsw(void) {        // A5: movsw Line 2892  I286 _movsw(void) {        // A5: movsw
                                 add             ecx, DS_FIX                                  add             ecx, DS_FIX
                                 call    i286_memoryread_w                                  call    i286_memoryread_w
                                 mov             dx, ax                                  mov             dx, ax
                                 movzx   ecx, I286_ES                                  movzx   ecx, I286_DI
                                 shl             ecx, 4                                  add             ecx, ES_BASE
                                 movzx   eax, I286_DI  
                                 add             ecx, eax  
                                 STRING_DIRx2                                  STRING_DIRx2
                                 add             I286_SI, ax                                  add             I286_SI, ax
                                 add             I286_DI, ax                                  add             I286_DI, ax
Line 2906  I286 _cmpsb(void) {        // A6: cmpsb Line 2910  I286 _cmpsb(void) {        // A6: cmpsb
                                 add             ecx, DS_FIX                                  add             ecx, DS_FIX
                                 call    i286_memoryread                                  call    i286_memoryread
                                 mov             dl, al                                  mov             dl, al
                                 movzx   ecx, I286_ES                                  movzx   ecx, I286_DI
                                 shl             ecx, 4                                  add             ecx, ES_BASE
                                 movzx   eax, I286_DI  
                                 add             ecx, eax  
                                 call    i286_memoryread                                  call    i286_memoryread
                                 cmp             dl, al                                  cmp             dl, al
                                 FLAG_STORE_OF                                  FLAG_STORE_OF
Line 2929  I286 _cmpsw(void) {        // A7: cmpsw Line 2931  I286 _cmpsw(void) {        // A7: cmpsw
                                 add             ecx, DS_FIX                                  add             ecx, DS_FIX
                                 call    i286_memoryread_w                                  call    i286_memoryread_w
                                 mov             edx, eax                                  mov             edx, eax
                                 movzx   ecx, I286_ES                                  movzx   ecx, I286_DI
                                 shl             ecx, 4                                  add             ecx, ES_BASE
                                 movzx   eax, I286_DI  
                                 add             ecx, eax  
                                 call    i286_memoryread_w                                  call    i286_memoryread_w
                                 cmp             dx, ax                                  cmp             dx, ax
                                 FLAG_STORE_OF                                  FLAG_STORE_OF
Line 2971  I286 _stosb(void) {        // AA: stosb Line 2971  I286 _stosb(void) {        // AA: stosb
                 __asm {                  __asm {
                                 GET_NEXTPRE1                                  GET_NEXTPRE1
                                 I286CLOCK(3)                                  I286CLOCK(3)
                                 movzx   ecx, I286_ES                                  movzx   ecx, I286_DI
                                 shl             ecx, 4                                  add             ecx, ES_BASE
                                 movzx   eax, I286_DI  
                                 add             ecx, eax  
                                 STRING_DIR                                  STRING_DIR
                                 add             I286_DI, ax                                  add             I286_DI, ax
                                 mov             dl, I286_AL                                  mov             dl, I286_AL
Line 2987  I286 _stosw(void) {        // AB: stosw Line 2985  I286 _stosw(void) {        // AB: stosw
                 __asm {                  __asm {
                                 GET_NEXTPRE1                                  GET_NEXTPRE1
                                 I286CLOCK(3)                                  I286CLOCK(3)
                                 movzx   ecx, I286_ES                                  movzx   ecx, I286_DI
                                 shl             ecx, 4                                  add             ecx, ES_BASE
                                 movzx   eax, I286_DI  
                                 add             ecx, eax  
                                 STRING_DIRx2                                  STRING_DIRx2
                                 add             I286_DI, ax                                  add             I286_DI, ax
                                 mov             dx, I286_AX                                  mov             dx, I286_AX
Line 3033  I286 _scasb(void) {        // AE: scasb Line 3029  I286 _scasb(void) {        // AE: scasb
                 __asm {                  __asm {
                                 GET_NEXTPRE1                                  GET_NEXTPRE1
                                 I286CLOCK(7)                                  I286CLOCK(7)
                                 movzx   ecx, I286_ES                                  movzx   ecx, I286_DI
                                 shl             ecx, 4                                  add             ecx, ES_BASE
                                 movzx   eax, I286_DI  
                                 add             ecx, eax  
                                 call    i286_memoryread                                  call    i286_memoryread
                                 cmp             I286_AL, al                                  cmp             I286_AL, al
                                 FLAG_STORE_OF                                  FLAG_STORE_OF
Line 3051  I286 _scasw(void) {        // AF: scasw Line 3045  I286 _scasw(void) {        // AF: scasw
                 __asm {                  __asm {
                                 GET_NEXTPRE1                                  GET_NEXTPRE1
                                 I286CLOCK(7)                                  I286CLOCK(7)
                                 movzx   ecx, I286_ES                                  movzx   ecx, I286_DI
                                 shl             ecx, 4                                  add             ecx, ES_BASE
                                 movzx   eax, I286_DI  
                                 add             ecx, eax  
                                 call    i286_memoryread_w                                  call    i286_memoryread_w
                                 cmp             I286_AX, ax                                  cmp             I286_AX, ax
                                 FLAG_STORE_OF                                  FLAG_STORE_OF
Line 3378  I286 les_r16_ea(void) {       // C4: les Line 3370  I286 les_r16_ea(void) {       // C4: les
                                 lea             ecx, [edi + ebp]                                  lea             ecx, [edi + ebp]
                                 call    i286_memoryread_w                                  call    i286_memoryread_w
                                 mov             I286_ES, ax                                  mov             I286_ES, ax
                                 and             eax, 0000ffffh                                  movzx   eax, ax
                                   test    byte ptr (I286_MSW), MSW_PE
                                   jne             short les_pe
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
                                 mov             ES_BASE, eax  les_base:               mov             ES_BASE, eax
                                 ret                                  ret
                                 align   4  
                 src_register:  les_pe:                 push    offset les_base
                                 INT_NUM(6)                                  jmp             i286x_selector
   
   src_register:   INT_NUM(6)
                 }                  }
 }  }
   
Line 3407  I286 lds_r16_ea(void) {       // C5: lds Line 3403  I286 lds_r16_ea(void) {       // C5: lds
                                 lea             ecx, [edi + ebp]                                  lea             ecx, [edi + ebp]
                                 call    i286_memoryread_w                                  call    i286_memoryread_w
                                 mov             I286_DS, ax                                  mov             I286_DS, ax
                                 and             eax, 0000ffffh                                  movzx   eax, ax
                                   test    byte ptr (I286_MSW), MSW_PE
                                   jne             short lds_pe
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
                                 mov             DS_BASE, eax  lds_base:               mov             DS_BASE, eax
                                 mov             DS_FIX, eax                                  mov             DS_FIX, eax
                                 ret                                  ret
                                 align   16  
                 src_register:  lds_pe:                 push    offset lds_base
                                 INT_NUM(6)                                  jmp             i286x_selector
   
   src_register:   INT_NUM(6)
   
                 }                  }
 }  }
   
Line 3566  I286 ret_far_data16(void) {      // CA:  Line 3567  I286 ret_far_data16(void) {      // CA: 
                                 lea             ecx, [edi + ebp]                                  lea             ecx, [edi + ebp]
                                 call    i286_memoryread_w                                  call    i286_memoryread_w
                                 mov             I286_CS, ax                                  mov             I286_CS, ax
                                 and             eax, 0000ffffh                                  movzx   eax, ax
                                   test    byte ptr (I286_MSW), MSW_PE
                                   jne             short ret_far16_pe
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
                                 mov             CS_BASE, eax  ret_far16_base: mov             CS_BASE, eax
                                 add             I286_SP, 4                                  add             I286_SP, 4
                                 RESET_XPREFETCH                                  RESET_XPREFETCH
                                 ret                                  ret
   
   ret_far16_pe:   push    offset ret_far16_base
                                   jmp             i286x_selector
                 }                  }
 }  }
   
Line 3589  I286 ret_far(void) {       // CB: ret fa Line 3595  I286 ret_far(void) {       // CB: ret fa
                                 add             bx, 2                                  add             bx, 2
                                 call    i286_memoryread_w                                  call    i286_memoryread_w
                                 mov             I286_CS, ax                                  mov             I286_CS, ax
                                 and             eax, 0000ffffh                                  movzx   eax, ax
                                   test    byte ptr (I286_MSW), MSW_PE
                                   jne             short ret_far_pe
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
                                 mov             CS_BASE, eax  ret_far_base:   mov             CS_BASE, eax
                                 mov             ebp, eax                                  mov             ebp, eax
                                 mov             I286_SP, bx                                  mov             I286_SP, bx
                                 RESET_XPREFETCH                                  RESET_XPREFETCH
                                 ret                                  ret
   
   ret_far_pe:             push    offset ret_far_base
                                   jmp             i286x_selector
                 }                  }
 }  }
   
Line 3649  I286 _into(void) {        // CE: into Line 3660  I286 _into(void) {        // CE: into
                                 GET_NEXTPRE1                                  GET_NEXTPRE1
                                 ret                                  ret
   
                 intovf: INT_NUM(4)                  intovf: inc             si                                                                                      // ver0.80
                                   INT_NUM(4)
                 }                  }
 }  }
   
 I286 _iret(void) {                                                              // CF: iret  I286 _iret(void) {                                                              // CF: iret
   
                 __asm {                  __asm {
                                 call    extirq_pop  
                                 I286CLOCK(31)                                  I286CLOCK(31)
                                 mov             edi, SS_BASE                                  mov             edi, SS_BASE
                                 movzx   ebx, I286_SP                                  movzx   ebx, I286_SP
Line 3686  I286 _iret(void) {        // CF: iret Line 3697  I286 _iret(void) {        // CF: iret
                                 jne             irqcheck                                  jne             irqcheck
                                 test    I286_FLAG, I_FLAG                                  test    I286_FLAG, I_FLAG
                                 je              nextop                                  je              nextop
                                 cmp             pic.ext_irq, 0                                  mov             al, pic.pi[0 * (type _PICITEM)].imr
                                 jne             nextop                                  mov             ah, pic.pi[1 * (type _PICITEM)].imr
                                 mov             al, pic.pi[0].imr  
                                 mov             ah, pic.pi[1].imr  
                                 not             ax                                  not             ax
                                 test    al, pic.pi[0].irr                                  test    al, pic.pi[0 * (type _PICITEM)].irr
                                 jne             irqcheck                                  jne             irqcheck
                                 test    ah, pic.pi[1].irr                                  test    ah, pic.pi[1 * (type _PICITEM)].irr
                                 jne             irqcheck                                  jne             irqcheck
 nextop:                 ret  nextop:                 ret
   
Line 4097  I286 jmp_far(void) {       // EA: jmp fa Line 4106  I286 jmp_far(void) {       // EA: jmp fa
                                 mov             si, bx                                  mov             si, bx
                                 shr             ebx, 16                                  shr             ebx, 16
                                 mov             I286_CS, bx                                  mov             I286_CS, bx
                                   test    byte ptr (I286_MSW), MSW_PE
                                   jne             short jmp_far_pe
                                 shl             ebx, 4                                  // make segreg                                  shl             ebx, 4                                  // make segreg
                                 mov             CS_BASE, ebx                                  mov             CS_BASE, ebx
                                 RESET_XPREFETCH  jmp_far_base:   RESET_XPREFETCH
                                 ret                                  ret
   
   jmp_far_pe:             mov             eax, ebx
                                   call    i286x_selector
                                   mov             CS_BASE, eax
                                   jmp             short jmp_far_base
                 }                  }
 }  }
   
Line 4270  I286 _sti(void) {        // FB: sti Line 4286  I286 _sti(void) {        // FB: sti
                                 setne   I286_TRAP                                  setne   I286_TRAP
   
                                 jne             nextopandexit                   // fast_intr                                  jne             nextopandexit                   // fast_intr
                                 cmp             pic.ext_irq, 0                                  mov             al, pic.pi[0 * (type _PICITEM)].imr
                                 jne             jmp_nextop                                  mov             ah, pic.pi[1 * (type _PICITEM)].imr
                                 mov             al, pic.pi[0].imr  
                                 mov             ah, pic.pi[1].imr  
                                 not             ax                                  not             ax
                                 test    al, pic.pi[0].irr                                  test    al, pic.pi[0 * (type _PICITEM)].irr
                                 jne             nextopandexit                                  jne             nextopandexit
                                 test    ah, pic.pi[1].irr                                  test    ah, pic.pi[1 * (type _PICITEM)].irr
                                 jne             nextopandexit                                  jne             nextopandexit
 jmp_nextop:             jmp             i286op[ebp*4]  jmp_nextop:             jmp             i286op[ebp*4]
   
Line 4335  I286 _ope0xff(void) {       // FF:  Line 4349  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 4659  I286 repe_segprefix_ds(void) { Line 4673  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 4983  I286 repne_segprefix_ds(void) { Line 4997  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.16  
changed lines
  Added in v.1.24


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