for the record, this Canon BASIC script worked for me, dumping my SD940 fw 1.03c :
dim f,a,startadr=0,romsize
private sub Initialize()
System.Create()
Driver.Create()
UI.CreatePublic()
a=LCDMsg_Create()
LCDMsg_SetStr(a,"SD940 Memory Dump")
LCDMsg_Move(a,100,100)
LCDMsg_ChangeColor(a,5)
b=LCDMsg_Create()
LCDMsg_SetStr(b,"...running")
LCDMsg_Move(b,100,200)
LCDMsg_ChangeColor(b,2)
if memcmp(0xFFC00004,"gaonisoy",8) = 0 then
startadr = 0xFFC00000
LCDMsg_SetStr(b,"FFC00000")
else
if memcmp(0xFF810004,"gaonisoy",8) = 0 then
startadr = 0xFF810000
LCDMsg_SetStr(b,"FF810000")
else
LCDMsg_SetStr(b,"start not found!")
Wait(5000)
end if
end if
if startadr <> 0 then
romsize = 0xFFFFFFFC - startadr
f=Fopen_Fut("A/PRIMARY.BIN","w")
Fwrite_Fut(startadr,romsize,1,f)
Fclose_Fut(f)
end if
c=LCDMsg_Create()
LCDMsg_SetStr(c,"done")
LCDMsg_Move(c,100,400)
LCDMsg_ChangeColor(c,2)
end sub
private sub terminate( )
' Ending code
end sub