Line 4: | Line 4: | ||
==Universal dumper== |
==Universal dumper== |
||
VxWorks and dryos compatible dumper. Log file records status, start and OS. Shows how to safely call event procs that might not be registered. If this doesn't work on your camera, you can try the original. |
VxWorks and dryos compatible dumper. Log file records status, start and OS. Shows how to safely call event procs that might not be registered. If this doesn't work on your camera, you can try the original. |
||
+ | |||
− | '''note''' This script attempts to display status messages on the screen, however, they may not be visible depending on the colors used by the camera and the image displayed when the camera is run. The status messages are also logged to CBDUMPER.LOG in the root directory of the SD card. After running the script, inspect the root directory for CBDUMPER.LOG and PRIMARY.BIN. Adding LCDMsg_ChangeColor(a ,6) on the line below LCDMsg_SetStr(lcdmsg,msg) in the private sub PutMsg(msg) makes visible the status message on the screen for the [[S95]]. (from Hello World script info) |
+ | '''note''' This script attempts to display status messages on the screen, however, they may not be visible depending on the colors used by the camera and the image displayed when the camera is run. The status messages are also logged to CBDUMPER.LOG in the root directory of the SD card. After running the script, inspect the root directory for CBDUMPER.LOG and PRIMARY.BIN. Adding LCDMsg_ChangeColor(a ,6) on the line below LCDMsg_SetStr(lcdmsg,msg) in the private sub PutMsg(msg) makes visible the status message on the screen (in orange) for the [[S95]]. (from Hello World script info) |
Revision as of 21:44, 12 June 2011
Note : read this first : Canon_Basic Card_Setup
Universal dumper
VxWorks and dryos compatible dumper. Log file records status, start and OS. Shows how to safely call event procs that might not be registered. If this doesn't work on your camera, you can try the original.
note This script attempts to display status messages on the screen, however, they may not be visible depending on the colors used by the camera and the image displayed when the camera is run. The status messages are also logged to CBDUMPER.LOG in the root directory of the SD card. After running the script, inspect the root directory for CBDUMPER.LOG and PRIMARY.BIN. Adding LCDMsg_ChangeColor(a ,6) on the line below LCDMsg_SetStr(lcdmsg,msg) in the private sub PutMsg(msg) makes visible the status message on the screen (in orange) for the S95. (from Hello World script info)
' dump ROM to A/PRIMARY.BIN
' log to A/CBDUMPER.LOG
DIM startaddr=0
DIM os="unk"
DIM lcdmsg=0
DIM msgstr=0
' detect start address and OS
' order must be from highest to lowest, since accessing outside of ROM may trigger an exception
private sub GetStart()
if memcmp(0xFFC00004,"gaonisoy",8) = 0 then
startaddr = 0xFFC00000
os = "dry"
exit sub
end if
if memcmp(0xFFC00008,"Copyrigh",8) = 0 then
startaddr = 0xFFC00000
os = "vx"
exit sub
end if
if memcmp(0xFF810004,"gaonisoy",8) = 0 then
startaddr = 0xFF810000
os = "dry"
exit sub
end if
if memcmp(0xFF810008,"Copyrigh",8) = 0 then
startaddr = 0xFF810000
os = "vx"
exit sub
end if
if memcmp(0xFF000004,"gaonisoy",8) = 0 then
startaddr = 0xFF000000
os = "dry"
exit sub
end if
end sub
private sub RegisterProcs()
' Newest cams (Dryos rel 43 and later) only have System.Create()
' on older dryos cams SystemEventInit is an alias for System.Create()
' ExecuteEventProcedure does is not registered by default on vx,
' but calling an unregistered is not fatal
if System.Create() = -1 then
SystemEventInit()
end if
if ExecuteEventProcedure("UI_RegistDebugEventProc") = -1 then
ExecuteEventProcedure("UI.CreatePublic")
end if
end sub
private sub InitMsg()
lcdmsg = ExecuteEventProcedure("LCDMsg_Create")
msgstr = AllocateMemory(80)
' truncate log
msgfile = Fopen_Fut("A/CBDUMPER.LOG","w")
if msgfile <> 0 then
Fclose_Fut(msgfile)
end if
end sub
private sub PutMsg(msg)
if lcdmsg >= 0 then
LCDMsg_SetStr(lcdmsg,msg)
end if
msgfile = Fopen_Fut("A/CBDUMPER.LOG","a")
if msgfile <> 0 then
Fwrite_Fut(msg,strlen(msg),1,msgfile)
Fwrite_Fut("\n",1,1,msgfile)
Fclose_Fut(msgfile)
end if
end sub
private sub Initialize()
RegisterProcs()
InitMsg()
PutMsg("Started")
GetStart()
if startaddr <> 0 then
sprintf(msgstr,"%0X %s",startaddr,os)
PutMsg(msgstr)
romsize = 0xFFFFFFFC - startaddr
dumpfile = Fopen_Fut("A/PRIMARY.BIN","w")
if dumpfile <> 0 then
Fwrite_Fut(startaddr,romsize,1,dumpfile)
Fclose_Fut(dumpfile)
Wait(500)
PutMsg("done")
else
PutMsg("file error")
end if
else
PutMsg("not found!")
end if
FreeMemory(msgstr)
end sub
Original simple dumper
dim f,a,startadr=0,romsize
private sub Initialize()
UI.CreatePublic()
a=LCDMsg_Create()
LCDMsg_SetStr(a,"Running")
System.Create()
if memcmp(0xFFC00004,"gaonisoy",8) = 0 then
startadr = 0xFFC00000
LCDMsg_SetStr(a,"FFC00000")
else
if memcmp(0xFF810004,"gaonisoy",8) = 0 then
startadr = 0xFF810000
LCDMsg_SetStr(a,"FF810000")
else
LCDMsg_SetStr(a,"start not found!")
Wait(1000)
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)
LCDMsg_SetStr(a,"done")
end if
end sub