1. A computer-based software task management system comprising: a Task ID register for storing a plurality of different Task IDs; a plurality of index registers, each associated with a corresponding one of the Task IDs, each index register configured to store a data register pointer for pointing to a data register; a Task ID memory coupled to the Task ID register and configured to store a plurality of flags, each flag associated with a corresponding one of the Task IDs and each indicating whether the corresponding Task ID is available; a state machine coupled to the Task ID memory and configured to (a) receive a Task ID request from a task, (b) to determine whether a Task ID is available in response to the Task ID request, (c) when a Task ID is available, to issue the Task ID to the task and set the flag in the Task ID memory indicating that the Task ID is in use, and (d) when the task is complete, to reset the flag in the Task ID memory indicating that the Task ID is available; wherein the Task ID register comprises a plurality of Task ID registers each configured to store one of said Task IDs; wherein the Task ID memory comprises a plurality of Task ID memories, each storing one of said plurality of flags each coupled to the Task; wherein the state machine is configured to manage a plurality of tasks with the plurality of index registers, Task ID registers and the Task ID memory; wherein a flip-flop circuit is coupled to each index register and is configured to toggle in response to each instance of the task, to cause the task to alternate between a write cycle to the index register and one selected from the group consisting of: a write cycle to the data register pointed to by the index register and a read cycle to the data register pointer to by the index register.