|
|
| version 1.4, 2003/12/08 00:55:31 | version 1.6, 2004/02/18 20:11:36 |
|---|---|
| Line 2 | Line 2 |
| #include "cpucore.h" | #include "cpucore.h" |
| #include "i286x.h" | #include "i286x.h" |
| #include "i286xadr.h" | #include "i286xadr.h" |
| #include "memory.h" | |
| #include "i286x.mcr" | #include "i286x.mcr" |
| #include "i286xea.mcr" | #include "i286xea.mcr" |
| Line 1793 I286 call_far_ea16(void) { | Line 1792 I286 call_far_ea16(void) { |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| call i286_memoryread_w | call i286_memoryread_w |
| mov I286_CS, ax | mov I286_CS, ax |
| and eax, 0000ffffh | movzx eax, ax |
| test byte ptr (I286_MSW), MSW_PE | |
| jne short call_far_pe | |
| shl eax, 4 // make segreg | shl eax, 4 // make segreg |
| mov CS_BASE, eax | call_far_base: mov CS_BASE, eax |
| RESET_XPREFETCH | RESET_XPREFETCH |
| ret | ret |
| align 4 | |
| register_eareg16: | call_far_pe: push offset call_far_base |
| jmp i286x_selector | |
| register_eareg16: | |
| INT_NUM(6) | INT_NUM(6) |
| } | } |
| } | } |
| Line 1838 I286 jmp_far_ea16(void) { | Line 1842 I286 jmp_far_ea16(void) { |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| call i286_memoryread_w | call i286_memoryread_w |
| mov I286_CS, ax | mov I286_CS, ax |
| and eax, 0000ffffh | movzx eax, ax |
| test byte ptr (I286_MSW), MSW_PE | |
| jne short jmp_far_pe | |
| shl eax, 4 // make segreg | shl eax, 4 // make segreg |
| mov CS_BASE, eax | jmp_far_base: mov CS_BASE, eax |
| RESET_XPREFETCH | RESET_XPREFETCH |
| ret | ret |
| align 4 | |
| register_eareg16: | jmp_far_pe: push offset jmp_far_base |
| jmp i286x_selector | |
| register_eareg16: | |
| INT_NUM(6) | INT_NUM(6) |
| } | } |
| } | } |