Attached is an experimental code for loading IRX (actually PRX PPC Relocatable eXecutable) modules on the PPC alongside with DECKARD.
For the PPC-side modified versions of SYSMEM and LOADCORE from pcsx2 Fps2Bios are used. They handle loading PRX modules and linking imports to exports.
The code also includes a very small "library" of functions and hooks to DECKARD functions to make coding easier.
A MIPS-IOP <-> PPC-IOP communication virtual interface is included. It runs over a pair of unused registers and enables each side calling functions on the other, along with passing arguments and returning a result (or a structure of data). Because (MIPS-)IOP RAM is accessible from the PPC-IOP at the same offset (0x000000) "both" can access structures in it and pass data this way (the code on the PPC-IOP has to make sure to mask the segment).
Code on the PPC can access peripheral devices registers the same way code on the virtual IOP would (with the emulation provided by DECKARD) through the use of provided load/store functions.
Makefiles and linker scripts are included, which can build ELF PSX (static - at fixed address, but with imports and exports) and PRX binaries for the PPC.
Example modules are included - the most complete of which is a modified version of the (old now) USBD module, that has several of its functions ported to PPC-side. This however led to no change in transfer speed as the chosen functions are neither called that often, nor so processing-intense to make a difference.
It is structured, so that its PPC-counterpart PRX is loaded as data in the IRX. From there, it is loaded to PPC-RAM. There is a bug that prevents modules with symbols stripped from being loaded correctly, so they currently consume a lot of RAM.
The code is neither complete nor bug-free.
Although I am doubting more and more whether this would actually be of much use for making IOP modules run faster, if not that, then at least the property of this code to load multiple modules on the PPC may be useful.