In the FT800, why is there a display list and a co-processor command list?

The FT800 has an 8K display list buffer which it executes when drawing a new screen. The contents of this buffer directly relate to the items drawn on the screen. The external MCU can create a new screen by simply writing a series of graphics primitives (such as basic shapes, text and bitmaps) directly to this buffer. Double-buffering allows the MCU to create a new screen whilst the current one is still being displayed.

However, the FT800 also includes features such as widgets, JPEG decoding and animated functions which require additional processing before they can be added to the display list. In this case, the external MCU can send commands to the FT800’s co-processor by writing to its circular buffer/command FIFO.

The co-processor then executes the commands and creates display list entries resulting from these. For example, a gauge is actually a series of lines and points calculated to be drawn at a particular position and angle on the screen. By sending a gauge command along with the coordinates of the overall gauge and the position of the needle, the co-processor provides a macro which automatically creates the series of primitives required to draw this widget and adds them to the display list.

Using the co-processor means that the MCU does not need to continually calculate the individual positions/angles, and also reduces the amount of SPI traffic since a single command can be used in place of sending the large number of shapes individually. The final display is always drawn from the display list itself, but the co-processor makes it much easier for the attached MCU to add widgets, decoded images and animations to the display list.