/*
 * ============================================================================
 *  OP_EXEC:        Execute functions for the CP-1610 instructions
 *
 *  Author:         J. Zbiciak
 *
 *  $Id: op_exec.h,v 1.6 2000/01/10 17:13:16 im14u2c Exp $
 * ============================================================================
 *  fn_invalid      -- Executed when a decoder failure happens
 *  fn_XXXX_i       -- Immediate operand instructions (relative branch, jump)
 *  fn_XXXX_r       -- Implied, register 2-ops (eg. ADCR, COMR, etc.)
 *  fn_XXXX_ir      -- Immediate, register 2-ops, JSR
 *  fn_XXXX_rr      -- Register, register 2-ops
 *  fn_XXXX_rp      -- Register, PC 2-ops
 *  fn_XXXX_dr      -- Direct, register 2-ops
 *  fn_XXXX_mr      -- Indirect ("memory"), register 2-ops, non-incrementing
 *  fn_XXXX_Mr      -- Indirect ("memory"), register 2-ops, post-incrementing
 *  fn_XXXX_Sr      -- Indirect ("stack"), register 2-ops, pre-decrementing
 * ============================================================================
 */


#ifndef _OP_EXEC_H
#define _OP_EXEC_H

int fn_invalid  (const instr_t *instr, cp1600_t *cpu);
int fn_breakpt  (      instr_t *instr, cp1600_t *cpu);
int fn_tracept  (      instr_t *instr, cp1600_t *cpu);
int fn_BEXT_i   (const instr_t *instr, cp1600_t *cpu);
int fn_B_i      (const instr_t *instr, cp1600_t *cpu);
int fn_BC_i     (const instr_t *instr, cp1600_t *cpu);
int fn_BOV_i    (const instr_t *instr, cp1600_t *cpu);
int fn_BPL_i    (const instr_t *instr, cp1600_t *cpu);
int fn_BEQ_i    (const instr_t *instr, cp1600_t *cpu);
int fn_BLT_i    (const instr_t *instr, cp1600_t *cpu);
int fn_BLE_i    (const instr_t *instr, cp1600_t *cpu);
int fn_BUSC_i   (const instr_t *instr, cp1600_t *cpu);
int fn_NOPP_i   (const instr_t *instr, cp1600_t *cpu);
int fn_BNC_i    (const instr_t *instr, cp1600_t *cpu);
int fn_BNOV_i   (const instr_t *instr, cp1600_t *cpu);
int fn_BMI_i    (const instr_t *instr, cp1600_t *cpu);
int fn_BNEQ_i   (const instr_t *instr, cp1600_t *cpu);
int fn_BGE_i    (const instr_t *instr, cp1600_t *cpu);
int fn_BGT_i    (const instr_t *instr, cp1600_t *cpu);
int fn_BESC_i   (const instr_t *instr, cp1600_t *cpu);
int fn_SIN_i    (const instr_t *instr, cp1600_t *cpu);
int fn_NOP_i    (const instr_t *instr, cp1600_t *cpu);
int fn_J_i      (const instr_t *instr, cp1600_t *cpu);
int fn_JSR_ir   (const instr_t *instr, cp1600_t *cpu);
int fn_MVO_dr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVI_dr   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_dr   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_dr   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_dr   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_dr   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_dr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVO_ir   (const instr_t *instr, cp1600_t *cpu);
int fn_MVI_ir   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_ir   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_ir   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_ir   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_ir   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_ir   (const instr_t *instr, cp1600_t *cpu);
int fn_MVO_Ir   (const instr_t *instr, cp1600_t *cpu);
int fn_MVI_Ir   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_Ir   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_Ir   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_Ir   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_Ir   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_Ir   (const instr_t *instr, cp1600_t *cpu);
int fn_HLT      (const instr_t *instr, cp1600_t *cpu);
int fn_SDBD     (const instr_t *instr, cp1600_t *cpu);
int fn_EIS      (const instr_t *instr, cp1600_t *cpu);
int fn_DIS      (const instr_t *instr, cp1600_t *cpu);
int fn_TCI      (const instr_t *instr, cp1600_t *cpu);
int fn_CLRC     (const instr_t *instr, cp1600_t *cpu);
int fn_SETC     (const instr_t *instr, cp1600_t *cpu);
int fn_MVO_mr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVI_mr   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_mr   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_mr   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_mr   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_mr   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_mr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVO_Mr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVI_Mr   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_Mr   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_Mr   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_Mr   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_Mr   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_Mr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVO_Nr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVI_Nr   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_Nr   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_Nr   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_Nr   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_Nr   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_Nr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVO_nr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVI_nr   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_nr   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_nr   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_nr   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_nr   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_nr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVO_Sr   (const instr_t *instr, cp1600_t *cpu);
int fn_MVI_Sr   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_Sr   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_Sr   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_Sr   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_Sr   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_Sr   (const instr_t *instr, cp1600_t *cpu);
int fn_INCR_r   (const instr_t *instr, cp1600_t *cpu);
int fn_DECR_r   (const instr_t *instr, cp1600_t *cpu);
int fn_COMR_r   (const instr_t *instr, cp1600_t *cpu);
int fn_NEGR_r   (const instr_t *instr, cp1600_t *cpu);
int fn_ADCR_r   (const instr_t *instr, cp1600_t *cpu);
int fn_GSWD_r   (const instr_t *instr, cp1600_t *cpu);
int fn_RSWD_r   (const instr_t *instr, cp1600_t *cpu);
int fn_TST_rr   (const instr_t *instr, cp1600_t *cpu);
int fn_MOV_rr   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_rr   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_rr   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_rr   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_rr   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_rr   (const instr_t *instr, cp1600_t *cpu);
int fn_MOV_pr   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_pr   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_pr   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_pr   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_pr   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_pr   (const instr_t *instr, cp1600_t *cpu);
int fn_MOV_rp   (const instr_t *instr, cp1600_t *cpu);
int fn_ADD_rp   (const instr_t *instr, cp1600_t *cpu);
int fn_SUB_rp   (const instr_t *instr, cp1600_t *cpu);
int fn_CMP_rp   (const instr_t *instr, cp1600_t *cpu);
int fn_AND_rp   (const instr_t *instr, cp1600_t *cpu);
int fn_XOR_rp   (const instr_t *instr, cp1600_t *cpu);
int fn_SWAP1_r  (const instr_t *instr, cp1600_t *cpu);
int fn_SLL1_r   (const instr_t *instr, cp1600_t *cpu);
int fn_SLLC1_r  (const instr_t *instr, cp1600_t *cpu);
int fn_RLC1_r   (const instr_t *instr, cp1600_t *cpu);
int fn_SLR1_r   (const instr_t *instr, cp1600_t *cpu);
int fn_RRC1_r   (const instr_t *instr, cp1600_t *cpu);
int fn_SAR1_r   (const instr_t *instr, cp1600_t *cpu);
int fn_SARC1_r  (const instr_t *instr, cp1600_t *cpu);
int fn_SWAP2_r  (const instr_t *instr, cp1600_t *cpu);
int fn_SLL2_r   (const instr_t *instr, cp1600_t *cpu);
int fn_SLLC2_r  (const instr_t *instr, cp1600_t *cpu);
int fn_RLC2_r   (const instr_t *instr, cp1600_t *cpu);
int fn_SLR2_r   (const instr_t *instr, cp1600_t *cpu);
int fn_RRC2_r   (const instr_t *instr, cp1600_t *cpu);
int fn_SAR2_r   (const instr_t *instr, cp1600_t *cpu);
int fn_SARC2_r  (const instr_t *instr, cp1600_t *cpu);

#endif

/* ======================================================================== */
/*  This program is free software; you can redistribute it and/or modify    */
/*  it under the terms of the GNU General Public License as published by    */
/*  the Free Software Foundation; either version 2 of the License, or       */
/*  (at your option) any later version.                                     */
/*                                                                          */
/*  This program is distributed in the hope that it will be useful,         */
/*  but WITHOUT ANY WARRANTY; without even the implied warranty of          */
/*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       */
/*  General Public License for more details.                                */
/*                                                                          */
/*  You should have received a copy of the GNU General Public License       */
/*  along with this program; if not, write to the Free Software             */
/*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.               */
/* ======================================================================== */
/*                 Copyright (c) 1998-1999, Joseph Zbiciak                  */
/* ======================================================================== */
