Diff for /np2/i386c/ia32/segments.c between versions 1.23 and 1.27

version 1.23, 2012/01/08 18:26:55 version 1.27, 2012/02/05 06:31:44
Line 27 Line 27
 #include "cpu.h"  #include "cpu.h"
 #include "ia32.mcr"  #include "ia32.mcr"
   
   static void CPUCALL segdesc_set_default(int, UINT16, descriptor_t *);
   
 void CPUCALL  void CPUCALL
 load_segreg(int idx, UINT16 selector, UINT16 *sregp, descriptor_t *sdp, int exc)  load_segreg(int idx, UINT16 selector, UINT16 *sregp, descriptor_t *sdp, int exc)
Line 41  load_segreg(int idx, UINT16 selector, UI Line 42  load_segreg(int idx, UINT16 selector, UI
         if (!CPU_STAT_PM || CPU_STAT_VM86) {          if (!CPU_STAT_PM || CPU_STAT_VM86) {
                 /* real-mode or vm86 mode */                  /* real-mode or vm86 mode */
                 *sregp = selector;                  *sregp = selector;
                 segdesc_clear(&sel.desc);  
                 sel.desc.u.seg.limit = CPU_STAT_SREGLIMIT(idx);  
                 segdesc_set_default(idx, selector, &sel.desc);                  segdesc_set_default(idx, selector, &sel.desc);
                 *sdp = sel.desc;                  *sdp = sel.desc;
                 return;                  return;
Line 62  load_segreg(int idx, UINT16 selector, UI Line 61  load_segreg(int idx, UINT16 selector, UI
                 if ((rv != -2) || (idx == CPU_SS_INDEX)) {                  if ((rv != -2) || (idx == CPU_SS_INDEX)) {
                         EXCEPTION(exc, sel.idx);                          EXCEPTION(exc, sel.idx);
                 }                  }
                   /* null selector */
                 *sregp = sel.selector;                  *sregp = sel.selector;
                 segdesc_clear(sdp);                  memset(sdp, 0, sizeof(*sdp));
                 return;                  return;
         }          }
   
Line 203  load_descriptor(descriptor_t *sdp, UINT3 Line 203  load_descriptor(descriptor_t *sdp, UINT3
         h = cpu_kmemoryread_d(addr + 4);          h = cpu_kmemoryread_d(addr + 4);
         VERBOSE(("descriptor value = 0x%08x%08x", h, l));          VERBOSE(("descriptor value = 0x%08x%08x", h, l));
   
         segdesc_clear(sdp);          memset(sdp, 0, sizeof(*sdp));
         sdp->flag = 0;          sdp->flag = 0;
   
         sdp->p = (h & CPU_DESC_H_P) ? 1 : 0;          sdp->p = (h & CPU_DESC_H_P) ? 1 : 0;
Line 384  segdesc_init(int idx, UINT16 sreg, descr Line 384  segdesc_init(int idx, UINT16 sreg, descr
         __ASSERT((sdp != NULL));          __ASSERT((sdp != NULL));
   
         CPU_REGS_SREG(idx) = sreg;          CPU_REGS_SREG(idx) = sreg;
         segdesc_clear(sdp);  
         sdp->u.seg.limit = 0xffff;  
         segdesc_set_default(idx, sreg, sdp);          segdesc_set_default(idx, sreg, sdp);
 }  }
   
 void CPUCALL  static void CPUCALL
 segdesc_set_default(int idx, UINT16 selector, descriptor_t *sdp)  segdesc_set_default(int idx, UINT16 selector, descriptor_t *sdp)
 {  {
   
Line 397  segdesc_set_default(int idx, UINT16 sele Line 395  segdesc_set_default(int idx, UINT16 sele
         __ASSERT((sdp != NULL));          __ASSERT((sdp != NULL));
   
         sdp->u.seg.segbase = (UINT32)selector << 4;          sdp->u.seg.segbase = (UINT32)selector << 4;
         /* sdp->u.seg.limit */          sdp->u.seg.limit = 0xffff;
         sdp->u.seg.c = (idx == CPU_CS_INDEX) ? 1 : 0;   /* code or data */          sdp->u.seg.c = (idx == CPU_CS_INDEX) ? 1 : 0;   /* code or data */
         sdp->u.seg.g = 0;       /* non 4k factor scale */          sdp->u.seg.g = 0;       /* non 4k factor scale */
         sdp->u.seg.wr = 1;      /* execute/read(CS) or read/write(others) */          sdp->u.seg.wr = 1;      /* execute/read(CS) or read/write(others) */

Removed from v.1.23  
changed lines
  Added in v.1.27


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