Previously, alist based ucodes were classified as either ABI1, ABI2 or ABI3.
This classification is too simple to take into account all versions/revisions
that really exist in the wild. Furthermore, it prevents from implementing some
version/revision specific behaviors.
There are indeed 3 big "families" of alist based ucodes:
-ABI1 (or audio) which seems to be the very first version developed.
It was distributed to 3rd party devs and is the most common.
2 minor revisions were made by Rare for GoldenEye, BlastCorp and DiddyKongRacing.
-ABI3 (or naudio) which is the later revision.
It was as distributed to 3rd party devs as well and is the second most common.
4 revisions were made by Rare for BanjoKazooie, DonkeyKong, BanjoTooie, JetForceGemini,
MickeySpeedway, PerfectDark and ConkerBadFurDay.
-ABI2 (or what I'd call NEAD) which was Nintendo Entertainment Analysis & Development exclusive.
There are many versions/revisions in this category (almost one for each game they developed).
This commit try to better identify audio ucodes.
Structure fields alignment is compiler dependent and therefore can be fragile.
We replace all occurences of OSTask_t structure by memory access primitives.
With this patch, delay-based effects should work.
Basically, the SFX stage mixes up to 8 delayed subframes together and add the
resulting subframe to left and right subframes. Furthermore, a filtered version
of this subframe is used to update the sample history.
Games that use the SFX stage include:
The World is not Enough, Tarzan, Resident Evil 2, Polaris SnowCross
Musyx ucode implementation should now be complete !
Different operation systems (Unix vs. Windows) use different line ending types.
It can easily happen that users from different systems edit files and replace
all line endings of a file with the system specific version. This screws up
diffs and makes merges harder.
Git can normalize line endings for specific files and avoid this problem.
Binary files should be marked to avoid accidentally normalization.
The *.d depends files for make just list the files used when building an
object file. Removing a file listed in such a dependency file causes make to
search for a way to recreate it. This usually cannot work because these files
aren't autogenerated.
The gcc option -MP can be used to generate empty rule for these files. Removing
a file in a dependency list will then execute this empty rule and continue with
the execution of the creation of the object file. This compilation process will
then automatically correct the dependency file.