[wrap]
MAME source file: / src / emu / cpu / powerpc / ppc.h [download] (view on mamedev.org)
/***************************************************************************

    ppc.h

    Interface file for the universal machine language-based
    PowerPC emulator.

    Copyright Aaron Giles
    Released for general non-commercial use under the MAME license
    Visit http://mamedev.org for licensing and usage restrictions.

***************************************************************************/

#pragma once

#ifndef __PPC_H__
#define __PPC_H__

#include "cpuintrf.h"


/***************************************************************************
    CONSTANTS
***************************************************************************/

/* general constants */
#define PPC_MAX_FASTRAM			4
#define PPC_MAX_HOTSPOTS		16


/* interrupt types */
#define PPC_IRQ					0		/* external IRQ */
#define PPC_IRQ_LINE_0			0		/* (4XX) external IRQ0 */
#define PPC_IRQ_LINE_1			1		/* (4XX) external IRQ1 */
#define PPC_IRQ_LINE_2			2		/* (4XX) external IRQ2 */
#define PPC_IRQ_LINE_3			3		/* (4XX) external IRQ3 */
#define PPC_IRQ_LINE_4			4		/* (4XX) external IRQ4 */


/* register enumeration */
enum
{
	PPC_PC = 1,
	PPC_R0,
	PPC_R1,
	PPC_R2,
	PPC_R3,
	PPC_R4,
	PPC_R5,
	PPC_R6,
	PPC_R7,
	PPC_R8,
	PPC_R9,
	PPC_R10,
	PPC_R11,
	PPC_R12,
	PPC_R13,
	PPC_R14,
	PPC_R15,
	PPC_R16,
	PPC_R17,
	PPC_R18,
	PPC_R19,
	PPC_R20,
	PPC_R21,
	PPC_R22,
	PPC_R23,
	PPC_R24,
	PPC_R25,
	PPC_R26,
	PPC_R27,
	PPC_R28,
	PPC_R29,
	PPC_R30,
	PPC_R31,
	PPC_CR,
	PPC_LR,
	PPC_CTR,
	PPC_XER,
	PPC_MSR,
	PPC_SRR0,
	PPC_SRR1,
	PPC_SPRG0,
	PPC_SPRG1,
	PPC_SPRG2,
	PPC_SPRG3,
	PPC_SDR1,
	PPC_EXIER,
	PPC_EXISR,
	PPC_EVPR,
	PPC_IOCR,
	PPC_TBL,
	PPC_TBH,
	PPC_DEC
};


/* interface extensions */
enum
{
	CPUINFO_INT_PPC_DRC_OPTIONS = CPUINFO_INT_CPU_SPECIFIC,

	CPUINFO_INT_PPC_FASTRAM_SELECT,
	CPUINFO_INT_PPC_FASTRAM_START,
	CPUINFO_INT_PPC_FASTRAM_END,
	CPUINFO_INT_PPC_FASTRAM_READONLY,

	CPUINFO_INT_PPC_HOTSPOT_SELECT,
	CPUINFO_INT_PPC_HOTSPOT_PC,
	CPUINFO_INT_PPC_HOTSPOT_OPCODE,
	CPUINFO_INT_PPC_HOTSPOT_CYCLES,

	CPUINFO_INT_PPC_RX_DATA,

	CPUINFO_PTR_PPC_FASTRAM_BASE = CPUINFO_PTR_CPU_SPECIFIC,

	CPUINFO_PTR_SPU_TX_HANDLER,

	CPUINFO_PTR_CONTEXT			/* temporary */
};


/* compiler-specific options */
#define PPCDRC_STRICT_VERIFY		0x0001			/* verify all instructions */
#define PPCDRC_FLUSH_PC				0x0002			/* flush the PC value before each memory access */
#define PPCDRC_ACCURATE_SINGLES		0x0004			/* do excessive rounding to make single-precision results "accurate" */


/* common sets of options */
#define PPCDRC_COMPATIBLE_OPTIONS	(PPCDRC_STRICT_VERIFY | PPCDRC_FLUSH_PC | PPCDRC_ACCURATE_SINGLES)
#define PPCDRC_FASTEST_OPTIONS		(0)



/***************************************************************************
    STRUCTURES AND TYPEDEFS
***************************************************************************/

typedef void (*ppc4xx_spu_tx_handler)(UINT8 data);

typedef struct _powerpc_config powerpc_config;
struct _powerpc_config
{
	UINT32		bus_frequency;
};



/***************************************************************************
    PUBLIC FUNCTIONS
***************************************************************************/

#if (HAS_PPC403GA)
void ppc403ga_get_info(UINT32 state, cpuinfo *info);
#endif

#if (HAS_PPC403GCX)
void ppc403gcx_get_info(UINT32 state, cpuinfo *info);
#endif

#if (HAS_PPC601)
void ppc601_get_info(UINT32 state, cpuinfo *info);
#endif

#if (HAS_PPC602)
void ppc602_get_info(UINT32 state, cpuinfo *info);
#endif

#if (HAS_PPC603)
void ppc603_get_info(UINT32 state, cpuinfo *info);
#endif

#if (HAS_PPC603E)
void ppc603e_get_info(UINT32 state, cpuinfo *info);
#endif

#if (HAS_PPC603R)
void ppc603r_get_info(UINT32 state, cpuinfo *info);
#endif

#if (HAS_PPC604)
void ppc604_get_info(UINT32 state, cpuinfo *info);
#endif

#if (HAS_MPC8240)
void mpc8240_get_info(UINT32 state, cpuinfo *info);
#endif



/***************************************************************************
    INLINE FUNCTIONS
***************************************************************************/

INLINE void ppc4xx_spu_set_tx_handler(int cpunum, ppc4xx_spu_tx_handler handler)
{
	cpunum_set_info_fct(cpunum, CPUINFO_PTR_SPU_TX_HANDLER, (genf *)handler);
}


INLINE void ppc4xx_spu_receive_byte(int cpunum, UINT8 byteval)
{
	cpunum_set_info_int(cpunum, CPUINFO_INT_PPC_RX_DATA, byteval);
}



#endif	/* __PPC_H__ */
  
2004-2008 MAWS all copyrights belong to their respective owners