/* *****************************************************************************
	Title : debug.c
***************************************************************************** */

#include "main.h"


#define		DBG_PALCHG_DEBUG		FALSE
#define		DBG_DEBUG				FALSE


/* ★グローバル変数		*/
static	u_short		DbgOfs = 0;									/* VRAMｵﾌｾｯﾄ				*/
static	u_short		DbgDispModeVR = 0;							/* VR表示ﾓｰﾄﾞ				*/
static	u_short		DbgDispPalVR  = 0;							/* VR表示ﾊﾟﾚｯﾄ				*/
static	u_short		DbgAX = 0;									/* AXﾚｼﾞｽﾀの中身			*/

static	u_short		DbgCPalNo  = 0;								/* 操作対象ﾊﾟﾚｯﾄ番号		*/
static	u_short		DbgCPal    = 0;								/* 操作対象ﾊﾟﾚｯﾄﾃﾞｰﾀ		*/
static	u_short		DbgCPalPos = 0;								/* 操作ﾋﾞｯﾄ					*/

extern	char	buf[ 32];										/* ﾃﾝﾎﾟﾗﾘﾊﾞｯﾌｧ				*/


void	DbgPrintPort( char *str);
void	DbgDispVRAM( u_short key);
void	DbgInitChgPalette( void);
void	DbgChangePalette( u_short key);


/* ******************************************************************************
　関　　数	：DbgPrintPort
　内　　容	：
　表　　記	：
　引　　数	：−
　返　　値	：−
　コメント	：−
　履　　歴	：Ver 1.00	2000/12/07		K.Kimura		初版
****************************************************************************** */
void	DbgPrintPort( char *str)
{
	comm_open(); 
	comm_send_string( str); 
	comm_close(); 
}


#if DBG_DEBUG
/* ******************************************************************************
　関　　数	：DbgDispVRAM
　内　　容	：
　表　　記	：void	DbgDispVRAM( u_short key)
　引　　数	：−
　返　　値	：−
　コメント	：現在のＶＲＡＭを表示します。
　			：パレットは１５番限定です。
			：
　履　　歴	：Ver 1.00	2000/11/21		K.Kimura		初版
****************************************************************************** */
void	DbgDispVRAM( u_short key)
{
	static	u_short	i, j;
	static	u_short	idx;


	if (key & KEY_X4)
	{
		DbgDispModeVR = 1 - DbgDispModeVR;				/* 表示on/off切り替え	*/

		if (DbgDispModeVR == 0)
		{
			screen_fill_char( 1, 0, 0, 32, 32, (4 << 9));	/* 抜けのため 4		*/
			screen_set_scroll( 1, (DbgAX & 0x00ff), ((DbgAX >> 8) & 0x00ff));
		}
		else
		{
			screen_get_scroll( 1);
			DbgAX = _AX;
			screen_set_scroll( 1, 0, 0);
		}
	}

	if (DbgDispModeVR == 0)
		return;											/* 表示OFF				*/

	if (key & KEY_Y3)
		DbgOfs ^= 0x0100;								/* ﾍﾟｰｼﾞ切り替え		*/

	if (key & KEY_Y4)
	{
		DbgDispPalVR ++;
		DbgDispPalVR &= 0x000f;
	}

	/* ///  ＶＲＡＭ内キャラクタ表示（256個）  /// */
	for (i = 0; i < 9; i++)
	{
		for (j = 0; j < 28; j++)
		{
			idx = ((i * 28) + j);

			if ( idx < 256)
				screen_fill_char( 1, j, i+9, 1, 1, (DbgDispPalVR << 9) + DbgOfs + idx);
		}
	}

}


/* ******************************************************************************
　関　　数	：DbgChangePalette
　内　　容	：
　表　　記	：
　引　　数	：−
　返　　値	：−
　コメント	：−
　履　　歴	：Ver 1.00	2001/01/12		K.Kimura		初版
****************************************************************************** */
void	DbgInitChgPalette( void)
{
	DbgCPalNo  = 0;								/* 操作対象ﾊﾟﾚｯﾄ番号		*/
	DbgCPal    = 0;								/* 操作対象ﾊﾟﾚｯﾄﾃﾞｰﾀ		*/
	DbgCPalPos = 0;								/* 操作ﾋﾞｯﾄ					*/

	/* ///  スクリーン１矩形クリア（不透明） /// */
	screen_fill_char( 1, 0, 0, 2, SCR_MAP_HEIGHT, 0);

}


/* ******************************************************************************
　関　　数	：DbgChangePalette
　内　　容	：
　表　　記	：
　引　　数	：−
　返　　値	：−
　コメント	：−
　履　　歴	：Ver 1.00	2001/01/12		K.Kimura		初版
****************************************************************************** */
void	DbgChangePalette( u_short key)
{
	static	u_char		i, col;
	static	u_short		pbit;


	/* タイトル表示 */
	FntPrint( 1, 1, 0, "PAL CHANGE:", 1, FNT_PALETTE_NUM);

	if (key & (KEY_X2 | KEY_X3))
		DbgCPalNo++;

	if (key & (KEY_X1 | KEY_X4))
		DbgCPalNo--;

	DbgCPalNo &= 0x000f;

	/* ///  パレット番号 DbgCPalNo の情報取得  /// */
	palette_get_color( DbgCPalNo);
	DbgCPal = _AX;

	/* パレット番号表示 */
	sprintf( buf, "%02u", DbgCPalNo);
	FntPrint( 1, 1, 13, buf, 1, FNT_PALETTE_NUM);

	/* ///  ■パレット操作部■  ///  */

	/* 操作対象のビット位置移動チェック */
	if (key & KEY_Y3)
		DbgCPalPos ++;

	if (key & KEY_Y1)
		DbgCPalPos --;

	DbgCPalPos &= 0x0003;

	/* 操作対象のビット変更チェック */
	pbit = ((DbgCPal & (0x000f << (DbgCPalPos << 2))) >> (DbgCPalPos << 2));

	if (key & KEY_Y2)
		pbit ++;

	if (key & KEY_Y4)
		pbit --;

	pbit &= 0x0007;
	pbit  = pbit << (DbgCPalPos << 2);
	DbgCPal &= ~(0x000f << (DbgCPalPos << 2));

#if DBG_PALCHG_DEBUG
	DbgPrintPort("--< PALETTE CHANGE >--\r\n");
	sprintf( buf, "pbit::%4x\r\n", pbit);
	DbgPrintPort( buf);
	sprintf( buf, "POS::%d\r\n", DbgCPalPos);
	DbgPrintPort( buf);
	sprintf( buf, "AND EQ::%4x,%4x\r\n", DbgCPal, ~(0x000f << (DbgCPalPos << 2)));
	DbgPrintPort( buf);
	DbgPrintPort("------------------------\r\n");
#endif

	DbgCPal |= pbit;

	/* パレット再設定 */
	palette_set_color( DbgCPalNo, DbgCPal);

	/* パレット内容表示 */
	for (i = 0; i < 4; i++)
	{
		col = FNT_PALETTE_NUM;

		if (i == DbgCPalPos)
			col = FNT_PALETTE_W_NUM;

		sprintf( buf, "%1x", ((DbgCPal & (0x000f << (i << 2))) >> (i << 2)));
		FntPrint( 1, 0, (13 + i), buf, 1, col);
	}

	FntFlush();

}
#endif



