Drivers
Ring* systems makes use of a number of (mostly) bespoke drivers, listed below:
columba.sys
mxcmos.sys
mxhwreset.sys
mxjvs.sys
mxparallel.sys
mxsmbus.sys
mxsram.sys
mxsram_pci_isa_bridge.sys
mxsram_pcmcia.sys
mxsuperio.sys
mxusbdevice.sys
columba
Columba is a driver used to fetch DMI information about the current system.
Device registrations
Device Name |
\Device\columba |
Linked To |
\DosDevices\columba (\\.\columba ) |
Device GUID |
|
IO control codes
IOCTL Code |
#define |
Bytes in |
Bytes out |
Meaning |
0x9c406104 |
CTL_CODE(FILE_DEVICE_SEGA, 0x841, METHOD_BUFFERED, FILE_READ_ACCESS) |
|
|
Read the DMI at a given offset |
mxcmos
mxcmos is unknown currently
mxhwreset
This driver is used exclusively to power cycle the PC.
Device registrations
Device Name |
\Device\mxhwreset |
Linked To |
\DosDevices\mxhwreset (\\.\mxhwreset ) |
Device GUID |
|
IO control codes
IOCTL Code |
#define |
Bytes in |
Bytes out |
Meaning |
0x9c402000 |
CTL_CODE(FILE_DEVICE_SEGA, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) |
0 |
0 |
Writes 0xE to PORT 0xCF9 , causing a power cycle. |
mxjvs
mxjvs is the driver used to communicate with the JVS IO board connected to the Ring* PC via the JVS USB port.
Device registrations
Device Name |
\Device\mxjvs |
Linked To |
\DosDevices\mxjvs (\\.\mxjvs ) |
Device GUID |
|
IO control codes
IOCTL Code |
#define |
Bytes in |
Bytes out |
Meaning |
0x9c402000 |
CTL_CODE(FILE_DEVICE_SEGA, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) |
variable |
variable |
Exchange JVS packets with the JVS IO board |
Extra values used, currently unknown
\Device\Serial3
{86e0d1e0-8089-11d0-9ce4-08003e301f73}
mxparallel
mxparallel is a wrapper driver for the parallel port used to communicate with the keychip
Device registrations
Device Name |
\Device\mxparallel |
Linked To |
\DosDevices\mxparallel (\\.\mxparallel ) |
Device GUID |
|
IO control codes
IOCTL Code |
#define |
Bytes in |
Bytes out |
Meaning |
0x9c40a000 |
CTL_CODE(FILE_DEVICE_SEGA, 0x800, METHOD_BUFFERED, FILE_WRITE_ACCESS) |
|
|
Write data |
0x9c406004 |
CTL_CODE(FILE_DEVICE_SEGA, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS) |
|
|
Read data |
0x9c40a008 |
CTL_CODE(FILE_DEVICE_SEGA, 0x802, METHOD_BUFFERED, FILE_WRITE_ACCESS) |
|
|
Write status |
0x9c40600c |
CTL_CODE(FILE_DEVICE_SEGA, 0x803, METHOD_BUFFERED, FILE_READ_ACCESS) |
|
|
Read status |
0x9c40a010 |
CTL_CODE(FILE_DEVICE_SEGA, 0x804, METHOD_BUFFERED, FILE_WRITE_ACCESS) |
|
|
Write control |
0x9c406014 |
CTL_CODE(FILE_DEVICE_SEGA, 0x805, METHOD_BUFFERED, FILE_READ_ACCESS) |
|
|
Read control |
0x9c40a018 |
CTL_CODE(FILE_DEVICE_SEGA, 0x806, METHOD_BUFFERED, FILE_WRITE_ACCESS) |
|
|
Write flags |
0x9c40601c |
CTL_CODE(FILE_DEVICE_SEGA, 0x807, METHOD_BUFFERED, FILE_READ_ACCESS) |
|
|
Read flags |
Ports used
mxsmbus
This driver communicates with the system message bus chip on the motherboard. This driver appears to be a slightly
modified reference driver from Intel. The exact chipset used varies depending on the system:
RingWide |
Intel(R) 82801G(ICH7 Family)SMBus Controller |
RingEdge |
Intel(R) ICH9 SMBus Controller |
RingEdge 2 |
Intel(R) 5 Series/3400 Series Chipset Family SMBus Controller |
Devices currently confirmed to be located on the system message bus:
Address |
Device |
0x20 |
PCA9535; used for DIP switches |
0x30 |
|
0x55 |
|
0x57 |
EEPROM |
Device registrations
Device Name |
|
Linked To |
|
Device GUID |
{5c49e1fe-3fec-4b8d-a4b5-76be7025d842} |
IO control codes
IOCTL Code |
#define |
Bytes in |
Bytes out |
Meaning |
0x9c406000 |
CTL_CODE(FILE_DEVICE_SEGA, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS) |
0 |
4 |
Not totally understood, but appears to retrieve the port number |
0x9c402004 |
CTL_CODE(FILE_DEVICE_SEGA, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) |
25h |
25h |
Exchange data over the smbus |
0x9c406008 |
CTL_CODE(FILE_DEVICE_SEGA, 0x802, METHOD_BUFFERED, FILE_READ_ACCESS) |
0 |
4 |
Retrieve the driver version |
0x9c40200c |
CTL_CODE(FILE_DEVICE_SEGA, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS) |
27h |
27h |
Exchange data with an I2C device over the smbus |
Ports used
Unsure
mxsram
The on-board SRAM. This device driver also supports reading and writing like a file.
Device registrations
Device Name |
\Device\mxsram |
Linked To |
\DosDevices\mxsram (\\.\mxsram ) |
Device GUID |
|
IO control codes
IOCTL Code |
#define |
Bytes in |
Bytes out |
Meaning |
0x70000 |
IOCTL_DISK_GET_DRIVE_GEOMETRY |
0 |
18h |
|
0x7405c |
IOCTL_DISK_GET_LENGTH_INFO |
0 |
8 |
|
0x9c406000 |
CTL_CODE(FILE_DEVICE_SEGA, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS) |
|
|
Ping |
0x9c406004 |
CTL_CODE(FILE_DEVICE_SEGA, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS) |
|
|
Get sector size |
0x9c406008 |
CTL_CODE(FILE_DEVICE_SEGA, 0x802, METHOD_BUFFERED, FILE_READ_ACCESS) |
|
|
Get version |
Ports used
mxsram_pci_isa_bridge
mxsram_pci_isa_bridge is unknown currently
mxsram_pcmcia
mxsram_pcmcia is unknown currently
mxsuperio
This driver communicates with some additional on-board devices. Notably EEPROM and the W83791D hardware monitor.
Device registrations
Device Name |
\Device\mxsuperio |
Linked To |
\DosDevices\mxsuperio (\\.\mxsuperio ) |
Device GUID |
|
IO control codes
IOCTL Code |
#define |
Bytes in |
Bytes out |
Meaning |
0x9c406000 |
CTL_CODE(FILE_DEVICE_SEGA, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS) |
|
|
Ping |
0x9c402004 |
CTL_CODE(FILE_DEVICE_SEGA, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) |
|
|
Read |
0x9c40a008 |
CTL_CODE(FILE_DEVICE_SEGA, 0x802, METHOD_BUFFERED, FILE_WRITE_ACCESS) |
|
|
Write |
0x9c40200c |
CTL_CODE(FILE_DEVICE_SEGA, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS) |
|
|
Hardware monitor Read |
0x9c40a010 |
CTL_CODE(FILE_DEVICE_SEGA, 0x804, METHOD_BUFFERED, FILE_WRITE_ACCESS) |
|
|
Hardware monitor write |
Ports used
mxusbdevice
Monitors connected devices to the system, and when a device connects matching the
GUID_DEVINTERFACE_USB_DEVICE
class ({a5dcbf10-6530-11d2-901f-00c04fb951ed}
) it checks the
VID and PID. If it matches a pair it has been instructed to scan for, it increments the count and informs the
caller.
Device registrations
Device Name |
\Device\mxusbdevice |
Linked To |
\DosDevices\mxusbdevice (\\.\mxusbdevice ) |
Device GUID |
|
IO control codes
IOCTL Code |
#define |
Bytes in |
Bytes out |
Meaning |
0x9c402000 |
CTL_CODE(FILE_DEVICE_SEGA, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) |
8 |
0 |
Equeue a new query. { uint insertion_count, wchar_t vid; wchar_t pid } is currently my best guess regarding the structure of the payload. |