| version 1.3, 2003/10/19 14:56:15 | version 1.6, 2003/12/03 07:59:57 | 
| Line 6 | Line 6 | 
 | // | // | 
 | //---------------------------------------------------------------------------- | //---------------------------------------------------------------------------- | 
 |  |  | 
 |  | #if !defined(CPUDEBUG) | 
 | enum { | enum { | 
 | I286_MEMREADMAX         = 0xa4000, | I286_MEMREADMAX         = 0xa4000, | 
 | I286_MEMWRITEMAX        = 0xa0000 | I286_MEMWRITEMAX        = 0xa0000 | 
 | }; | }; | 
 |  | #else                                                                   // ダイレクトアクセス範囲を狭める | 
 |  | enum { | 
 |  | I286_MEMREADMAX         = 0x00400, | 
 |  | I286_MEMWRITEMAX        = 0x00400 | 
 |  | }; | 
 |  | #endif | 
 |  |  | 
 | #ifndef CPUCALL | #ifndef CPUCALL | 
 | #define CPUCALL | #define CPUCALL | 
| Line 18  enum { | Line 25  enum { | 
 | #if defined(BYTESEX_LITTLE) | #if defined(BYTESEX_LITTLE) | 
 |  |  | 
 | typedef struct { | typedef struct { | 
| BYTE    al; | UINT8   al; | 
| BYTE    ah; | UINT8   ah; | 
| BYTE    cl; | UINT8   cl; | 
| BYTE    ch; | UINT8   ch; | 
| BYTE    dl; | UINT8   dl; | 
| BYTE    dh; | UINT8   dh; | 
| BYTE    bl; | UINT8   bl; | 
| BYTE    bh; | UINT8   bh; | 
| BYTE    sp_l; | UINT8   sp_l; | 
| BYTE    sp_h; | UINT8   sp_h; | 
| BYTE    bp_l; | UINT8   bp_l; | 
| BYTE    bp_h; | UINT8   bp_h; | 
| BYTE    si_l; | UINT8   si_l; | 
| BYTE    si_h; | UINT8   si_h; | 
| BYTE    di_l; | UINT8   di_l; | 
| BYTE    di_h; | UINT8   di_h; | 
| BYTE    es_l; | UINT8   es_l; | 
| BYTE    es_h; | UINT8   es_h; | 
| BYTE    cs_l; | UINT8   cs_l; | 
| BYTE    cs_h; | UINT8   cs_h; | 
| BYTE    ss_l; | UINT8   ss_l; | 
| BYTE    ss_h; | UINT8   ss_h; | 
| BYTE    ds_l; | UINT8   ds_l; | 
| BYTE    ds_h; | UINT8   ds_h; | 
|  | UINT8   flag_l; | 
| BYTE    flag_l; | UINT8   flag_h; | 
| BYTE    flag_h; | UINT8   ip_l; | 
| BYTE    ip_l; | UINT8   ip_h; | 
| BYTE    ip_h; |  | 
 | } I286REG8; | } I286REG8; | 
 |  |  | 
 | #else | #else | 
 |  |  | 
 | typedef struct { | typedef struct { | 
| BYTE    ah; | UINT8   ah; | 
| BYTE    al; | UINT8   al; | 
| BYTE    ch; | UINT8   ch; | 
| BYTE    cl; | UINT8   cl; | 
| BYTE    dh; | UINT8   dh; | 
| BYTE    dl; | UINT8   dl; | 
| BYTE    bh; | UINT8   bh; | 
| BYTE    bl; | UINT8   bl; | 
| BYTE    sp_h; | UINT8   sp_h; | 
| BYTE    sp_l; | UINT8   sp_l; | 
| BYTE    bp_h; | UINT8   bp_h; | 
| BYTE    bp_l; | UINT8   bp_l; | 
| BYTE    si_h; | UINT8   si_h; | 
| BYTE    si_l; | UINT8   si_l; | 
| BYTE    di_h; | UINT8   di_h; | 
| BYTE    di_l; | UINT8   di_l; | 
| BYTE    es_h; | UINT8   es_h; | 
| BYTE    es_l; | UINT8   es_l; | 
| BYTE    cs_h; | UINT8   cs_h; | 
| BYTE    cs_l; | UINT8   cs_l; | 
| BYTE    ss_h; | UINT8   ss_h; | 
| BYTE    ss_l; | UINT8   ss_l; | 
| BYTE    ds_h; | UINT8   ds_h; | 
| BYTE    ds_l; | UINT8   ds_l; | 
| BYTE    flag_h; | UINT8   flag_h; | 
| BYTE    flag_l; | UINT8   flag_l; | 
| BYTE    ip_h; | UINT8   ip_h; | 
| BYTE    ip_l; | UINT8   ip_l; | 
 | } I286REG8; | } I286REG8; | 
 |  |  | 
 | #endif | #endif | 
| Line 104  typedef struct { | Line 110  typedef struct { | 
 | typedef struct { | typedef struct { | 
 | UINT16  limit; | UINT16  limit; | 
 | UINT16  base; | UINT16  base; | 
| BYTE    base24; | UINT8   base24; | 
| BYTE    reserved; | UINT8   reserved; | 
 | } I286DTR; | } I286DTR; | 
 |  |  | 
 | typedef struct { | typedef struct { | 
| Line 116  typedef struct { | Line 122  typedef struct { | 
 | SINT32  remainclock; | SINT32  remainclock; | 
 | SINT32  baseclock; | SINT32  baseclock; | 
 | UINT32  clock; | UINT32  clock; | 
 |  | UINT32  adrsmask;                                               // ver0.72 | 
 | UINT32  es_base; | UINT32  es_base; | 
 | UINT32  cs_base; | UINT32  cs_base; | 
 | UINT32  ss_base; | UINT32  ss_base; | 
| Line 123  typedef struct { | Line 130  typedef struct { | 
 | UINT32  ss_fix; | UINT32  ss_fix; | 
 | UINT32  ds_fix; | UINT32  ds_fix; | 
 | UINT16  prefix; | UINT16  prefix; | 
| BYTE    trap; | UINT8   trap; | 
| BYTE    cpu_type; | UINT8   cpu_type; | 
 | UINT32  pf_semaphore; | UINT32  pf_semaphore; | 
 | UINT32  repbak; | UINT32  repbak; | 
 | UINT32  inport; | UINT32  inport; | 
| Line 132  typedef struct { | Line 139  typedef struct { | 
 | I286DTR GDTR; | I286DTR GDTR; | 
 | I286DTR IDTR; | I286DTR IDTR; | 
 | UINT16  MSW; | UINT16  MSW; | 
| } I286REG; | UINT8   resetreq;                                               // ver0.72 | 
|  | UINT8   itfbank;                                                // ver0.72 | 
|  | } I286STAT; | 
|  |  | 
|  | typedef struct {                                                        // for ver0.73 | 
|  | UINT    dummy; | 
|  | } I286EXT; | 
|  |  | 
|  | typedef struct { | 
|  | I286STAT        s;                                                      // STATsaveされる奴 | 
|  | I286EXT         e; | 
|  | } I286CORE; | 
 |  |  | 
 |  |  | 
 | #ifdef __cplusplus | #ifdef __cplusplus | 
 | extern "C" { | extern "C" { | 
 | #endif | #endif | 
 |  |  | 
| extern  I286REG         i286reg; | extern  I286CORE        i286core; | 
 | extern  const BYTE      iflags[]; | extern  const BYTE      iflags[]; | 
 |  |  | 
 |  |  | 
 | #define         I286_MEM                mem | #define         I286_MEM                mem | 
 |  |  | 
| #define         I286_REG                i286reg.r | #define         I286_REG                i286core.s.r | 
| #define         I286_SEGREG             i286reg.r.w.es | #define         I286_SEGREG             i286core.s.r.w.es | 
 |  |  | 
| #define         I286_AX                 i286reg.r.w.ax | #define         I286_AX                 i286core.s.r.w.ax | 
| #define         I286_BX                 i286reg.r.w.bx | #define         I286_BX                 i286core.s.r.w.bx | 
| #define         I286_CX                 i286reg.r.w.cx | #define         I286_CX                 i286core.s.r.w.cx | 
| #define         I286_DX                 i286reg.r.w.dx | #define         I286_DX                 i286core.s.r.w.dx | 
| #define         I286_SI                 i286reg.r.w.si | #define         I286_SI                 i286core.s.r.w.si | 
| #define         I286_DI                 i286reg.r.w.di | #define         I286_DI                 i286core.s.r.w.di | 
| #define         I286_BP                 i286reg.r.w.bp | #define         I286_BP                 i286core.s.r.w.bp | 
| #define         I286_SP                 i286reg.r.w.sp | #define         I286_SP                 i286core.s.r.w.sp | 
| #define         I286_CS                 i286reg.r.w.cs | #define         I286_CS                 i286core.s.r.w.cs | 
| #define         I286_DS                 i286reg.r.w.ds | #define         I286_DS                 i286core.s.r.w.ds | 
| #define         I286_ES                 i286reg.r.w.es | #define         I286_ES                 i286core.s.r.w.es | 
| #define         I286_SS                 i286reg.r.w.ss | #define         I286_SS                 i286core.s.r.w.ss | 
| #define         I286_IP                 i286reg.r.w.ip | #define         I286_IP                 i286core.s.r.w.ip | 
|  |  | 
| #define         SEG_BASE                i286reg.es_base | #define         SEG_BASE                i286core.s.es_base | 
| #define         ES_BASE                 i286reg.es_base | #define         ES_BASE                 i286core.s.es_base | 
| #define         CS_BASE                 i286reg.cs_base | #define         CS_BASE                 i286core.s.cs_base | 
| #define         SS_BASE                 i286reg.ss_base | #define         SS_BASE                 i286core.s.ss_base | 
| #define         DS_BASE                 i286reg.ds_base | #define         DS_BASE                 i286core.s.ds_base | 
| #define         SS_FIX                  i286reg.ss_fix | #define         SS_FIX                  i286core.s.ss_fix | 
| #define         DS_FIX                  i286reg.ds_fix | #define         DS_FIX                  i286core.s.ds_fix | 
|  |  | 
| #define         I286_AL                 i286reg.r.b.al | #define         I286_AL                 i286core.s.r.b.al | 
| #define         I286_BL                 i286reg.r.b.bl | #define         I286_BL                 i286core.s.r.b.bl | 
| #define         I286_CL                 i286reg.r.b.cl | #define         I286_CL                 i286core.s.r.b.cl | 
| #define         I286_DL                 i286reg.r.b.dl | #define         I286_DL                 i286core.s.r.b.dl | 
| #define         I286_AH                 i286reg.r.b.ah | #define         I286_AH                 i286core.s.r.b.ah | 
| #define         I286_BH                 i286reg.r.b.bh | #define         I286_BH                 i286core.s.r.b.bh | 
| #define         I286_CH                 i286reg.r.b.ch | #define         I286_CH                 i286core.s.r.b.ch | 
| #define         I286_DH                 i286reg.r.b.dh | #define         I286_DH                 i286core.s.r.b.dh | 
|  |  | 
| #define         I286_FLAG               i286reg.r.w.flag | #define         I286_FLAG               i286core.s.r.w.flag | 
| #define         I286_FLAGL              i286reg.r.b.flag_l | #define         I286_FLAGL              i286core.s.r.b.flag_l | 
| #define         I286_FLAGH              i286reg.r.b.flag_h | #define         I286_FLAGH              i286core.s.r.b.flag_h | 
| #define         I286_TRAP               i286reg.trap | #define         I286_TRAP               i286core.s.trap | 
| #define         I286_OV                 i286reg.ovflag | #define         I286_OV                 i286core.s.ovflag | 
|  |  | 
| #define         I286_REMCLOCK   i286reg.remainclock | #define         I286_REMCLOCK   i286core.s.remainclock | 
| #define         I286_BASECLOCK  i286reg.baseclock | #define         I286_BASECLOCK  i286core.s.baseclock | 
| #define         I286_CLOCK              i286reg.clock | #define         I286_CLOCK              i286core.s.clock | 
 |  |  | 
 |  |  | 
 | enum { | enum { | 
| Line 202  enum { | Line 220  enum { | 
 | O_FLAG                  = 0x0800 | O_FLAG                  = 0x0800 | 
 | }; | }; | 
 |  |  | 
| #define         CPUTYPE                 i286reg.cpu_type | #define         CPUTYPE                 i286core.s.cpu_type | 
 | #define         CPUTYPE_V30             0x01 | #define         CPUTYPE_V30             0x01 | 
 |  |  | 
 | // ver0.28 | // ver0.28 | 
| #define         REPPOSBAK               i286reg.repbak | #define         REPPOSBAK               i286core.s.repbak | 
| #define         PREFIX_SMP              i286reg.pf_semaphore | #define         PREFIX_SMP              i286core.s.pf_semaphore | 
 |  |  | 
 | #define         isI286DI                (!(I286_FLAG & I_FLAG)) | #define         isI286DI                (!(I286_FLAG & I_FLAG)) | 
 | #define         isI286EI                (I286_FLAG & I_FLAG) | #define         isI286EI                (I286_FLAG & I_FLAG) | 
| Line 226  void CPUCALL i286_interrupt(BYTE vect); | Line 244  void CPUCALL i286_interrupt(BYTE vect); | 
 | void i286(void); | void i286(void); | 
 | void i286_step(void); | void i286_step(void); | 
 |  |  | 
| #define v30                             i286 | void v30(void); | 
| #define v30_step                i286_step | void v30_step(void); | 
 |  |  | 
 | #ifdef __cplusplus | #ifdef __cplusplus | 
 | } | } |