|
|
| version 1.2, 2003/10/17 07:17:20 | version 1.4, 2003/10/17 12:49:52 |
|---|---|
| Line 29 I286EXT i286c_rep_insw(void) { | Line 29 I286EXT i286c_rep_insw(void) { |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIRx2; | SINT16 stp = STRING_DIRx2; |
| do { | do { |
| WORD dat = iocore_inp16(I286_DX); | UINT16 dat = iocore_inp16(I286_DX); |
| i286_memorywrite_w(I286_DI + ES_BASE, dat); | i286_memorywrite_w(I286_DI + ES_BASE, dat); |
| I286_DI += stp; | I286_DI += stp; |
| I286_CLOCK(4) | I286_CLOCK(4) |
| Line 59 I286EXT i286c_rep_outsw(void) { | Line 59 I286EXT i286c_rep_outsw(void) { |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIRx2; | SINT16 stp = STRING_DIRx2; |
| do { | do { |
| WORD dat = i286_memoryread_w(I286_SI + DS_FIX); | UINT16 dat = i286_memoryread_w(I286_SI + DS_FIX); |
| I286_SI += stp; | I286_SI += stp; |
| iocore_out16(I286_DX, dat); | iocore_out16(I286_DX, dat); |
| I286_CLOCK(4) | I286_CLOCK(4) |
| Line 69 I286EXT i286c_rep_outsw(void) { | Line 69 I286EXT i286c_rep_outsw(void) { |
| // ---------------------------------------------------------------------- movs | // ---------------------------------------------------------------------- movs |
| #if 1 | |
| I286EXT i286c_rep_movsb(void) { | |
| I286_CLOCK(5) | |
| if (I286_CX) { | |
| SINT16 stp = STRING_DIR; | |
| while(1) { | |
| BYTE dat = i286_memoryread(I286_SI + DS_FIX); | |
| i286_memorywrite(I286_DI + ES_BASE, dat); | |
| I286_SI += stp; | |
| I286_DI += stp; | |
| I286_CLOCK(4) | |
| I286_CX--; | |
| if (!I286_CX) { | |
| break; | |
| } | |
| if (nevent.remainclock <= 0) { | |
| I286_IP -= i286reg.prefix + 1; | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| I286EXT i286c_rep_movsw(void) { | |
| I286_CLOCK(5) | |
| if (I286_CX) { | |
| SINT16 stp = STRING_DIRx2; | |
| while(1) { | |
| UINT16 dat = i286_memoryread_w(I286_SI + DS_FIX); | |
| i286_memorywrite_w(I286_DI + ES_BASE, dat); | |
| I286_SI += stp; | |
| I286_DI += stp; | |
| I286_CLOCK(4) | |
| I286_CX--; | |
| if (!I286_CX) { | |
| break; | |
| } | |
| if (nevent.remainclock <= 0) { | |
| I286_IP -= i286reg.prefix + 1; | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| #else | |
| I286EXT i286c_rep_movsb(void) { | I286EXT i286c_rep_movsb(void) { |
| I286_CLOCK(5) | I286_CLOCK(5) |
| Line 90 I286EXT i286c_rep_movsw(void) { | Line 137 I286EXT i286c_rep_movsw(void) { |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIRx2; | SINT16 stp = STRING_DIRx2; |
| do { | do { |
| WORD dat = i286_memoryread_w(I286_SI + DS_FIX); | UINT16 dat = i286_memoryread_w(I286_SI + DS_FIX); |
| i286_memorywrite_w(I286_DI + ES_BASE, dat); | i286_memorywrite_w(I286_DI + ES_BASE, dat); |
| I286_SI += stp; | I286_SI += stp; |
| I286_DI += stp; | I286_DI += stp; |
| Line 98 I286EXT i286c_rep_movsw(void) { | Line 145 I286EXT i286c_rep_movsw(void) { |
| } while(--I286_CX); | } while(--I286_CX); |
| } | } |
| } | } |
| #endif | |
| // ---------------------------------------------------------------------- lods | // ---------------------------------------------------------------------- lods |
| #if 1 | |
| I286EXT i286c_rep_lodsb(void) { | |
| I286_CLOCK(5) | |
| if (I286_CX) { | |
| SINT16 stp = STRING_DIR; | |
| while(1) { | |
| I286_AL = i286_memoryread(I286_SI + DS_FIX); | |
| I286_SI += stp; | |
| I286_CLOCK(4) | |
| I286_CX--; | |
| if (!I286_CX) { | |
| break; | |
| } | |
| if (nevent.remainclock <= 0) { | |
| I286_IP -= i286reg.prefix + 1; | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| I286EXT i286c_rep_lodsw(void) { | |
| I286_CLOCK(5) | |
| if (I286_CX) { | |
| SINT16 stp = STRING_DIRx2; | |
| while(1) { | |
| I286_AX = i286_memoryread_w(I286_SI + DS_FIX); | |
| I286_SI += stp; | |
| I286_CLOCK(4) | |
| I286_CX--; | |
| if (!I286_CX) { | |
| break; | |
| } | |
| if (nevent.remainclock <= 0) { | |
| I286_IP -= i286reg.prefix + 1; | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| #else | |
| I286EXT i286c_rep_lodsb(void) { | I286EXT i286c_rep_lodsb(void) { |
| I286_CLOCK(5) | I286_CLOCK(5) |
| Line 126 I286EXT i286c_rep_lodsw(void) { | Line 217 I286EXT i286c_rep_lodsw(void) { |
| } while(--I286_CX); | } while(--I286_CX); |
| } | } |
| } | } |
| #endif | |
| // ---------------------------------------------------------------------- stos | // ---------------------------------------------------------------------- stos |
| #if 1 | |
| I286EXT i286c_rep_stosb(void) { | |
| I286_CLOCK(4) | |
| if (I286_CX) { | |
| SINT16 stp = STRING_DIR; | |
| while(1) { | |
| i286_memorywrite(I286_DI + ES_BASE, I286_AL); | |
| I286_DI += stp; | |
| I286_CLOCK(3) | |
| I286_CX--; | |
| if (!I286_CX) { | |
| break; | |
| } | |
| if (nevent.remainclock <= 0) { | |
| I286_IP -= i286reg.prefix + 1; | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| I286EXT i286c_rep_stosw(void) { | |
| I286_CLOCK(4) | |
| if (I286_CX) { | |
| SINT16 stp = STRING_DIRx2; | |
| while(1) { | |
| i286_memorywrite_w(I286_DI + ES_BASE, I286_AX); | |
| I286_DI += stp; | |
| I286_CLOCK(3) | |
| I286_CX--; | |
| if (!I286_CX) { | |
| break; | |
| } | |
| if (nevent.remainclock <= 0) { | |
| I286_IP -= i286reg.prefix + 1; | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| #else | |
| I286EXT i286c_rep_stosb(void) { | I286EXT i286c_rep_stosb(void) { |
| I286_CLOCK(4) | I286_CLOCK(4) |
| Line 154 I286EXT i286c_rep_stosw(void) { | Line 289 I286EXT i286c_rep_stosw(void) { |
| } while(--I286_CX); | } while(--I286_CX); |
| } | } |
| } | } |
| #endif | |
| // ---------------------------------------------------------------------- cmps | // ---------------------------------------------------------------------- cmps |
| Line 163 I286EXT i286c_repe_cmpsb(void) { | Line 299 I286EXT i286c_repe_cmpsb(void) { |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIR; | SINT16 stp = STRING_DIR; |
| do { | do { |
| DWORD res; | UINT res; |
| DWORD dst = i286_memoryread(I286_SI + DS_FIX); | UINT dst = i286_memoryread(I286_SI + DS_FIX); |
| DWORD src = i286_memoryread(I286_DI + ES_BASE); | UINT src = i286_memoryread(I286_DI + ES_BASE); |
| I286_SI += stp; | I286_SI += stp; |
| I286_DI += stp; | I286_DI += stp; |
| I286_CLOCK(9) | I286_CLOCK(9) |
| Line 181 I286EXT i286c_repne_cmpsb(void) { | Line 317 I286EXT i286c_repne_cmpsb(void) { |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIR; | SINT16 stp = STRING_DIR; |
| do { | do { |
| DWORD res; | UINT res; |
| DWORD dst = i286_memoryread(I286_SI + DS_FIX); | UINT dst = i286_memoryread(I286_SI + DS_FIX); |
| DWORD src = i286_memoryread(I286_DI + ES_BASE); | UINT src = i286_memoryread(I286_DI + ES_BASE); |
| I286_SI += stp; | I286_SI += stp; |
| I286_DI += stp; | I286_DI += stp; |
| I286_CLOCK(9) | I286_CLOCK(9) |
| Line 199 I286EXT i286c_repe_cmpsw(void) { | Line 335 I286EXT i286c_repe_cmpsw(void) { |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIRx2; | SINT16 stp = STRING_DIRx2; |
| do { | do { |
| DWORD res; | UINT32 res; |
| DWORD dst = i286_memoryread_w(I286_SI + DS_FIX); | UINT32 dst = i286_memoryread_w(I286_SI + DS_FIX); |
| DWORD src = i286_memoryread_w(I286_DI + ES_BASE); | UINT32 src = i286_memoryread_w(I286_DI + ES_BASE); |
| I286_SI += stp; | I286_SI += stp; |
| I286_DI += stp; | I286_DI += stp; |
| I286_CLOCK(9) | I286_CLOCK(9) |
| Line 217 I286EXT i286c_repne_cmpsw(void) { | Line 353 I286EXT i286c_repne_cmpsw(void) { |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIRx2; | SINT16 stp = STRING_DIRx2; |
| do { | do { |
| DWORD res; | UINT32 res; |
| DWORD dst = i286_memoryread_w(I286_SI + DS_FIX); | UINT32 dst = i286_memoryread_w(I286_SI + DS_FIX); |
| DWORD src = i286_memoryread_w(I286_DI + ES_BASE); | UINT32 src = i286_memoryread_w(I286_DI + ES_BASE); |
| I286_SI += stp; | I286_SI += stp; |
| I286_DI += stp; | I286_DI += stp; |
| I286_CLOCK(9) | I286_CLOCK(9) |
| Line 236 I286EXT i286c_repe_scasb(void) { | Line 372 I286EXT i286c_repe_scasb(void) { |
| I286_CLOCK(5) | I286_CLOCK(5) |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIR; | SINT16 stp = STRING_DIR; |
| DWORD dst = I286_AL; | UINT dst = I286_AL; |
| do { | do { |
| DWORD res; | UINT res; |
| DWORD src = i286_memoryread(I286_DI + ES_BASE); | UINT src = i286_memoryread(I286_DI + ES_BASE); |
| I286_DI += stp; | I286_DI += stp; |
| I286_CLOCK(8) | I286_CLOCK(8) |
| BYTE_SUB(res, dst, src) | BYTE_SUB(res, dst, src) |
| Line 253 I286EXT i286c_repne_scasb(void) { | Line 389 I286EXT i286c_repne_scasb(void) { |
| I286_CLOCK(5) | I286_CLOCK(5) |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIR; | SINT16 stp = STRING_DIR; |
| DWORD dst = I286_AL; | UINT dst = I286_AL; |
| do { | do { |
| DWORD res; | UINT res; |
| DWORD src = i286_memoryread(I286_DI + ES_BASE); | UINT src = i286_memoryread(I286_DI + ES_BASE); |
| I286_DI += stp; | I286_DI += stp; |
| I286_CLOCK(8) | I286_CLOCK(8) |
| BYTE_SUB(res, dst, src) | BYTE_SUB(res, dst, src) |
| Line 270 I286EXT i286c_repe_scasw(void) { | Line 406 I286EXT i286c_repe_scasw(void) { |
| I286_CLOCK(5) | I286_CLOCK(5) |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIRx2; | SINT16 stp = STRING_DIRx2; |
| DWORD dst = I286_AX; | UINT32 dst = I286_AX; |
| do { | do { |
| DWORD res; | UINT32 res; |
| DWORD src = i286_memoryread_w(I286_DI + ES_BASE); | UINT32 src = i286_memoryread_w(I286_DI + ES_BASE); |
| I286_DI += stp; | I286_DI += stp; |
| I286_CLOCK(8) | I286_CLOCK(8) |
| WORD_SUB(res, dst, src) | WORD_SUB(res, dst, src) |
| Line 287 I286EXT i286c_repne_scasw(void) { | Line 423 I286EXT i286c_repne_scasw(void) { |
| I286_CLOCK(5) | I286_CLOCK(5) |
| if (I286_CX) { | if (I286_CX) { |
| SINT16 stp = STRING_DIRx2; | SINT16 stp = STRING_DIRx2; |
| DWORD dst = I286_AX; | UINT32 dst = I286_AX; |
| do { | do { |
| DWORD res; | UINT32 res; |
| DWORD src = i286_memoryread_w(I286_DI + ES_BASE); | UINT32 src = i286_memoryread_w(I286_DI + ES_BASE); |
| I286_DI += stp; | I286_DI += stp; |
| I286_CLOCK(8) | I286_CLOCK(8) |
| WORD_SUB(res, dst, src) | WORD_SUB(res, dst, src) |