/********************************************************************************
	system.h: Ultra 64 MARIO Brothers include file

	Copyright (c) 1995 Nintendo co., ltd.  All rights reserved

	June 12, 1995
 ********************************************************************************/

#ifndef SYSTEM_H
#define	SYSTEM_H

#define	GRAPH_TASK		0
#define	AUDIO_TASK		1

#define	HT	240
#define	WD	320
#define	SCREEN_WIDTH		320
#define	SCREEN_HEIGHT		240
#define	SCREEN_ASPECT		(320.0f/240.0f)
#define	SCREEN_NEAR			156.0f
#define	SCREEN_FAR			20000.0f
#define	SCREEN_ANGLE		55.0f

//#define	LIGHT_X				0
//#define	LIGHT_Y				0
//#define	LIGHT_Z				127



#define	GAME_DEMO			0
#define	GAME_ONE_PLAYER		1
#define	GAME_TWO_PLAYER		2

#define	MARIO_PLAYER_ID		(1<<0)
#define	LUIGI_PLAYER_ID		(1<<1)


#define	malloc(size)		AllocHeap(systemHeap,size)
#define	free(addr)			FreeHeap(systemHeap,addr)

typedef ushort	Pixmap[SCREEN_HEIGHT][SCREEN_WIDTH];


/********************************************************************************
 *
 *	Controller button assign
 *
 ********************************************************************************/

#define	CONT_XB		CONT_A
#define	CONT_XA		CONT_B
#define	CONT_XL		CONT_C
#define	CONT_XD		CONT_D
#define	CONT_XU		CONT_E
#define	CONT_XR		CONT_F
#define	CONT_BACK	CONT_G


/*-------------------------------------------------------------------------------
 *	Dynamic data record.
 */
typedef struct {
	wlong	memblock[DYNAMIC_BLKSIZE];			/* dynamic memory block			*/
	OSTask	tasklist[2];						/* task list					*/
} DynamicRecord, *DynamicPtr;

/*-------------------------------------------------------------------------------
/********************************************************************************
 *
 *	External works
 *
 ********************************************************************************/

//extern TaskPtr		taskPtr;			/* pointer to the task list				*/
//extern GfxPtr		graphPtr;			/* pointer to the gfx list				*/
extern MemPtr		blockPtr;			/* pointer to the dynamic memory		*/
extern DynamicPtr	currentDynamic;		/* pointer to the current dynamic work	*/
extern Gfx		*graphPtr;    

/*--------------------------------------------------------------------------------
 *	Thread works
 */

//extern uwlong	rspDramStack[SP_DRAM_STACK_SIZE8];	/* RSP tasks stack memory	*/
//extern uwlong	bootThreadStack[ CPU_STACKSIZE8];	/* boot thread stack memory	*/


/*--------------------------------------------------------------------------------
 *	Thread message works
 */
extern OSMesgQueue	dmaMessageQ;				/* DMA message queue				*/
extern OSMesgQueue	rspMessageQ;				/* RSP message queue				*/
extern OSMesgQueue	rdpMessageQ;				/* RDP message queue				*/
extern OSMesgQueue	rtcMessageQ;				/* vertical retrace message queue	*/
extern OSMesgQueue	intMessageQ;				/* interrupt message queue			*/
extern OSMesgQueue	PimMessageQ;				/* Pi manager message queue			*/


//extern OSMesg	dmaMessageBuf[NUM_DMA_MESSAGES];	/* DMA message buffer			*/
//extern OSMesg	rspMessageBuf[NUM_RSP_MESSAGES];	/* RSP message buffer			*/
//extern OSMesg	rdpMessageBuf[NUM_RDP_MESSAGES];	/* RDP message buffer			*/
//extern OSMesg	rtcMessageBuf[NUM_RTC_MESSAGES];	/* RTC message buffer			*/
//extern OSMesg	PimMessageBuf[NUM_PIM_MESSAGES];	/* PI manager message buffer	*/
//extern OSMesg	intMessageBuf[NUM_INT_MESSAGES];	/* interrupt message buffer		*/
 
extern OSMesg	 dummyMessage;						/* dummy message data			*/
extern OSIoMesg dmaIOMessageBuf;					/* dma i/o message buffer		*/






/********************************************************************************
 *
 *	External static datas
 *
 ********************************************************************************/

extern Pixmap frameMemoryA;
extern Pixmap frameMemoryB;

extern Gfx RCP_ClearScreen[];
extern Gfx RCP_hmsBeginString[];
extern Gfx RCP_hmsDrawCharacter[];
extern Gfx RCP_hmsEndString[];

/********************************************************************************
 *
 *	Function prototypes
 *
 ********************************************************************************/

/* RCP segment operations */

extern void  MainProcedure(void);


/* drawing oparations */

#endif
