mars.tools
Class KeyboardAndDisplaySimulator

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.KeyboardAndDisplaySimulator
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Observer, Accessible, RootPaneContainer, WindowConstants, MarsTool

public class KeyboardAndDisplaySimulator
extends AbstractMarsToolAndApplication

Keyboard and Display Simulator. It can be run either as a stand-alone Java application having access to the mars package, or through MARS as an item in its Tools menu. It makes maximum use of methods inherited from its abstract superclass AbstractMarsToolAndApplication. Pete Sanderson
Version 1.0, 24 July 2008.
Version 1.1, 24 November 2008 corrects two omissions: (1) the tool failed to register as an observer of kernel text memory when counting instruction executions for transmitter ready bit reset delay, and (2) the tool failed to test the Status register's Exception Level bit before raising the exception that results in the interrupt (if the Exception Level bit is 1, that means an interrupt is being processed, so disable further interrupts). Version 1.2, 6 August 2009, soft-codes the MMIO register locations for new memory configuration feature of MARS 3.7. Previously memory segment addresses were fixed and final. Now they can be modified dynamically so the tool has to get its values dynamically as well.

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
static Dimension preferredTextAreaDimension
           
static int RECEIVER_CONTROL
           
static int RECEIVER_DATA
           
static int TRANSMITTER_CONTROL
           
static int TRANSMITTER_DATA
           
 
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
KeyboardAndDisplaySimulator()
          Simple constructor, likely used by the MARS Tools menu mechanism
KeyboardAndDisplaySimulator(String title, String heading)
          Simple constructor, likely used to run a stand-alone keyboard/display simulator.
 
Method Summary
protected  void addAsObserver()
          Override the inherited method, which registers us as an Observer over the static data segment (starting address 0x10010000) only.
protected  JComponent buildMainDisplayArea()
          Method that constructs the main display area.
protected  JComponent getHelpComponent()
          Overrides default method, to provide a Help button for this tool/app.
 String getName()
          Required MarsTool method to return Tool name.
protected  void initializePostGUI()
          Initialization code to be executed after the GUI is configured.
protected  void initializePreGUI()
          Method that will be called once just before the GUI is constructed in the go() and action() methods.
static void main(String[] args)
          Main provided for pure stand-alone use.
protected  void processMIPSUpdate(Observable memory, AccessNotice accessNotice)
          Update display when connected MIPS program accesses (data) memory.
protected  void reset()
          Method to reset counters and display when the Reset button selected.
 
Methods inherited from class mars.tools.AbstractMarsToolAndApplication
action, addAsObserver, addAsObserver, buildButtonAreaMarsTool, buildButtonAreaStandAlone, buildHeadingArea, deleteAsObserver, deleteAsObserver, go, isObserving, performSpecialClosingDuties, update, updateDisplay
 
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

preferredTextAreaDimension

public static Dimension preferredTextAreaDimension

RECEIVER_CONTROL

public static int RECEIVER_CONTROL

RECEIVER_DATA

public static int RECEIVER_DATA

TRANSMITTER_CONTROL

public static int TRANSMITTER_CONTROL

TRANSMITTER_DATA

public static int TRANSMITTER_DATA
Constructor Detail

KeyboardAndDisplaySimulator

public KeyboardAndDisplaySimulator(String title,
                                   String heading)
Simple constructor, likely used to run a stand-alone keyboard/display simulator.

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

KeyboardAndDisplaySimulator

public KeyboardAndDisplaySimulator()
Simple constructor, likely used by the MARS Tools menu mechanism

Method Detail

main

public static void main(String[] args)
Main provided for pure stand-alone use. Recommended stand-alone use is to write a driver program that instantiates a KeyboardAndDisplaySimulator object then invokes its go() method. "stand-alone" means it is not invoked from the MARS Tools menu. "Pure" means there is no driver program to invoke the application.


getName

public String getName()
Required MarsTool method to return Tool name.

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

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

addAsObserver

protected void addAsObserver()
Override the inherited method, which registers us as an Observer over the static data segment (starting address 0x10010000) only. When user enters keystroke, set RECEIVER_CONTROL and RECEIVER_DATA using the action listener. When user loads word (lw) from RECEIVER_DATA (we are notified of the read), then clear RECEIVER_CONTROL. When user stores word (sw) to TRANSMITTER_DATA (we are notified of the write), then clear TRANSMITTER_CONTROL, read TRANSMITTER_DATA, echo the character to display, wait for delay period, then set TRANSMITTER_CONTROL. If you use the inherited GUI buttons, this method is invoked when you click "Connect" button on MarsTool or the "Assemble and Run" button on a Mars-based app.

Overrides:
addAsObserver in class AbstractMarsToolAndApplication

buildMainDisplayArea

protected JComponent buildMainDisplayArea()
Method that constructs the main display area. It is organized vertically into two major components: the display and the keyboard. The display itself is a JTextArea and it echoes characters placed into the low order byte of the Transmitter Data location, 0xffff000c. They keyboard is also a JTextArea places each typed character into the Receive Data location 0xffff0004.

Specified by:
buildMainDisplayArea in class AbstractMarsToolAndApplication
Returns:
the GUI component containing these two areas

processMIPSUpdate

protected void processMIPSUpdate(Observable memory,
                                 AccessNotice accessNotice)
Update display when connected MIPS program accesses (data) memory.

Overrides:
processMIPSUpdate in class AbstractMarsToolAndApplication
Parameters:
memory - the attached memory
accessNotice - information provided by memory in MemoryAccessNotice object

initializePostGUI

protected void initializePostGUI()
Initialization code to be executed after the GUI is configured. Overrides inherited default.

Overrides:
initializePostGUI in class AbstractMarsToolAndApplication

reset

protected void reset()
Method to reset counters and display when the Reset button selected. Overrides inherited method that does nothing.

Overrides:
reset in class AbstractMarsToolAndApplication

getHelpComponent

protected JComponent getHelpComponent()
Overrides default method, to provide a Help button for this tool/app.

Overrides:
getHelpComponent in class AbstractMarsToolAndApplication