differential drive parallel port
No, it should be fairly easy. You use one data line for data and other for clock. First set data, then change clock.(e.g. D0 = data, D1 = clock) Remaining data lines can be used to select scaled or direct output and for some other functions you might have.
Do not confuse SPI with asynchronous intefrace that serial port of computer uses. Synchronous serial comunication does not need specific baud rate or start and stop bits, that is why it should be easy to implement. Using serial interface reduces number of pins required by chip and by your interface.
Just look up how shift register works, it should be fairly easy to understand.
This kind of control might be suitable for setting speed for motor, but it will be dificult to build position control with this kind of configuration. If you require positioning from your motor/s, probably easiest way would be to use some kind of indexer module. You could use interface to indexer to send general parameters of move, like max speed, trapezoid or s curve profile, relative or absolute position and indexer would do the rest for you. Because it does not loop through computer software it has much faster control loop and can achieve much tighter control of the move.