; > Doc.ReadSysInf Title: ReadSysInf Author: Tim Dobson Version: 0.13 Started: 19-Mar-91 Last updated: 25-Aug-02 Status: Preliminary History: 19-Mar-91 TMD Created 04-Apr-91 TMD Updated OS_ReadSysInfo(2) 25-Aug-02 RPS Boy was this out of date Extensions to SWI OS_ReadSysInfo in RISC OS 2.11 and later versions =================================================================== 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. ------------------------------------------------------------------------- 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 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. ------------------------------------------------------------------------- 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 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. ------------------------------------------------------------------------- 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