I am unsure where to begin this discussion, so please forgive me if this post just sort of rambles from point to point.
Getting more directly to the point of this thread, digital I/O is very important to equipment operation, regardless of whether it is an embedded design or computer driven. For many years, home built CNCs relied on the parallel port of the common PC, but these days those boards are becoming obsolete. Additionally, parallel ports had very limited resources, which is the reason that I now rely on the Propeller chip to run my machines. However, with my knowledge of C++, C, and MFC, I have always been interested in machine control through the use of a PC, but then you are looking at software like Mach 3, etc....
In addition to digital I/O, timing is also very important to equipment operation. Considering the speed of PCs these days, I knew it had to be possible to get high accuracy timing from a computer, I just did not know how to get that functionality, so I would occasionally do research on the subject, as well as researching how to get more I/O from a PC. I was already aware of the SetTimer function in Windows, but I do not believe that would be adequate to run machinery.
Since I am getting tired and you are most likely getting bored, I will sum it up......
I found this information today....
For high accuracy timing, the functions listed on this page should do the trick: https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/counters
EDIT: I am still searching for better timing functions.
For digital I/O, visit this page, but more specifically, go to heading 5. Bidirectional I/O circuit: https://contec.com/support/basic-knowledge/daq-control/digital-io/
I could be wrong, but I believe with this information, some awesome things can be done, like running GRBL on a PC instead of on an Arduino