A prototype has been created with an Atmel Atmega161 microcontroller with 16kB program memory and 1kB SRAM, a Hyundai 256x128 LCD screen from All Electronics (no longer available) with the SED1330 LCD controller, and a RTL8019AS Ethernet controller from EDTP. For software, the uIP-AVR port of Adam Dunkels' uIP TCP/IP stack was used, and a VNC client application was written from the ground up referencing the VNC specification.
The initial code has been improved by adding Hextile decoding support, and all of the major bugs have been found. The prototype does work and shows good performance for running on a small microcontroller. To test and demo throughput capabilities, one of the Xiao Xiao stick fighter Flash animations was chosen. This animation has high contrast between the characters and background, so it can be viewed on the mono LCD easily, and the difference between the smooth frame rate on the PC and the frame rate on the display will bring to light throughput limitations.
Current results show excellent frame rate when action changes in small areas of the screen, but when the contents of the screen change significantly, there is some obvious slowdown. With the previous version of the code using Raw encoding only, this was assumed to be caused by low throughput over Ethernet and limitations of the micro TCP/IP stack and Ethernet driver. With Hextile support, the maximum TCP throughput has decreased by over half, leading me to believe the current limitation on frame rate is the code for decoding and drawing Hextile data to the display.
Status: Able to connect to a remote VNC server over TCP, and receive raw and Hextile encoded frames at a decent rate
In Progress: Convert the current display code to use a larger display with minimal (2-bit) grayscale support
To Do: Expand VNC functionality allowing the smaller local display to show different parts of the server's display (currently it is fixed at 0,0), and cursor control using a touch screen Optimize the Hextile drawing functions Create an example application for the server side, representative of how microVNC would actually be used in the home