#!/usr/bin/python
import time
from PIL import Image
import numpy as np
import math
import binascii
import os

try:

	#Image size, pixels			
	w,h = 640,512
	data = np.zeros( (w,h,3), dtype=np.uint8)

	#load raw chargen ROM file in temp array
	f=open("mc6102","r")
	bindump_temp=f.read()
	f.close()

	#re-sorted array init
	bindump=[]

	#re-sorting loop 1
	for i in range(0,2048):
		if((i&7)<6):
			bindump.append(bindump_temp[i+2])
		else:
			#bindump.append("\xFF")
			bindump.append(bindump_temp[i-6])

	#array re-init	
	bindump_temp=bindump
	bindump=[]
 
	#re-sorting loop 2	
	for i in range(0,160):
		if(i<32):
			for uh in range(0,8):
				bindump.append(bindump_temp[uh+256+(i*8)])
			for lh in range(0,8):
				bindump.append(bindump_temp[lh+(i*8)])
		else:
			if(i<96):
				for uh in range(0,8):
					bindump.append(bindump_temp[uh+512+((i-32)*8)])
				for lh in range(0,4):
					#bindump.append("\x00")
					bindump.append(bindump_temp[lh+1024+((i-32)*8)])
				for lh in range(0,4):
					bindump.append("\x00")
			else:
				if(i<160):
					for uh in range(0,8):
						bindump.append(bindump_temp[uh+1536+((i-96)*8)])
					for lh in range(0,4):
						#bindump.append("\x00")
						bindump.append(bindump_temp[lh+1028+((i-96)*8)])
					for lh in range(0,4):
						bindump.append("\x00")

#					for lh in range(0,8):
#						bindump.append("\x00")
				
				else:
					for j in range(0,16):
						bindump.append("\x00")


	print len(bindump)
	#while(True):
	#	i=i+1


	#creating image data	
	for i in range(0,2560):
		for j in range(0,8):
			bit8=bindump[i]
			bit10=(bin(int(binascii.hexlify(bit8),16)))[2:].zfill(8)
			#print bit10
#			if((bin(int(binascii.hexlify(bit8),16)))[j+2]=="0"):
			if(bit10[j]=="1"):
				x=((((i/128)*8)+(j)))
				y=(127-(i&127))
				for xc in range (0,4):
					for yc in range (0,4):
						data[x*4+xc,y*4+yc]=[0,255,0]


				#data[(((i/8)+j)),63-(i&63)]=[255,255,255]
	print "Saving image"

	#Saving image
	jm=Image.fromarray(data,'RGB')
        jm=jm.rotate(90)
	jm.save("mc6102-forum.bmp")


except KeyboardInterrupt:
	print
	print "Failure"

