/*
	rdmos.c
*/


#include <ryosuke.h>
#include <usrlib.h>
#include <mos.h>


#define	STARTX	320
#define	STARTY	240


static char mwk[4096];
static char patwk[258];

#define	XOFS	50
#define	YOFS	16


void minit()
{
	MOS_start( mwk, 4096 );
	// MOS_setpos(STARTX,STARTY);
	MOS_horizon(0, 640+XOFS*2);
	MOS_vertical(0, 480+YOFS*2);
	MOS_setpos(XOFS+0,YOFS+0);
	MOS_typeRom(81,XOFS,YOFS, patwk);
}


void mend()
{
	MOS_end();
}


void	rdmos(MSDAT *msdat)
{
	int msx,msy,msb;  char i,*bp;
	MOS_rdpos(&msb,&msx,&msy);
	msx -= XOFS;
	msy -= YOFS;
	msdat->dx = msx - msdat->x;
	msdat->dy = msy - msdat->y;
	msdat->x = msx;
	msdat->y = msy;
	// msdat->x += (msdat->dx = msx - STARTX);
	// msdat->y += (msdat->dy = msy - STARTY);
	// MOS_setpos(STARTX,STARTY);
	for (i=0; i<2; i++,(msb>>=1))
	{
		bp = (i==0 ? &(msdat->btn1) : &(msdat->btn2));
		if (msb & 1)
			*bp = ((*bp == OFF || *bp == ONOFF) ? OFFON : ON);
		else
			*bp = ((*bp == OFF || *bp == ONOFF) ? OFF : ONOFF);
	}
}


void mous_setpos(MSDAT *msdat, int x,int y)
{
	MOS_setpos(XOFS+x,YOFS+y);
	msdat->x = x;
	msdat->y = y;
	msdat->dx = msdat->dy = 0;
}


void mous_typeRom(int type)
{
	MOS_typeRom(type, XOFS,YOFS, patwk);
}


void mous_type(int mode, char *pattern)
{
	MOS_type(mode, XOFS,YOFS, pattern);
}


/* end of rdmos.c */
