Diff for /np2/i386c/ia32/segments.h between versions 1.1 and 1.4

version 1.1, 2003/12/08 00:55:31 version 1.4, 2004/01/27 15:55:26
Line 82  typedef struct { Line 82  typedef struct {
         BYTE    d;      /* 0 = 16bit, 1 = 32bit */          BYTE    d;      /* 0 = 16bit, 1 = 32bit */
   
         BYTE    flag;          BYTE    flag;
 #define CPU_DESC_READABLE       (1 << 0)  #define CPU_DESC_FLAG_READABLE  (1 << 0)
 #define CPU_DESC_WRITABLE       (1 << 1)  #define CPU_DESC_FLAG_WRITABLE  (1 << 1)
   
         BYTE    b_pad;          BYTE    b_pad;
 } descriptor_t;  } descriptor_t;
   
   
   /*
    * セグメント・ディスクリプタ
    *
    *  31            24 23 22 21 20 19   16 15 14 13 12 11    8 7             0
    * +----------------+--+--+--+--+-------+--+-----+--+-------+---------------+
    * |  Base  31..16  | G|DB| 0| A|limit_h| P| DPL | S|  type |  Base  23:16  | 4
    * +----------------+--+--+--+--+-------+--+-----+--+-------+---------------+
    *  31                                16 15                                0
    * +------------------------------------+-----------------------------------+
    * |           Base  15..00             |            limit  15..0           | 0
    * +------------------------------------+-----------------------------------+
    */
   
   /* descriptor common */
 #define CPU_DESC_H_TYPE         (0xf <<  8)  #define CPU_DESC_H_TYPE         (0xf <<  8)
 #define CPU_DESC_H_S            (  1 << 12)     /* 0 = system, 1 = code/data */  #define CPU_DESC_H_S            (  1 << 12)     /* 0 = system, 1 = code/data */
 #define CPU_DESC_H_DPL          (  3 << 13)  #define CPU_DESC_H_DPL          (  3 << 13)
Line 132  typedef struct { Line 147  typedef struct {
 /*      CPU_SYSDESC_TYPE_TASK           0x05    */  /*      CPU_SYSDESC_TYPE_TASK           0x05    */
 #define CPU_SYSDESC_TYPE_INTR           0x06  #define CPU_SYSDESC_TYPE_INTR           0x06
 #define CPU_SYSDESC_TYPE_TRAP           0x07  #define CPU_SYSDESC_TYPE_TRAP           0x07
   #define CPU_SYSDESC_TYPE_MASKBIT        0x07
   
 #define CPU_SYSDESC_TYPE_TSS_BUSY_IND   0x02  #define CPU_SYSDESC_TYPE_TSS_BUSY_IND   0x02
   
Line 143  do { \ Line 159  do { \
         (dscp)->u.seg.g = 0; \          (dscp)->u.seg.g = 0; \
         (dscp)->valid = 1; \          (dscp)->valid = 1; \
         (dscp)->p = 1; \          (dscp)->p = 1; \
         (dscp)->type = ((idx) == CPU_CS_INDEX) ? 0x0a : \          (dscp)->type = 0x02 /* writable */; \
                       (((idx) == CPU_SS_INDEX) ? 0x06 : 0x02); \  
         (dscp)->dpl = 0; \          (dscp)->dpl = 0; \
         (dscp)->s = 1;  /* code/data */ \          (dscp)->s = 1;  /* code/data */ \
         (dscp)->d = 0; \          (dscp)->d = 0; \
Line 153  do { \ Line 168  do { \
   
 #define CPU_SET_SEGDESC_POSTPART(dscp) \  #define CPU_SET_SEGDESC_POSTPART(dscp) \
 do { \  do { \
         if ((dscp)->s) { \          if ((dscp)->valid) { \
                 if (!((dscp)->h & CPU_SEGDESC_H_A)) { \                  if ((dscp)->s) { \
                         (dscp)->h |= CPU_SEGDESC_H_A; \                          if (!((dscp)->h & CPU_SEGDESC_H_A)) { \
                         cpu_memorywrite_d((dscp)->addr + 4, (dscp)->h); \                                  (dscp)->h |= CPU_SEGDESC_H_A; \
                                   cpu_lmemorywrite_d((dscp)->addr+4, (dscp)->h); \
                           } \
                 } \                  } \
           } else { \
                   ia32_panic("CPU_SET_SEGDESC_POSTPART: descriptor is invalid"); \
         } \          } \
 } while (/*CONSTCOND*/ 0)  } while (/*CONSTCOND*/ 0)
   
 #define CPU_SET_TASK_BUSY(dscp) \  #define CPU_SET_TASK_BUSY(dscp) \
 do { \  do { \
         DWORD h; \          if ((dscp)->valid) { \
         h = cpu_memoryread_d((dscp)->addr + 4); \                  DWORD h; \
         if (!(h & CPU_TSS_H_BUSY)) { \                  h = cpu_lmemoryread_d((dscp)->addr + 4); \
                 (dscp)->type |= CPU_SYSDESC_TYPE_TSS_BUSY_IND; \                  if (!(h & CPU_TSS_H_BUSY)) { \
                 h |= CPU_TSS_H_BUSY; \                          (dscp)->type |= CPU_SYSDESC_TYPE_TSS_BUSY_IND; \
                 cpu_memorywrite_d((dscp)->addr + 4, h); \                          h |= CPU_TSS_H_BUSY; \
                           cpu_lmemorywrite_d((dscp)->addr + 4, h); \
                   } else { \
                           ia32_panic("CPU_SET_TASK_BUSY: already busy (%x)", h); \
                   } \
         } else { \          } else { \
                 ia32_panic("CPU_SET_TASK_BUSY: already busy (%x)", h); \                  ia32_panic("CPU_SET_TASK_BUSY: descriptor is invalid"); \
         } \          } \
 } while (/*CONSTCOND*/ 0)  } while (/*CONSTCOND*/ 0)
   
 #define CPU_SET_TASK_FREE(dscp) \  #define CPU_SET_TASK_FREE(dscp) \
 do { \  do { \
         DWORD h; \          if ((dscp)->valid) { \
         h = cpu_memoryread_d((dscp)->addr + 4); \                  DWORD h; \
         if (h & CPU_TSS_H_BUSY) { \                  h = cpu_lmemoryread_d((dscp)->addr + 4); \
                 (dscp)->type &= ~CPU_SYSDESC_TYPE_TSS_BUSY_IND; \                  if (h & CPU_TSS_H_BUSY) { \
                 h &= ~CPU_TSS_H_BUSY; \                          (dscp)->type &= ~CPU_SYSDESC_TYPE_TSS_BUSY_IND; \
                 cpu_memorywrite_d((dscp)->addr + 4, h); \                          h &= ~CPU_TSS_H_BUSY; \
                           cpu_lmemorywrite_d((dscp)->addr + 4, h); \
                   } else { \
                           ia32_panic("CPU_SET_TASK_FREE: already free (%x)", h); \
                   } \
         } else { \          } else { \
                 ia32_panic("CPU_SET_TASK_FREE: already free (%x)", h); \                  ia32_panic("CPU_SET_TASK_FREE: descriptor is invalid"); \
         } \          } \
 } while (/*CONSTCOND*/ 0)  } while (/*CONSTCOND*/ 0)
   

Removed from v.1.1  
changed lines
  Added in v.1.4


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