* There are a few examples of real life firmwares running on simavr, including OpenGL rendering of the display…
* There is support for _Arduino_, but no IDE integration
-*Note:* a mailing list/google group now exists
-You can also join *#simavr* on Freenode for a very quiet IRC channel.
+Documentation And Further Information
+-------------------------------------
+
+* Manual / Developer Guide: https://github.com/buserror-uk/simavr/blob/master/doc/manual/manual.pdf?raw=true
+* Examples: https://github.com/buserror-uk/simavr/tree/master/examples
+* Mailing List: http://groups.google.com/group/simavr
+* IRC: _#simavr_ on Freenode
+
+Contributing
+------------
+
+Patches are always welcome! Please submit your changes via Github pull requests.
VCD Support -- built in logic analyzer
-----------
automatically generated.
Example:
-`const struct avr_mmcu_vcd_trace_t _mytrace[] _MMCU_ = {
- { AVR_MCU_VCD_SYMBOL("UDR0"), .what = (void*)&UDR0, },
- { AVR_MCU_VCD_SYMBOL("UDRE0"), .mask = (1 << UDRE0), .what = (void*)&UCSR0A, },
-};`
+ const struct avr_mmcu_vcd_trace_t _mytrace[] _MMCU_ = {
+ { AVR_MCU_VCD_SYMBOL("UDR0"), .what = (void*)&UDR0, },
+ { AVR_MCU_VCD_SYMBOL("UDRE0"), .mask = (1 << UDRE0), .what = (void*)&UCSR0A, },
+ };
Will tell _simavr_ to generate a trace everytime the UDR0 register changes and everytime
the interrupt is raised (in UCSR0A). The *_MMCU_* tag tells gcc that it needs compiling,
section that is private to _simavr_, it's free!
A program running with these instructions and writing to the serial port will generate
a file that will display:
-`$ ./simavr/run_avr tests/atmega88_example.axf
-AVR_MMCU_TAG_VCD_TRACE 00c6:00 - UDR0
-AVR_MMCU_TAG_VCD_TRACE 00c0:20 - UDRE0
-Loaded 1780 .text
-Loaded 114 .data
-Loaded 4 .eeprom
-Starting atmega88 - flashend 1fff ramend 04ff e2end 01ff
-atmega88 init
-avr_eeprom_ioctl: AVR_IOCTL_EEPROM_SET Loaded 4 at offset 0
-Creating VCD trace file 'gtkwave_trace.vcd'
-Read from eeprom 0xdeadbeef -- should be 0xdeadbeef..
-Read from eeprom 0xcafef00d -- should be 0xcafef00d..
-simavr: sleeping with interrupts off, quitting gracefully`
+
+ $ ./simavr/run_avr tests/atmega88_example.axf
+ AVR_MMCU_TAG_VCD_TRACE 00c6:00 - UDR0
+ AVR_MMCU_TAG_VCD_TRACE 00c0:20 - UDRE0
+ Loaded 1780 .text
+ Loaded 114 .data
+ Loaded 4 .eeprom
+ Starting atmega88 - flashend 1fff ramend 04ff e2end 01ff
+ atmega88 init
+ avr_eeprom_ioctl: AVR_IOCTL_EEPROM_SET Loaded 4 at offset 0
+ Creating VCD trace file 'gtkwave_trace.vcd'
+ Read from eeprom 0xdeadbeef -- should be 0xdeadbeef..
+ Read from eeprom 0xcafef00d -- should be 0xcafef00d..
+ simavr: sleeping with interrupts off, quitting gracefully
And when the file is loaded in gtkwave, you see:
![gtkwave](https://github.com/buserror-uk/simavr/raw/master/doc/img/gtkwave1.png)
are hooked to the AVR. Of course, you don't have to emulate the full hardware, you just
need to generate the proper stimulus so that the AVR is fooled.
-HD77480 LCD Board Demo
+HD44780 LCD Board Demo
----------------------
-![lcd](https://github.com/buserror-uk/simavr/raw/master/doc/img/hd77480.png)
-This example board hooks up an Atmega48 to an emulated HD77480 LCD and display a running
+![lcd](https://github.com/buserror-uk/simavr/raw/master/doc/img/hd44780.png)
+
+This example board hooks up an Atmega48 to an emulated HD44780 LCD and display a running
counter in the 'lcd'. Everything is emulated, the firmware runs exactly like this
on a real hardware.
-![lcd-gtkwave](https://github.com/buserror-uk/simavr/raw/master/doc/img/hd77480.png)
-And this is a gtkwave trace of what the firmware is doing. You can zoom in, measure etc
+![lcd-gtkwave](https://github.com/buserror-uk/simavr/raw/master/doc/img/hd44780-wave.png)
+
+And this is a gtkwave trace of what the firmware is doing. You can zoom in, measure, etc
in gtkwave, select trades to see etc.
Quite a few other examples are available!