VICKY
VICKY - the graphics engine
"Vicky" is the name of the graphics engine of the C256 Foenix. It supports:
- 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)
- 32 Sprites with a resolution of 32x32 pixels
- 4 layers of tiles with a resolution of 16x16 pixels for each tile
- Text Mode
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 32 Sprites (worst case scenarion 32 Lines of 32 Pixels) that are displayed on that line. Then a composition and priority encoding is done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 Pixels then scan the lot and determine which one will be displayed.
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.
The pixel value $00 is always transparant and the assigned value to a transparant pixel is automaticly the background color. Despite the fact that there is an ALPHA value, it is not supported.
Modes
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:
Mstr_Ctrl_Text_Mode_En | = $01 | Enable the Text Mode |
Mstr_Ctrl_Text_Overlay | = $02 | Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored) |
Mstr_Ctrl_Graph_Mode_En | = $04 | Enable the Graphic Mode |
Mstr_Ctrl_Bitmap_En | = $08 | Enable the Bitmap Module In Vicky |
Mstr_Ctrl_TileMap_En | = $10 | Enable the Tile Module in Vicky |
Mstr_Ctrl_Sprite_En | = $20 | Enable the Sprite Module in Vicky |
Mstr_Ctrl_GAMMA_En | = $40 | Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference |
Mstr_Ctrl_Disable_Vid | = $80 | This will disable the Scanning of the Video hence giving 100% bandwith to the CPU |
Bitmap Layer
BM_CONTROL_REG = $AF0140 (Bit[0] - Enable, Bit[3:1] - LUT Select)