\input manualMacros.tex
\manBegin
\manPageInfo{RCI Reference Manual}{}{}
\manTitle{rciBus}{3}
\manSection{NAME}
{\tt \manName{rciBus}},
{\tt \manName{rciIOpage}}
-- RCI bus access pointers.
\manSection{USAGE}
\cverbatim
extern unsigned char *rciBus;

extern unsigned char *rciIOpage; @endcverbatim
\manSection{DESCRIPTION}
These variables provide the user with direct access to the system physical
I/O space. Some or all of this I/O space is mapped into memory regions
whose base addresses are given by these two variables.

On MicroVAX-II systems, {\tt rciBus} points to the 4 Mbyte Q-22 bus
space, and {\tt rciIOpage} points to the 8 Kbyte I/O page.

On systems using the VME bus, {\tt rciIOpage} points to the
64 Kbyte short I/O ({\tt A16D16}) space. What {\tt rciBus} points to
tends to depend on the system: on Sun4 systems, it is a 
2 Mbyte region starting at offset {\tt 0x800000} in the 
{\tt A24D16} space; on SGI systems, it is the upper 8 Mbytes of the {\tt
A24D16} space, and on VxWorks systems, it is the entire {\tt A24D16} space.
The reasons for these differences involve various constraints
such as available memory, reserved address spaces, etc.

These pointers can be used to perform I/O operations directly without having
to go through the operating system. For instance, suppose a device 
exists at I/O page address 0x1f70, and we wish to read the contents
of the second (16 bit) word belonging to that device. This could be done
with the following code fragment:
\cverbatim
   unsigned short *device = (unsigned short *)(rciIOpage+0x1f70);
   unsigned short value;

   value = device[1]; @endcverbatim
{\tt rciIOpage} and {\tt rciBus} are not set up until the first call
is made to {\tt rciCreate()}. They are used principally by the RCI
I/O drivers.
\manSection{BUGS}
The definition of these variables is very system dependent.
\manSection{SEE ALSO}
\raggedright
{\tt controlFxns(7)}, {\tt robotComfxns(7)}, {\tt IOdevice(7)}.
\manEnd
\end
