Not my library, so I am not actually sure what potential side-effects are.
However, I see that you are mixing utility commands with display list commands.
Try to make things a bit cleaner first, do not throw everything between one pair of Gpu_CoCmd_Dlstart (phost); / Gpu_Hal_WaitCmdfifo_empty(phost); calls.
Setup things first, like you already did with the Gpu_CoCmd_MemSet().
I mean this stuff:
Gpu_CoCmd_FlashHelper_SwitchFullMode(&host);
Gpu_CoCmd_FlashSource(phost, PARAMETERS_ADDRESS_MEM);
Gpu_CoCmd_LoadImage(phost, 0, OPT_FLASH );
Move it out of the display-list building.
Especially so as using .png has the tendency to take quite some time and it wrangles the uppper 42k of memory.
I provide separate functions in my library.
One group that is meant to be called outside of display list building and that already includes execution
and waiting for the operation to be done.
And one group that is meant to be called when building a display list.
As you do have an external flash I would also advise to use ASTC 8x8 format, not to display directly from flash necessarily,
but mostly ASTC 8x8 is a 32 bit format with 8 bit alpha that only needs 2 bits per pixel.
And PNG is decoded to well, some format, that needs 8 or 16 bits per pixel.
Gpu_CoCmd_FlashSource(phost, PARAMETERS_ADDRESS_MEM);
Gpu_CoCmd_LoadImage(phost, 0, OPT_FLASH );
Gpu_CoCmd_FlashSource(phost, NEXT_ADDRESS_MEM);
Gpu_CoCmd_LoadImage(phost, 0, OPT_FLASH );
This loads two images from different flash addresse but decodes them both to address 0 of RAM_G.
This is missing CMD_SETBITMAP:
//Start drawing bitmap
App_WrCoCmd_Buffer(phost, BEGIN(BITMAPS));
App_WrCoCmd_Buffer(phost, VERTEX2II(130, 15, 0, 0));
App_WrCoCmd_Buffer(phost, END());
I wonder why the images are even displayed.
And the artefacts are likely the result of
Gpu_Hal_WrCmd32 (phost, CMD_MEMCPY)
As this also goes to address 0 of RAM_G.