Diff for /np2/i286x/i286x.cpp between versions 1.14 and 1.20

version 1.14, 2004/01/05 05:04:53 version 1.20, 2004/02/18 18:29:29
Line 57  void i286x_initialize(void) { Line 57  void i286x_initialize(void) {
         v30xinit();          v30xinit();
 }  }
   
   void i286x_deinitialize(void) {
   
           if (CPU_EXTMEM) {
                   _MFREE(CPU_EXTMEM);
                   CPU_EXTMEM = NULL;
                   CPU_EXTMEMSIZE = 0;
           }
   }
   
 static void i286x_initreg(void) {  static void i286x_initreg(void) {
   
         I286_CS = 0xf000;          I286_CS = 0xf000;
Line 78  void i286x_shut(void) { Line 87  void i286x_shut(void) {
         i286x_initreg();          i286x_initreg();
 }  }
   
   void i286x_setextsize(UINT32 size) {
   
           if (CPU_EXTMEMSIZE != size) {
                   if (CPU_EXTMEM) {
                           _MFREE(CPU_EXTMEM);
                           CPU_EXTMEM = NULL;
                   }
                   if (size) {
                           CPU_EXTMEM = (BYTE *)_MALLOC(size + 16, "EXTMEM");
                           if (CPU_EXTMEM == NULL) {
                                   size = 0;
                           }
                   }
                   CPU_EXTMEMSIZE = size;
           }
           i286core.e.ems[0] = mem + 0xc0000;
           i286core.e.ems[1] = mem + 0xc4000;
           i286core.e.ems[2] = mem + 0xc8000;
           i286core.e.ems[3] = mem + 0xcc000;
   }
   
   void i286x_setemm(UINT frame, UINT32 addr) {
   
           BYTE    *ptr;
   
           frame &= 3;
           if (addr < USE_HIMEM) {
                   ptr = mem + addr;
           }
           else if ((addr - 0x100000 + 0x4000) <= CPU_EXTMEMSIZE) {
                   ptr = CPU_EXTMEM + (addr - 0x100000);
           }
           else {
                   ptr = mem + 0xc0000 + (frame << 14);
           }
           i286core.e.ems[frame] = ptr;
   }
   
   
 LABEL void i286x_resetprefetch(void) {  LABEL void i286x_resetprefetch(void) {
   
Line 400  I286 pop_es(void) {        // 07: pop es Line 447  I286 pop_es(void) {        // 07: pop es
                 __asm {                  __asm {
                                 I286CLOCK(5)                                  I286CLOCK(5)
                                 REGPOP(I286_ES)                                  REGPOP(I286_ES)
                                   movzx   eax, ax
                                 test    I286_MSW, MSW_PE                                  test    I286_MSW, MSW_PE
                                 jne             short pop_es_pe                                  jne             short pop_es_pe
                                 movzx   eax, ax  
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
 pop_es_base:    mov             ES_BASE, eax  pop_es_base:    mov             ES_BASE, eax
                                 GET_NEXTPRE1                                  GET_NEXTPRE1
Line 613  I286 pop_ss(void) {        // 17: pop ss Line 660  I286 pop_ss(void) {        // 17: pop ss
                 __asm {                  __asm {
                                 I286CLOCK(5)                                  I286CLOCK(5)
                                 REGPOP(I286_SS)                                  REGPOP(I286_SS)
                                   movzx   eax, ax
                                 test    I286_MSW, MSW_PE                                  test    I286_MSW, MSW_PE
                                 jne             short pop_ss_pe                                  jne             short pop_ss_pe
                                 movzx   eax, ax  
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
 pop_ss_base:    mov             SS_BASE, eax  pop_ss_base:    mov             SS_BASE, eax
                                 mov             SS_FIX, eax                                  mov             SS_FIX, eax
Line 742  I286 pop_ds(void) {        // 1F: pop ds Line 789  I286 pop_ds(void) {        // 1F: pop ds
                 __asm {                  __asm {
                                 I286CLOCK(5)                                  I286CLOCK(5)
                                 REGPOP(I286_DS)                                  REGPOP(I286_DS)
                                   movzx   eax, ax
                                 test    I286_MSW, MSW_PE                                  test    I286_MSW, MSW_PE
                                 jne             short pop_ds_pe                                  jne             short pop_ds_pe
                                 movzx   eax, ax  
                                 shl             eax, 4                                  // make segreg                                  shl             eax, 4                                  // make segreg
 pop_ds_base:    mov             DS_BASE, eax  pop_ds_base:    mov             DS_BASE, eax
                                 mov             DS_FIX, eax                                  mov             DS_FIX, eax
Line 2450  I286 mov_seg_ea(void) {       // 8E: mov Line 2497  I286 mov_seg_ea(void) {       // 8E: mov
                                 call    i286_memoryread_w                                  call    i286_memoryread_w
                 segset:                  segset:
                                 mov             word ptr I286_SEGREG[ebp], ax                                  mov             word ptr I286_SEGREG[ebp], ax
                                   movzx   eax, ax
                                 test    I286_MSW, MSW_PE                                  test    I286_MSW, MSW_PE
                                 jne             short mov_seg_pe                                  jne             short mov_seg_pe
                                 movzx   eax, ax  
                                 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
                                 sub             ebp, 2*2                                  sub             ebp, 2*2
Line 2667  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    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 2714  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 2822  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 2842  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 2862  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 2885  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 2927  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 2943  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 2989  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 3007  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 3522  I286 ret_far_data16(void) {      // CA:  Line 3558  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    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 3545  I286 ret_far(void) {       // CB: ret fa Line 3586  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    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 3612  I286 _into(void) {        // CE: into Line 3658  I286 _into(void) {        // CE: into
 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 3642  I286 _iret(void) {        // CF: iret Line 3687  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 4053  I286 jmp_far(void) {       // EA: jmp fa Line 4096  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    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 4226  I286 _sti(void) {        // FB: sti Line 4276  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]
   

Removed from v.1.14  
changed lines
  Added in v.1.20


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