|
|
| version 1.10, 2003/12/04 13:54:28 | version 1.16, 2005/02/07 14:46:10 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "i286.h" | #include "cpucore.h" |
| #include "i286c.h" | #include "i286c.h" |
| #include "memory.h" | |
| #include "i286c.mcr" | #include "i286c.mcr" |
| Line 47 I286_F6 _not_ea8(UINT op) { | Line 46 I286_F6 _not_ea8(UINT op) { |
| I286_F6 _neg_ea8(UINT op) { | I286_F6 _neg_ea8(UINT op) { |
| BYTE *out; | UINT8 *out; |
| UINT src; | UINT src; |
| UINT dst; | UINT dst; |
| UINT32 madr; | UINT32 madr; |
| Line 62 I286_F6 _neg_ea8(UINT op) { | Line 61 I286_F6 _neg_ea8(UINT op) { |
| if (madr >= I286_MEMWRITEMAX) { | if (madr >= I286_MEMWRITEMAX) { |
| src = i286_memoryread(madr); | src = i286_memoryread(madr); |
| NEGBYTE(dst, src) | NEGBYTE(dst, src) |
| i286_memorywrite(madr, (BYTE)dst); | i286_memorywrite(madr, (REG8)dst); |
| return; | return; |
| } | } |
| out = mem + madr; | out = mem + madr; |
| } | } |
| src = *out; | src = *out; |
| NEGBYTE(dst, src) | NEGBYTE(dst, src) |
| *out = (BYTE)dst; | *out = (UINT8)dst; |
| } | } |
| I286_F6 _mul_ea8(UINT op) { | I286_F6 _mul_ea8(UINT op) { |
| BYTE src; | UINT8 src; |
| UINT res; | UINT res; |
| if (op >= 0xc0) { | if (op >= 0xc0) { |
| Line 91 I286_F6 _mul_ea8(UINT op) { | Line 90 I286_F6 _mul_ea8(UINT op) { |
| I286_F6 _imul_ea8(UINT op) { | I286_F6 _imul_ea8(UINT op) { |
| BYTE src; | UINT8 src; |
| SINT32 res; | SINT32 res; |
| if (op >= 0xc0) { | if (op >= 0xc0) { |
| Line 109 I286_F6 _imul_ea8(UINT op) { | Line 108 I286_F6 _imul_ea8(UINT op) { |
| I286_F6 _div_ea8(UINT op) { | I286_F6 _div_ea8(UINT op) { |
| UINT16 tmp; | UINT16 tmp; |
| BYTE src; | UINT8 src; |
| UINT16 ip; | UINT16 ip; |
| ip = I286_IP; | ip = I286_IP; |
| Line 134 I286_F6 _div_ea8(UINT op) { | Line 133 I286_F6 _div_ea8(UINT op) { |
| I286_F6 _idiv_ea8(UINT op) { | I286_F6 _idiv_ea8(UINT op) { |
| SINT16 tmp, r; | SINT16 tmp, r; |
| char src; | SINT8 src; |
| UINT16 ip; | UINT16 ip; |
| ip = I286_IP; | ip = I286_IP; |
| Line 150 I286_F6 _idiv_ea8(UINT op) { | Line 149 I286_F6 _idiv_ea8(UINT op) { |
| if (src) { | if (src) { |
| r = tmp / src; | r = tmp / src; |
| if (!((r + 0x80) & 0xff00)) { | if (!((r + 0x80) & 0xff00)) { |
| I286_AL = (char)r; | I286_AL = (UINT8)r; |
| I286_AH = tmp % src; | I286_AH = tmp % src; |
| return; | return; |
| } | } |
| Line 278 I286_F6 _div_ea16(UINT op) { | Line 277 I286_F6 _div_ea16(UINT op) { |
| } | } |
| tmp = (I286_DX << 16) + I286_AX; | tmp = (I286_DX << 16) + I286_AX; |
| if ((src) && (tmp < (src << 16))) { | if ((src) && (tmp < (src << 16))) { |
| I286_AX = (SINT16)(tmp / src); | I286_AX = tmp / src; |
| I286_DX = (SINT16)(tmp % src); | I286_DX = tmp % src; |
| } | } |
| else { | else { |
| INT_NUM(0, ip - 2); // 80x86 | INT_NUM(0, ip - 2); // 80x86 |