C64 graphic mode basics
The C64 is an 8Bit computer with 64KB RAM. The VIC (Video Interface Controller) uses different graphic modes to display static images, moving game backgrounds and sprites as playable objects. The colors are limited to a fixed set of 16 colors and depending on the graphic modes only parts of them can be used in combination.
The maximum resolution is 320x200 pixels but a specialty of this system is that it uses double wide pixels to apply different colors to pixels with multi color modes. With single color modes a Bit is used to display two colors when it is on or off. Multi color modes use two Bits to have up to four different values (00, 01, 10, 11). Each of them can address a certain color depending on the respective graphic mode details.
There are different C64 color palettes around that try to come close to the true hardware colors that are built into the system. The best color palette is probably the one from "Pepto" and this one is used within the C64 project presets. For more information about this color palette please see http://www.colodore.com and http://www.pepto.de/projects/colorvic
Pro Motion helps you with matching the hardware limitations by optionally displaying pixels with double width and checking misplaced colors that exceed limitations. Every preset contains color constraint definitions that can be used to check the limits.
Some presets may use an extended color palette that has some arranged copies of the standard C64 palette. This helps to find color combinations that match your needs. Once you created a project based on a preset you can create your own color arrangements in the palette editor. In order to use the color constraints checking or when transfering image data to be used with a true C64 you should only use the initial 16 color entries. You can use menu "Colors/Remap Colors/Frame(s) to Gradient" to remap all pixels to the gradient that just contains the first 16 colors of the color palette.
The following paragraphs give some basic technical details about the different graphic modes.
Multi Color ImageThe Multi Color Image mode uses the double width pixels as mentioned before. That's why the overall resolution of 160x200 instead of the 320x200. It was initially intended to be used for static images, but based on some hardware tricks it is also possible to use it for ingame scrolling backgrounds.
Every screen is divided into characters (tiles) where 8 bytes form the pixels of a 4x8 tile by using one byte per row. Tiles are then displayed side by side (40 per tile row) and then the next tile row starts until you have 25 tile lines.
To define the pixel colors there is a global background color that shines through all transparent pixels that use 00 as bit values. The other color values are taken from color banks that use 4 bits to define a color that is used for each of the other bit combinations 01, 10 and 11. Therefore you are bound to four colors per 4x8 tile.
The project preset uses color 0 (=black) as globally allowed background color. It is available to all tiles. Change it in the color constraint settings to fit your needs.
Multi Color Character ScreenThe C64 Multi Color Character mode is primarily used to create ingame scrolling backgrounds.
The screen is divided into 4x8 pixel sized characters (tiles) and you can have a maximum of 256 characters. As with all multi color modes the pixels have a size ratio of 2x1. A full screen uses 40x25 characters having an overall resolution of 160x200 pixels.
Every character shares three common colors with the bit combinations 00, 01, 10 where 00 is the background color that is used for all transparent pixels. So this color is considered to be the one that is mostly used on the screen. The other two bit combination colors can be defined globally as well.
Every character can use an individual color additionally (bit combination 11), but this color is limited to be one out of the first 8 colors of the fixed C64 color palette. This makes creating colorful game backgrounds to be very hard. This limitation was made to also support single color characters mixed with multi color characters which works like this:
If you give a character one of the individual colors 0-7 then it is assumed to be a multi color character. If you give it one of the colors 8-15 then the system displays the character as single colored using one Bit per pixel. A Bit that is enabled then uses the defined color - 8, so even with this single color characters you can only use color 0-7 for opaque pixels. Bits that are nit set use the global bacckground color.
These specialties are not fully supported. It is assumed that only multi color characters are used. Also the color constraints checking does not check if you only use color 0-7 as the individual character color!
The preset uses two gray shades as the global colors. The transparent color is defined to be color index 16. It serves as background color and initially black. Copy the one of the C64 colors that you actually want to use as background to that slot. Change the other two global colors to your needs in the color constraint settings of your project.
Single Color SpritesC64 Single Color Sprites have a size of 24 x 21 pixels. You can form larger objects by displaying sprites side by side programatically, but by standard the system can only display 8 Sprites on the screen. There are techniques called "multiplexer" to increase the number of sprites within a game, especially if sprites form a larger object. Sometimes single color and multi color sprites are overlayed to gain more detail.
A sprite can have opaque pixels using a single color througout the sprite and transparent pixels
With the C64 sprites transparent pixels are not defined as pixels using one of the 16 colors. Transparent pixels are just "empty" pixels. To address this the color 16 is used to define transparent pixels by the project preset.
Multi Color SpritesC64 Multi Color Sprites have a size of 12 x 21 pixels using double width pixels again to definie multiple colors. As described with single color sprites you can form larger sprites by displaying them side by side.
The C64 limits the number of colors to be used in a multi color sprite to three (Bit combinations 10,01,11) plus transparency (00). To make it more difficult two of those three colors are defined globally and are used for all sprites. That means that a single sprite can only have a single individual color (Bit combination 10).
With the C64 sprites transparent pixels are not defined as pixels using one of the 16 colors. Transparent pixels are just "empty" pixels. To address this the color 16 is used to define transparent pixels in the preset.
FLI ImageFLI = Flexible Line Interpretation. It is based on standard Multi Color Bitmap but uses a trick to increase the number of colors per 4x8 pixel character (tile). This is done by switching the color banks with every scan line.
A normal 4x8 Multi Color Bitmap tile usually can only use 4 colors:
- background (same color for every tile)
- three out of the remaining 15 colors per tile
With FLI you now have the single background color as usual but with every line of a tile you can select the other three colors differently. This simple trick makes the images look much more colorful. Due to the color bank switch which needs some CPU and graohics controller time, the first three tiles of every tile row can't be used with colored pixels.
FLI images are typically used for title screens or demo graphics.
More InformationOver the years a lot of special graphic modes have been created by applying tricks to the basic built in modes, mostly to create more colorful static images for computer demo art.
Because of those hardware tricks such modes can't be added as a simple preset, but you could assemble projects that display contents of other projects to combine sprites or backgrounds to form special images. This can also be used to create sprite objects that are made up of a multi color sprite and a single color sprite as an overlay.
See layer effect setting "Display other project" to see how to do that.
Find more information about C64 graphic modes here:
Related topicsColor Constraints
Project Preset Edit
Last modified: 24 September 2017