Automatic detection of monitor type from monitor lead ID pins

Some RISC OS computers have circuitry which allows the detection of the state of ID pins on the monitor connector. This allows the computer to distinguish between most types of monitor, and adjust its video output accordingly.

To support this, a number of changes have been made to RISC OS:-

a) To simplify the interface, the commands *Configure Mode and *Configure WimpMode have been merged. Both commands control the same CMOS location. Therefore the same screen mode will be selected on startup irrespective of whether the desktop is being used.

b) The commands *Configure Mode/WimpMode, *Configure MonitorType, and *Configure Sync now take the keyword Auto as an alternative to a numeric parameter. If this option is configured, then RISC OS will determine a reasonable default for the particular parameter, based on the type of monitor plugged in.

As the default is for all three to be set to Auto, the user should only have to change the settings if he has a type of monitor which is not recognised properly, or if he wishes to use a different screen mode from the chosen default.

c) The effect of holding certain keys down on power-on is slightly changed:-

Key held down on power-on       Settings of CMOS RAM
R or Delete                     MonitorType Auto, Mode/WimpMode Auto, Sync 
                                Auto, and all the rest it used to
T or Copy                       MonitorType Auto, Mode/WimpMode Auto, Sync 0 
                                (separate syncs), and all the rest
Keypad 0 to 9                   MonitorType 0 to 9
Keypad dot                      MonitorType Auto, Mode/WimpMode Auto, Sync Auto

d) A new service has been added which allows unknown values of the monitor ID to be recognised by modules and converted into the appropriate monitor type number, sync type and default mode, as follows:-

Service_MonitorLeadTranslation (&76)

in: R1 = service code (&76)

        R2 = monitor lead ID (see below)

out: If monitor lead ID is recognised, then the module should set

        R1 = 0 (claim service)
        R3 = default screen mode number to use on this type of monitor
        R4 = monitor type number to use (as used in *Configure MonitorType)
        R5 = sync type to use on this type of monitor
         (0 => separate syncs, 1 => composite sync)
        All other registers must be preserved.
        If the monitor lead ID is not recognised, the module should preserve
        all registers.

The monitor connector provides 4 ID pins, ID0-ID3. Each of these may be connected to 0v, +5v or to the Hsync pin. The monitor lead ID therefore represents the state of the 4 ID pins by 8 bits as follows:-

Bit 0 Bit 1 State of ID0
Bit 2 Bit 3 State of ID1
Bit 4 Bit 5 State of ID2
Bit 6 Bit 7 State of ID3

   0      0     Tied to 0v
   1      0     Tied to +5v
   0      1     Tied to Hsync
   1      1     Inderminate - either the state is fluctuating
                or machine is not capable of reading the ID

The service is issued when SWI OS_ReadSysInfo is called with R0=1 (see document 'ReadSysInf') if any of the configured Mode/MonitorType/Sync are set to Auto.

If the service is not claimed, then RISC OS checks the monitor lead ID against the following list of recognised IDs:-

Monitor ID pins         Monitor type            Sync type       Default mode
0=0v,1=+5v,H=Hsync,
X=don't care
Pin 0 1 2 3
     1 1 H X            1 (Multisync)           1 (composite)       27
     1 0 1 X            3 (Mono VGA)            0 (separate)        27
     0 1 1 X            3 (Colour VGA)          0 (separate)        27
     0 1 0 X            4 (Super VGA)           0 (separate)        27
     H 1 1 X            0 (TV standard)         1 (composite)       12

For all other ID values RISC OS uses the TV standard monitor settings.