Class KeyboardAndDisplaySimulator
- All Implemented Interfaces:
ImageObserver
,MenuContainer
,Serializable
,EventListener
,Accessible
,RootPaneContainer
,WindowConstants
,Memory.Listener
,MarsTool
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, 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.
Version 1.3, August 2011, corrects bug to enable Display window to scroll when needed.
Version 1.4, August 2014, adds two features: (1) ASCII control character 12 (form feed) when transmitted will clear the Display window. (2) ASCII control character 7 (bell) when transmitted with properly coded (X,Y) values will reposition the cursor to the specified position of a virtual text-based terminal. X represents column, Y represents row.
- Author:
- Pete Sanderson
- See Also:
-
Nested Class Summary
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, Window.Type
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
FieldsModifier and TypeFieldDescriptionstatic final Dimension
static int
static int
static int
static int
Fields inherited from class mars.tools.AbstractMarsTool
dialog
Fields inherited from class javax.swing.JFrame
accessibleContext, 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 java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
Fields inherited from interface javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, EXIT_ON_CLOSE, HIDE_ON_CLOSE
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected JComponent
Method that constructs the main display area.protected JComponent
Overrides default method, to provide a Help button for this tool/app.getName()
Required MarsTool method to return Tool name.protected void
Initialization code to be executed after the GUI is configured.protected void
Set the MMIO addresses.void
memoryRead
(int address, int length, int value, int wordAddress, int wordValue) Update display when connected MIPS program reads an instruction from the text or kernel text segments.protected void
reset()
Method to reset counters and display when the Reset button selected.protected void
Override the inherited method, which registers us as an Observer over the static data segment (starting address 0x10010000) only.protected void
Unregister this tool as a listener of memory and/or registers, if applicable.Methods inherited from class mars.tools.AbstractMarsTool
action, buildButtonArea, buildContentPane, closeTool, handleClose
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, setBackground, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setOpacity, setResizable, setShape, setState, setTitle, setUndecorated
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBackground, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOpacity, getOwnedWindows, getOwner, getOwnerlessWindows, getShape, getToolkit, getType, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, 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, 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, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getParent, 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, 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, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, requestFocusInWindow, resize, resize, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setMixingCutoutShape, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface mars.tools.MarsTool
getIcon, getToolMenuOrder
Methods inherited from interface mars.mips.hardware.Memory.Listener
memoryReset, memoryWritten
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
-
Field Details
-
PREFERRED_TEXT_AREA_DIMENSION
-
receiverControl
public static int receiverControl -
receiverData
public static int receiverData -
transmitterControl
public static int transmitterControl -
transmitterData
public static int transmitterData
-
-
Constructor Details
-
KeyboardAndDisplaySimulator
public KeyboardAndDisplaySimulator()Construct an instance of this tool. This will be used by theToolManager
.
-
-
Method Details
-
getName
Required MarsTool method to return Tool name.- Specified by:
getName
in interfaceMarsTool
- Specified by:
getName
in classAbstractMarsTool
- Returns:
- Tool name. MARS will display this in menu item.
-
initializePreGUI
protected void initializePreGUI()Set the MMIO addresses. Prior to MARS 3.7 these were final because MIPS address space was final as well. Now we will get MMIO base address each time to reflect possible change in memory configuration. DPS 6-Aug-09- Overrides:
initializePreGUI
in classAbstractMarsTool
-
startObserving
protected void startObserving()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.
-
stopObserving
protected void stopObserving()Description copied from class:AbstractMarsTool
Unregister this tool as a listener of memory and/or registers, if applicable. This method is called when the tool is closed by the user. Does nothing by default.- Overrides:
stopObserving
in classAbstractMarsTool
- See Also:
-
memoryRead
public void memoryRead(int address, int length, int value, int wordAddress, int wordValue) Update display when connected MIPS program reads an instruction from the text or kernel text segments.- Parameters:
address
- The address which was read from.length
- The number of bytes read. Will always be 1 (single byte),Memory.BYTES_PER_HALFWORD
, orMemory.BYTES_PER_WORD
.value
- The value which was read.wordAddress
- The address of the word affected by the operation.wordValue
- The full value of the word.
-
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 classAbstractMarsTool
- Returns:
- the GUI component containing these two areas
-
initializePostGUI
protected void initializePostGUI()Initialization code to be executed after the GUI is configured. Overrides inherited default.- Overrides:
initializePostGUI
in classAbstractMarsTool
-
reset
protected void reset()Method to reset counters and display when the Reset button selected. Overrides inherited method that does nothing.- Overrides:
reset
in classAbstractMarsTool
-
getHelpComponent
Overrides default method, to provide a Help button for this tool/app.- Overrides:
getHelpComponent
in classAbstractMarsTool
-