mars.tools
Class InstructionCounter

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by javax.swing.JFrame
                      extended by mars.tools.AbstractMarsToolAndApplication
                          extended by mars.tools.InstructionCounter
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Observer, Accessible, RootPaneContainer, WindowConstants, MarsTool

public class InstructionCounter
extends AbstractMarsToolAndApplication

Instruction counter tool. Can be used to know how many instructions were executed to complete a given program. Code slightly based on MemoryReferenceVisualization.

Author:
Felipe Lessa
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class mars.tools.AbstractMarsToolAndApplication
AbstractMarsToolAndApplication.ConnectButton, AbstractMarsToolAndApplication.EnterKeyListener
 
Nested classes/interfaces inherited from class javax.swing.JFrame
JFrame.AccessibleJFrame
 
Nested classes/interfaces inherited from class java.awt.Frame
Frame.AccessibleAWTFrame
 
Nested classes/interfaces inherited from class java.awt.Window
Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
protected  int counter
          Number of instructions executed until now.
protected  int counterI
          Number of instructions of type I.
protected  int counterJ
          Number of instructions of type J.
protected  int counterR
          Number of instructions of type R.
protected  int lastAddress
          The last address we saw.
 
Fields inherited from class mars.tools.AbstractMarsToolAndApplication
connectButton, isBeingUsedAsAMarsTool, theWindow, thisMarsApp
 
Fields inherited from class javax.swing.JFrame
accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
InstructionCounter()
          Simple construction, likely used by the MARS Tools menu mechanism.
InstructionCounter(String title, String heading)
          Simple constructor, likely used to run a stand-alone memory reference visualizer.
 
Method Summary
protected  void addAsObserver()
          Add this app/tool as an Observer of desired MIPS Observables (memory and registers).
protected  JComponent buildMainDisplayArea()
          Abstract method that must be instantiated by subclass to build the main display area of the GUI.
 String getName()
          Required MarsTool method to return Tool name.
protected  void initializePreGUI()
          Method that will be called once just before the GUI is constructed in the go() and action() methods.
protected  void processMIPSUpdate(Observable resource, AccessNotice notice)
          Override this method to process a received notice from MIPS Observable (memory or register) It will only be called if the notice was generated as the result of MIPS instruction execution.
protected  void reset()
          Method that will be called each time the default Reset button is clicked.
protected  void updateDisplay()
          Override this method to implement updating of GUI after each MIPS instruction is executed, while running in "timed" mode (user specifies execution speed on the slider control).
 
Methods inherited from class mars.tools.AbstractMarsToolAndApplication
action, addAsObserver, addAsObserver, buildButtonAreaMarsTool, buildButtonAreaStandAlone, buildHeadingArea, deleteAsObserver, deleteAsObserver, getHelpComponent, go, initializePostGUI, isObserving, performSpecialClosingDuties, update
 
Methods inherited from class javax.swing.JFrame
addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update
 
Methods inherited from class java.awt.Frame
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Field Detail

counter

protected int counter
Number of instructions executed until now.


counterR

protected int counterR
Number of instructions of type R.


counterI

protected int counterI
Number of instructions of type I.


counterJ

protected int counterJ
Number of instructions of type J.


lastAddress

protected int lastAddress
The last address we saw. We ignore it because the only way for a program to execute twice the same instruction is to enter an infinite loop, which is not insteresting in the POV of counting instructions.

Constructor Detail

InstructionCounter

public InstructionCounter(String title,
                          String heading)
Simple constructor, likely used to run a stand-alone memory reference visualizer.

Parameters:
title - String containing title for title bar
heading - String containing text for heading shown in upper part of window.

InstructionCounter

public InstructionCounter()
Simple construction, likely used by the MARS Tools menu mechanism.

Method Detail

getName

public String getName()
Description copied from class: AbstractMarsToolAndApplication
Required MarsTool method to return Tool name. Must be defined by subclass.

Specified by:
getName in interface MarsTool
Specified by:
getName in class AbstractMarsToolAndApplication
Returns:
Tool name. MARS will display this in menu item.

buildMainDisplayArea

protected JComponent buildMainDisplayArea()
Description copied from class: AbstractMarsToolAndApplication
Abstract method that must be instantiated by subclass to build the main display area of the GUI. It will be placed in the CENTER area of a BorderLayout. The title is in the NORTH area, and the controls are in the SOUTH area.

Specified by:
buildMainDisplayArea in class AbstractMarsToolAndApplication

addAsObserver

protected void addAsObserver()
Description copied from class: AbstractMarsToolAndApplication
Add this app/tool as an Observer of desired MIPS Observables (memory and registers). By default, will add as an Observer of the entire Data Segment in memory. Override if you want something different. Note that the Memory methods to add an Observer to memory are flexible (you can register for a range of addresses) but may throw an AddressErrorException that you need to catch. This method is called whenever the default "Connect" button on a MarsTool or the default "Assemble and run" on a stand-alone Mars app is selected. The corresponding NOTE: if you do not want to register as an Observer of the entire data segment (starts at address 0x10000000) then override this to either do some alternative or nothing at all. This method is also overloaded to allow arbitrary memory subrange.

Overrides:
addAsObserver in class AbstractMarsToolAndApplication

processMIPSUpdate

protected void processMIPSUpdate(Observable resource,
                                 AccessNotice notice)
Description copied from class: AbstractMarsToolAndApplication
Override this method to process a received notice from MIPS Observable (memory or register) It will only be called if the notice was generated as the result of MIPS instruction execution. By default it does nothing. After this method is complete, the updateDisplay() method will be invoked automatically.

Overrides:
processMIPSUpdate in class AbstractMarsToolAndApplication

initializePreGUI

protected void initializePreGUI()
Description copied from class: AbstractMarsToolAndApplication
Method that will be called once just before the GUI is constructed in the go() and action() methods. Use it to initialize any data structures needed for the application whose values will be needed to determine the initial state of GUI components. By default it does nothing.

Overrides:
initializePreGUI in class AbstractMarsToolAndApplication

reset

protected void reset()
Description copied from class: AbstractMarsToolAndApplication
Method that will be called each time the default Reset button is clicked. Use it to reset any data structures and/or GUI components. By default it does nothing.

Overrides:
reset in class AbstractMarsToolAndApplication

updateDisplay

protected void updateDisplay()
Description copied from class: AbstractMarsToolAndApplication
Override this method to implement updating of GUI after each MIPS instruction is executed, while running in "timed" mode (user specifies execution speed on the slider control). Does nothing by default.

Overrides:
updateDisplay in class AbstractMarsToolAndApplication