miSim

misim.plugins
Class LCDPlugin

java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--java.awt.Window
                    |
                    +--java.awt.Frame
                          |
                          +--misim.Plugin
                                |
                                +--misim.plugins.LCDPlugin
All Implemented Interfaces:
javax.accessibility.Accessible, ChainedClockListener, ClockListener, java.awt.image.ImageObserver, java.awt.MenuContainer, PortListener, ResetListener, java.io.Serializable

public class LCDPlugin
extends Plugin
implements PortListener, ChainedClockListener, ResetListener, java.awt.image.ImageObserver

The LCD Plugin emulates a HD44780 compatible LCD display controller, driving an LCD character display. The size of the display can be controlled by the configuration parameter. The display can be driven through either a four or eight bit bus, controlled by the microcontroller software.

See Also:
Serialized Form

Inner classes inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Inner classes inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Inner classes inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Inner classes inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent
 
Field Summary
 int cgramAddress
           
static int CHAR_COUNT
           
static int CHAR_HEIGHT
           
static int CHAR_WIDTH
           
 int cursorAddress
           
static int DEFINED_CHARS
           
 int displayOffset
           
static int PIXEL_GAP
           
static int PIXEL_HEIGHT
           
static int PIXEL_WIDTH
           
 
Fields inherited from class misim.Plugin
machineState, owner, PLUGIN_GUI, PLUGIN_NONE, PLUGIN_SELF, reader
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, 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
 
Constructor Summary
LCDPlugin(java.awt.Component owner, MachineState machineState, RobustReaderIF reader, java.lang.String params)
          Constructor for the plugin.
 
Method Summary
 long clear()
          Clear the LCD display.
 void clockEvent(long clocks)
          This method is called after each instruction is executed.
 int configType()
          The User Interface calls this to see if the Plugin needs configuration information, and if so whether the information can be controlled by the user interface (in which case the user will edit the config string by hand), or if the Plugin itself will provide a configuration interface.
 long cursorShift(int instruction)
          Move either the display or the cursor depending on the entry mode.
 long displayOnOff(int instruction)
          Switch the display and cursor on or off..
 long entryModeSet(int instruction)
          Set the lcd entry mode.
 long functionSet(int instruction)
          Set four or eight bit mode, display height and font size.
 java.lang.String getAbout()
          This method should return any information appropriate to this plugin.
 int getBitmask(int portId)
          This method is used to identify which bits this listener is interested in for a given port.
 java.lang.String getConfig()
          Method to retrieve the config for this plugin
 java.lang.String getHelp()
          Return more detailed information on the configuration string format for this plugin.
 ClockListener getNext()
          Return the next event handler in the chain.
 boolean imageUpdate(java.awt.Image img, int infoflags, int x, int y, int width, int height)
          Respond to any image updates that we receive.
 void init(java.lang.String params)
          This is the method that is called to initialise the plugin.
 void portEvent(int portBits, long clockCount, int portId)
          This method is called when the state of a port changes.
 void prepare(long clocks)
          Prepare for emulation, beginning at the given clock count
 void processInstruction(int instruction, long clockCount)
           
 java.lang.String readConfig(java.lang.String newConfig)
          This method should check whether config parameters are valid
 void reset(int resetType)
          The processor has been reset
 long returnHome()
          Move the cursor to the home position.
 long setCGRamAddress(int instruction)
          Write the CG Ram address.
 long setCursorAddress(int instruction)
          Write the cursor address.
 void setNext(ClockListener nextListener)
          Set the next event handler in the chain.
 void showPlugin(boolean visible)
          This is called when the user wants the Plugin to display or hide itself.
 
Methods inherited from class misim.Plugin
setMachineState, setPluginTitle
 
Methods inherited from class java.awt.Frame
addNotify, finalize, getAccessibleContext, getCursorType, getFrames, getIconImage, getMenuBar, getState, getTitle, isResizable, paramString, remove, removeNotify, setCursor, setIconImage, setMenuBar, setResizable, setState, setTitle
 
Methods inherited from class java.awt.Window
addWindowListener, applyResourceBundle, applyResourceBundle, dispose, getFocusOwner, getGraphicsConfiguration, getInputContext, getListeners, getLocale, getOwnedWindows, getOwner, getToolkit, getWarningString, hide, isShowing, pack, postEvent, processEvent, processWindowEvent, removeWindowListener, setCursor, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getInsets, getLayout, getMaximumSize, getMinimumSize, getPreferredSize, insets, invalidate, isAncestorOf, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, remove, removeAll, removeContainerListener, setFont, setLayout, update, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addPropertyChangeListener, addPropertyChangeListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, getBackground, getBounds, getBounds, getColorModel, getComponentOrientation, getCursor, getDropTarget, getFont, getFontMetrics, getForeground, getGraphics, getHeight, getInputMethodRequests, getLocation, getLocation, getLocationOnScreen, getName, getParent, getPeer, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, inside, isDisplayable, isDoubleBuffered, isEnabled, isFocusTraversable, isLightweight, isOpaque, 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, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, reshape, resize, resize, setBackground, setBounds, setBounds, setComponentOrientation, setDropTarget, setEnabled, setForeground, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, size, toString, transferFocus
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Field Detail

cursorAddress

public int cursorAddress

cgramAddress

public int cgramAddress

displayOffset

public int displayOffset

CHAR_COUNT

public static final int CHAR_COUNT

DEFINED_CHARS

public static final int DEFINED_CHARS

PIXEL_WIDTH

public static final int PIXEL_WIDTH

PIXEL_HEIGHT

public static final int PIXEL_HEIGHT

PIXEL_GAP

public static final int PIXEL_GAP

CHAR_WIDTH

public static final int CHAR_WIDTH

CHAR_HEIGHT

public static final int CHAR_HEIGHT
Constructor Detail

LCDPlugin

public LCDPlugin(java.awt.Component owner,
                 MachineState machineState,
                 RobustReaderIF reader,
                 java.lang.String params)
          throws MiSimException
Constructor for the plugin. This sets the machineState, reader and owner variables and calls init.
Method Detail

init

public void init(java.lang.String params)
          throws MiSimException
This is the method that is called to initialise the plugin.
Overrides:
init in class Plugin
Parameters:
params - Initialisation parameters for the plugin

showPlugin

public void showPlugin(boolean visible)
This is called when the user wants the Plugin to display or hide itself. The plugin should add or remove itself as a port listener as appropriate
Overrides:
showPlugin in class Plugin
Parameters:
visible - True if the Plugin should display itself.

configType

public int configType()
The User Interface calls this to see if the Plugin needs configuration information, and if so whether the information can be controlled by the user interface (in which case the user will edit the config string by hand), or if the Plugin itself will provide a configuration interface.
Overrides:
configType in class Plugin
Returns:
PLUGIN_NONE - if this plugin needs no config information PLUGIN_GUI - if the standard GUI should provide config editing PLUGIN_SELF - if the plugin itself will provide a config GUI

getConfig

public java.lang.String getConfig()
Method to retrieve the config for this plugin
Overrides:
getConfig in class Plugin
Returns:
The config string

readConfig

public java.lang.String readConfig(java.lang.String newConfig)
This method should check whether config parameters are valid
Overrides:
readConfig in class Plugin
Parameters:
config - The new configuration string
Returns:
Null if the parameters are OK, otherwise an explanation of what is wrong.

getAbout

public java.lang.String getAbout()
This method should return any information appropriate to this plugin. If the config parameter is to be edited by the standard GUI, the help text should explain what the parameters mean.
Overrides:
getAbout in class Plugin
Returns:
The about text for this plugin

getHelp

public java.lang.String getHelp()
Return more detailed information on the configuration string format for this plugin.
Overrides:
getHelp in class Plugin
Returns:
The help text for this plugin

imageUpdate

public boolean imageUpdate(java.awt.Image img,
                           int infoflags,
                           int x,
                           int y,
                           int width,
                           int height)
Respond to any image updates that we receive. This allows us to detect late loading of the font background image, and then to automatically build the font image and draw the lcd display
Specified by:
imageUpdate in interface java.awt.image.ImageObserver
Overrides:
imageUpdate in class java.awt.Component
Returns:
True if more image updates are required for this image

portEvent

public void portEvent(int portBits,
                      long clockCount,
                      int portId)
This method is called when the state of a port changes.
Specified by:
portEvent in interface PortListener
Parameters:
portBits - - The current state of the port
clockCount - - the current cpu time (in clock cycles)
portId - - the identifier for the port that generated the event

getBitmask

public int getBitmask(int portId)
This method is used to identify which bits this listener is interested in for a given port.
Specified by:
getBitmask in interface PortListener
Parameters:
identifier - - the port identifier
Returns:
an integer with the appropriate bits set.

processInstruction

public void processInstruction(int instruction,
                               long clockCount)

prepare

public void prepare(long clocks)
Prepare for emulation, beginning at the given clock count
Specified by:
prepare in interface ClockListener
Parameters:
clocks - The clock count that emulation will start at

reset

public void reset(int resetType)
The processor has been reset
Specified by:
reset in interface ResetListener
Parameters:
resetType - The type of the reset that has ocurred.

clockEvent

public void clockEvent(long clocks)
This method is called after each instruction is executed. Note that the number of clocks since the last call may be more than 1. This will occur for some branch instructions, and when loops have been optimised - resulting in a sequence of loop instructions being emulated in a single atomic event.
Specified by:
clockEvent in interface ClockListener
Parameters:
clocks - The current clock count for the processor

setNext

public void setNext(ClockListener nextListener)
Set the next event handler in the chain. The implementation of this class MUST call nextEventIF.clockEvent at the end of the clockEvent method - ie. it must honour the chain.
Specified by:
setNext in interface ChainedClockListener
Parameters:
nextListener - The next clock event listener in the chain

getNext

public ClockListener getNext()
Return the next event handler in the chain.
Specified by:
getNext in interface ChainedClockListener
Returns:
The next event handler in the chain

clear

public long clear()
Clear the LCD display. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 0 0 1 Execution Time = 82µs-1.64ms / 120µs-4.9ms

returnHome

public long returnHome()
Move the cursor to the home position. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 0 1 * Execution Time = 40µs-1.6ms / 120µs-4.8ms

entryModeSet

public long entryModeSet(int instruction)
Set the lcd entry mode. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 1 I/D S Execution Time = 40µs / 120µs

displayOnOff

public long displayOnOff(int instruction)
Switch the display and cursor on or off.. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 1 D C B Execution Time = 40µs / 120µs

The cursor is displayed using 5 dots in the 8th line when the 5 x 7 dot character font is selected and 5 dots in the 11th line when the 5 x 10 dot character font is selected.

B: The character indicated by the cursor blinks when B = 1. The blink is displayed by switching between all blank dots and display characters at 409.6 ms interval.


cursorShift

public long cursorShift(int instruction)
Move either the display or the cursor depending on the entry mode. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 1 S/C R/L * * Execution Time = 40µs / 120µs

functionSet

public long functionSet(int instruction)
Set four or eight bit mode, display height and font size. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 DL N F * * Execution Time = 40µs / 120µs

setCGRamAddress

public long setCGRamAddress(int instruction)
Write the CG Ram address. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 1 A A A A A A Execution Time = 40µs / 120µs

setCursorAddress

public long setCursorAddress(int instruction)
Write the cursor address. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 A A A A A A A Execution Time = 40µs / 120µs

miSim