DragonMinded
Professional
Irrelevant to this thread but I figured that it might be of interest to other net boot tool authors like @chunksin and @LazerFlux and I don't know where else to post it.
I dug into both transfergame.exe and the net dimm 3.17 firmware over the weekend and documented the protocol a lot better, as well as implemented a few info retrieving functions. Namely, you can query a running net dimm and it will tell you the CRC of the current game, whether it is checking that CRC right now (showing the CRC check progress screen), if it thinks the CRC is good (should be running or booting the game) or bad (should be on the "NOW LOADING" screen), the firmware revision of the net dimm and the size of the net dimm in MB (auto-detect net dimm including memory size is possible). I use this information to figure out if a cabinet that was just booted is actually running the game I want to send it or if I have to send again and if I need to send again what part of the process is it in. Basically you can synchronize your own state with the state of the net dimm and it even works when running games that refuse to reboot automatically such as Ikaruga. I use this to allow seamless rebooting of my net dimm server without it thinking it needs to reboot currently-running setups to resend games to them. There's also a lot more documentation about how the protocol is actually put together for those who are curious (like I was).
I've been messing with it for a bit, but I haven't yet figured out what makes certain games not accept the reboot hook that the net dimm firmware tries to install when it boots the game. I assume its looking for some sort of vblank handler or something that it can hook with its own check code and some games have different enough code that it can't find a spot to hook into. I am still trying to isolate exactly what it is looking for with the theory that if we know what it wants, we can patch games that don't reboot to make them reboot when sending a new image. The code in the firmware is just too damn convoluted to follow for that function, however. For now, even when you are running a game that needs to be manually power cycled to send a new game, you can still query the running net dimm for info.
The documentation and code in question is here if you want to look: https://github.com/DragonMinded/netboot/blob/trunk/netboot/netboot.py
It gets used to send games like so: https://github.com/DragonMinded/netboot/blob/trunk/scripts/netdimm_send.py and it gets used to display info about the net dimm like so: https://github.com/DragonMinded/netboot/blob/trunk/scripts/netdimm_info.py
I dug into both transfergame.exe and the net dimm 3.17 firmware over the weekend and documented the protocol a lot better, as well as implemented a few info retrieving functions. Namely, you can query a running net dimm and it will tell you the CRC of the current game, whether it is checking that CRC right now (showing the CRC check progress screen), if it thinks the CRC is good (should be running or booting the game) or bad (should be on the "NOW LOADING" screen), the firmware revision of the net dimm and the size of the net dimm in MB (auto-detect net dimm including memory size is possible). I use this information to figure out if a cabinet that was just booted is actually running the game I want to send it or if I have to send again and if I need to send again what part of the process is it in. Basically you can synchronize your own state with the state of the net dimm and it even works when running games that refuse to reboot automatically such as Ikaruga. I use this to allow seamless rebooting of my net dimm server without it thinking it needs to reboot currently-running setups to resend games to them. There's also a lot more documentation about how the protocol is actually put together for those who are curious (like I was).
I've been messing with it for a bit, but I haven't yet figured out what makes certain games not accept the reboot hook that the net dimm firmware tries to install when it boots the game. I assume its looking for some sort of vblank handler or something that it can hook with its own check code and some games have different enough code that it can't find a spot to hook into. I am still trying to isolate exactly what it is looking for with the theory that if we know what it wants, we can patch games that don't reboot to make them reboot when sending a new image. The code in the firmware is just too damn convoluted to follow for that function, however. For now, even when you are running a game that needs to be manually power cycled to send a new game, you can still query the running net dimm for info.
The documentation and code in question is here if you want to look: https://github.com/DragonMinded/netboot/blob/trunk/netboot/netboot.py
It gets used to send games like so: https://github.com/DragonMinded/netboot/blob/trunk/scripts/netdimm_send.py and it gets used to display info about the net dimm like so: https://github.com/DragonMinded/netboot/blob/trunk/scripts/netdimm_info.py