@nockieboy, I hate to do this to you, but once you get the initial palette working, you will need to make a change to the 'multiport_gpu_ram.v' and 'gpu_dual_port_ram_INTEL.v'. Now, I want to get this change right in 1 shot, so, we will need to go over it after the text palette is fully 100% functional without a single pixel in error.
On the read only port side, we will change the 8 bit data port to 16 bits. This will double our read speed, however, we still want 8 bit address capability. To do this, in the 'gpu_dual_port_ram_INTEL.v' altsyncram settings, you will make read port 16 bits, effectively lowering the address size by 1 bit. However, the module 'gpu_dual_port_ram_INTEL.v' will still take the same read address size, and pass it through. Into the altsyncram, you will feed the upper address beginning at 1 instead of 0. For the 16 bit data coming out, you will swap the upper and lower 8 bits of that data depending if the read address[0] is high or low.
Effectively, if the proceeding modules use just the bottom 8 bits of ram data, like the 'bitplane_to_rasterbitplane_to_raster.v' we should be backwards compatible. However, using the upper 8 bits as a font color for example, within 1 read we get 1 byte ascii text, 1 byte color. When reading a font, we may now also have a few new pixel modes where we have a 16 pixel wide font, or, 4 color per pixel font on top of the base 16 foreground and 16 background offset colors.
The 'multiport_gpu_ram' will also now need to change the 5 read data_out_# ports to a 16bit word.
Next, change the 5 cmd_(in/out)_# ports in the 'multiport_gpu_ram.v' module from 16 bit to 32 bit. Don't forget the single cmd_(in/out) pass through in the 'gpu_dual_port_ram_INTEL.v' will need to change to 16 bit as well.
As for the 'bitplane_to_rasterbitplane_to_raster.v', take in a 16 bit word for the '.ram_byte_in()', but, leave everything else the same. For now, ignore the upper 8 bits. I will specify the minor alterations once everything else is working.