// $Id: ins.hpp,v 1.6 2000/11/06 22:11:16 jeremy Exp $
//
// Copyright (c) 2000 Jeremy Cooper.  All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
// 3. All advertising materials mentioning features or use of this software
//    must display the following acknowledgement:
//    This product includes software developed by Jeremy Cooper.
// 4. The name of the author may not be used to endorse or promote products
//    derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

//
// IDA TMS320C1X processor module.
//     Software representation of TMS320C1X instructions.
//
#ifndef	_IDP_TMS320C1X_INS_H
#define	_IDP_TMS320C1X_INS_H

enum nameNum {
	// Accumulator Memory Reference Instructions
	I__FIRST = 0,
	I_ABS = 0,
	I_ADD,
	I_ADDH,
	I_ADDS,
	I_AND,
	I_LAC,
	I_LACK,
	I_OR,
	I_SACH,
	I_SACL,
	I_SUB,
	I_SUBC,
	I_SUBH,
	I_SUBS,
	I_XOR,
	I_ZAC,
	I_ZALH,
	I_ZALS,
	// Auxiliary Register and Data Page Pointer Instructions
	I_LAR,
	I_LARK,
	I_LARP,
	I_LDP,
	I_LDPK,
	I_MAR,
	I_SAR,
	// T Register, P Register, and Multiply Instructions
	I_APAC,
	I_LT,
	I_LTA,
	I_LTD,
	I_MPY,
	I_MPYK,
	I_PAC,
	I_SPAC,
	// Branch/Call Instructions
	I_B,
	I_BANZ,
	I_BGEZ,
	I_BGZ,
	I_BIOZ,
	I_BLEZ,
	I_BLZ,
	I_BNZ,
	I_BV,
	I_BZ,
	I_CALA,
	I_CALL,
	I_RET,
	// Control Instructions
	I_DINT,
	I_EINT,
	I_LST,
	I_NOP,
	I_POP,
	I_PUSH,
	I_ROVM,
	I_SOVM,
	I_SST,
	// I/O and Data Memory Instructions
	I_DMOV,
	I_IN,
	I_OUT,
	I_TBLR,
	I_TBLW,
	I__LAST
};

//
// TMS320C1X register phrases.
// These are used to represent instruction operands that are not either
// immediate values or registers.
//
enum regPhrase {
	IPH_AR,      // Dereference current aux register
	IPH_AR_INCR, // Dereference current aux register and post-increment
	IPH_AR_DECR, // Dereference current aux register and post-decrement
};

//
// Auxilliary instruction information.
// This is information that this processor module can add to the instruction,
// only to be examined and consumed by the processor module itself.
//
#define	IX_DATA_PAGE_KNOWN 0x8000      // The current data page is known
#define	IX_DATA_PAGE(x)    ((x) & 0x1) // Retrieves the known data page

extern instruc_t Instructions[];

#endif	// _IDP_TMS320C1X_INS_H


