public void cycle() {
		// Do instruction limiting so we don't run at light speed
		if(!limiter())
			return;

		// If we've hit the instruction limit, reset count so that
		// the timers can be updated
		if(instruction_count == 5)
			instruction_count = 0;

		System.out.println(String.format("\n\nPC@%x: %x; I: %x", PC, memory[PC], I));

		/*
			Java has no unsigned support and the conversion from
			bytes to shorts can get messed up so we're going to
			step around the issue here.
		*/
		int msb, lsb, total;

		msb = (((int)memory[PC]) & 0xFF);
		lsb = (((int)memory[PC + 1]) & 0xFF);

		// Get opcode
		//Opcode = (short)((memory[PC] << 8) | memory[PC + 1]);
		total = ((msb << 8) | lsb);
		Opcode = (short)total;
		
		System.out.println("\tOp: " + String.format("%x", Opcode));

		// Main execution switch
		Execute(Opcode);

		// Update timers
		// These only fire when instruction count is zero as this
		// allows us to limit the Hz that the interpreter runs at
		if(instruction_count == 0) {
			if(delay_timer > 0)
			{
				delay_timer--;
			}

			if(sound_timer > 0)
			{
				sound_timer--;

				if(sound_timer > 0)
				{
					System.out.println("SoundT: " + sound_timer);
					sound.setPlaying(true);
				}
				else
				{
					if(sound.isPlaying())
						sound.setPlaying(false);
				}
			}
		}

		// Update instruction count
		instruction_count++;
	}