Many Sinclair Spectrum games were converted to the Amstrad for the following reasons:
Therefore, converting a Spectrum version of a game to the CPC was used extensively.
Unfortunatly many companies did not have the time/money or motivation to take advantage of the Amstrad's colours and range of video modes, so the CPC version was often inferior. Some games had less colour (they were monochrome), and were slower. A game that had been converted in this way was called a 'Spectrum port' (the game was 'transported from the Spectrum').
The Spectrum screen is 256 pixels wide and 192 pixels tall. The pixels are square, and are the same resolution as Amstrad's graphics mode 1.
The screen dimensions can be simulated by programming the CRTC, the resolution by programming the Gate Array.
The screen properties are:
The following Z80 assembly code will set the size of the CPC's display to match that of the Spectrum's:
;; set width of screen in characters ld bc,&bc01 out (c),c ld bc,&bd00+32 out (c),c ;; set horizontal position of screen so that it is centralised ld bc,&bc02 out (c),c ld bc,&bd00+46 out (c),c ;; set height of screen in CRTC characters ld bc,&bc06 out (c),c ld bc,&bd00+24 out (c),c ;; set 8 raster lines per CRTC character line ld bc,&bc09 out (c),c ld bc,&bd00+7 out (c),c ;; set vertical position of screen so that it is centralised ld bc,&bc07 out (c),c ld bc,&bd00+29 out (c),c
The following Z80 assembly code will set the CPC's screen mode to 1, which matches the pixel size and pixel aspect of the Spectrum's display:
ld bc,&7f00+%10001110 out (c),c
Differences between the CPC's display and the Spectrum's:
If the screen is static (it is not scrolled using the hardware) then some of the screen memory is invisible. Therefore it is possible to use these areas to store program code and data.
Calculating the invisible regions:
Screen properties:
There are 2 bytes per CRTC character. The first scan-line for each CRTC character follows on from each other: i.e. Character line 1, raster line 1: offset 0-63, Character line 1, raster line 2: offset 2048-2111 Character line 2, raster line 1: offset 64-127, 64*24 = 1536 2048 - 1536 = 512 bytes free