The Non-Exhaustive Restriction GuideWhat is this about?Why Restrictions?
Restricted systems and graphic modesCGAEGACommodore C64Sinclair Spectrum ZXAmstrad CPCCommodore Amiga500Nintendo Gameboy/Gameboy Color
What is this about?
I am trying to make a little guide for everybody so that we do not always have to repeat the same stuff all over the place but have it in one neat thread with a nice TOC. My aim is to make this as understandable as possible, so I will refrain from overly technical jibber jabber which is not really relevant for people having a shot at these old graphic modes. After all most people wont be working on the real hardware but just do it for the fun and challenge. I encourage everybody to post links to infos about interesting old machines which I have so far not listed, and help me digest it into a nicely readable manner. I will keep updating the main post from time to time.
One might ask, "Why should I restrict myself? I am living in the digital age and I don't need to adhere to weird restrictions."
That is of course correct, but if you are doing pixelart you are restricting yourself right there, one could argue. Why pixel in the first place, when you can use Photoshop to paint.
Pixelart at the same time restricts and gives control. We have more control over the atom of the computer image, the pixel, in every aspect. It's very easy to edit colours quickly. Usually things are small enough to change them quite fast as well. But we are restricted in our use of colour, simply because using loads of colours makes things complicated. Not that it would not be possible.
If you look at art outside the digital realm you will find that you are restricted a lot as well. You can't just pick your colour from a magical colourwheel paintbucket and paint away. Traditional art relies on the building of a good base palette to mix colours from and thus is limited. Usually something like 6-10, sometimes more, sometimes less, base colours should be enough to paint a picture with a good range and at the same time keep the palette unified. Of course you could use way more different colours, but it is not economical and things start looking garish very quick if you use too many straight from the tube colours. The same thing actually also applies to digital painting. Only selecting a bunch of well chosen colours which suit your scenario and then sticking tho those to blend new colours from will usually make for a nicer looking end result than just picking a new colour from the colourwheel every time you think you might need one.
Now with pixelart this is even more apparent since we actually have to handpick the colours we use anyway, so why not try doing this in an efficient way. I for my part can say that due to the practise of using tight palettes and also experimenting with given restricted palettes helped me to gain a better grip on colour over the years.
Restrictions are of course not just limited to colours when I am speaking of pixelart, most old machines have some more or less complicated way of handling graphical data and how the artist and programmers have to prepare it so that the machine can actually use it as intended. Now again some might ask "Why should I do this kinda stuff?" And again, no one should feel obliged to do this, pixelart can be enjoyed without adhering to restrictions. But, restrictions can also nurture creativity. When working with a given ruleset, especially if it is not overly simple will make you think about how you approach your work in a very direct way. There will be something like a dialogue between the art and the artist in a way that the restrictions will say, "No, this wont work, try again"
This, if you stick with it,, will automatically make you think about different ways of solving problems, ones you would normally not have chosen to take in an unrestricted environment. And this will also help your overall skill with pixelart, because many things you learn when working under restrictions can be transferred over to unrestricted work. Additionally you might find new stylistic choices which you would otherwise not have come up with as well.
So now let's have a look at some restricted systems and graphic modes which have been around for a while.Restricted systems and graphic modesCGAPalette
CGA has a palette of 16 colours.
This palette works similar to the one of the ZX Spectrum, tho arguably it is a lot nicer, what with the extra grey, tweaked brown and generally a bit less eyesore.
The brown was actually a hardware hack in monitors back then which made that colour look nicer.
On some displays which did not support this it looked like thisGraphic Modes
CGA has some 2 textmodes which are in general not very interesting for graphics. In these modes you either could have 40x25 or 80x25 8x8 characters which came from a predefined ASCII set of symbols which each could have a unique foreground and background colour out of any of the 16 colours.
The resolutions of these modes are 320x200 and 640x200 respectively.
In the 80x25 mode it is feasible to tweak the display so that only 2 pixels of each character are shown which quadruples the vertical resolution to 100 characters. This combined with the use of characters which are half foreground/half background colour you could get a 16 colour "graphics mode" with 160x100 "pixels" resolution.
The other 2 graphics modes were a bit more interesting for everyday uses, mainly because of the higher resolution.
There is a high resolution mode with 640x200 pixels (tallpixels) which has black as fixed background colour and can use one other of the 16 colours. 2 colours total. Not very exciting.
The mainly used CGA mode is the one where you can choose from three 4-colour palettes with 2 intensities each (making 6 palettes) at a resolution of 320x200
Palette 1 is what most people probably remember as CGA from back in the days.
Palette 0 is what most people probably remember as CGA from back in the days.
And lastly a palette which was not official and only worked on RGB monitors (but is pretty nice)
When using one of these 6 palettes you can also change the black to any of the other 16 colours, which also affects the border area around the main drawarea.
The "main" EGA mode has a resolution of 640x350 pixels (you have to remember that this, as well as the 320x200 resolutions are displayed at 4:3)
with 16 colours, which can be picked from a 6 bit RGB222 palette
The mode which was mostly used was 320x200 with the 16 CGA colours which now could be used freely.
The Commodore C64, short just C64, has a native resolution of 320x200 pixels, which is segmented into 40x25 characters (tiles).
There is also a border around the main screen area which can be any of the 16 colours. There are also way more tricks possible with the border, but this would be too much for this simple guide.Palette
Like most old 8-bit computers the C64 has a predefined 16 colour palette.
The interesting thing about the C64 palette is that it is not a digital palette, meaning there are no predefined digital bits used to set the colours. It is analogue and was handmade. This results in way less garish looking colours than for example the ZX Spectrum
palette or CGA/EGA.
Since no one really knows the real RGB values of the C64 palette (there are no RGB values the C64 would have stored anywhere) someone with the handle Pepto sat down with some data, measuring tools and used science to find out good what would be a good representation of the C64 colours to RGB. How he did this you can read about here
In order of brightness.
The respective grey values (what you would see if you turned the colour dial on your monitor/TV all the way down), note the pairs of equal value, more on this later.
In order of colourcodes. Each colour has a hexnumber from 0 to F in this order. This is important for some of the graphic modes as well.
I personally use a lighter version of the pepto palette which I adjusted myself when I save images for display on anything else than the real thing.
Let's have a closer look at the palette and why (I think) it is so nice.
Here are examples of some simple and straightforward ramps.
And here some ramps using greys as buffercolours.
If you look at other fixed 16 colour palettes you will see that they don't have as many greys, which is due to their binary nature (as opposed to being handpicked). You can see that greys are interchangeable with other colours to form different ramps and branch off into different colours.
Here are some more examples of miniramps showing which colours can be bridged using the different greys. Of course not all of these work equally well, but they all do their job at least alright.
So in any case, no matter if you just wanna draw with this palette or adhere to some proper C64 restrictions, it's quite nice and challenging to work with.Screen Modes
The C64 basically has 2 times 2 screenmodes. Hires (also called Singlecolour) and Multicolour being the resolutions and Character or Bitmap mode being the way things are arranged in RAM and so on. Hires bitmap and Mcol bitmap are mutually exclusive while in charmode they can be combined (with some limitations)Character mode
Character mode is more restricted but more economical in RAM usage (thus it is often used for applications and games, where bitmal mode would be overkill on resources)
There is only space for 256 characters allocated in memory and there is one global background colour chosen from any of the 16 colours.
In hires the full resolution of 8x8 pixels per character is available but only one other colour aside from the background. If hires char mode is being used on it's own (not combined with mcol) the extra colour per tile can be any. If it is combined with Mcol it can only be chosen from the first eight colours 0-7.
In mcol the resolution is halfed resulting in 4x8 widepixels per character. At the cost of pixel resolution colour resolution is gained.
Each char can have 4 colours. This sounds nice, but is limited. One colour, as already stated is the background colour, then there are 2 more global colours which can be picked from any of the 16, plus one colour which can be unique per character but is again can only be picked from the first eight colours 0-7.
A very nice example of char mode are these Metroid mockups by vierbit
The hud could be done using a screensplit so that there are basically 2 parts of the screen which can have completely different colours if you want. (Tho this is not something that is readily available and has to be specifically coded)Bitmap mode
In bitmap mode the artist has more freedom with colours and no restrictions with the amount of characters used. Each one of the 1000 chars on screen can be different.
Hires bitmap mode has the full 8x8 resolution per char and can have 2 colours per character chosen from any colour. There is no global background colour in hires bitmap mode.
Multicolour bitmap mode is a bit more complex. Here there resolution is again halved to 4x8 widepixels per character. In Mcol bitmap there still is a global background colour which can be chosen from any of the colours. On top of this each char can have 3 unique colours. You can imagine the background colour being the paper colour and the other 3 colours being what you can draw on top of this.
In general it is a good idea to use either one of the greys or the colour you use most in your picture as the background colour, althought black, white and most of the colours at the 2 ends of the value range are not as good. This is because you can not reuse them as widely. Greys can be used to aa or buffer, same with cyan for example if you have a very blue picture. With black or white you can never do this. So using black or white for the background should be avoided unless you have a very good reason for it.
The C64 has hardware sprites which come in very handy for games, since they are faster than software ones. Again the sprites come in 2 flavours, hires and multicolour, and they are very similar to how stuff works in character mode.
Instead of a background colour one colour is reserved for transparency.
Hires sprites are 24x21 pixels big and are 1 colour, chosen from any.
Mcol sprites are 12x21 widepixels and have 3 colours, 2 of these colours are global, chosen from any, and one colour is unique, also chosen from any.
Technically the amount of sprites at once is 8, but with multiplexing there can be 8 per scanline.
It is to note that a sprite always occupies it's full size, no matter how big the non-transparent content is.
Sprites can also be stretched on the X and/or Y axis do double them in size.
Sinclair Spectrum ZXScreen
The Sinclair Spectrum ZX, short ZX, Spectrum or Speccy, has a resolution of 256x192, segmented into 32x24 8x8 characters, also called attribute cells.
There is also a border which can be changed to one of the 8 basic colours.Palette
The Speccy consists of 8 colours which come in two intensity variants - basic/dark and bright.Graphic Modes
By design the Speccy does not have multiple different gfx modes, just one. In this mode you can have 2 colours per attribute cell and each cell is either dark or bright, meaning you can not mix colours with different intensities in the same cell. Notable is also that there is a flash bit which can be set for each cell. If this is set the background and foreground colour of the cell will alternate in a blinking fashion.
With programming it can be achieved to have 8x1 sized attribute cells over half the width of the screen or 8x2 sized attribute cells over the full width.
The original Amstrad CPC, short CPC has a palette of 27 colours. Later improved models sported a 12 bit RGB444 palette resulting in 4096 colours to choose fromGraphic modes
There are 3 graphic modes:
Mode 0: 160x200, 16 colours. Widepixels
Mode 1: 320x200, 4 colours. Square pixels
Mode 2: 640x200, 2 colours. Tall pixels
There are ways to increase resolution by reprogramming the video controller
12 bit RGB444 palette (4096 colours). This basically means you only have 16 instead of 256 choices per RGB channel.
On modern PCs this basically would be all values 00, 11, 22, 33, 44... up to FF.Graphic Modes
There are 2 graphic modes in 2 subflavours.Normal
Lowres: 320x256 PAL / 320x200 NTSC - 32 colours
Highres: 640x256 PAL / 640x200 NTSC - 16 colours - tallpixelsInterlaced
Lowres: 320x512 PAL / 320x400 NTSC - 32 colours - widepixels
Highres: 640x512 PAL / 640x400 NTSC - 16 colours
On the original machine the interlace modes flicker quite a bit unless flicker fixer hardware was installed.
Confusingly the modes are also often called: Lores, Medres, Interlaced and Hires.
There is something called Overscan which can achieve higher resolutions (wip)
Also there are 2 special modes Extra HalfBrite (EHB) and HoldAndModify (HAM).
In EHB you get the normal 32 colourslots to populate and the machine automatically generates 32 half als bright versions of these colours.
The values get rounded down, ie. 3 would become 1 and F (15) would be 7.
HAM is quite complicated and not feasible without special graphics programs which can handle it.
Basically the user gets 16 colours to choose and each pixel can either be one of these 16 colours or can inherit 2 of the RGB values of the pixel left to it and change the third value to something new. So if you would change a pixel all pixels to the left of it can potentially change colour. I am not sure if this wraps around scanlines, probably does.
Nintendo Gameboy/Gameboy ColorScreen
The screen of the both the GB and GBC are 160x144 pixels, segmented into 20 x 18 8x8 characters/tiles.Palette
The original Gameboy has a monochrome 4 colour palette of which there are no reliable RGB values, which also has to do with the fact that you can adjust the brightness. For all intents and purposes any more or less straight ramp from a very light to a very dark value will do.
The Gameboy Color has a full 15 bit RGB555 palette, 32768 colours to choose from.Tile and sprite restrictions
On the GBC there are eight definable palettes for each the sprites and the tiles.
Tile palettes can have 4 colours, sprites effectively have 3 colours, because one of the 4 slots is reserved to transparency.