Asynchronous control of 8 ClearPath SD "steppers"

I understand how CPUs work better than the average joe and I have done some scripting within a couple of video games back in the day. I don't think ArmA is really like programming but I guess C# in Space Engineers is the most similar to messing around with Arduinos. But I am very familiar with binary operations and whatnot so I am not starting from scratch, but I really do have no "experience." I have never written an actual program, certainly nothing object oriented. This was my first attempt.

There is a lot going on there that I do not understand, but I included because I read about it and that was the only way I could get it to work. For example, why do my pointer arrays that reference the pin output registers need to be declared as volatile?

Anyways, here is the data for the motors. Note that they have an integrated controller, so I just need to pump step and direction signals directly to the servo. The steppers can also do some pretty nice things with RAS on their own, so I can leave that out of my code and just do a simple trapezoidal motion profile, but that comes after I can actually send the pulses fast enough.

This is the motor itself (I have 16 of them) https://www.teknic.com/model-info/CPM-SDHP-3441S-ELN/?model_voltage=75VDC

Here is the user manual (go to page 117 for the relevant information about control signals for this motor) https://www.teknic.com/files/downloads/clearpath_user_manual.pdf

I can spin the motors just fine with any number of methods. Simply using if (millis - _lastStepTime > _interval) {doStep;} will work alright, but when you get into precisely controlling multiple motors issues with processing time arise. Is it possible to create a temporary PWM signal that will only last a certain number of pulses? Perhaps by using interrupts to disable the timer after X number of compare matches?