The task model is now integrated with the body model. A normal task can
only have one body, while a parallel task can have more.
It inherits the restriction that a task body cannot be nested over
another one unless it is paused (or the relaxed nest model is enabled).
The new task body model (or just body model) allows a task to have
multiple bodies. Generally a body is mapped to the execution of the same
user code of the task with specific input arguments.
The body model can constraint if a given body can be paused or re-run
again (resurrect).
Additionally, the body model can run multiple nested bodies but with the
restriction that the parent body should be paused first. This condition
can be relaxed with the BODY_FLAG_RELAX_NESTING flag.
Implements a small language parser to define the emulator events. The
event specification is parsed at emulation (when the emulator runs).
The ovnidump output now prints the events with the arguments formatted
as given in the event description.
It also introduces some consistency checks over the event MCVs, which
must begin with the model identifier and cannot be duplicated.
Improvements:
- Don't propagate values if they didn't change
- Use custom sort algorithm to speedup the sorting
- Allocate a contiguous array of channel outputs