#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <stdio.h>
#include <fcntl.h>
#include <assert.h>
#include <string.h>
#include "peekpoke.h"

int main(int argc, char **argv) 
{
	unsigned long start;
	short color;
	int vert, horiz, counter;
	int devmem = open("/dev/mem", O_RDWR|O_SYNC);
        assert(devmem != -1);

	start = (unsigned long)mmap(0, 640 * 480 * 2,
			PROT_READ|PROT_WRITE, MAP_SHARED, devmem, 0x21800000);
	color = 0x1F;
	counter = 0;

	for(vert = 0; vert < 480; vert++)
	{
		for(horiz = 0; horiz < (640 * 2); horiz = horiz + 2)
		{
			if(vert >= 0 && vert <= 159) //display shades of red
				POKE16((start + (horiz + (1280 * vert))), color << 11);

			else if(vert >= 160 && vert <= 319) //display shades of green
			{
				if(vert == 160 && counter == 0)//horiz == ((640 * 2) - 1))
					color = 0x1F;
				
				POKE16((start + (horiz + (1280 * vert))), color << 6);

			}else //if(vert >= 320 && vert <= 479) display shades of blue 
			{

				if(vert == 320 && counter == 0)
					color = 0x1F;
				
				POKE16((start + (horiz + (1280 * vert))), color);
				

				//POKE16((start + (horiz + (1280 * vert))), 0x0000);
			}
		}

		counter++;

		//display five rows of the same color
		if(counter == 5)
		{
			color = color - 1;	
			counter = 0;	
		}
		
	}

	return 0;

}
