|
|
| version 1.6, 2003/11/29 00:36:00 | version 1.10, 2003/12/09 15:49:14 |
|---|---|
| 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 "memory.h" |
| #include "pccore.h" | #include "pccore.h" |
| Line 70 I286EXT i286c_rep_outsw(void) { | Line 70 I286EXT i286c_rep_outsw(void) { |
| // ---------------------------------------------------------------------- movs | // ---------------------------------------------------------------------- movs |
| #if 1 | |
| I286EXT i286c_rep_movsb(void) { | |
| UINT16 r_cx; | |
| int stp; | |
| UINT16 r_si; | |
| UINT16 r_di; | |
| I286_WORKCLOCK(5); | |
| r_cx = I286_CX; | |
| if (r_cx) { | |
| stp = STRING_DIR; | |
| r_si = I286_SI; | |
| r_di = I286_DI; | |
| while(1) { | |
| REG8 dat = i286_memoryread(DS_FIX + r_si); | |
| i286_memorywrite(ES_BASE + r_di, dat); | |
| r_si += stp; | |
| r_di += stp; | |
| I286_WORKCLOCK(4); | |
| r_cx--; | |
| if (!r_cx) { | |
| break; | |
| } | |
| if (I286_REMCLOCK <= 0) { | |
| I286_IP -= I286_PREFIX + 1; | |
| break; | |
| } | |
| } | |
| I286_CX = r_cx; | |
| I286_SI = r_si; | |
| I286_DI = r_di; | |
| } | |
| } | |
| I286EXT i286c_rep_movsw(void) { | |
| UINT16 r_cx; | |
| int stp; | |
| UINT16 r_si; | |
| UINT16 r_di; | |
| I286_WORKCLOCK(5); | |
| r_cx = I286_CX; | |
| if (r_cx) { | |
| stp = STRING_DIRx2; | |
| r_si = I286_SI; | |
| r_di = I286_DI; | |
| while(1) { | |
| REG16 dat = i286_memoryread_w(DS_FIX + r_si); | |
| i286_memorywrite_w(ES_BASE + r_di, dat); | |
| r_si += stp; | |
| r_di += stp; | |
| I286_WORKCLOCK(4); | |
| r_cx--; | |
| if (!r_cx) { | |
| break; | |
| } | |
| if (I286_REMCLOCK <= 0) { | |
| I286_IP -= I286_PREFIX + 1; | |
| break; | |
| } | |
| } | |
| I286_CX = r_cx; | |
| I286_SI = r_si; | |
| I286_DI = r_di; | |
| } | |
| } | |
| #else | |
| I286EXT i286c_rep_movsb(void) { | I286EXT i286c_rep_movsb(void) { |
| I286_WORKCLOCK(5); | I286_WORKCLOCK(5); |
| Line 86 I286EXT i286c_rep_movsb(void) { | Line 155 I286EXT i286c_rep_movsb(void) { |
| break; | break; |
| } | } |
| if (I286_REMCLOCK <= 0) { | if (I286_REMCLOCK <= 0) { |
| I286_IP -= i286reg.prefix + 1; | I286_IP -= I286_PREFIX + 1; |
| break; | break; |
| } | } |
| } | } |
| Line 109 I286EXT i286c_rep_movsw(void) { | Line 178 I286EXT i286c_rep_movsw(void) { |
| break; | break; |
| } | } |
| if (I286_REMCLOCK <= 0) { | if (I286_REMCLOCK <= 0) { |
| I286_IP -= i286reg.prefix + 1; | I286_IP -= I286_PREFIX + 1; |
| break; | break; |
| } | } |
| } | } |
| } | } |
| } | } |
| #endif | |
| // ---------------------------------------------------------------------- lods | // ---------------------------------------------------------------------- lods |
| Line 133 I286EXT i286c_rep_lodsb(void) { | Line 203 I286EXT i286c_rep_lodsb(void) { |
| break; | break; |
| } | } |
| if (I286_REMCLOCK <= 0) { | if (I286_REMCLOCK <= 0) { |
| I286_IP -= i286reg.prefix + 1; | I286_IP -= I286_PREFIX + 1; |
| break; | break; |
| } | } |
| } | } |
| Line 154 I286EXT i286c_rep_lodsw(void) { | Line 224 I286EXT i286c_rep_lodsw(void) { |
| break; | break; |
| } | } |
| if (I286_REMCLOCK <= 0) { | if (I286_REMCLOCK <= 0) { |
| I286_IP -= i286reg.prefix + 1; | I286_IP -= I286_PREFIX + 1; |
| break; | break; |
| } | } |
| } | } |
| Line 178 I286EXT i286c_rep_stosb(void) { | Line 248 I286EXT i286c_rep_stosb(void) { |
| break; | break; |
| } | } |
| if (I286_REMCLOCK <= 0) { | if (I286_REMCLOCK <= 0) { |
| I286_IP -= i286reg.prefix + 1; | I286_IP -= I286_PREFIX + 1; |
| break; | break; |
| } | } |
| } | } |
| Line 199 I286EXT i286c_rep_stosw(void) { | Line 269 I286EXT i286c_rep_stosw(void) { |
| break; | break; |
| } | } |
| if (I286_REMCLOCK <= 0) { | if (I286_REMCLOCK <= 0) { |
| I286_IP -= i286reg.prefix + 1; | I286_IP -= I286_PREFIX + 1; |
| break; | break; |
| } | } |
| } | } |
| Line 221 I286EXT i286c_repe_cmpsb(void) { | Line 291 I286EXT i286c_repe_cmpsb(void) { |
| I286_SI += stp; | I286_SI += stp; |
| I286_DI += stp; | I286_DI += stp; |
| I286_WORKCLOCK(9); | I286_WORKCLOCK(9); |
| BYTE_SUB(res, dst, src) | SUBBYTE(res, dst, src) |
| I286_CX--; | I286_CX--; |
| } while((I286_CX) && (I286_FLAGL & Z_FLAG)); | } while((I286_CX) && (I286_FLAGL & Z_FLAG)); |
| } | } |
| Line 239 I286EXT i286c_repne_cmpsb(void) { | Line 309 I286EXT i286c_repne_cmpsb(void) { |
| I286_SI += stp; | I286_SI += stp; |
| I286_DI += stp; | I286_DI += stp; |
| I286_WORKCLOCK(9); | I286_WORKCLOCK(9); |
| BYTE_SUB(res, dst, src) | SUBBYTE(res, dst, src) |
| I286_CX--; | I286_CX--; |
| } while((I286_CX) && (!(I286_FLAGL & Z_FLAG))); | } while((I286_CX) && (!(I286_FLAGL & Z_FLAG))); |
| } | } |
| Line 257 I286EXT i286c_repe_cmpsw(void) { | Line 327 I286EXT i286c_repe_cmpsw(void) { |
| I286_SI += stp; | I286_SI += stp; |
| I286_DI += stp; | I286_DI += stp; |
| I286_WORKCLOCK(9); | I286_WORKCLOCK(9); |
| WORD_SUB(res, dst, src) | SUBWORD(res, dst, src) |
| I286_CX--; | I286_CX--; |
| } while((I286_CX) && (I286_FLAGL & Z_FLAG)); | } while((I286_CX) && (I286_FLAGL & Z_FLAG)); |
| } | } |
| Line 275 I286EXT i286c_repne_cmpsw(void) { | Line 345 I286EXT i286c_repne_cmpsw(void) { |
| I286_SI += stp; | I286_SI += stp; |
| I286_DI += stp; | I286_DI += stp; |
| I286_WORKCLOCK(9); | I286_WORKCLOCK(9); |
| WORD_SUB(res, dst, src) | SUBWORD(res, dst, src) |
| I286_CX--; | I286_CX--; |
| } while((I286_CX) && (!(I286_FLAGL & Z_FLAG))); | } while((I286_CX) && (!(I286_FLAGL & Z_FLAG))); |
| } | } |
| Line 295 I286EXT i286c_repe_scasb(void) { | Line 365 I286EXT i286c_repe_scasb(void) { |
| UINT src = i286_memoryread(I286_DI + ES_BASE); | UINT src = i286_memoryread(I286_DI + ES_BASE); |
| I286_DI += stp; | I286_DI += stp; |
| I286_WORKCLOCK(8); | I286_WORKCLOCK(8); |
| BYTE_SUB(res, dst, src) | SUBBYTE(res, dst, src) |
| I286_CX--; | I286_CX--; |
| } while((I286_CX) && (I286_FLAGL & Z_FLAG)); | } while((I286_CX) && (I286_FLAGL & Z_FLAG)); |
| } | } |
| Line 312 I286EXT i286c_repne_scasb(void) { | Line 382 I286EXT i286c_repne_scasb(void) { |
| UINT src = i286_memoryread(I286_DI + ES_BASE); | UINT src = i286_memoryread(I286_DI + ES_BASE); |
| I286_DI += stp; | I286_DI += stp; |
| I286_WORKCLOCK(8); | I286_WORKCLOCK(8); |
| BYTE_SUB(res, dst, src) | SUBBYTE(res, dst, src) |
| I286_CX--; | I286_CX--; |
| } while((I286_CX) && (!(I286_FLAGL & Z_FLAG))); | } while((I286_CX) && (!(I286_FLAGL & Z_FLAG))); |
| } | } |
| Line 329 I286EXT i286c_repe_scasw(void) { | Line 399 I286EXT i286c_repe_scasw(void) { |
| UINT32 src = i286_memoryread_w(I286_DI + ES_BASE); | UINT32 src = i286_memoryread_w(I286_DI + ES_BASE); |
| I286_DI += stp; | I286_DI += stp; |
| I286_WORKCLOCK(8); | I286_WORKCLOCK(8); |
| WORD_SUB(res, dst, src) | SUBWORD(res, dst, src) |
| I286_CX--; | I286_CX--; |
| } while((I286_CX) && (I286_FLAGL & Z_FLAG)); | } while((I286_CX) && (I286_FLAGL & Z_FLAG)); |
| } | } |
| Line 346 I286EXT i286c_repne_scasw(void) { | Line 416 I286EXT i286c_repne_scasw(void) { |
| UINT32 src = i286_memoryread_w(I286_DI + ES_BASE); | UINT32 src = i286_memoryread_w(I286_DI + ES_BASE); |
| I286_DI += stp; | I286_DI += stp; |
| I286_WORKCLOCK(8); | I286_WORKCLOCK(8); |
| WORD_SUB(res, dst, src) | SUBWORD(res, dst, src) |
| I286_CX--; | I286_CX--; |
| } while((I286_CX) && (!(I286_FLAGL & Z_FLAG))); | } while((I286_CX) && (!(I286_FLAGL & Z_FLAG))); |
| } | } |