Since the location of WriteSDCard seems a little difficult, I approached the idea of locating the function that initializes a pointer to Read/WriteSDCard and use the location that is set there.
This seems promising. The code is identical on all DryOS-cams I checked. Attached is a file of this function in A720, S5 (1.01A + B), G9 and SX100. Bad news is that the function exists, but looks differently on VxWorks (just checked A710, though).
A code example (A720) for clarification:
ROM:FFC3EC9C sub_FFC3EC9C ; CODE XREF: sub_FFC3F0CC+Cp
ROM:FFC3EC9C LDR R1, =0x2BA0
ROM:FFC3ECA0 LDR R1, [R1,#0xC]
ROM:FFC3ECA4 CMP R1, #0
ROM:FFC3ECA8 CMPEQ R0, #0
ROM:FFC3ECAC BXNE LR
ROM:FFC3ECB0 MOV R1, #0
ROM:FFC3ECB4 LDR R0, =0x11800
ROM:FFC3ECB8 STR R1, [R0,#0x34]
ROM:FFC3ECBC STR R1, [R0,#0x38]
ROM:FFC3ECC0 MOV R1, #3
ROM:FFC3ECC4 STR R1, [R0,#0x3C]
ROM:FFC3ECC8 LDR R1, =ReadSDCard
ROM:FFC3ECCC STR R1, [R0,#0x4C]
ROM:FFC3ECD0 LDR R1, =WriteSDCard
ROM:FFC3ECD4 STR R1, [R0,#0x50]
ROM:FFC3ECD8 BX LR
If we locate this piece of code, we do:
* cmd_LDR = offset_func + (13*4) ==> "LDR R1, =WriteSDCard"
* ptr_WriteSDCard = offset_func + (13*4) + (cmd_LDR & 0xff) + 8
* WriteSDCard = *ptr_WriteSDCard
Explanation:
* offset_func is the starting location of the above function (which needs a name, btw. Any suggestions?)
* 13 commands later is the pointer to WriteSDCard, each command is 4 bytes long
* The pointer is not direct but points to a nearby memory location, offset is one byte unsigned.
* Add this amount + 8 (why 8?) to the location of the LDR command and you get the address that holds the actual functions location.
* read the actual address and use it as function pointer.
Right now I'm to tired to write (functioning) code. So if anybody wants to give it a shot...
Cheers.