1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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
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
; > 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