An additional way of running binary code on the camera is by using the AdditionAgentRAM event procedure (it is registered by System.Create) from Canon Basic. This expects a file name as first and a string(?) as second argument. It loads the file at a fixed memory address (which can be guessed easily by looking at the eventproc's code) then starts the loaded code as a task with the name "AdditionAgent". Note that this task is created with only 512 bytes of stack space. The file can be either encoded with "dancing bits" or a plain binary. It's treated as unencoded if its first byte is not 0. The maximum file size is 0x22000. (all this is based on the sx280 disassembly, it's probably still valid for the s120)
If I'm not mistaken, LEDs are now using a new GPIO range over 0xd20b0000, and need to be switched differently (details can be found in the LEDCon task).