
#include <sys/bios.h>
#include <sys/process.h>
#include <resource.h>
#include "../bmpsaver.h"

#define CHARBASE_SC1	10
#define CHARBASE_SC2	50
#define CHARBASE_SP		90
#define CHARBASE_TEXT	128

#define PALETTE_SC1		0
#define PALETTE_SC2		4
#define PALETTE_SP		8

int font[] = {
	0, 0, 0, 0, 0, 0, 0, 0,
};

/*------------------------------------------------*/
res_t far *get_resource(int no)
{
	int i;
	res_t far *res = _pc->_resource;
	for(i=0;i<no;i++) {
		res = (res_t far *)MK_FP(FP_SEG(res)+res->size, FP_OFF(res));
	}
	if(res->magic != RESID) return NULL;
	return res;
}

/*------------------------------------------------*/
main()
{
	int i, j, width, height, n, key;
	res_image_t far *p;

	display_control(DCM_SCR1 | DCM_SCR2 | DCM_SPR | DCM_SCR2_WIN_INSIDE);
	font_set_colordata(0, 1, &font);
	screen_fill_char(SCREEN1, 0, 0, 28, 18, 0);
	screen_fill_char(SCREEN2, 0, 0, 28, 18, (4<<9) + 0);
	text_window_init(0, 16, 28, 2, CHARBASE_TEXT);


	/*----- パレット設定 -----*/
	lcd_set_color(0x6420, 0xfdb9);
	palette_set_color(0,	0x7740);
	palette_set_color(4,	0x7420);
	palette_set_color(8,	0x7720);

	/* SCREEN 1 */
	p = (res_image_t far *)get_resource(0);
	width = p->width;
	height = p->height;
	font_set_colordata(CHARBASE_SC1, width*height, (void far *)((BYTE far *)p + sizeof(res_image_t)));
	n = CHARBASE_SC1;
	for(i=0;i<height;i++) {
		for(j=0;j<width;j++) {
			screen_fill_char(SCREEN1, 5+j, 5+i, 1, 1, (PALETTE_SC1<<9)+n);
			n++;
		}
	}

	/* SCREEN 2 */
	p = (res_image_t far*)get_resource(1);
	width = p->width;
	height = p->height;
	font_set_colordata(CHARBASE_SC2, width*height, (void far *)((BYTE far *)p + sizeof(res_image_t)));
	n = CHARBASE_SC2;
	for(i=0;i<height;i++) {
		for(j=0;j<width;j++) {
			screen_fill_char(SCREEN2, 8+j, 8+i, 1, 1, (PALETTE_SC2<<9)+n);
			n++;
		}
	}

	/* SPRITE */
	p = (res_image_t far*)get_resource(2);
	width = p->width;
	height = p->height;
	font_set_colordata(CHARBASE_SP, width*height, (void far *)((BYTE far *)p + sizeof(res_image_t)));
	n = CHARBASE_SP;
	for(i=0;i<height;i++) {
		for(j=0;j<width;j++) {
			sprite_set_char(i*width+j, (PALETTE_SP<<9)+n);
			sprite_set_location(i*width+j, (12+i*width+j)*8, 8*8);
			n++;
		}
	}
	sprite_set_range(0, width*height);
	bs_sprite_set_range(0, width*height);
	bs_set_target(KH_BS_SCREEN1 | KH_BS_SCREEN2 | KH_BS_SPRITE);

	/* text */
	text_put_string(0, 0, "A:ram0 B:XMODEM START:END");

	sys_wait(30);

	while((key=key_press_check())!=KEY_START)
	{
		if(key==KEY_A) bs_save_screen("sample.bmp",0,0,224,144);
		if(key==KEY_B) bs_save_screen_xmodem("sample.bmp",0,0,224,144);
	}
}

