unfortunately, you won't be able to avoid disassembling the firmware... i would suspect that rather big chunks of code are identical, tho. so, when you create a new /sub/100c directory by copying the 100d, i would do 4 things if i was you:
a) open boot.c and IDA; check the canon_* variables, make sure the assembly code matches the disassembly.
b) open lib.c: check everything there; i highly suspect you can ignore the hook_raw_* functions, as those are the ones i found to be identical to the ixus970... probability is quite high its similar in 100d, too.
c) open stubs_entry and stubs_entry2: well, eventually, youll have to check all of them (stubs_entry is auto-generated, so dont change it), and probably correct things that were not found automatically. i found that sigfind did a good job.
d) open stubs_min: check phsw_* addresses, they're easy to find in IDA.
eventually, of course, youll have to check all of them... but to your port to boot, it should be enough. you can safely ignore movie_rec.c (doesnt do anything) and for just getting stuff to boot probably also capt_seq.c.
also, beware that the ixus90 needs an encoded diskboot.bin, so you might wanna enable OPT_FI2 in the makefile when building. you'll need to retrieve keys and place them correctly - see other threads in here.
all of this is actually not that hard, as a lot of work has been done by brake already. just open the 100c IDA and code, and cross reference everything if you get lost to make your conclusions about v100d. also, since the 90 port hasnt very good hints as to what was found where, id recommend you to also check other ports. you might try my port of the 970, as it seems to be _very_ similar to the 90, and i noted the locations of all the stuff i found... that might help you get there faster.
good luck!
EDIT: fixed a lil mistake in a)