/************************************************************************/
/* TITLE	: EXTVGRAF.C						*/
/* Function	: Process EXTENDED TV-GRAPHICS PACK			*/
/*									*/
/* Project #	: JAGUAR CD+G						*/
/* Programmer	: Pradip K Fatehpuria	11/10/93			*/
/*									*/
/* COPYRIGHT(c) 1992,1993 Atari Computer Corporation			*/
/* UNATHORIZED REPRODUCTION, ADAPTATION, DISTRIBUTION, PERFORMANCE OR	*/
/* DISPLAY OF THIS COMPUTER PROGRAM OR THE ASSOCIATED AUDIOVISUAL WORK	*/
/* IS STRICTLY PROHIBITED.						*/
/* ALL RIGHTS RESERVED.							*/
/************************************************************************/

#include	"packbind.h"

/* -------------------------------------------------------------------- */

#define	INST_EXTV_MEMCTRL	0x0003
#define	INST_EXTV_FONTFGBG	0x0006
#define	INST_EXTV_EXORFONT2	0x000E
#define	INST_EXTV_CLUT0		0x0010
#define	INST_EXTV_CLUT1		0x0011
#define	INST_EXTV_CLUT2		0x0012
#define	INST_EXTV_CLUT3		0x0013
#define	INST_EXTV_CLUT4		0x0014
#define	INST_EXTV_CLUT5		0x0015
#define	INST_EXTV_CLUT6		0x0016
#define	INST_EXTV_CLUT7		0x0017
#define	INST_EXTV_CLUT8		0x0018
#define	INST_EXTV_CLUT9		0x0019
#define	INST_EXTV_CLUT10	0x001A
#define	INST_EXTV_CLUT11	0x001B
#define	INST_EXTV_CLUT12	0x001C
#define	INST_EXTV_CLUT13	0x001D
#define	INST_EXTV_CLUT14	0x001E
#define	INST_EXTV_CLUT15	0x001F
#define	INST_EXTV_CLUT16	0x0020
#define	INST_EXTV_CLUT17	0x0021
#define	INST_EXTV_CLUT18	0x0022
#define	INST_EXTV_CLUT19	0x0023
#define	INST_EXTV_CLUT20	0x0024
#define	INST_EXTV_CLUT21	0x0025
#define	INST_EXTV_CLUT22	0x0026
#define	INST_EXTV_CLUT23	0x0027
#define	INST_EXTV_CLUT24	0x0028
#define	INST_EXTV_CLUT25	0x0029
#define	INST_EXTV_CLUT26	0x002A
#define	INST_EXTV_CLUT27	0x002B
#define	INST_EXTV_CLUT28	0x002C
#define	INST_EXTV_CLUT29	0x002D
#define	INST_EXTV_CLUT30	0x002E
#define	INST_EXTV_CLUT31	0x002F

#define	INST_EXTV_ADDCLUT0	0x0030
#define	INST_EXTV_ADDCLUT1	0x0031
#define	INST_EXTV_ADDCLUT2	0x0032
#define	INST_EXTV_ADDCLUT3	0x0033
#define	INST_EXTV_ADDCLUT4	0x0034
#define	INST_EXTV_ADDCLUT5	0x0035
#define	INST_EXTV_ADDCLUT6	0x0036
#define	INST_EXTV_ADDCLUT7	0x0037
#define	INST_EXTV_ADDCLUT8	0x0038
#define	INST_EXTV_ADDCLUT9	0x0039
#define	INST_EXTV_ADDCLUT10	0x003A
#define	INST_EXTV_ADDCLUT11	0x003B
#define	INST_EXTV_ADDCLUT12	0x003C
#define	INST_EXTV_ADDCLUT13	0x003D
#define	INST_EXTV_ADDCLUT14	0x003E
#define	INST_EXTV_ADDCLUT15	0x003F

/* -------------------------------------------------------------------- */

extern	unsigned short	*CurPack;

/* -------------------------------------------------------------------- */

extern	unsigned char	mess[];

/* -------------------------------------------------------------------- */

static	void	exmemctl( void );
static	void	exadnfnt( void );
static	void	exxradfn( void );

static	void	exldcl00( void );
static	void	exldcl01( void );
static	void	exldcl02( void );
static	void	exldcl03( void );
static	void	exldcl04( void );
static	void	exldcl05( void );
static	void	exldcl06( void );
static	void	exldcl07( void );
static	void	exldcl08( void );
static	void	exldcl09( void );
static	void	exldcl10( void );
static	void	exldcl11( void );
static	void	exldcl12( void );
static	void	exldcl13( void );
static	void	exldcl14( void );
static	void	exldcl15( void );
static	void	exldcl16( void );
static	void	exldcl17( void );
static	void	exldcl18( void );
static	void	exldcl19( void );
static	void	exldcl20( void );
static	void	exldcl21( void );
static	void	exldcl22( void );
static	void	exldcl23( void );
static	void	exldcl24( void );
static	void	exldcl25( void );
static	void	exldcl26( void );
static	void	exldcl27( void );
static	void	exldcl28( void );
static	void	exldcl29( void );
static	void	exldcl30( void );
static	void	exldcl31( void );

static	void	exldcl50( void );
static	void	exldcl51( void );
static	void	exldcl52( void );
static	void	exldcl53( void );
static	void	exldcl54( void );
static	void	exldcl55( void );
static	void	exldcl56( void );
static	void	exldcl57( void );
static	void	exldcl58( void );
static	void	exldcl59( void );
static	void	exldcl60( void );
static	void	exldcl61( void );
static	void	exldcl62( void );
static	void	exldcl63( void );
static	void	exldcl64( void );
static	void	exldcl65( void );

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

/* -----------------------------------------------------------------------
 */

void	procextv()
{
static	unsigned short	func_items[] =
	{
	INST_EXTV_MEMCTRL	,
	INST_EXTV_FONTFGBG	,
	INST_EXTV_EXORFONT2	,
	INST_EXTV_CLUT0		,
	INST_EXTV_CLUT1		,
	INST_EXTV_CLUT2		,
	INST_EXTV_CLUT3		,
	INST_EXTV_CLUT4		,
	INST_EXTV_CLUT5		,
	INST_EXTV_CLUT6		,
	INST_EXTV_CLUT7		,
	INST_EXTV_CLUT8		,
	INST_EXTV_CLUT9		,
	INST_EXTV_CLUT10	,
	INST_EXTV_CLUT11	,
	INST_EXTV_CLUT12	,
	INST_EXTV_CLUT13	,
	INST_EXTV_CLUT14	,
	INST_EXTV_CLUT15	,
	INST_EXTV_CLUT16	,
	INST_EXTV_CLUT17	,
	INST_EXTV_CLUT18	,
	INST_EXTV_CLUT19	,
	INST_EXTV_CLUT20	,
	INST_EXTV_CLUT21	,
	INST_EXTV_CLUT22	,
	INST_EXTV_CLUT23	,
	INST_EXTV_CLUT24	,
	INST_EXTV_CLUT25	,
	INST_EXTV_CLUT26	,
	INST_EXTV_CLUT27	,
	INST_EXTV_CLUT28	,
	INST_EXTV_CLUT29	,
	INST_EXTV_CLUT30	,
	INST_EXTV_CLUT31	,

	INST_EXTV_ADDCLUT0	,
	INST_EXTV_ADDCLUT1	,
	INST_EXTV_ADDCLUT2	,
	INST_EXTV_ADDCLUT3	,
	INST_EXTV_ADDCLUT4	,
	INST_EXTV_ADDCLUT5	,
	INST_EXTV_ADDCLUT6	,
	INST_EXTV_ADDCLUT7	,
	INST_EXTV_ADDCLUT8	,
	INST_EXTV_ADDCLUT9	,
	INST_EXTV_ADDCLUT10	,
	INST_EXTV_ADDCLUT11	,
	INST_EXTV_ADDCLUT12	,
	INST_EXTV_ADDCLUT13	,
	INST_EXTV_ADDCLUT14	,
	INST_EXTV_ADDCLUT15	,
	-1
	};
static	void	(*func_table[])( void ) =
	{
	exmemctl	,
	exadnfnt	,
	exxradfn	,

	exldcl00	,
	exldcl01	,
	exldcl02	,
	exldcl03	,
	exldcl04	,
	exldcl05	,
	exldcl06	,
	exldcl07	,
	exldcl08	,
	exldcl09	,
	exldcl10	,
	exldcl11	,
	exldcl12	,
	exldcl13	,
	exldcl14	,
	exldcl15	,
	exldcl16	,
	exldcl17	,
	exldcl18	,
	exldcl19	,
	exldcl20	,
	exldcl21	,
	exldcl22	,
	exldcl23	,
	exldcl24	,
	exldcl25	,
	exldcl26	,
	exldcl27	,
	exldcl28	,
	exldcl29	,
	exldcl30	,
	exldcl31	,

	exldcl50	,
	exldcl51	,
	exldcl52	,
	exldcl53	,
	exldcl54	,
	exldcl55	,
	exldcl56	,
	exldcl57	,
	exldcl58	,
	exldcl59	,
	exldcl60	,
	exldcl61	,
	exldcl62	,
	exldcl63	,
	exldcl64	,
	exldcl65
	};

	procfunc(CurPack[1], func_items, func_table);
	return;
}

/* -----------------------------------------------------------------------
 * The EXTENDED TV-GRAPHICS mode MEMORY-CONTROL instruction (3)
 */

static	void	exmemctl()
{
	return;
}

/* -----------------------------------------------------------------------
 * The EXTENDED TV-GRAPHICS mode WRITE ADDITIONAL FONT FOREGROUND/
 * BACKGROUND instruction (6)
 */

static	void	exadnfnt()
{
	return;
}

/* -----------------------------------------------------------------------
 * The EXTENDED TV-GRAPHICS mode XOR ADDITIONAL FONT WITH 2 COLORS
 * instruction (14)
 */

static	void	exxradfn()
{
	return;
}

/* -----------------------------------------------------------------------
 * The EXTENDED TV-GRAPHICS mode LOAD CLUT Colour (0..7) to (248..255)
 * instruction (16-47)
 */

static	void	exldcl00()	{ ldclut1(  0); return; }
static	void	exldcl01()	{ ldclut1(  8); return; }
static	void	exldcl02()	{ ldclut1( 16); return; }
static	void	exldcl03()	{ ldclut1( 24); return; }
static	void	exldcl04()	{ ldclut1( 32); return; }
static	void	exldcl05()	{ ldclut1( 40); return; }
static	void	exldcl06()	{ ldclut1( 48); return; }
static	void	exldcl07()	{ ldclut1( 56); return; }
static	void	exldcl08()	{ ldclut1( 64); return; }
static	void	exldcl09()	{ ldclut1( 72); return; }
static	void	exldcl10()	{ ldclut1( 80); return; }
static	void	exldcl11()	{ ldclut1( 88); return; }
static	void	exldcl12()	{ ldclut1( 96); return; }
static	void	exldcl13()	{ ldclut1(104); return; }
static	void	exldcl14()	{ ldclut1(112); return; }
static	void	exldcl15()	{ ldclut1(120); return; }
static	void	exldcl16()	{ ldclut1(128); return; }
static	void	exldcl17()	{ ldclut1(136); return; }
static	void	exldcl18()	{ ldclut1(144); return; }
static	void	exldcl19()	{ ldclut1(152); return; }
static	void	exldcl20()	{ ldclut1(160); return; }
static	void	exldcl21()	{ ldclut1(168); return; }
static	void	exldcl22()	{ ldclut1(176); return; }
static	void	exldcl23()	{ ldclut1(184); return; }
static	void	exldcl24()	{ ldclut1(192); return; }
static	void	exldcl25()	{ ldclut1(200); return; }
static	void	exldcl26()	{ ldclut1(208); return; }
static	void	exldcl27()	{ ldclut1(216); return; }
static	void	exldcl28()	{ ldclut1(224); return; }
static	void	exldcl29()	{ ldclut1(232); return; }
static	void	exldcl30()	{ ldclut1(240); return; }
static	void	exldcl31()	{ ldclut1(248); return; }

/* -----------------------------------------------------------------------
 * The EXTENDED TV-GRAPHICS mode LOAD CLUT ADDITIONAL COLOUR (0..15) to
 * (240-255) instruction (48-63)
 */

static	void	exldcl50()	{ ldclut2(  0); return; }
static	void	exldcl51()	{ ldclut2( 16); return; }
static	void	exldcl52()	{ ldclut2( 32); return; }
static	void	exldcl53()	{ ldclut2( 48); return; }
static	void	exldcl54()	{ ldclut2( 64); return; }
static	void	exldcl55()	{ ldclut2( 80); return; }
static	void	exldcl56()	{ ldclut2( 96); return; }
static	void	exldcl57()	{ ldclut2(112); return; }
static	void	exldcl58()	{ ldclut2(128); return; }
static	void	exldcl59()	{ ldclut2(144); return; }
static	void	exldcl60()	{ ldclut2(160); return; }
static	void	exldcl61()	{ ldclut2(176); return; }
static	void	exldcl62()	{ ldclut2(192); return; }
static	void	exldcl63()	{ ldclut2(208); return; }
static	void	exldcl64()	{ ldclut2(224); return; }
static	void	exldcl65()	{ ldclut2(240); return; }

/************************************************************************/
/*	END OF FILE							*/
/************************************************************************/

