The hardware integrates a VGA video card, that generates a VGA signal of 640x480 60Hz.
The signal is generated with 2 parts
1) Graphic part, 256 colors:
The palette is fixed : 2 bits out of 8 are dedicated to brightness, and 2 bits for each of 3 colors.
The palette part directly feeds 3 discrete digital to analog converters, made with discrete resistors.
The video memory is shared with the CPU, inside the 2MB SRAM. 50% of the time is dedicated to the CPU, and 50% is dedicated to this graphic part.
The video card integrates a double buffering mechanism, for fluid animations.
Once the software requests a video buffer switch, the hardware waits for vertical synchro and then switches from one frame buffer to the other.
There is no hardware acceleration inside the “VGA graphic card” (like sprite management). All graphics are generated by software only.
2) Text part:
The text is overlaid over the graphic. There are 80 columns x 30 lines of characters. This is very helpful for debugging the computer, and for coding the first programs with a simple text output.
The 3 parts (CPU, VGA graphics, VGA text) need to be precisely synchronised with each other. When I programmed this, I only had little experience of FPGA and Verilog, and therefore it was a difficult part for me.