Reply 280 of 406, by KormaX
zyzzle wrote on 2023-02-23, 05:00:KormaX wrote on 2023-02-22, 17:35:I compiled the proper version of Jemm386 so I can sideload it in my normal setup in order to switch to a "Sound Blaster compatibility mode" on fly, which is far better than rebooting.
Sounds very promising! Is it possible to upload your compiled JEMM386 binary here for us to test? If it enables loading from commandline and being disabled / enabled without rebooting, that is fabulous. It also seems a wonderful success that you found this custom-compiled version more stable with SBEMU (I assume you're using the latest .zip 22.Feb version just posted?). Are you willing to share the JEMM binary which can be 'sideloaded'? Appreciated.
I uploaded it here, or I hope so (I'm from DOS with Links, so I can't be sure until the comment is submitted 🤣).
Well, JEMM386 can NOT be unloaded once loaded, at least, not by any means I'm aware of. It can be loaded in fly using loaders, like Loadsys (with LOADSYS /OD, because it's a device driver.) Maybe devload also works, IDK. DDL doesn't. I tried loading it with LOADSYS /R /OD so it could later be removed by LOADSYS /U, but it installs itself some funny way and Loadsys can't track it. It thinks Jemm is failed to load and won't be on it's list, redirected interrupts not recorded. I also tried to mark the system state with Marknet and then restore with Relnet, but it just hung the system. Maybe they couldn't remove Jemm, maybe they did but the CPU remained in PM without the monitor 🤣 Thus, QPIEMU.DLL also stays in the memory.
But you can removeably load HDPMI32I and SBEMU. You have to load HDPMI with LOADSYS /R and SBEMU with LOADSYS /R /whattheheckisthis, where "whattheheckisthis" is a series of interrupts explicitly specified to record when loading, so it can be removed with LOADSYS /U later.
My command line is:
LOADSYS /R /i08 /i09 /i0A /i0B /i0C /i0D /i0E /i0F /i1C /i70 /i71 /i72 /i73 /i74 /i75 /i76 /i77 SBEMU.EXE
If it doesn't work for you, just load it once with LOADSYS /R, and Loadsys will list the problematic interrupts you should mark.
Honestly, I don't know what happens in the XMS when this method is used, yesterday I unloaded and reloaded SBEMU many times and no problem occured. But unloading SBEMU's some parts and maybe removing the PSP (what LOADSYS does in my opinion) doesn't release the memory it requests from HDPMI, what's more, you can't reload it within the same VM. You have to remove HDPMI as well with LOADSYS /U (possibly removing everything related, but I'm not sure) and then you can reaload the both or operate your DOS with native HDA programs or whatever.
May the DOS be with you!