When I say fifo on a Z80 port, I mean a memory address you may choose which allows the Z80 to write to the fifo.
You would also provide a 'fifo' full flag for the Z80.
The fifo actually isn't necessary, but it will allow your Z80 to post multiple drawing commands while the other side of the fifo which seeds the sequencer pixel plotter is busy working plotting pixels.
As for the commands, I would prefer an 8 or 16 bit word system. 1 byte control, 1 byte data.
On your sequencer side (the thing which reads and follows the commands in the FIFO and draws the lines) , your commands would be something like:
set coordinate x1 high byte.
set coordinate x1 low byte.
set coordinate y1 high byte.
set coordinate y1 low byte.
set coordinate x2 high byte.
set coordinate x2 low byte.
set coordinate y2 high byte.
set coordinate y2 low byte.
set foreground color
set background color
set drawing color depth
set graphics destination ram coordinates high byte
set graphics destination ram coordinates low byte
set graphics raster width size
set graphics screen width limit
set graphics screen height limit
run line
run circle
run circle filled
run rectangle
run rectangle filled
run triangle
run triangle filled
run/stop/reset geometry engine (this 1 command may be on it's own dedicated port with immediate action regardless of the FIFO's state.)
That's already 24 commands.
For accelerated graphics, I would pre-compile your graphics generating list and feed the fifo in a straight manner.
I would also double buffer the geometry settings so you may draw new shapes while only updating only the required coordinate changes instead of re-filling all the settings every time.
As for the BW Z80 graphic I made, I loaded and cropped the image into Paint-Shop-Pro 6.
Then made it black and white.
Then saved it as a 'RAW' image data making it 8 bit per pixel, IE: 1 byte per pixel, no header in the file.
Then passed that 'RAW' file through my home-made basic program which can squeeze the image down to 4 bits, 2 bits or 1 bit.
(Obviously, for 8 bit, you don't need any conversion from the 'RAW' format. Also, if you switch your palette to a MAC default 256 colored palette, using (PSE) Adobe Photoshop Elements 9, that paint software will generate an 8bit 256 color image matching the MAC palette so you may insert full color scan. The MAC 256 color palette is pretty good for faces and most other photos as the Adobe Photoshop will dither the results to look like a few thousand colors.)
I've attached my bitplane converter.
Note that the 256 output mode actually divides the 256 gray shade image down to 16 shades of grey and places that image on palette color 16 through 32. (This has nothing to do with the Photoshop true 256 full color image which doesn't need any processing, all you need for that it to adjust your palette to match Photoshop's Palette converter's settings)
Photoshop 24bit color to Paletted image converter: Go to 'Image / Mode / Indexed Color'. You will also most likely try to google the file format it uses to load and save a palette to convert to you GPU palette generator. Also, dont forget that your GPU can hold 2 different palettes simultaneously as well as sub 16/4/2 color chunks of both palettes selected for each MAGGIE window.