|
|
| version 1.25, 2003/12/17 01:57:41 | version 1.28, 2004/01/22 01:10:04 |
|---|---|
| Line 147 I286FN _push_es(void) { // 06: pus | Line 147 I286FN _push_es(void) { // 06: pus |
| I286FN _pop_es(void) { // 07: pop es | I286FN _pop_es(void) { // 07: pop es |
| REGPOP(I286_ES, 5) | UINT tmp; |
| ES_BASE = (UINT32)I286_ES << 4; | |
| REGPOP(tmp, 5) | |
| I286_ES = tmp; | |
| if (!(I286_MSW & MSW_PE)) { | |
| ES_BASE = tmp << 4; | |
| NEXT_OPCODE | |
| } | |
| else { | |
| ES_BASE = i286c_selector(tmp); | |
| } | |
| } | } |
| I286FN _or_ea_r8(void) { // 08: or EA, REG8 | I286FN _or_ea_r8(void) { // 08: or EA, REG8 |
| Line 381 I286FN _push_ss(void) { // 16: pus | Line 390 I286FN _push_ss(void) { // 16: pus |
| I286FN _pop_ss(void) { // 17: pop ss | I286FN _pop_ss(void) { // 17: pop ss |
| REGPOP(I286_SS, 5) | UINT tmp; |
| SS_BASE = I286_SS << 4; | UINT32 base; |
| SS_FIX = SS_BASE; | |
| NEXT_OPCODE | REGPOP(tmp, 5) |
| I286_SS = tmp; | |
| if (!(I286_MSW & MSW_PE)) { | |
| SS_BASE = tmp << 4; | |
| SS_FIX = tmp << 4; | |
| NEXT_OPCODE | |
| } | |
| else { | |
| base = i286c_selector(tmp); | |
| SS_BASE = base; | |
| SS_FIX = base; | |
| NEXT_OPCODE | |
| } | |
| } | } |
| I286FN _sbb_ea_r8(void) { // 18: sbb EA, REG8 | I286FN _sbb_ea_r8(void) { // 18: sbb EA, REG8 |
| Line 504 I286FN _push_ds(void) { // 1e: pus | Line 525 I286FN _push_ds(void) { // 1e: pus |
| I286FN _pop_ds(void) { // 1f: pop ds | I286FN _pop_ds(void) { // 1f: pop ds |
| REGPOP(I286_DS, 5) | UINT tmp; |
| DS_BASE = I286_DS << 4; | UINT32 base; |
| DS_FIX = DS_BASE; | |
| REGPOP(tmp, 5) | |
| I286_DS = tmp; | |
| if (!(I286_MSW & MSW_PE)) { | |
| DS_BASE = tmp << 4; | |
| DS_FIX = tmp << 4; | |
| NEXT_OPCODE | |
| } | |
| else { | |
| base = i286c_selector(tmp); | |
| DS_BASE = base; | |
| DS_FIX = base; | |
| NEXT_OPCODE | |
| } | |
| } | } |
| I286FN _and_ea_r8(void) { // 20: and EA, REG8 | I286FN _and_ea_r8(void) { // 20: and EA, REG8 |
| Line 1658 I286FN _mov_seg_ea(void) { // 8E: mo | Line 1692 I286FN _mov_seg_ea(void) { // 8E: mo |
| UINT op; | UINT op; |
| UINT tmp; | UINT tmp; |
| UINT32 base; | |
| UINT16 ipbak; | UINT16 ipbak; |
| ipbak = I286_IP; | ipbak = I286_IP; |
| Line 1670 I286FN _mov_seg_ea(void) { // 8E: mo | Line 1705 I286FN _mov_seg_ea(void) { // 8E: mo |
| I286_WORKCLOCK(5); | I286_WORKCLOCK(5); |
| tmp = i286_memoryread_w(CALC_EA(op)); | tmp = i286_memoryread_w(CALC_EA(op)); |
| } | } |
| if (!(I286_MSW & MSW_PE)) { | |
| base = tmp << 4; | |
| } | |
| else { | |
| base = i286c_selector(tmp); | |
| } | |
| switch(op & 0x18) { | switch(op & 0x18) { |
| case 0x00: // es | case 0x00: // es |
| I286_ES = (UINT16)tmp; | I286_ES = (UINT16)tmp; |
| ES_BASE = tmp << 4; | ES_BASE = base; |
| break; | break; |
| case 0x10: // ss | case 0x10: // ss |
| I286_SS = (UINT16)tmp; | I286_SS = (UINT16)tmp; |
| SS_BASE = tmp << 4; | SS_BASE = base; |
| SS_FIX = SS_BASE; | SS_FIX = base; |
| NEXT_OPCODE | NEXT_OPCODE |
| break; | break; |
| case 0x18: // ds | case 0x18: // ds |
| I286_DS = (UINT16)tmp; | I286_DS = (UINT16)tmp; |
| DS_BASE = tmp << 4; | DS_BASE = base; |
| DS_FIX = DS_BASE; | DS_FIX = base; |
| break; | break; |
| default: // cs | default: // cs |
| Line 2248 I286FN _int_03(void) { // CC: int | Line 2290 I286FN _int_03(void) { // CC: int |
| INT_NUM(3, I286_IP); | INT_NUM(3, I286_IP); |
| } | } |
| extern int tr; | |
| I286FN _int_data8(void) { // CD: int DATA8 | I286FN _int_data8(void) { // CD: int DATA8 |
| UINT vect; | UINT vect; |
| I286_WORKCLOCK(3); | I286_WORKCLOCK(3); |
| GET_PCBYTE(vect) | GET_PCBYTE(vect) |
| if ((vect == 0x21) && (CPU_AX == 0x5f02)) { | |
| tr = 1; | |
| } | |
| INT_NUM(vect, I286_IP); | INT_NUM(vect, I286_IP); |
| } | } |