# Vortex86

The Vortex86 is a computing system-on-a-chip (SoC) based on a core compatible with the x86 microprocessor family. It is produced by DM&P Electronics, but originated with Rise Technology.

## History

Vortex86 previously belonged to SiS, which got the basic design from Rise Technology. SiS sold it to DM&P Electronics in Taiwan.
Before adopting the Vortex86 series, DM&P manufactured the ALi M6117D, which contains VM Technology VMT386SX+ derived x86 core, an Intel 386SX compatible, 25–40 MHz SoC.

## CPU

Vortex86 CPUs implement the IA-32 architecture but which instructions are implemented varies depending on the model. Vortex86SX and the early versions of Vortex86 do not have a floating point unit (FPU). Any code that runs on i586 but does not use floating point instructions will run on these models. Any i586 code will run on Vortex86DX and later. Some Linux kernels (by build-time option) emulate the FPU on any CPU that is missing one, so a program that uses i586-level floating point instructions will work on any Vortex86 family CPU under such a kernel, albeit more slowly on a model with no FPU. The more advanced models have FPUs that have i686-level instructions, such as FUCOMI.
Code intended for i686 may fail on some models because they lack a Conditional Move (CMOV) instruction. Compilers asked to optimize code for a more advanced CPU (for example the GNU Compiler with its -march=i686 option) generate code that uses CMOV. Linux systems intended to run on i686 are generally not compatible with these Vortex86 models because the GNU C Library, when built for i686, uses a CMOV instruction in its assembly language strcmp function, which its dynamic loader (ld.so) uses. Hence, no program that uses shared libraries can execute.
Below are the properties of a Vortex86 original CPU reported by the Linux kernel tool /proc/cpuinfo.
Note that this CPU is a later version with an FPU.

## Software Compatibility

DM&P maintained an embedded Linux distribution customized to use the SoCs features. Other operating systems may work depending on the SoC model, including various RTOS systems such as QNX and VxWorks, Linux distributions, FreeBSD or various versions of Microsoft Windows systems such as Windows Embedded Compact or Windows IoT.
The ability to identify Vortex86 processors was added to Linux 5.16, released in January 2022.

## Versions
### Vortex86 original

The Vortex86 (M6127D) is a rebadged SiS 551 system-on-chip (SoC). The CPU core is derived from the Rise mP6, which has three integer and MMX pipelines and branch prediction.

### Vortex86SX

Introduced in February 2007, the Vortex86SX is an x86-compatible System-on-chip (SoC) with built-in north and south bridge on a 0.13 micron process in a 27x27 mm 581-pad BGA package.
The CPU core is typically clocked at 300 MHz and is compatible with the 486SX instruction set. It has a six-stage pipeline with a direct-mapped write-through 16 KB Data + 16 KB Instruction L1 cache but, unlike the Vortex86, lacks L2 cache and an FPU. The memory controller allows 16-bit wide access to SDRAM up to 128 MB at 133 MHz and DDR2 up to 256 MB at 166 MHz.
The SoC includes
* PCI 2.1 interface at 33 MHz
* ISA bus interface
* ATA controller with 2 channels at Ultra-DMA 100
* Fast Ethernet MAC
* USB 2.0 host with 4 ports
* 5 FIFO UART ports compatible with 16C550/16C552 at up to 460.8 kbit/s
* GPIO with 40 pins
* Embedded 256 KB flash memory
Unlike the original Vortex86, it does not integrate video or audio controllers.

### Vortex86DX

Introduced in August 2008, the Vortex86DX retains the same BGA package as the SX and is pin-compatible. It is built on a 90 nm process.
The CPU core is clocked at 600 MHz to 1 GHz (2.02 W @ 800 MHz) and improves on the SX with a 4-way 16 KB Data + 16 KB Instruction L1 cache, adds a 4-way 256 KB L2 cache, in write-through or write-back mode, and an FPU. The memory controller drops the ability to use SDRAM but increases the amount and speed of DDR2 memory it can drive to 1 GB and 333 MHz.
The SoC adds the ability to function as a USB 1.1 client on 1 port and increases the embedded flash capacity to 2 MB.
The PDX-600 is a version of the Vortex86DX that differs only in the number of RS-232 ports (three instead of five) and has no I²C and servo controllers, thus targeting more the embedded than the industrial market. Netbooks similar to the Belco 450R use this chip.

### Vortex86MX

The Vortex86MX uses a larger 31x31 mm 720-ball BGA package, still on a 90 nm process. The CPU core improves on the DX by adding branch prediction, cache-access optimisation and MMX instructions. The memory controller can drive up to 1 GB of DDR2 memory at 400 MHz.
The SoC drops ISA bus attachment but adds a VGA-compatible 2D GPU, with separate DDR2 memory, and a HD Audio controller. It has only three FIFO UART ports at up to 460.8 kbit/s.
The consumer grade version is known as the PMX-1000. Current models of the Gecko Edubook use the Xcore86, a rebadge of the Vortex86MX.

### Vortex86MX+

Introduced in June 2010, the Vortex86MX+ retains the same BGA package and CPU core as the MX. The memory controller allows wider 32-bit access to DDR2 up to 1 GB, still at 400 MHz. The integrated GPU switches to UMA, removing the requirement for separate video memory. The three FIFO UART ports can operate at data rates up to 115.2 kbit/s.

### Vortex86DX2

Introduced in May 2012, the Vortex86DX2 retains the same BGA package, CPU core, and GPU as the MX+. The memory controller allows 32-bit access to DDR2 up to 2 GB at 400 MHz.
The SoC drops conventional PCI capability and adds
* PCI Express 1.0 interface
* SATA with one port at 1.5 Gbps
* nine FIFO UART ports compatible with 16C550/16C552 at up to 6 Mbps
* ISA bus interface
* GPIO with 88 pins
* Motor control interface with 3 groups of controllers, four controllers per group

### Vortex86EX

Vortex86EX has a 32 KB write through 2-way L1 cache, 128 KB write through/write back 2-way L2 cache, PCI-e bus interface, 300 MHz DDR3, ROM controller, IPC (Internal Peripheral Controllers with DMA and interrupt timer/counter included), Fast Ethernet, FIFO UART, USB2.0 Host and ATA controller.
The package is a single 288-pin TFBGA-package.

### Vortex86DX3

Vortex86DX3 has a 1.0 GHz dual-core i686-compatible CPU. It has an eight-way 32K I-Cache, an eight-way 32K D-Cache, a four-way 512 KB L2 cache with a write-through or write-back policy, ability to use up to 2 GB of DDR3 RAM, a PCI-e bus interface, 100 Mbit/s Ethernet, FIFO UART, a USB 2.0 host, integrated GPU, an ATA controller at Primary Channel, and a SATA 1.5 Gbit/s controller (one port) at Secondary Channel.
The package is a single 720-pin BGA-package.

### Vortex86EX2

Vortex86EX2 has two asymmetrical CPU cores (one master and one slave). The master core runs at 600 MHz, has 16K I-Cache, 16K D-Cache, and four-way 128 KB L2 cache with a write-through or write-back policy. The slave core operates at 400 MHz and also has 16 KB I-Cache, 16 KB D-Cache, but has no L2 cache. Both have a built-in FPU, as well as the MMX, cmpxchg8b and cmov instructions, but only the master core has SSE, SSE2, SSE3, SSSE3 and NX support. Maximum DDR3 RAM capacity is 2 GB. It can also use ECC memory. It is produced using the 65 nm manufacturing process and uses the 19x19 mm LFBGA-441 package.