Still pondering the whole logic behind this PID stuff. They are not part of the 'core' rom but in the footer telling canoe which parts of the emulation to start/enhance. Did I get it right?
So they trigger something? Isn't there a way to connect some PIDs (or parts of them) to the functions they trigger? Maybe it would thus be possible to create 'synthetic' PIDs for our purpose?
Way to simple thinking probably...
You're essentially correct about their use: They tell Canoe how to behave for each rom. Either turn on or off some parts of the emulation, tweak the timing of various components so that the game runs properly, support specific hardware features or external chips, and more or less "cheat" and hack away at broken games until they work, etc... In a way Canoe is a very poor general purpose emulator, but a very fast one with tweaks and hacks for most individual games that makes them appear to run flawlessly, so you'd never notice how shoddy it is until you start throwing unexpected games at it.
From a corporate development standpoint, it makes total sense: It made the emulator fast and able to run on the Wii's very weak hardware, and it made it quick to develop and maintain. A new game we want to release doesn't work by default? Well then when we detect its PID, we apply this hack, change this timing, change a few things here and there, comment out that code, add a new code path there, yaddi yadda and boom, the game works, call it a day, next game.
Since PIDs are hardcoded into Canoe, there's no way to create new ones unfortunately. This would need for someone to decompile Canoe and hack in new PIDs that would enable/disable or fix components that we need to get broken games to work. That's very hard and I wouldn't hold my breath for it. (Hell at that point if someone had that kind of knowledge, I'd rather they try to fix Retroarch's horrid input lag instead.)