Drivers

Ring* systems makes use of a number of (mostly) bespoke drivers, listed below:

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

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.