ReadSysInf 9.96 KB
Newer Older
Neil Turton's avatar
Neil Turton committed
1 2 3 4
; > Doc.ReadSysInf

 Title:         ReadSysInf
 Author:        Tim Dobson
Kevin Bracey's avatar
Kevin Bracey committed
5
 Version:       0.13
Neil Turton's avatar
Neil Turton committed
6
 Started:       19-Mar-91
Kevin Bracey's avatar
Kevin Bracey committed
7
 Last updated:  25-Aug-02
Neil Turton's avatar
Neil Turton committed
8 9 10 11
 Status:        Preliminary
 History:
  19-Mar-91 TMD         Created
  04-Apr-91 TMD         Updated OS_ReadSysInfo(2)
Kevin Bracey's avatar
Kevin Bracey committed
12
  25-Aug-02 RPS         Boy was this out of date
Neil Turton's avatar
Neil Turton committed
13

Kevin Bracey's avatar
Kevin Bracey committed
14 15
Extensions to SWI OS_ReadSysInfo in RISC OS 2.11 and later versions
===================================================================
Neil Turton's avatar
Neil Turton committed
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

SWI OS_ReadSysInfo has been extended since RISC OS 2.00 - the full
specification is as follows:-

*****************************************************************************

        SWI OS_ReadSysInfo - Read various system information

 in:    R0 = reason code

 out:   Depends on reason code

 Reason codes:-

-------------------------------------------------------------------------

 in:    R0 = 0
 out:   R0 = amount of configured screen memory, in bytes

This sub-call is the same as on RISC OS 2.00, with the exception that two
bugs in the call have been fixed:-

 a) It no longer goes wrong if less than 20K configured on 8K or 16K page
size machine;

 b) It now properly ignores the top bit of the CMOS location holding the
configured value.

-------------------------------------------------------------------------

 in:    R0 = 1
 out:   R0 = Configured Mode/WimpMode
        R1 = Configured MonitorType
        R2 = Configured Sync

Note that from RISC OS 2.09 onwards, the configured Mode and WimpMode have
been merged. Both *Configure Mode and *Configure WimpMode control the same
CMOS RAM location.

Note also that if any of Mode/WimpMode, MonitorType or Sync have been
configured to Auto (see "Doc.MonLead"), then the appropriate value for the
attached monitor will be returned.

-------------------------------------------------------------------------

Kevin Bracey's avatar
Kevin Bracey committed
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
 in:   r0 = 2
 out:  r0 = hardware configuration word 0
               bits 0-7 = special functions chip type
                               0 => none
                               1 => IOEB
               bits 8-15 = I/O control chip type
                               0 => IOC
                               1 => IOMD
               bits 16-23 = memory control chip type
                               0 => MEMC1/MEMC1a
                               1 => IOMD
               bits 24-31 = video control chip type
                               0 => VIDC1a
                               1 => VIDC20
       r1 = hardware configuration word 1
               bits 0-7 = I/O chip type
                               0 => absent
                               1 => 82C710/711 or SMC'665 or similar
               bits 8-31 reserved (set to 0)
       r2 = hardware configuration word 2
               bits 0-7 = LCD controller type
                               0 => absent
                               1 => present (type 1) eg A4 portable
                               2 => present (type 2) eg Stork portable
               bits 8-15 = IOMD variant
                               0 => IOMD
                               1 => IOMDL ie ARM7500 (Morris)
               bits 16-23 = VIDC20 variant
                               0 => VIDC20
                               1 => VIDC2L ie ARM7500 (Morris)
               bits 24-31 = miscellaneous flags
                      bit 24   0 => IIC bus slow (100kHz)
                               1 => IIC bus fast (400kHz)
                      bit 25   0 => keep I/O clocks running during idle
                               1 => stop I/O clocks during idle
                      bits 26-31 reserved (set to 0)
       r3 = word 0 of unique machine ID, or 0 if unavailable
       r4 = word 1 of unique machine ID, or 0 if unavailable
Neil Turton's avatar
Neil Turton committed
99 100 101 102 103 104 105

Some RISC OS computers are fitted with a chip providing a machine ID number
which is unique to each computer. Machines not fitted with an ID will return
zero in both R3 and R4.

-------------------------------------------------------------------------

Kevin Bracey's avatar
Kevin Bracey committed
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
 in:   r0 = 3 (*** Only available from RISC OS 3.01 onwards ***)
 out:  r0 = I/O chip base features mask               710  711  665  669  UMC669
               Bits 0..3   Base IDE type              1    1    1    1    1
               Bits 4..7   Base FDC type              1    1    1    1    1
               Bits 8..11  Base parallel type         1    1    1    1    1
               Bits 12..15 Base 1st serial type       1    1    1    1    1
               Bits 16..19 Base 2nd serial type       0    1    1    1    1
               Bits 20..23 Base Config type           1    2    3    4    5
               Bits 24..31 Reserved                   0    0    0    0    0

       r1 = I/O chip extra features mask              710  711  665  669  UMC669
               Bits 0..3   IDE extra features         0    0    0    0    0
               Bits 4..7   FDC extra features         0    0    0    0    0
               Bits 8..11  parallel extra features    0    0    1    1    1
               Bits 12..15 1st serial extra features  0    0    1    1    1
               Bits 16..19 2nd serial extra features  0    0    1    1    1
               Bits 20..23 config extra features      0    0    0    0    0
               Bits 24..31 Reserved                   0    0    0    0    0
Neil Turton's avatar
Neil Turton committed
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155

        R2-R4 Undefined (reserved for future expansion)

The 82C710 family of chips are composed of several sub-units, each of which
might change under future revisions of the chip. Current sub-units are as
follows:

        IDE hard disc interface
        Floppy disc interface
        Parallel port
        Serial port 1
        Serial port 2 (only present in 82C711)
        Chip configuration (different on 82C710 and 82C711)

New versions of the chip may have some sub-units which are incompatible with
earlier versions, while leaving the functionality of other sub-units
unchanged.

This call allows drivers which are only interested in particular sub-units
to tell whether they can work on the particular hardware running in the
machine.

Different values of each sub-field correspond to incompatible versions of
the corresponding sub-unit. A sub-field of zero indicates that the sub-unit
is not present.

If a sub-unit gains additional backwards-compatible functionality in future
versions of the chip, this will be indicated by having bits set in the value
returned in R1.

Information on extra sub-units will be accomodated in the remaining bits of
R0, or in R2-R4.
Kevin Bracey's avatar
Kevin Bracey committed
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259

-------------------------------------------------------------------------

 in:   r0 = 4 (reason code)

 out:  r0 = LSW of Ethernet Network Address (or 0)
       r1 = MSW of Ethernet Network Address (or 0)

-------------------------------------------------------------------------

 in:   r0 = 5 (reason code)
 
 out:  r0 = LSW of Raw data from Dallas Chip
       r1 = MSW of Raw data from Dallas Chip

-------------------------------------------------------------------------

 in:   r0 =  6 (reason code)
       r1 -> input block, 1 word per entry, giving number of value
             required, terminated by -1
 OR:   r1 =  0 if just 1 value is required, and this is to beturned in r2
       r2 -> output block, 1 word per entry, will be filled in on output
 OR:   r2 =  number of single value required, if r1 = 0

On exit:
  if r1 entry != 0:
        r0,r1,r2 preserved
        output block filled in, filled in value(s) set to 0 if
        unrecognised/no longer meaningful value(s)
  if r1 entry = 0:
        r0,r1 preserved
        r2 = single value required, or set to 0 if if unrecognised/
        no longer meaningful value

 valid value numbers available - see table below
        CamEntriesPointer       = 0
        MaxCamEntry             = 1
        PageFlags_Unavailable   = 2
        PhysRamTable            = 3
        ARMA_Cleaner_flipflop   = 4
        TickNodeChain           = 5
        ROMModuleChain          = 6
        DAList                  = 7
        AppSpaceDANode          = 8
        Module_List             = 9
        ModuleSHT_Entries       = 10
        ModuleSWI_HashTab       = 11
        IOSystemType            = 12
        L1PT                    = 13
        L2PT                    = 14
        UNDSTK                  = 15
        SVCSTK                  = 16
        SysHeapStart            = 17

-------------------------------------------------------------------------

 in:    r0 =  6 (reason code)
        read 32-bit Abort information for last unexpected abort
        (prefetch or data)
 out:   r1 = 32-bit PC for last abort
        r2 = 32-bit PSR for last abort
        r3 = fault address for last abort (same as PC for prefetch abort)

-------------------------------------------------------------------------

 in:    r0 = 8 (reason code 8)
 out:   r0 = platform class
             currently defined classes are:
                0 = unspecified platform (r1,r2 will be 0)
                1 = Medusa   (currently returned for Risc PC only)
                2 = Morris   (currently returned for A7000 only)
                3 = Morris+  (currently returned for A7000+ only)
                4 = Phoebe   (currently returned for Risc PC 2 only)
                all other values currently reserved
        r1 = 32 additional platform specifier flags (if defined)
             bits 0..31 = value of flags 0..31 if defined, 0 if undefined
        r2 = defined status of the 32 flags in r1
             bits 0..31 = status of flags 0..31
                          0 = flag is undefined in this OS version
                          1 = flag is defined in this OS version

The current flag definitions for r1 (1=supported, 0=unsupported) are :

    0     = Podule expansion card(s)
    1     = PCI expansion card(s)
    2     = additional processor(s)
    3     = auto power off
    4..31 reserved (currently undefined)

-------------------------------------------------------------------------

 in:   r0 = 9 (reason code 9)
       r1 = item number to return
 out:  r0 = pointer to requested string (NULL terminated) or NULL
            if it wasn't found

 Currently defined item numbers are:

    0   = OS name
    1   = Part number
    2   = Build date
    3   = Dealer name
    4   = User name
    5   = User address