public void run_step() throws Exception{
		switch(current_step){
		case 0:
			if (pc >> 2 < raw_instructions.size()){
				// Fetch stage

				/*
				 * load instruction from instruction memory increment the PC
				 */

				fetch_stage();
				
				gui.selectInstruction(pc >> 2);
				gui.set_fetch_red();
				
				System.out.println(current_raw_instruction);

				current_step++;
			}
			else {
				//disable all buttons
			}
			break;
		case 1:
			// Decode stage

			/*
			 * determine type of fetched instructionbreak the instruction
			 * accordinglypass values to their correct path in the execution
			 * phase
			 */

			decode_stage();
			gui.set_decode_red();

			System.out.println(current_instruction);

			current_step++;
			break;
		case 2:
			// Execute stage

			execute_stage();
			gui.set_exec_red();

			System.out.println("ALU result = " + alu_result);

			current_step++;
			break;
		case 3:
			// Memory stage

			memory_stage();
			gui.set_memory_red();

			System.out.println("Memory result = " + memory_result);
			System.out.println("word at address 24 is = "
					+ memory_unit.load_word(24));

			current_step++;
			break;
		case 4:
			// Write back stage

			write_back_stage();
			gui.set_write_back_red();

			System.out.println("Register s2 is now equal " + register_file.get_register(18));
			System.out.println("Register s3 is now equal " + register_file.get_register(RegisterMapper.map_to_index("s3")));
			
			System.out.println("========");

			current_step = 0;
			break;
		}
	}