--- np2/i286c/i286c_0f.c 2003/11/28 08:01:32 1.8 +++ np2/i286c/i286c_0f.c 2003/12/25 19:26:55 1.14 @@ -1,7 +1,6 @@ #include "compiler.h" -#include "i286.h" +#include "cpucore.h" #include "i286c.h" -#include "memory.h" #include "i286c.mcr" @@ -13,10 +12,10 @@ I286_0F _sgdt(UINT op) { I286_WORKCLOCK(11); if (op < 0xc0) { ad = GET_EA(op, &seg); - i286_memorywrite_w(seg + ad, i286reg.GDTR.limit); - i286_memorywrite_w(seg + LOW16(ad + 2), i286reg.GDTR.base); + i286_memorywrite_w(seg + ad, I286_GDTR.limit); + i286_memorywrite_w(seg + LOW16(ad + 2), I286_GDTR.base); i286_memorywrite_w(seg + LOW16(ad + 4), - (UINT16)(0xff00 + i286reg.GDTR.base24)); + (REG16)(0xff00 + I286_GDTR.base24)); } else { INT_NUM(6, I286_IP - 2); @@ -31,10 +30,10 @@ I286_0F _sidt(UINT op) { I286_WORKCLOCK(12); if (op < 0xc0) { ad = GET_EA(op, &seg); - i286_memorywrite_w(seg + ad, i286reg.IDTR.limit); - i286_memorywrite_w(seg + LOW16(ad + 2), i286reg.IDTR.base); + i286_memorywrite_w(seg + ad, I286_IDTR.limit); + i286_memorywrite_w(seg + LOW16(ad + 2), I286_IDTR.base); i286_memorywrite_w(seg + LOW16(ad + 4), - (UINT16)(0xff00 + i286reg.IDTR.base24)); + (REG16)(0xff00 + I286_IDTR.base24)); } else { INT_NUM(6, I286_IP - 2); @@ -49,10 +48,10 @@ I286_0F _lgdt(UINT op) { I286_WORKCLOCK(11); if (op < 0xc0) { ad = GET_EA(op, &seg); - i286reg.GDTR.limit = i286_memoryread_w(seg + ad); - i286reg.GDTR.base = i286_memoryread_w(seg + LOW16(ad + 2)); - i286reg.GDTR.base24 = i286_memoryread(seg + LOW16(ad + 4)); - i286reg.GDTR.reserved = i286_memoryread(seg + LOW16(ad + 5)); + 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)); } else { INT_NUM(6, I286_IP - 2); @@ -67,10 +66,11 @@ I286_0F _lidt(UINT op) { I286_WORKCLOCK(11); if (op < 0xc0) { ad = GET_EA(op, &seg); - i286reg.IDTR.limit = i286_memoryread_w(seg + ad); - i286reg.IDTR.base = i286_memoryread_w(seg + LOW16(ad + 2)); - i286reg.IDTR.base24 = i286_memoryread(seg + LOW16(ad + 4)); - i286reg.IDTR.reserved = i286_memoryread(seg + LOW16(ad + 5)); + 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)); + TRACEOUT(("IDT:%.2x%.4x", I286_IDTR.base24, I286_IDTR.base)); } else { INT_NUM(6, I286_IP - 2); @@ -81,11 +81,11 @@ I286_0F _smsw(UINT op) { if (op >= 0xc0) { I286_WORKCLOCK(3); - *(REG16_B20(op)) = i286reg.MSW; + *(REG16_B20(op)) = I286_MSW; } else { I286_WORKCLOCK(6); - i286_memorywrite_w(CALC_EA(op), i286reg.MSW); + i286_memorywrite_w(CALC_EA(op), I286_MSW); } } @@ -93,11 +93,14 @@ I286_0F _lmsw(UINT op) { if (op >= 0xc0) { I286_WORKCLOCK(2); - i286reg.MSW = *(REG16_B20(op)); + I286_MSW = *(REG16_B20(op)); } else { I286_WORKCLOCK(3); - i286reg.MSW = i286_memoryread_w(CALC_EA(op)); + I286_MSW = i286_memoryread_w(CALC_EA(op)); + } + if (I286_MSW & 1) { + TRACEOUT(("enable PE %.4x:%.4x", I286_CS, I286_IP)); } } @@ -113,7 +116,7 @@ I286_0F _loadall286(void) { UINT16 tmp; I286_WORKCLOCK(195); - i286reg.MSW = LOADINTELWORD(mem + 0x804); + I286_MSW = LOADINTELWORD(mem + 0x804); tmp = LOADINTELWORD(mem + 0x818); I286_OV = tmp & O_FLAG; I286_FLAG = tmp & (0xfff ^ O_FLAG); @@ -157,7 +160,6 @@ I286EXT i286c_cts(void) { _loadall286(); } else { - I286_WORKCLOCK(20); INT_NUM(6, ip - 1); } }