#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>

#define ROMSIZE 24*1024*1024

int main()
{
	unsigned char *virt;
	int fd;
	int out;
	int written;
	int i;

	fd = open("/dev/mem", O_RDWR);

	virt = mmap(NULL, ROMSIZE, PROT_READ | PROT_WRITE | PROT_EXEC,
			MAP_SHARED, fd, 0x00000);
	if (virt == MAP_FAILED)
	{
		printf("mmap failed");
		exit(1);
	}

	out = open("rom", O_RDWR | O_CREAT);
	written = 0;
	while(written < ROMSIZE)
	{
		i=write(out,virt+written,ROMSIZE-written);
		if(i<0)
		{
			perror("error writing");
			exit(1);
		}
		written += i;
		fprintf(stderr,"written: %d\n",written);
	}
	close(out);
	close(fd);
	printf("%d bytes written\n",written);
	exit(0);
}
