|
|
| version 1.2, 2003/10/19 14:56:15 | version 1.6, 2004/02/18 20:11:36 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "i286.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 1401 I286 div_ea8(void) { | Line 1400 I286 div_ea8(void) { |
| movzx ebp, byte ptr I286_REG[eax] | movzx ebp, byte ptr I286_REG[eax] |
| GET_NEXTPRE2 | GET_NEXTPRE2 |
| jmp divcheck | jmp divcheck |
| MEMORY_EA8(22) | MEMORY_EA8(17) |
| movzx ebp, byte ptr I286_MEM[ecx] | movzx ebp, byte ptr I286_MEM[ecx] |
| jmp divcheck | jmp divcheck |
| EXTMEM_EA8 | EXTMEM_EA8 |
| Line 1433 I286 idiv_ea8(void) { | Line 1432 I286 idiv_ea8(void) { |
| movsx ebp, byte ptr I286_REG[eax] | movsx ebp, byte ptr I286_REG[eax] |
| GET_NEXTPRE2 | GET_NEXTPRE2 |
| jmp idivcheck | jmp idivcheck |
| MEMORY_EA8(25) | MEMORY_EA8(20) |
| movsx ebp, byte ptr I286_MEM[ecx] | movsx ebp, byte ptr I286_MEM[ecx] |
| jmp idivcheck | jmp idivcheck |
| EXTMEM_EA8 | EXTMEM_EA8 |
| Line 1576 I286 imul_ea16(void) { | Line 1575 I286 imul_ea16(void) { |
| I286 div_ea16(void) { | I286 div_ea16(void) { |
| __asm { | __asm { |
| PREPART_EA16(17) | PREPART_EA16(22) |
| movzx ebp, word ptr I286_REG[eax*2] | movzx ebp, word ptr I286_REG[eax*2] |
| GET_NEXTPRE2 | GET_NEXTPRE2 |
| jmp divcheck | jmp divcheck |
| Line 1609 I286 div_ea16(void) { | Line 1608 I286 div_ea16(void) { |
| I286 idiv_ea16(void) { | I286 idiv_ea16(void) { |
| __asm { | __asm { |
| PREPART_EA16(20) | PREPART_EA16(25) |
| movsx ebp, word ptr I286_REG[eax*2] | movsx ebp, word ptr I286_REG[eax*2] |
| GET_NEXTPRE2 | GET_NEXTPRE2 |
| jmp idivcheck | jmp idivcheck |
| 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) |
| } | } |
| } | } |