|
|
| version 1.1.1.1, 2003/10/16 17:57:43 | version 1.8, 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 "i286c.mcr" | #include "i286c.mcr" |
| #include "memory.h" | |
| #include "nevent.h" | |
| // -------------------------------------------------------- opecode 0x80,1,2,3 | // -------------------------------------------------------- opecode 0x80,1,2,3 |
| // ----- reg8 | // ----- reg8 |
| I286_8X _add_r8_i(BYTE *p) { | I286_8X _add_r8_i(UINT8 *p) { |
| DWORD src, dst, res; | UINT src; |
| UINT dst; | |
| UINT res; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = *p; | dst = *p; |
| ADDBYTE(res, dst, src); | ADDBYTE(res, dst, src); |
| *p = (BYTE)res; | *p = (UINT8)res; |
| } | } |
| I286_8X _or_r8_i(BYTE *p) { | I286_8X _or_r8_i(UINT8 *p) { |
| DWORD src; | UINT src; |
| UINT dst; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| ORBYTE((*p), src); | dst = *p; |
| ORBYTE(dst, src); | |
| *p = (UINT8)dst; | |
| } | } |
| I286_8X _adc_r8_i(BYTE *p) { | I286_8X _adc_r8_i(UINT8 *p) { |
| DWORD src, dst, res; | UINT src; |
| UINT dst; | |
| UINT res; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = *p; | dst = *p; |
| ADCBYTE(res, dst, src); | ADCBYTE(res, dst, src); |
| *p = (BYTE)res; | *p = (UINT8)res; |
| } | } |
| I286_8X _sbb_r8_i(BYTE *p) { | I286_8X _sbb_r8_i(UINT8 *p) { |
| DWORD src, dst, res; | UINT src; |
| UINT dst; | |
| UINT res; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = *p; | dst = *p; |
| SBBBYTE(res, dst, src); | SBBBYTE(res, dst, src); |
| *p = (BYTE)res; | *p = (UINT8)res; |
| } | } |
| I286_8X _and_r8_i(BYTE *p) { | I286_8X _and_r8_i(UINT8 *p) { |
| DWORD src; | UINT src; |
| UINT dst; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| ANDBYTE((*p), src); | dst = *p; |
| ANDBYTE(dst, src); | |
| *p = (UINT8)dst; | |
| } | } |
| I286_8X _sub_r8_i(BYTE *p) { | I286_8X _sub_r8_i(UINT8 *p) { |
| DWORD src, dst, res; | UINT src; |
| UINT dst; | |
| UINT res; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = *p; | dst = *p; |
| BYTE_SUB(res, dst, src); | SUBBYTE(res, dst, src); |
| *p = (BYTE)res; | *p = (UINT8)res; |
| } | } |
| I286_8X _xor_r8_i(BYTE *p) { | I286_8X _xor_r8_i(UINT8 *p) { |
| DWORD src; | UINT src; |
| UINT dst; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| BYTE_XOR((*p), src); | dst = *p; |
| XORBYTE(dst, src); | |
| *p = (UINT8)dst; | |
| } | } |
| I286_8X _cmp_r8_i(BYTE *p) { | I286_8X _cmp_r8_i(UINT8 *p) { |
| DWORD src, dst, res; | UINT src; |
| UINT dst; | |
| UINT res; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = *p; | dst = *p; |
| BYTE_SUB(res, dst, src); | SUBBYTE(res, dst, src); |
| } | } |
| // ----- ext8 | // ----- ext8 |
| I286_8X _add_ext8_i(DWORD madr) { | I286_8X _add_ext8_i(UINT32 madr) { |
| DWORD src, dst, res; | UINT src; |
| UINT dst; | |
| UINT res; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = i286_memoryread(madr); | dst = i286_memoryread(madr); |
| ADDBYTE(res, dst, src); | ADDBYTE(res, dst, src); |
| i286_memorywrite(madr, (BYTE)res); | i286_memorywrite(madr, (REG8)res); |
| } | } |
| I286_8X _or_ext8_i(DWORD madr) { | I286_8X _or_ext8_i(UINT32 madr) { |
| DWORD src, dst; | UINT src; |
| UINT dst; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = i286_memoryread(madr); | dst = i286_memoryread(madr); |
| ORBYTE(dst, src); | ORBYTE(dst, src); |
| i286_memorywrite(madr, (BYTE)dst); | i286_memorywrite(madr, (REG8)dst); |
| } | } |
| I286_8X _adc_ext8_i(DWORD madr) { | I286_8X _adc_ext8_i(UINT32 madr) { |
| DWORD src, dst, res; | UINT src; |
| UINT dst; | |
| UINT res; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = i286_memoryread(madr); | dst = i286_memoryread(madr); |
| ADCBYTE(res, dst, src); | ADCBYTE(res, dst, src); |
| i286_memorywrite(madr, (BYTE)res); | i286_memorywrite(madr, (REG8)res); |
| } | } |
| I286_8X _sbb_ext8_i(DWORD madr) { | I286_8X _sbb_ext8_i(UINT32 madr) { |
| DWORD src, dst, res; | UINT src; |
| UINT dst; | |
| UINT res; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = i286_memoryread(madr); | dst = i286_memoryread(madr); |
| SBBBYTE(res, dst, src); | SBBBYTE(res, dst, src); |
| i286_memorywrite(madr, (BYTE)res); | i286_memorywrite(madr, (REG8)res); |
| } | } |
| I286_8X _and_ext8_i(DWORD madr) { | I286_8X _and_ext8_i(UINT32 madr) { |
| DWORD src, dst; | UINT src; |
| UINT dst; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = i286_memoryread(madr); | dst = i286_memoryread(madr); |
| ANDBYTE(dst, src); | ANDBYTE(dst, src); |
| i286_memorywrite(madr, (BYTE)dst); | i286_memorywrite(madr, (REG8)dst); |
| } | } |
| I286_8X _sub_ext8_i(DWORD madr) { | I286_8X _sub_ext8_i(UINT32 madr) { |
| DWORD src, dst, res; | UINT src; |
| UINT dst; | |
| UINT res; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = i286_memoryread(madr); | dst = i286_memoryread(madr); |
| BYTE_SUB(res, dst, src); | SUBBYTE(res, dst, src); |
| i286_memorywrite(madr, (BYTE)res); | i286_memorywrite(madr, (REG8)res); |
| } | } |
| I286_8X _xor_ext8_i(DWORD madr) { | I286_8X _xor_ext8_i(UINT32 madr) { |
| DWORD src, dst; | UINT src; |
| UINT dst; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = i286_memoryread(madr); | dst = i286_memoryread(madr); |
| BYTE_XOR(dst, src); | XORBYTE(dst, src); |
| i286_memorywrite(madr, (BYTE)dst); | i286_memorywrite(madr, (REG8)dst); |
| } | } |
| I286_8X _cmp_ext8_i(DWORD madr) { | I286_8X _cmp_ext8_i(UINT32 madr) { |
| DWORD src, dst, res; | UINT src; |
| UINT dst; | |
| UINT res; | |
| GET_PCBYTE(src) | GET_PCBYTE(src) |
| dst = i286_memoryread(madr); | dst = i286_memoryread(madr); |
| BYTE_SUB(res, dst, src); | SUBBYTE(res, dst, src); |
| } | } |
| Line 178 const I286OP8XEXT8 c_op8xext8_table[] = | Line 208 const I286OP8XEXT8 c_op8xext8_table[] = |
| // ----- reg16 | // ----- reg16 |
| I286_8X _add_r16_i(WORD *p, DWORD src) { | I286_8X _add_r16_i(UINT16 *p, UINT32 src) { |
| DWORD dst, res; | UINT32 dst; |
| UINT32 res; | |
| dst = *p; | dst = *p; |
| ADDWORD(res, dst, src); | ADDWORD(res, dst, src); |
| *p = (WORD)res; | *p = (UINT16)res; |
| } | } |
| I286_8X _or_r16_i(WORD *p, DWORD src) { | I286_8X _or_r16_i(UINT16 *p, UINT32 src) { |
| UINT32 dst; | |
| ORWORD((*p), src); | dst = *p; |
| ORWORD(dst, src); | |
| *p = (UINT16)dst; | |
| } | } |
| I286_8X _adc_r16_i(WORD *p, DWORD src) { | I286_8X _adc_r16_i(UINT16 *p, UINT32 src) { |
| DWORD dst, res; | UINT32 dst; |
| UINT32 res; | |
| dst = *p; | dst = *p; |
| ADCWORD(res, dst, src); | ADCWORD(res, dst, src); |
| *p = (WORD)res; | *p = (UINT16)res; |
| } | } |
| I286_8X _sbb_r16_i(WORD *p, DWORD src) { | I286_8X _sbb_r16_i(UINT16 *p, UINT32 src) { |
| DWORD dst, res; | UINT32 dst; |
| UINT32 res; | |
| dst = *p; | dst = *p; |
| SBBWORD(res, dst, src); | SBBWORD(res, dst, src); |
| *p = (WORD)res; | *p = (UINT16)res; |
| } | } |
| I286_8X _and_r16_i(WORD *p, DWORD src) { | I286_8X _and_r16_i(UINT16 *p, UINT32 src) { |
| UINT32 dst; | |
| ANDWORD((*p), src); | dst = *p; |
| ANDWORD(dst, src); | |
| *p = (UINT16)dst; | |
| } | } |
| I286_8X _sub_r16_i(WORD *p, DWORD src) { | I286_8X _sub_r16_i(UINT16 *p, UINT32 src) { |
| DWORD dst, res; | UINT32 dst; |
| UINT32 res; | |
| dst = *p; | dst = *p; |
| WORD_SUB(res, dst, src); | SUBWORD(res, dst, src); |
| *p = (WORD)res; | *p = (UINT16)res; |
| } | } |
| I286_8X _xor_r16_i(WORD *p, DWORD src) { | I286_8X _xor_r16_i(UINT16 *p, UINT32 src) { |
| WORD_XOR((*p), src); | UINT32 dst; |
| dst = *p; | |
| XORWORD(dst, src); | |
| *p = (UINT16)dst; | |
| } | } |
| I286_8X _cmp_r16_i(WORD *p, DWORD src) { | I286_8X _cmp_r16_i(UINT16 *p, UINT32 src) { |
| DWORD dst, res; | UINT32 dst; |
| UINT32 res; | |
| dst = *p; | dst = *p; |
| WORD_SUB(res, dst, src); | SUBWORD(res, dst, src); |
| } | } |
| // ----- ext16 | // ----- ext16 |
| I286_8X _add_ext16_i(DWORD madr, DWORD src) { | I286_8X _add_ext16_i(UINT32 madr, UINT32 src) { |
| DWORD dst, res; | UINT32 dst; |
| UINT32 res; | |
| dst = i286_memoryread_w(madr); | dst = i286_memoryread_w(madr); |
| ADDWORD(res, dst, src); | ADDWORD(res, dst, src); |
| i286_memorywrite_w(madr, (WORD)res); | i286_memorywrite_w(madr, (REG16)res); |
| } | } |
| I286_8X _or_ext16_i(DWORD madr, DWORD src) { | I286_8X _or_ext16_i(UINT32 madr, UINT32 src) { |
| DWORD dst; | UINT32 dst; |
| dst = i286_memoryread_w(madr); | dst = i286_memoryread_w(madr); |
| ORWORD(dst, src); | ORWORD(dst, src); |
| i286_memorywrite_w(madr, (WORD)dst); | i286_memorywrite_w(madr, (REG16)dst); |
| } | } |
| I286_8X _adc_ext16_i(DWORD madr, DWORD src) { | I286_8X _adc_ext16_i(UINT32 madr, UINT32 src) { |
| DWORD dst, res; | UINT32 dst; |
| UINT32 res; | |
| dst = i286_memoryread_w(madr); | dst = i286_memoryread_w(madr); |
| ADCWORD(res, dst, src); | ADCWORD(res, dst, src); |
| i286_memorywrite_w(madr, (WORD)res); | i286_memorywrite_w(madr, (REG16)res); |
| } | } |
| I286_8X _sbb_ext16_i(DWORD madr, DWORD src) { | I286_8X _sbb_ext16_i(UINT32 madr, UINT32 src) { |
| DWORD dst, res; | UINT32 dst; |
| UINT32 res; | |
| dst = i286_memoryread_w(madr); | dst = i286_memoryread_w(madr); |
| SBBWORD(res, dst, src); | SBBWORD(res, dst, src); |
| i286_memorywrite_w(madr, (WORD)res); | i286_memorywrite_w(madr, (REG16)res); |
| } | } |
| I286_8X _and_ext16_i(DWORD madr, DWORD src) { | I286_8X _and_ext16_i(UINT32 madr, UINT32 src) { |
| DWORD dst; | UINT32 dst; |
| dst = i286_memoryread_w(madr); | dst = i286_memoryread_w(madr); |
| ANDWORD(dst, src); | ANDWORD(dst, src); |
| i286_memorywrite_w(madr, (WORD)dst); | i286_memorywrite_w(madr, (REG16)dst); |
| } | } |
| I286_8X _sub_ext16_i(DWORD madr, DWORD src) { | I286_8X _sub_ext16_i(UINT32 madr, UINT32 src) { |
| DWORD dst, res; | UINT32 dst; |
| UINT32 res; | |
| dst = i286_memoryread_w(madr); | dst = i286_memoryread_w(madr); |
| WORD_SUB(res, dst, src); | SUBWORD(res, dst, src); |
| i286_memorywrite_w(madr, (WORD)res); | i286_memorywrite_w(madr, (REG16)res); |
| } | } |
| I286_8X _xor_ext16_i(DWORD madr, DWORD src) { | I286_8X _xor_ext16_i(UINT32 madr, UINT32 src) { |
| DWORD dst; | UINT32 dst; |
| dst = i286_memoryread_w(madr); | dst = i286_memoryread_w(madr); |
| WORD_XOR(dst, src); | XORWORD(dst, src); |
| i286_memorywrite_w(madr, (WORD)dst); | i286_memorywrite_w(madr, (REG16)dst); |
| } | } |
| I286_8X _cmp_ext16_i(DWORD madr, DWORD src) { | I286_8X _cmp_ext16_i(UINT32 madr, UINT32 src) { |
| DWORD dst, res; | UINT32 dst; |
| UINT32 res; | |
| dst = i286_memoryread_w(madr); | dst = i286_memoryread_w(madr); |
| WORD_SUB(res, dst, src); | SUBWORD(res, dst, src); |
| } | } |