The 32K screen

This document describes how the CRTC can be programmed so that it can display graphics from a range of 32k without. Once initialised, this effect does not require maintenance.

The CPC display hardware generates a memory address by using the CRTC MA (MA0-MA13) and RA (RA0-RA5) outputs in the following way:

Memory address SignalSignal SourceSignal name
A156845MA13
A146845MA12
A136845RA2
A126845RA1
A116845RA0
A106845MA9
A96845MA8
A86845MA7
A76845MA6
A66845MA5
A56845MA4
A46845MA3
A36845MA2
A26845MA1
A16845MA0
A0Gate-Array CCLK

Notes:

The CRTC has a internal MA register which has the same value as the MA signal outputs. This register is incremented for each CRTC character and reloaded at the start of a CRTC frame from R12 and R13.

Using R12 and R13 we can define the initial state of the internal MA register in the following way:

CRTC RegisterRegister BitCRTC signal
R12b7not used
b6not used
b5MA13
b4MA12
b3MA11
b2MA10
b1MA9
b0MA8
R13b7MA7
b6MA6
b5MA5
b4MA4
b3MA3
b2MA2
b1MA1
b0MA0

Notes:

If we want to display data from a 32k range, then MA12 output MUST increment from the initial setting defined by R12.

Depending on the initial setting of R12 and R13, the internal MA register must increment between:

Overscan

Using R12 we can set MA11 and MA10, and from this we can create a overscan screen (a screen which fills the entire monitor display), which does not require any maintenance. Once this effect has been initialised, no furthur CPU time is require to maintain the display.

Properties of the overscan screen:

The screen has 1440 characters, and the internal MA counter of the CRTC will increment by 1440 from the initial MA settings defined by R12 and R13.

The following table shows the settings of MA11 and MA10 for the maximum (&3ff) and minimum (&000) scroll settings. In this example, the scroll setting is defined by MA9-MA0.

MA11MA10Number of characters for MA12 to change
003074-4096
012049-3072
101025-2048
111-1024

From the table above we can see that:

Therefore the best settings for our overscan screen are MA11="1" and MA10="1".

Example: [ highlighted | original ]

Can we scroll this screen?

Yes, but the range is limited.

If MA11="1" and MA10="1" we are limited to scrolling 1024 characters. For a full scroll through the entire 32k range we would need to be able to scroll 4096 characters.

Scrolling 4096 characters requires using MA11 and MA10 for the scroll offset, and as we have already seen, when MA11 and MA10 are not "1", then at some point MA12 will not change, and the effect will be lost, and we will only see repeating graphics from a 16k range.