|
|
| version 1.2, 2003/11/21 06:51:11 | version 1.5, 2003/12/01 10:45:46 |
|---|---|
| Line 97 I286FN v30segprefix_es(void) { // 26: | Line 97 I286FN v30segprefix_es(void) { // 26: |
| SS_FIX = ES_BASE; | SS_FIX = ES_BASE; |
| DS_FIX = ES_BASE; | DS_FIX = ES_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op[op](); | v30op[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 114 I286FN v30segprefix_cs(void) { // 2e: | Line 114 I286FN v30segprefix_cs(void) { // 2e: |
| SS_FIX = CS_BASE; | SS_FIX = CS_BASE; |
| DS_FIX = CS_BASE; | DS_FIX = CS_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op[op](); | v30op[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 131 I286FN v30segprefix_ss(void) { // 36: | Line 131 I286FN v30segprefix_ss(void) { // 36: |
| SS_FIX = SS_BASE; | SS_FIX = SS_BASE; |
| DS_FIX = SS_BASE; | DS_FIX = SS_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op[op](); | v30op[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 148 I286FN v30segprefix_ds(void) { // 3e: | Line 148 I286FN v30segprefix_ds(void) { // 3e: |
| SS_FIX = DS_BASE; | SS_FIX = DS_BASE; |
| DS_FIX = DS_BASE; | DS_FIX = DS_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op[op](); | v30op[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 178 I286FN v30mov_seg_ea(void) { // 8E: m | Line 178 I286FN v30mov_seg_ea(void) { // 8E: m |
| } | } |
| else { | else { |
| I286_WORKCLOCK(5); | I286_WORKCLOCK(5); |
| tmp = i286_memoryread_w(c_calc_ea_dst[op]()); | tmp = i286_memoryread_w(CALC_EA(op)); |
| } | } |
| switch(op & 0x18) { | switch(op & 0x18) { |
| case 0x00: // es | case 0x00: // es |
| Line 236 I286FN v30shift_ea8_data8(void) { // C | Line 236 I286FN v30shift_ea8_data8(void) { // C |
| } | } |
| else { | else { |
| I286_WORKCLOCK(8); | I286_WORKCLOCK(8); |
| madr = c_calc_ea_dst[op](); | madr = CALC_EA(op); |
| if (madr >= I286_MEMWRITEMAX) { | if (madr >= I286_MEMWRITEMAX) { |
| GET_PCBYTE(cl) | GET_PCBYTE(cl) |
| if ((op & 0x30) == 0x10) { // rotate with carry | if ((op & 0x30) == 0x10) { // rotate with carry |
| Line 276 I286FN v30shift_ea16_data8(void) { // | Line 276 I286FN v30shift_ea16_data8(void) { // |
| } | } |
| else { | else { |
| I286_WORKCLOCK(8); | I286_WORKCLOCK(8); |
| madr = c_calc_ea_dst[op](); | madr = CALC_EA(op); |
| if (INHIBIT_WORDP(madr)) { | if (INHIBIT_WORDP(madr)) { |
| GET_PCBYTE(cl); | GET_PCBYTE(cl); |
| if ((op & 0x30) == 0x10) { // rotate with carry | if ((op & 0x30) == 0x10) { // rotate with carry |
| Line 316 I286FN v30shift_ea8_cl(void) { // D2: | Line 316 I286FN v30shift_ea8_cl(void) { // D2: |
| } | } |
| else { | else { |
| I286_WORKCLOCK(8); | I286_WORKCLOCK(8); |
| madr = c_calc_ea_dst[op](); | madr = CALC_EA(op); |
| if (madr >= I286_MEMWRITEMAX) { | if (madr >= I286_MEMWRITEMAX) { |
| cl = I286_CL; | cl = I286_CL; |
| I286_WORKCLOCK(cl); | I286_WORKCLOCK(cl); |
| Line 356 I286FN v30shift_ea16_cl(void) { // D3 | Line 356 I286FN v30shift_ea16_cl(void) { // D3 |
| } | } |
| else { | else { |
| I286_WORKCLOCK(8); | I286_WORKCLOCK(8); |
| madr = c_calc_ea_dst[op](); | madr = CALC_EA(op); |
| if (INHIBIT_WORDP(madr)) { | if (INHIBIT_WORDP(madr)) { |
| cl = I286_CL; | cl = I286_CL; |
| I286_WORKCLOCK(cl); | I286_WORKCLOCK(cl); |
| Line 402 I286FN v30_aad(void) { // D5: AAD | Line 402 I286FN v30_aad(void) { // D5: AAD |
| I286_AL += (BYTE)(I286_AH * 10); | I286_AL += (BYTE)(I286_AH * 10); |
| I286_AH = 0; | I286_AH = 0; |
| I286_FLAGL &= ~(S_FLAG | Z_FLAG | P_FLAG); | I286_FLAGL &= ~(S_FLAG | Z_FLAG | P_FLAG); |
| I286_FLAGL |= szpcflag[I286_AL]; | I286_FLAGL |= BYTESZPF(I286_AL); |
| } | } |
| I286FN v30_xlat(void) { // D6: xlat | I286FN v30_xlat(void) { // D6: xlat |
| I286_WORKCLOCK(5); | I286_WORKCLOCK(5); |
| I286_AL = i286_memoryread(((I286_AL + I286_BX) & 0xffff) + DS_FIX); | I286_AL = i286_memoryread(LOW16(I286_AL + I286_BX) + DS_FIX); |
| } | } |
| I286FN v30_repne(void) { // F2: repne | I286FN v30_repne(void) { // F2: repne |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op_repne[op](); | v30op_repne[op](); |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 427 I286FN v30_repne(void) { // F2: repn | Line 427 I286FN v30_repne(void) { // F2: repn |
| I286FN v30_repe(void) { // F3: repe | I286FN v30_repe(void) { // F3: repe |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op_repe[op](); | v30op_repe[op](); |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 472 I286FN v30repe_segprefix_es(void) { | Line 472 I286FN v30repe_segprefix_es(void) { |
| DS_FIX = ES_BASE; | DS_FIX = ES_BASE; |
| SS_FIX = ES_BASE; | SS_FIX = ES_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op_repe[op](); | v30op_repe[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 489 I286FN v30repe_segprefix_cs(void) { | Line 489 I286FN v30repe_segprefix_cs(void) { |
| DS_FIX = CS_BASE; | DS_FIX = CS_BASE; |
| SS_FIX = CS_BASE; | SS_FIX = CS_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op_repe[op](); | v30op_repe[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 506 I286FN v30repe_segprefix_ss(void) { | Line 506 I286FN v30repe_segprefix_ss(void) { |
| DS_FIX = SS_BASE; | DS_FIX = SS_BASE; |
| SS_FIX = SS_BASE; | SS_FIX = SS_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op_repe[op](); | v30op_repe[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 523 I286FN v30repe_segprefix_ds(void) { | Line 523 I286FN v30repe_segprefix_ds(void) { |
| DS_FIX = DS_BASE; | DS_FIX = DS_BASE; |
| SS_FIX = DS_BASE; | SS_FIX = DS_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op_repe[op](); | v30op_repe[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 569 I286FN v30repne_segprefix_es(void) { | Line 569 I286FN v30repne_segprefix_es(void) { |
| DS_FIX = ES_BASE; | DS_FIX = ES_BASE; |
| SS_FIX = ES_BASE; | SS_FIX = ES_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op_repne[op](); | v30op_repne[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 586 I286FN v30repne_segprefix_cs(void) { | Line 586 I286FN v30repne_segprefix_cs(void) { |
| DS_FIX = CS_BASE; | DS_FIX = CS_BASE; |
| SS_FIX = CS_BASE; | SS_FIX = CS_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op_repne[op](); | v30op_repne[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 603 I286FN v30repne_segprefix_ss(void) { | Line 603 I286FN v30repne_segprefix_ss(void) { |
| DS_FIX = SS_BASE; | DS_FIX = SS_BASE; |
| SS_FIX = SS_BASE; | SS_FIX = SS_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op_repne[op](); | v30op_repne[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 620 I286FN v30repne_segprefix_ds(void) { | Line 620 I286FN v30repne_segprefix_ds(void) { |
| DS_FIX = DS_BASE; | DS_FIX = DS_BASE; |
| SS_FIX = DS_BASE; | SS_FIX = DS_BASE; |
| i286reg.prefix++; | i286core.s.prefix++; |
| if (i286reg.prefix < MAX_PREFIX) { | if (i286core.s.prefix < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| v30op_repne[op](); | v30op_repne[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286reg.prefix = 0; | i286core.s.prefix = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |