--- np2/i286c/i286c_0f.c 2003/12/12 01:04:40 1.12 +++ np2/i286c/i286c_0f.c 2003/12/25 19:58:24 1.15 @@ -51,7 +51,7 @@ I286_0F _lgdt(UINT op) { I286_GDTR.limit = i286_memoryread_w(seg + ad); I286_GDTR.base = i286_memoryread_w(seg + LOW16(ad + 2)); I286_GDTR.base24 = i286_memoryread(seg + LOW16(ad + 4)); - I286_GDTR.reserved = i286_memoryread(seg + LOW16(ad + 5)); +// I286_GDTR.reserved = i286_memoryread(seg + LOW16(ad + 5)); } else { INT_NUM(6, I286_IP - 2); @@ -69,7 +69,7 @@ I286_0F _lidt(UINT op) { I286_IDTR.limit = i286_memoryread_w(seg + ad); I286_IDTR.base = i286_memoryread_w(seg + LOW16(ad + 2)); I286_IDTR.base24 = i286_memoryread(seg + LOW16(ad + 4)); - I286_IDTR.reserved = i286_memoryread(seg + LOW16(ad + 5)); +// I286_IDTR.reserved = i286_memoryread(seg + LOW16(ad + 5)); } else { INT_NUM(6, I286_IP - 2); @@ -90,14 +90,17 @@ I286_0F _smsw(UINT op) { I286_0F _lmsw(UINT op) { + REG16 msw; + if (op >= 0xc0) { I286_WORKCLOCK(2); - I286_MSW = *(REG16_B20(op)); + msw = *(REG16_B20(op)); } else { I286_WORKCLOCK(3); - I286_MSW = i286_memoryread_w(CALC_EA(op)); + msw = i286_memoryread_w(CALC_EA(op)); } + I286_MSW = msw | (I286_MSW & 1); } static const I286OP_0F cts1_table[] = { @@ -156,7 +159,6 @@ I286EXT i286c_cts(void) { _loadall286(); } else { - I286_WORKCLOCK(20); INT_NUM(6, ip - 1); } }