#include <stdio.h>
#include <stdlib.h>
#include <egb.h>

extern	char	*work;


//	47a	VC3 regs指定
//	47c	VC3 regsデータ内容指定

//	VC3 regs
//		2000	色数
//		2010	ビデオ表示開始/表示状態取得/表示フィールド/指定
//		2011	表示倍率指定
//		2027	ソースビデオ映像のx1
//		2028	ソースビデオ映像のx2
//		2029	ソースビデオ映像のy1
//		202a	ソースビデオ映像のy2
//		202b	表示開始位置のx
//		202c	表示開始位置のy
//		202d	vramオフセット(1ラインのバイト数)
//

void videoSet()
{
	int	i;
	outpw(0x47a,0);
	outp(0x47d,2);

	outpw(0x47a,0x2000);
	outp(0x47c,1);
	i = inp(0x47c) & 0x80;

	outp(0x47d,0x11);
	outp(0x47f,9);

	outpw(0x47a,0x2010);
	i = inp(0x47c) & 0x7f;
	outp(0x47c,i);
	outp(0x47c,0);
	outp(0x47c,0x80);
	outp(0x47f,0);

	/* 表示モード設定 */

	outp(0x47e,4);


	outpw(0x47a,0x2011);
	outp(0x47f,9);

	outp(0x47c,0);
	outp(0x47d,0x80);

	outpw(0x47a,0x2020);
	outpw(0x47c,0xfb4);

	outpw(0x47a,0x2022);
	outpw(0x47c,0x137);

	outpw(0x47a,0x2023);
	outpw(0x47c,0x7ff);

	outpw(0x47a,0x2024);
	outpw(0x47c,0xfef);

	outpw(0x47a,0x2026);
	outpw(0x47c,0x7ff);

	outpw(0x47a,0x2027);
	outpw(0x47c,0);

	outpw(0x47a,0x2028);
	outpw(0x47c,0x27f);
	
	outpw(0x47a,0x2029);
	outpw(0x47c,0);

	outpw(0x47a,0x202a);
	outpw(0x47c,0xef);

	outpw(0x47a,0x202b);
	outpw(0x47c,0x60*2);

	outpw(0x47a,0x202c);
	outpw(0x47c,0);

	outpw(0x47a,0x202d);
	outpw(0x47c,0x200);

	outpw(0x47a,0x2010);
	i = inp(0x47e) | 1;
	outp(0x47e,i);

}

int vc3_check()
{
	int	i;

	i = inp(0x479) & 0x40;
	if (i!=0) return 1;

	outpw(0x47A,0x2000);
	i = inp(0x47c) & 1;
	if (i!=1) return 1;

	outpw(0x50a0,4);
	i = inp(0x50a2) & 0x80;
	if (i!=0) return 1;

	return 0;
}
int VC3_check2()
{
	int	i;

	outpw(0x47A,0x2010);
	i = inp(0x47E) & 1;
	return i;
}

void reset_VC3()
{
	int	i;

	outpw(0x47A,0x2010);
	outp(0x47F,2);

	i=0;
	while(i<1000000 && ((inp(0x47E) & 1) != 0)) i++;

	outp(0x47F,0);
	outpw(0x47A,0x2000);
	outp(0x47C,1);
}

int	video_flg;
void VC_on()
{
	if (vc3_check()) return;
	if (VC3_check2()) reset_VC3();

	EGB_writePage(work,1);
	EGB_displayStart(work,0,512,32);
	videoSet();
	EGB_writePage(work,0);
	video_flg = 1;
}
void VC_off()
{
	if (VC3_check2()) reset_VC3();
	EGB_writePage(work,1);
	EGB_color(work,1,0);
	EGB_clearScreen(work);
	EGB_writePage(work,0);
	video_flg = 0;
}

