public void drawPanel3() {
		panel3 = new JPanel();
		
		JPanel systemBusPanel = new JPanel();
		systemBusPanel.setLayout(new BoxLayout(systemBusPanel, BoxLayout.Y_AXIS));//Add bus panels vertically
		
		JPanel addressBusPanel = new JPanel();
		addressBusPanel.setPreferredSize(new Dimension(175, 60));
		addressBusPanel.setBorder(BorderFactory.createTitledBorder(cyanLine, "Address Bus"));
		addressBusField = new JTextField(8);
		addressBusField.setEditable(false);
		addressBusPanel.add(addressBusField);
		systemBusPanel.add(addressBusPanel);
		
		systemBusController.accessControlLine().getAddressBus().registerListener(new UpdateListener(this));
		
		JPanel dataBusPanel = new JPanel();
		dataBusPanel.setPreferredSize(new Dimension(175, 60));
		dataBusPanel.setBorder(BorderFactory.createTitledBorder(magentaLine, "Data Bus"));
		dataBusField = new JTextField(8);
		dataBusField.setEditable(false);
		dataBusPanel.add(dataBusField);
		systemBusPanel.add(dataBusPanel);
		
		systemBusController.accessControlLine().getDataBus().registerListener(new UpdateListener(this));
		
		JPanel controlLinePanel = new JPanel();
		controlLinePanel.setPreferredSize(new Dimension(175, 60));
		controlLinePanel.setBorder(BorderFactory.createTitledBorder("Control Line"));
		controlLineField = new JTextField(8);
		controlLineField.setEditable(false);
		controlLinePanel.add(controlLineField);
		systemBusPanel.add(controlLinePanel);
		
		systemBusController.accessControlLine().registerListener(new UpdateListener(this));
		
		systemBusPanel.setBorder(BorderFactory.createTitledBorder(" System Bus "));
		
		
		panel3.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 10));
		
		
		panel3.add(systemBusPanel);
		
		JPanel panel3BufferPanel = new JPanel();
		panel3BufferPanel.setPreferredSize(new Dimension(150, 90));
		panel3.add(panel3BufferPanel); //To separate system bus and control panel displays
		
		
		/*
		 * Control panel
		 */
		JPanel controlPanel = new JPanel(); //Container panel for all control buttons
		controlPanel.setLayout(new BoxLayout(controlPanel, BoxLayout.Y_AXIS));
		controlPanel.setMaximumSize(new Dimension(200, 250));
		
		JPanel subControlPanel1 = new JPanel();
		subControlPanel1.setLayout(new BoxLayout(subControlPanel1, BoxLayout.X_AXIS));
		subControlPanel1.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));
		
		JPanel subControlPanel2 = new JPanel();
		subControlPanel2.setLayout(new BoxLayout(subControlPanel2, BoxLayout.X_AXIS));
		
		JPanel subControlPanel3 = new JPanel();
		subControlPanel3.setLayout(new BoxLayout(subControlPanel3, BoxLayout.X_AXIS));
		subControlPanel3.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0));
		
		JPanel subControlPanel4 = new JPanel();
		subControlPanel4.setLayout(new BoxLayout(subControlPanel4, BoxLayout.X_AXIS));
		
		JPanel subControlPanel5 = new JPanel();
		subControlPanel5.setLayout(new BoxLayout(subControlPanel5, BoxLayout.X_AXIS));
		subControlPanel5.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0));
		
		fileOpenButton = new JButton("Select Assembly File");
		fileOpenButton.addActionListener(new FileOpenListener());
		subControlPanel1.add(fileOpenButton);
		controlPanel.add(subControlPanel1);		
		
		fileChooser = new JFileChooser("src/assemblyPrograms");	
		
		
		JButton executeButton = new JButton("Execute Program");
		executeButton.addActionListener(new ExecuteListener());
		subControlPanel2.add(executeButton);
		controlPanel.add(subControlPanel2);
		
		JButton stepButton = new JButton("Step");
		stepButton.addActionListener(new StepExecutionListener());
		subControlPanel3.add(stepButton);
		controlPanel.add(subControlPanel3);

		
		//Adjust mode switch button labels depending on mode of execution
		if (!pipeliningEnabled) {
			modeSwitchButton = new JButton("Pipelined Mode");
		}
		else {
			modeSwitchButton = new JButton("Standard Mode");
		}
		modeSwitchButton.addActionListener(new ModeSwitchListener());
		subControlPanel4.add(modeSwitchButton);	
		controlPanel.add(subControlPanel4);
	
		
		JButton resetButton = new JButton("Reset");
		resetButton.addActionListener(new ResetListener());
		subControlPanel4.add(resetButton);
		subControlPanel5.add(resetButton);	
		
		JButton helpButton = new JButton("Help!");
		helpButton.addActionListener(new HelpButtonListener());		
		subControlPanel4.add(helpButton);
		subControlPanel5.add(helpButton);	
		
		controlPanel.add(subControlPanel5);
		
		//Border formatting for button control panel
		Border controlPanelLine = BorderFactory.createLineBorder(Color.BLUE, 3);
		Font controlPanelFont = new Font("default", Font.ITALIC, 15);
		controlPanel.setBorder(BorderFactory.createTitledBorder(controlPanelLine, "* Control Panel *",0, 0, controlPanelFont));		
		
	
		panel3.add(controlPanel);
		panel3.setPreferredSize(new Dimension(220, 800));
		panel3.setMaximumSize(new Dimension(220, 800));
		
		
		JPanel imagePanel = new JPanel();
		ImageIcon logo = new ImageIcon("src/cpuSimLogoMagentaSmall.jpg");
		JLabel logoLabel = new JLabel("", logo, JLabel.CENTER);
		imagePanel.add(logoLabel);
		panel3.add(imagePanel);
		
		this.getContentPane().add(panel3);
		
	}