static void PREFIX186(_outsw)(i8086_state *cpustate) /* Opcode 0x6f */ { #ifdef I80286 if (PM && (CPL>IOPL)) throw TRAP(GENERAL_PROTECTION_FAULT, 0); #endif ICOUNT -= timing.outs16; write_port_word(cpustate->regs.w[DX],GetMemW(DS,cpustate->regs.w[SI])); cpustate->regs.w[SI] += 2 * cpustate->DirVal; /* GOL 11/27/01 */ }
static void PREFIX186(_enter)(void) /* Opcode 0xc8 */ { unsigned nb = FETCH; unsigned i,level; nb += FETCH << 8; level = FETCH; ICOUNT -= (level == 0) ? cycles.enter0 : (level == 1) ? cycles.enter1 : cycles.enter_base + level * cycles.enter_count; PUSH(I.regs.w[BP]); I.regs.w[BP]=I.regs.w[SP]; I.regs.w[SP] -= nb; for (i=1;i<level;i++) PUSH(GetMemW(SS,I.regs.w[BP]-i*2)); if (level) PUSH(I.regs.w[BP]); }
static void PREFIX186(_enter)(i8086_state *cpustate) /* Opcode 0xc8 */ { unsigned nb = FETCH; unsigned i,level; nb += FETCH << 8; level = FETCH; ICOUNT -= (level == 0) ? timing.enter0 : (level == 1) ? timing.enter1 : timing.enter_base + level * timing.enter_count; PUSH(cpustate->regs.w[BP]); cpustate->regs.w[BP]=cpustate->regs.w[SP]; cpustate->regs.w[SP] -= nb; for (i=1;i<level;i++) PUSH(GetMemW(SS,cpustate->regs.w[BP]-i*2)); if (level) PUSH(cpustate->regs.w[BP]); }
static void PREFIX186(_enter)(i8086_state *cpustate) /* Opcode 0xc8 */ { unsigned nb = FETCH; unsigned i,level; UINT16 fp; nb += FETCH << 8; #ifdef I80286 level = FETCH & 0x1f; if(PM) i80286_check_permission(cpustate, SS, cpustate->regs.w[SP]-2-(level*2), 2+(level*2), I80286_WRITE); #else level = FETCH; #endif ICOUNT -= (level == 0) ? timing.enter0 : (level == 1) ? timing.enter1 : timing.enter_base + level * timing.enter_count; PUSH(cpustate->regs.w[BP]); fp = cpustate->regs.w[SP]; for (i=1;i<level;i++) PUSH(GetMemW(SS,cpustate->regs.w[BP]-i*2)); if (level) PUSH(fp); cpustate->regs.w[BP] = fp; cpustate->regs.w[SP] -= nb; }
static void PREFIX186(_outsw)(void) /* Opcode 0x6f */ { ICOUNT -= cycles.outs16; write_port_word(I.regs.w[DX],GetMemW(DS,I.regs.w[SI])); I.regs.w[SI] += 2 * I.DirVal; /* GOL 11/27/01 */ }
static void PREFIX186(_outsw)(i8086_state *cpustate) /* Opcode 0x6f */ { ICOUNT -= timing.outs16; write_port_word(cpustate->regs.w[DX],GetMemW(DS,cpustate->regs.w[SI])); cpustate->regs.w[SI] += 2 * cpustate->DirVal; /* GOL 11/27/01 */ }