//---------------------------------------------------------------------------------------------
#include <stdio.h>
#include <system.h>
#include <io.h>
//---------------------------------------------------------------------------------------------
#define IOWR_VGA(base,offset,data) IOWR_16DIRECT(base,(offset)*2,data)
#define IORD_VGA(base,offset) IORD_16DIRECT(base,(offset)*2)
#define pacV 1

#define INITIAL_PACX 14
#define INITIAL_PACY 23
//---------------------------------------------------------------------------------------------
int pacX = INITIAL_PACX;
int pacY = INITIAL_PACY;
int pacImgX = 203 + 9 * INITIAL_PACX;
int pacImgY = 105 + 9 * INITIAL_PACY;
unsigned char keyBoardCode = 0;
unsigned char pacOperation = 0;
//---------------------------------------------------------------------------------------------
void paintPac(int x, int y, int type) {
	IOWR_VGA(VGA_BASE, 0, x);
	IOWR_VGA(VGA_BASE, 1, y);
	IOWR_VGA(VGA_BASE, 2, type);
}

//---------------------------------------------------------------------------------------------
int movePac(int type) {
	switch(keyBoardCode)
	{
	case 117:	//up
		if(pacY > 0)
			pacImgY -= pacV;
		break;
	case 116:	//right
		if(pacX < 27)
		pacImgX += pacV;
		break;
	case 114:	//down
		if(pacY < 30)
		pacImgY += pacV;
		break;
	case 107:	//left
		if(pacX > 0)
		pacImgX -= pacV;
		break;
	default:
		break;
	}
	pacX = (pacImgX - 203) / 9;
	pacY = (pacImgY - 105) / 9;
	paintPac(pacImgX, pacImgY, 0);
	return type;
}
//---------------------------------------------------------------------------------------------
/*int main() {
	unsigned gan;
	printf("PacMan is running!\n");
	while(!IORD_8DIRECT(KEYBOARD_BASE,0));
	for(;;)
	{
		while(!IORD_8DIRECT(KEYBOARD_BASE,0)){
			int i = 0;
			for(i = 0; i < 5000; i++);
			movePac(0);
		}
		keyBoardCode = IORD_8DIRECT(KEYBOARD_BASE,1);
		gan = IORD_VGA(VGA_BASE,1);
		printf("key=%d",gan);
		movePac(0);
	}

	return 0;
}*/
void main(){

	IOWR_VGA(VGA_BASE,0,105);
	IOWR_VGA(VGA_BASE,1,203);
}

