| version 1.23, 2012/01/08 18:26:55 | version 1.26, 2012/02/05 06:16:08 | 
| 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 42  load_segreg(int idx, UINT16 selector, UI | Line 43  load_segreg(int idx, UINT16 selector, UI | 
 | /* real-mode or vm86 mode */ | /* real-mode or vm86 mode */ | 
 | *sregp = selector; | *sregp = selector; | 
 | segdesc_clear(&sel.desc); | 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 385  segdesc_init(int idx, UINT16 sreg, descr | Line 385  segdesc_init(int idx, UINT16 sreg, descr | 
 |  |  | 
 | CPU_REGS_SREG(idx) = sreg; | CPU_REGS_SREG(idx) = sreg; | 
 | segdesc_clear(sdp); | 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 396  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) */ |