216 |
break; |
break; |
217 |
} |
} |
218 |
dpl = (e2 >> DESC_DPL_SHIFT) & 3; |
dpl = (e2 >> DESC_DPL_SHIFT) & 3; |
219 |
cpl = env->segs[R_CS].selector & 3; |
if (env->eflags & VM_MASK) |
220 |
|
cpl = 3; |
221 |
|
else |
222 |
|
cpl = env->segs[R_CS].selector & 3; |
223 |
/* check privledge if software int */ |
/* check privledge if software int */ |
224 |
if (is_int && dpl < cpl) |
if (is_int && dpl < cpl) |
225 |
raise_exception_err(EXCP0D_GPF, intno * 8 + 2); |
raise_exception_err(EXCP0D_GPF, intno * 8 + 2); |
575 |
ECX = 0x6c65746e; |
ECX = 0x6c65746e; |
576 |
EDX = 0x49656e69; |
EDX = 0x49656e69; |
577 |
} else if (EAX == 1) { |
} else if (EAX == 1) { |
578 |
|
int family, model, stepping; |
579 |
/* EAX = 1 info */ |
/* EAX = 1 info */ |
580 |
EAX = 0x52b; |
#if 0 |
581 |
|
/* pentium 75-200 */ |
582 |
|
family = 5; |
583 |
|
model = 2; |
584 |
|
stepping = 11; |
585 |
|
#else |
586 |
|
/* pentium pro */ |
587 |
|
family = 6; |
588 |
|
model = 1; |
589 |
|
stepping = 3; |
590 |
|
#endif |
591 |
|
EAX = (family << 8) | (model << 4) | stepping; |
592 |
EBX = 0; |
EBX = 0; |
593 |
ECX = 0; |
ECX = 0; |
594 |
EDX = CPUID_FP87 | CPUID_DE | CPUID_PSE | |
EDX = CPUID_FP87 | CPUID_DE | CPUID_PSE | |
595 |
CPUID_TSC | CPUID_MSR | CPUID_MCE | |
CPUID_TSC | CPUID_MSR | CPUID_MCE | |
596 |
CPUID_CX8; |
CPUID_CX8 | CPUID_PGE | CPUID_CMOV; |
597 |
} |
} |
598 |
} |
} |
599 |
|
|
766 |
load_seg_cache(&sc1, e1, e2); |
load_seg_cache(&sc1, e1, e2); |
767 |
if (new_eip > sc1.limit) |
if (new_eip > sc1.limit) |
768 |
raise_exception_err(EXCP0D_GPF, selector & 0xfffc); |
raise_exception_err(EXCP0D_GPF, selector & 0xfffc); |
769 |
env->segs[R_CS] = sc1; |
env->segs[R_CS].base = sc1.base; |
770 |
|
env->segs[R_CS].limit = sc1.limit; |
771 |
|
env->segs[R_CS].flags = sc1.flags; |
772 |
env->segs[R_CS].selector = (selector & 0xfffc) | cpl; |
env->segs[R_CS].selector = (selector & 0xfffc) | cpl; |
773 |
EIP = new_eip; |
EIP = new_eip; |
774 |
} else { |
} else { |