Example #1
0
def main(rom_file):
	pygame.init()
	#screen = pygame.display.set_mode((64, 64))
	video = Video()
	screen = pygame.display.set_mode(video.get_mode())
	#pygame.mouse.set_visible(0)
	pygame.display.update()
	
	surface = pygame.Surface(screen.get_size())
	surface = surface.convert()
	screen.blit(surface, (0, 0))
	video.set_surface(surface)
	
	pygame.display.flip()

	keyboard = Keyboard()
	computer = CPU(video)
	fd = open(rom_file, "rb")
	computer.load(fd.read())
	
	CLOCK_HZ = 10000 # 4194304
	TIMER_HZ = 30
	CPU_CLOCK_EVENT = USEREVENT + 1
	TIMER_CLOCK_EVENT = CPU_CLOCK_EVENT + 1

	#pygame.time.set_timer(CPU_CLOCK_EVENT, 1000 / CLOCK_HZ)
	#pygame.time.set_timer(TIMER_CLOCK_EVENT, int(1000 / TIMER_HZ))
	pygame.time.set_timer(TIMER_CLOCK_EVENT, 100)
	
	i = 0
	while True:

		event = pygame.event.poll()
		
		if event.type == pygame.QUIT:
			sys.exit()
		#elif event.type == CPU_CLOCK_EVENT:
		#	computer.tick()
		elif event.type == TIMER_CLOCK_EVENT:
			computer.timer()
		elif event.type == pygame.KEYUP:
			key = keyboard.translate(event.key)
			if not key is None: 
				computer.key_up(key)
		elif event.type == pygame.KEYDOWN:
			key = keyboard.translate(event.key)
			if not key is None: 
				computer.key_down(key)
				
		i += 1
		#print "timer " + str(i)
		computer.timer()
		computer.tick()
		#pygame.time.wait(1000 / CLOCK_HZ)
		
		screen.blit(surface, (0, 0))
		if not video.dirty_rect is None: 
			pygame.display.update(video.dirty_rect)

		video.dirty_rect = None