SSD0303 AGSI Module
http://vv.carleton.ca/~cat/ssd0303/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This package simulates a SSD0303 display controller in the following
configuration:

+------------------+--------+       +-----------+   +--------------+
|  Luminary Micro  .  I2C   |  I2C  |  SSD0303  |===|    96x16     |
|     LM3S811      . Master |=======|  Display  |===|  Monochrome  |
| Microcontroller  .        |  Bus  | Controller|===| OLED Display |
+------------------+--------+       +-----------+   +--------------+
           (Configuration as in Stellaris LM3S811 Evaluation Board.)

Background
~~~~~~~~~~
The Keil Vision3 IDE's simulator is capable of simulating the ARM Cortex-M3
processor core of the microcontroller. However, it does not provide simulators 
for all peripherals, but it is extensible using a mechanism named AGSI
(Advanced Generic Simulator Interface).

Usage
~~~~~
PLEASE NOTE: The module does not work with the initial version of Keil Vision
(3.33). The module is tested successfully only with Vision 3.34b (download at
https://www.keil.com/update/sw/rvmdk/3.03a).

- Install the module:
  Copy the file SSD0303.dll into your \Keil\ARM\BIN directory.
- Enable the simulator:
  Open the Project Options dialog, Debug tab, and select Use Simulator.
- Make the simulator load the SSD0303 module:
  At the bottom of the page, to the right of Dialog DLL, under Parameter,
  add a space and another parameter: -dSSD0303
- Start the simulator:
  From the Debug menu, select Start/Stop Debug Session.
- Display the UI:
  From the Peripherals menu, under I2C Master, select SSD0303.

What This Module Is
~~~~~~~~~~~~~~~~~~~
This module simulates the bare minimum necessary to implement the functions
provided by the OSRAM library provided with the LM3S811 SDK.

Specifically, all functions exposed via osram96x16.h should be functional in the
simulator. This means that you can test your display applications while
minimizing burn-in of your OLED display.

What This Module Is Not
~~~~~~~~~~~~~~~~~~~~~~~
It is NOT a complete simulator for the I2C master of the LM3S811, nor a complete
simulator of the SSD0303 display controller. Notably, unusual conditions such as
specifying an incorrect I2C slave address or configuring the display
controller's registers with non-standard values are especially poorly handled.
Timing is also ignored. However, none of the above should be issues if you use
the provided OSRAM library.

References
~~~~~~~~~~
- Luminary Micro LM3S811 Evaluation Kit
  http://www.luminarymicro.com/products/ekk-lm3s811_evaluation_kit.html
- Keil Vision3 Simulation
  http://www.keil.com/uvision/db_sim.asp
- Keil AGSI Application Note
  http://www.keil.com/appnotes/docs/apnt_154.asp
- Solomon Systech SSD1303 Page (very similar to SSD0303; must request datasheet)
  http://www.solomon-systech.com/products/ssd1303.htm

Development
~~~~~~~~~~~
Source code for the module is available at http://vv.carleton.ca/~cat/ssd0303/
as a Microsoft Visual Studio project.

To speed up development, there's a Post-Build Event set up that copies the
built DLL into the Keil BIN folder. To enable it, select all configurations,
adjust the path in the Post-Build Event page and change Excluded From Build to
No.

Modifications (especially in the form of patches) are welcome and encouraged.

License
~~~~~~~
The simulator and its source code are released under a BSD license. Some files
in the source distribution are copyright Luminary Micro Inc. and Keil. For
details see LICENSE.txt.

Author
~~~~~~
The author of this module is Catalin Patulea <cat@vv.carleton.ca>. Feel free to
e-mail me with questions and comments. If you would like to see some of the
other things I've done, check out my web site at http://vv.carleton.ca/~cat/.
