Last modified on 9 November 2012, at 12:48

Programming methods used in games

Revision as of 12:48, 9 November 2012 by Arnoldemu (Talk | contribs) (Rupture (or splitscreen))

This section describes specific programming methods which are used in games and the games that use them.

Hardware Double Buffer

Most good CPC games use the hardware double buffer technique in order to display sprites and/or to scroll the play area smoothly.

In particular, two memory areas (instead of one) are reserved for the screen ram.

In each frame, one of the two screens is displayed while the other is not visible but is drawn to. After the draw is done, the screens are exchanged using the hardware, so that the previously invisible one is now visible and the previously visible one is invisible.

The exchange is done using the hardware specifically by changing the screen-offset, Reg 12 and 13 of the CRTC).

This process is repeated.

The big advantage of this technique is that we can use a whole frame (or more) machine-time for our code (with no problems that arise when we alter screen ram at the same time the electron beam displays it on the monitor such as tearing or flickering).

However, page flipping eats up a lot of memory area (which is crucial especially for 64Kb machines). This explains why a lot of games can have small game-areas !

Hardware Scrolling

Hardware scrolling is performed by changing the CRTC registers 12 and 13 (start address).

The scrolling is normally 1 CRTC char (4 mode 0 pixels, 8 mode 1 pixels or 16 mode 2 pixels) in the horizontal and 1 char line (scroll amount dependant on R9, but normally 8 scan lines) vertically.

Horizontal scrolling can be made smoother by using R3 (Hsync Width) and makes the scrolling effectively half a CRTC char (2 mode 0 pixels, 4 mode 1 pixels, 8 mode 2 pixels). (Changing between values 5 and 6 for the horizontal sync causes a half CRTC char movement. This is an effect on the monitor).

This effect works well on Amstrad monitors but produces a black and white image on a MP-2 modulator because of the adjusted HSYNC timing.

Vertical scrolling can be made smoother by using R5 (Vertical Adjust) in combination with Rupture/Splitting to make perfect 1 scanline vertical scrolling.

This works on all monitors.

This following is an incomplete list of games using hardware scrolling:

Title Year Vertical Horizontal R3 R5 Confirmed
3D Stunt Rider 1985 No Yes No No Yes
Action Force 1988 No Yes No No Yes
Amazing Shrinking Man (The) 1986 Yes Yes No No Yes
Anarchy 1988 No Yes No No
Axys: The Last Battle 1991 Yes No No Yes Yes
BMX Kidz 1988 No Yes No No Yes
Bob Morane Science Fiction 1987 Yes Yes No No
Boulder Dash 1984 Yes Yes No No Yes
Builderland 1991 No Yes No No
Canadair 1987 No Yes No No Yes
Cyborgs 1991 Yes Yes Yes Yes Yes
Doctor Who and the Mines of Terror 1986 Yes Yes No No Yes
Energy Warrior 1987 No Yes No No Yes
FlySpy 1986 Yes Yes No No
Fusion 2 1988 No Yes No No
Gothic 1988 Yes Yes No Yes
Ghosts 'n' Goblins 1986 No Yes No No Yes
Ghouls 'n' Ghosts 1989 No Yes No No Yes
Into The Eagle's Nest 1987 Yes Yes No No Yes
Jinks 1988 No Yes Yes No Yes
Killer Cobra 1987 No Yes Yes No Yes
Led Storm 1988 Yes No No Yes Yes
Legend of Kage 1986 Yes Yes Yes Yes
Leviathan 1987 Diagonal scroll! No No Yes
Le 5eme Axe 1985 Yes Yes No No
Mission Genocide 1987 Yes No No Yes Yes
Monty Python's Flying Circus 1990 Yes Yes No No Yes
Octoplex 1989 Yes Yes No Yes(?) Yes
Out of This World 1987 No Yes Yes No Yes
Paraplane 1992 Yes Yes No No
Plate-Forme 1988 No Yes No No Yes
Prehistorik 2 1992 Yes Yes Yes Yes Yes
Prohibition 1987 Yes Yes No No Yes
Realm! 1987 Yes Yes No No Yes
Return of the Jedi (The) 1989 Diagonal scroll! No No Yes
Rick Dangerous 2 1990 No Yes No No
Rig Attack 1985 No Yes No No Yes
Rockford Yes Yes No No Yes
Roland on the Ropes 1984 Yes Yes No No
Sentinel (The) 1987 Yes Yes No No Yes
Skate Ball 1989 No Yes No No Yes
Skateboard Kidz 1988 Yes No No Yes Yes
Skate Rock 1987 No Yes No No Yes
Skate Wars 1990 No Yes No Yes Yes
Sly Spy Secret Agent 1990 Yes Yes No No Yes
Star Avenger 1984 No Yes No No
Street Machine 1986 Yes Yes No No Yes
Striker in the Crypts of Trogan 1992 Yes Yes No No
Super Cauldron 1992 Yes Yes Yes Yes Yes
Titan 1988 Yes Yes No No
Tornado Low Level 1985 Yes Yes No No Yes
Ultima Ratio 1987 Yes No No Yes Yes
Vector Ball 1988 Diagonal scroll! No No Yes
Warhawk 1987 Yes No No Yes Yes
Xeno 1986 No Yes No No Yes

Rupture (or splitscreen)

A CRTC programming technique used to split the screen into more than one block vertically.

The sizes of each block are defined using CRTC register R4. Vsync is turned off in all but one block (by setting CRTC R7 to a value larger than R4). The start address of each block can be changed using CRTC registers R12 and R13.

This allows each block to reference different ram or to hardware scroll one block while another is static.

This method requires careful timing for the CRTC register updates, it also needs testing on all CRTC because there are differences of when each will accept and use the values programmed. However, the result can be made to work on all with more simple ruptures. Care must also be taken to ensure the timings are setup for a 50Hz screen.

It is worth noting that some monitors are more tolerant to longer or shorter frames so the result may appear correctly on them and not on others. In addition some games may have been programmed and tested on only 1 CRTC type so may not work on others.

This is a an incomplete list of games that use this technique:

Title Year Confirmed
Action Force 1988 Yes
Axys 1991 Yes
Dynamic Duo 1988
DJ Puff's Volcanic Eruption 1992 Yes
Energy Warrior 1987 Yes
Enlightenment: Druid 2 1988
Grell and Falla 1992
Mission Genocide 1987 Yes
Octoplex 1989 Yes
Prehistorik 2 1992 Yes
Rockford 1988 Yes
Skate Ball 1989 Yes
Skatewars 1989
Skateboard Kidz 1988 Yes
Snowstrike 1990
Sol Negro(opera)
Storm Warrior 1989 Yes
Super Cauldron 1992 Yes
Turrican 1990 Yes
Twin World (Ubi Soft) 1990 Yes
Ultima Ratio 1987 Yes
Usagi Yojimbo 1988 Yes
Warhawk 1987 Yes
Wonder Boy 1987 Yes
Xyphoes Fantasy

Firmware

The following games are known to use firmware functions. This probably explains why they are poor. If the programmer had used the hardware directly they would have lots more cycles free which they could have used to make the game better.

This list is not exhaustive.

  • Xevious