A 4-axis controller for both stepper and servo motors controlled by step and direction drives. It generates much smoother trains of step pulses than can be generated by software alone. It also allows the possibility of using an encoder to read actual machine position. It includes an E-stop controller and 15 additional opto-isolated digital inputs for home and limit switches, and positions where up to 8 solid state relays can be plugged in. Multiple boards can be "daisy-chained" on a single parallel port to accomodate more axes. An optional board can be added to provide analog output to control spindle speed, see "spindle DAC".