Index: /branches/release-1_0/platform/a490/sub/100d/capt_seq.c
===================================================================
--- /branches/release-1_0/platform/a490/sub/100d/capt_seq.c	(revision 1522)
+++ /branches/release-1_0/platform/a490/sub/100d/capt_seq.c	(revision 1523)
@@ -9,19 +9,4 @@
 
 // ROM:FFC5914C task_CaptSeqTask()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 
 void __attribute__((naked,noinline)) capt_seq_task() {
@@ -228,7 +213,5 @@
 }
 
-
 //** was sub_FFC5950C_my in f, now @ 0xFFC594BC
-
 void __attribute__((naked,noinline)) sub_FFC594BC_my(){ //
 	asm volatile(
@@ -245,5 +228,5 @@
 			"CMP	R0, #0 \n"                           
 			"MOV	R0, R4 \n"                           
-			"BEQ	loc_FFC594BC \n"                     
+			"BEQ	loc_FFC5950C \n"                     
 			"BL	sub_FFD0F9A4 \n"                      
 			"TST	R0, #1 \n"                           
@@ -253,5 +236,5 @@
 			"BNE	sub_FFC5785C \n"                     
 			"B	loc_FFC59510 \n"                       
-"loc_FFC594BC:\n"
+"loc_FFC5950C:\n"
 			"BL	sub_FFD0F968 \n"                      
 "loc_FFC59510:\n"
@@ -346,5 +329,5 @@
 			"BL      wait_until_remote_button_is_released\n"     // +
 			"BL      capt_seq_hook_set_nr\n"                     // +
-			"B       sub_FFD10E48\n"                             // continue function in firmware			                   
+			"B       sub_FFD10D98\n"                             // continue function in firmware			                   
 	);
 }
Index: /branches/release-1_0/platform/a490/sub/100d/stubs_entry.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100d/stubs_entry.S	(revision 1522)
+++ /branches/release-1_0/platform/a490/sub/100d/stubs_entry.S	(revision 1523)
@@ -15,16 +15,6 @@
 // Stubs below should be checked. Stub not matched 100%, or difference found to current 'stubs_entry_2.S'
 //    Name                                     Address      Rule  %  Comp to stubs_entry_2.S
-//NSTUB(EnterToCompensationEVF                ,0xffc27608) //104        *** != 0xffc27604
-//NSTUB(GetBatteryTemperature                 ,0xffc45624) //102        *** != 0xffc00b20
-//NSTUB(GetDrive_FreeClusters                 ,0xffc23810) //  3        *** != 0xffc5131c
-// ALT: NSTUB(GetDrive_FreeClusters, 0xffc5131c) // 4 9/0
-//NSTUB(Open                                  ,0xffc260a0) //101        *** != 0xffc4e5d8
-//NSTUB(SetScriptMode                         ,0xffc6caf4) //101        *** != 0xffc00f70
-//NSTUB(TurnOffBackLight                      ,0xffc77d38) //104        *** != 0xffc77f4c
 //NSTUB(kbd_pwr_off                           ,0xffc435ec) //  2 64%    *** != 0xffc00b20
 // ERROR: kbd_pwr_on is not found.                         //--- ---    *** != 0xffc00b20
-//NSTUB(kbd_read_keys_r2                      ,0xffc42fb8) //109        *** != 0xffc42fb0
-//NSTUB(rename                                ,0xffc259f0) //  4        *** != 0xffc261e8
-//NSTUB(write                                 ,0xffc2619c) //101        *** != 0xffc0b368
 
 // Check of modemap from 'platform/CAMERA/shooting.c':
@@ -33,22 +23,22 @@
 
 // Values below can be overridden in 'stubs_min.S':
-//DEF(physw_status                            ,0x0002e754) // Found @0xffc23b2c,          stubs_min = 0x0002e754 (0x2E754)
-//DEF(physw_run                               ,0x00001bf0) // Found @0xffc23790,          stubs_min = 0x00001bf0 (0x1BE4+0x0C)
-//DEF(levent_table                            ,0xffe9fe64) // Found @0xffe9fe64, ** != ** stubs_min = 0xffe9fe78 (0xFFE9FE78)
-//DEF(FlashParamsTable                        ,0xffeca70c) // Found @0xffeca70c, ** != ** stubs_min = 0xffeca71c (0xFFECA71C)
-//DEF(movie_status                            ,0x00005470) // Found @0xffd0c5f4,          stubs_min = 0x00005470 (0x5438+0x38)
-//DEF(full_screen_refresh                     ,0x000072e8) // Found @0xffd79414,          stubs_min = 0x000072e8 (0x72E8)
-//DEF(canon_menu_active                       ,0x00002a3c) // Found @0xffc69fd8,          stubs_min = 0x00002a3c (0x2A38+4)
-//DEF(canon_shoot_menu_active                 ,0x00006571) // Found @0xffd3f9c0,          stubs_min = 0x00006571 (0x6570+1)
-//DEF(playrec_mode                            ,0x00002798) // Found @0xffc5d7d8,          stubs_min = 0x00002798 (0x2794+0x4)
-//DEF(zoom_status                             ,0x000095a8) // Found @0xffe0ab68, ** != ** stubs_min = 0x00009588 (0x9588)
-//DEF(some_flag_for_af_scan                   ,0x00005818) // Found @0xffd0ef60,          stubs_min = 0x00005818 (0x5818)
+DEF(physw_status                            ,0x0002e754) // Found @0xffc23b2c
+DEF(physw_run                               ,0x00001bf0) // Found @0xffc23790
+DEF(levent_table                            ,0xffe9fe64) // Found @0xffe9fe64
+DEF(FlashParamsTable                        ,0xffeca70c) // Found @0xffeca70c
+DEF(movie_status                            ,0x00005470) // Found @0xffd0c5f4
+DEF(full_screen_refresh                     ,0x000072e8) // Found @0xffd79414
+DEF(canon_menu_active                       ,0x00002a3c) // Found @0xffc69fd8
+DEF(canon_shoot_menu_active                 ,0x00006571) // Found @0xffd3f9c0
+DEF(playrec_mode                            ,0x00002798) // Found @0xffc5d7d8
+DEF(zoom_status                             ,0x000095a8) // Found @0xffe0ab68
+DEF(some_flag_for_af_scan                   ,0x00005818) // Found @0xffd0ef60
 // focus_len_table contains zoom focus lengths for use in 'get_focal_length' (main.c).
 // each entry contains 3 int value(s), the first is the zoom focus length.
 // there are 7 entries in the table - set NUM_FL to 7
 DEF(focus_len_table                         ,0xfffe2990) // Found @0xfffe2990
-//DEF(zoom_busy                               ,0x000053f0) // Found @0xffd09850,          stubs_min = 0x000053f0 (0x53DC+0x14)
-//DEF(focus_busy                              ,0x00005300) // Found @0xffd06e88,          stubs_min = 0x00005300 (0x52F8+8)
-//DEF(recreview_hold                          ,0x0000302c) // Found @0xffc7578c, ** != ** stubs_min = 0x000062b4 (0x61E0+0xD4)
+DEF(zoom_busy                               ,0x000053f0) // Found @0xffd09850
+DEF(focus_busy                              ,0x00005300) // Found @0xffd06e88
+DEF(recreview_hold                          ,0x0000302c) // Found @0xffc7578c
 
 // Values below go in 'lib.c':
@@ -100,10 +90,11 @@
 NSTUB(DebugAssert                             ,0xffc0f680) //111
 NSTUB(DeleteFile_Fut                          ,0xffc25a84) //112
-//NSTUB(DoAFLock                              ,0xffc27558) //102            == 0xffc27558
+NSTUB(DoAFLock                                ,0xffc27558) //102
+NSTUB(EnterToCompensationEVF                  ,0xffc27608) //104
 NSTUB(ExecuteEventProcedure                   ,0xffc65748) //  1
-//NSTUB(ExitFromCompensationEVF               ,0xffc2764c) //104            == 0xffc2764c
+NSTUB(ExitFromCompensationEVF                 ,0xffc2764c) //104
 NSTUB(ExitTask                                ,0xffc0f438) //101
-//NSTUB(ExpCtrlTool_StartContiAE              ,0xffc34ce8) //104            == 0xffc34ce8
-//NSTUB(ExpCtrlTool_StopContiAE               ,0xffc34dc0) //104            == 0xffc34dc0
+NSTUB(ExpCtrlTool_StartContiAE                ,0xffc34ce8) //104
+NSTUB(ExpCtrlTool_StopContiAE                 ,0xffc34dc0) //104
 NSTUB(Fclose_Fut                              ,0xffc25c00) //101
 NSTUB(Feof_Fut                                ,0xffc25dec) //  1
@@ -116,25 +107,28 @@
 NSTUB(Fseek_Fut                               ,0xffc25da0) //101
 NSTUB(Fwrite_Fut                              ,0xffc25d00) //101
-//NSTUB(GetCCDTemperature                     ,0xffc455b0) //102            == 0xffc455b0
+NSTUB(GetBatteryTemperature                   ,0xffc45624) //102
+NSTUB(GetCCDTemperature                       ,0xffc455b0) //102
 NSTUB(GetCurrentAvValue                       ,0xffd08708) //102
 NSTUB(GetDrive_ClusterSize                    ,0xffc512bc) //  4
+NSTUB(GetDrive_FreeClusters                   ,0xffc23810) //  3
+// ALT: NSTUB(GetDrive_FreeClusters, 0xffc5131c) // 4 9/0
 NSTUB(GetDrive_TotalClusters                  ,0xffc512f0) //  3
 NSTUB(GetFocusLensSubjectDistance             ,0xffd07a00) //102
 NSTUB(GetFocusLensSubjectDistanceFromLens     ,0xffd07e58) //  3
-//NSTUB(GetImageFolder                        ,0xffcf1008) //106            == 0xffcf1008
+NSTUB(GetImageFolder                          ,0xffcf1008) //106
 NSTUB(GetKbdState                             ,0xffc435d4) //109
 NSTUB(GetMemInfo                              ,0xffc0a7f8) //  3
-//NSTUB(GetOpticalTemperature                 ,0xffc4569c) //102            == 0xffc4569c
+NSTUB(GetOpticalTemperature                   ,0xffc4569c) //102
 NSTUB(GetParameterData                        ,0xffd2eff4) //101
 NSTUB(GetPropertyCase                         ,0xffc69454) //102
 NSTUB(GetSystemTime                           ,0xffdfa400) //101
 NSTUB(GetZoomLensCurrentPoint                 ,0xffd09bc8) //102
-//NSTUB(GetZoomLensCurrentPosition            ,0xffdf2444) //102            == 0xffdf2444
+NSTUB(GetZoomLensCurrentPosition              ,0xffdf2444) //102
 NSTUB(GiveSemaphore                           ,0xffc0f104) //112
 NSTUB(IsStrobeChargeCompleted                 ,0xffca6fa0) //102
-//NSTUB(LEDDrive                              ,0xffc42bc8) //103            == 0xffc42bc8
+NSTUB(LEDDrive                                ,0xffc42bc8) //103
 NSTUB(LocalTime                               ,0xffc63458) //  1
 NSTUB(LockMainPower                           ,0xffc6cd2c) //103
-//NSTUB(Lseek                                 ,0xffc26228) //101            == 0xffc26228
+NSTUB(Lseek                                   ,0xffc26228) //101
 NSTUB(MakeDirectory_Fut                       ,0xffc25af8) //  1
 NSTUB(MoveFocusLensToDistance                 ,0xffe50650) //102
@@ -142,39 +136,42 @@
 NSTUB(MoveZoomLensWithPoint                   ,0xffdf8074) //102
 NSTUB(NewTaskShell                            ,0xffc68e60) //103
+NSTUB(Open                                    ,0xffc260a0) //101
 NSTUB(PB2Rec                                  ,0xffc6f998) //104
 NSTUB(PT_MoveDigitalZoomToWide                ,0xffc57098) //102
 NSTUB(PT_MoveOpticalZoomAt                    ,0xffc57070) //102
-//NSTUB(PT_PlaySound                          ,0xffc5f2d8) //  7            == 0xffc5f2d8
+NSTUB(PT_PlaySound                            ,0xffc5f2d8) //  7
 NSTUB(PostLogicalEventForNotPowerType         ,0xffc6c55c) //103
 NSTUB(PostLogicalEventToUI                    ,0xffc6c5a8) //103
-//NSTUB(PutInNdFilter                         ,0xffdf7ed8) //102            == 0xffdf7ed8
-//NSTUB(PutOutNdFilter                        ,0xffdf7efc) //102            == 0xffdf7efc
+NSTUB(PutInNdFilter                           ,0xffdf7ed8) //102
+NSTUB(PutOutNdFilter                          ,0xffdf7efc) //102
 NSTUB(Read                                    ,0xffc0b308) //101
-//NSTUB(ReadFastDir                           ,0xffde8e40) //  4            == 0xffde8e40
+NSTUB(ReadFastDir                             ,0xffde8e40) //  4
 NSTUB(Rec2PB                                  ,0xffc6f9d8) //104
-//NSTUB(RefreshPhysicalScreen                 ,0xffd79df0) //104            == 0xffd79df0
-//NSTUB(Remove                                ,0xffc26140) //  4            == 0xffc26140
-//NSTUB(RenameFile_Fut                        ,0xffc259f0) //  4            == 0xffc259f0
+NSTUB(RefreshPhysicalScreen                   ,0xffd79df0) //104
+NSTUB(Remove                                  ,0xffc26140) //  4
+NSTUB(RenameFile_Fut                          ,0xffc259f0) //  4
 NSTUB(Restart                                 ,0xffc2aab4) //106
 NSTUB(ScreenLock                              ,0xffd7af9c) //  3
 NSTUB(ScreenUnlock                            ,0xffd7afe0) //  7
-//NSTUB(SetAE_ShutterSpeed                    ,0xffe52de0) //102            == 0xffe52de0
+NSTUB(SetAE_ShutterSpeed                      ,0xffe52de0) //102
 NSTUB(SetAutoShutdownTime                     ,0xffc6cda0) //103
 NSTUB(SetCurrentCaptureModeType               ,0xffc730bc) //101
-//NSTUB(SetFileTimeStamp                      ,0xffc263a8) //  4            == 0xffc263a8
+NSTUB(SetFileTimeStamp                        ,0xffc263a8) //  4
 NSTUB(SetLogicalEventActive                   ,0xffc6caa4) //101
 NSTUB(SetParameterData                        ,0xffd2ef64) //101
 NSTUB(SetPropertyCase                         ,0xffc69324) //102
+NSTUB(SetScriptMode                           ,0xffc6caf4) //101
 NSTUB(SleepTask                               ,0xffc29160) //101
 NSTUB(TakeSemaphore                           ,0xffc0f034) //101
-//NSTUB(TurnOnBackLight                       ,0xffc77d20) //104            == 0xffc77d20
-//NSTUB(UIFS_WriteFirmInfoToFile              ,0xffd1f768) //101            == 0xffd1f768
-//NSTUB(UnlockAF                              ,0xffc27590) //102            == 0xffc27590
+NSTUB(TurnOffBackLight                        ,0xffc77d38) //104
+NSTUB(TurnOnBackLight                         ,0xffc77d20) //104
+NSTUB(UIFS_WriteFirmInfoToFile                ,0xffd1f768) //101
+NSTUB(UnlockAF                                ,0xffc27590) //102
 NSTUB(UnlockMainPower                         ,0xffc6cc80) //103
-//NSTUB(UnsetZoomForMovie                     ,0xffd354b4) //104            == 0xffd354b4
-//NSTUB(UpdateMBROnFlash                      ,0xffc5113c) //105            == 0xffc5113c
+NSTUB(UnsetZoomForMovie                       ,0xffd354b4) //104
+NSTUB(UpdateMBROnFlash                        ,0xffc5113c) //105
 NSTUB(VbattGet                                ,0xffc22be4) //103
 NSTUB(Write                                   ,0xffc2619c) //101
-//NSTUB(WriteSDCard                           ,0xffcfc6fc) //108            == 0xffcfc6fc
+NSTUB(WriteSDCard                             ,0xffcfc6fc) //108
 NSTUB(_log                                    ,0xffe7f4b8) //111
 NSTUB(_log10                                  ,0xffe7e3fc) //112
@@ -182,7 +179,7 @@
 NSTUB(_sqrt                                   ,0xffe80820) //  1
 NSTUB(add_ptp_handler                         ,0xffdbd2d4) //  3
-//NSTUB(apex2us                               ,0xffd7c2ec) //  4            == 0xffd7c2ec
+NSTUB(apex2us                                 ,0xffd7c2ec) //  4
 NSTUB(close                                   ,0xffc0b120) //  1
-//NSTUB(closedir                              ,0xffde8c9c) //  4            == 0xffde8c9c
+NSTUB(closedir                                ,0xffde8c9c) //  4
 NSTUB(err_init_task                           ,0xffc05f50) //  4
 NSTUB(exmem_alloc                             ,0xffc640f8) //103
@@ -192,5 +189,6 @@
 NSTUB(kbd_p2_f                                ,0xffc2345c) //109
 NSTUB(kbd_read_keys                           ,0xffc23b2c) //109
-//NSTUB(lseek                                 ,0xffc26228) //101            == 0xffc26228
+NSTUB(kbd_read_keys_r2                        ,0xffc42fb8) //109
+NSTUB(lseek                                   ,0xffc26228) //101
 NSTUB(malloc                                  ,0xffc04104) //112
 NSTUB(memcmp                                  ,0xffc11318) //101
@@ -201,14 +199,15 @@
 NSTUB(open                                    ,0xffc0b070) //  1
 NSTUB(opendir                                 ,0xffde8cec) //  4
-//NSTUB(openfastdir                           ,0xffde8cec) //  4            == 0xffde8cec
-//NSTUB(qsort                                 ,0xffe39368) //  4            == 0xffe39368
+NSTUB(openfastdir                             ,0xffde8cec) //  4
+NSTUB(qsort                                   ,0xffe39368) //  4
 NSTUB(rand                                    ,0xffc11420) //  1
 NSTUB(read                                    ,0xffc0b308) //101
-//NSTUB(readfastdir                           ,0xffde8e40) //  4            == 0xffde8e40
+NSTUB(readfastdir                             ,0xffde8e40) //  4
 NSTUB(reboot_fw_update                        ,0xffdea6b4) //  1
+NSTUB(rename                                  ,0xffc259f0) //  4
 NSTUB(set_control_event                       ,0xffc6c7c4) //111
 NSTUB(srand                                   ,0xffc11414) //  1
 NSTUB(stat                                    ,0xffc26270) //  3
-//NSTUB(strcat                                ,0xffc7c30c) //  1            == 0xffc7c30c
+NSTUB(strcat                                  ,0xffc7c30c) //  1
 NSTUB(strchr                                  ,0xffc03fe8) //  1
 NSTUB(strcmp                                  ,0xffc112d4) //101
@@ -218,5 +217,5 @@
 NSTUB(strncmp                                 ,0xffc03f9c) //  1
 NSTUB(strncpy                                 ,0xffc03f60) //  1
-//NSTUB(strrchr                               ,0xffc0400c) //  1            == 0xffc0400c
+NSTUB(strrchr                                 ,0xffc0400c) //  1
 NSTUB(strtol                                  ,0xffc2eb44) //101
 NSTUB(strtolx                                 ,0xffc2e948) //109
@@ -228,2 +227,3 @@
 NSTUB(time                                    ,0xffc6330c) //  1
 NSTUB(vsprintf                                ,0xffc11280) //  4
+NSTUB(write                                   ,0xffc2619c) //101
Index: /branches/release-1_0/platform/a490/sub/100d/stubs_entry_2.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100d/stubs_entry_2.S	(revision 1522)
+++ /branches/release-1_0/platform/a490/sub/100d/stubs_entry_2.S	(revision 1523)
@@ -2,55 +2,10 @@
 #include "stubs_asm.h"
 
-
-NHSTUB(EnterToCompensationEVF, 0xffc27604)   
-NHSTUB(ExitFromCompensationEVF, 0xffc2764c)   
-NHSTUB(GetCCDTemperature, 0xffc455b0)   
-NHSTUB(GetOpticalTemperature, 0xffc4569c)   
-NHSTUB(GetDrive_FreeClusters, 0xffc5131c)   
-NHSTUB(PT_PlaySound, 0xffc5f2d8)   
-NHSTUB(ReadFastDir, 0xffde8e40)   
-NHSTUB(RefreshPhysicalScreen, 0xffd79df0)   
-NHSTUB(Remove, 0xffc26140)   
-NHSTUB(Lseek, 0xffc26228)   
-NHSTUB(openfastdir, 0xffde8cec)   
-NHSTUB(qsort, 0xffe39368)   
-NHSTUB(readfastdir, 0xffde8e40)   
-NHSTUB(rename, 0xffc261e8)   
-NHSTUB(lseek, 0xffc26228)   
-NHSTUB(GetZoomLensCurrentPosition, 0xffdf2444)   
-NHSTUB(UpdateMBROnFlash, 0xffc5113c)   
-NHSTUB(closedir, 0xffde8c9c)   
-NHSTUB(closefastdir, 0xffde8c9c)   
-NHSTUB(UIFS_WriteFirmInfoToFile, 0xffd1f768)   
-NHSTUB(strcat, 0xffc7c30c)   
-NHSTUB(RenameFile_Fut, 0xffc259f0)   
-NHSTUB(SetFileTimeStamp, 0xffc263a8)   
-NHSTUB(TurnOnBackLight, 0xffc77d20)   
-NHSTUB(TurnOffBackLight, 0xffc77f4c)   
-NHSTUB(kbd_read_keys_r2, 0xffc42fb0)   
-NHSTUB(strrchr, 0xffc0400c)   
-NHSTUB(DoAFLock, 0xffc27558)   
-NHSTUB(UnlockAF, 0xffc27590)   
 NHSTUB(MakeAFScan, 0xffd0f0c8)   
-NHSTUB(ExpCtrlTool_StartContiAE, 0xffc34ce8)   
-NHSTUB(ExpCtrlTool_StopContiAE, 0xffc34dc0)   
-NHSTUB(apex2us, 0xffd7c2ec)   
-NHSTUB(SetScriptMode, 0xffc00f70)   
-NHSTUB(platformsub_kbd_fetch_data, 0xffc435d4)   
-NHSTUB(SetAE_ShutterSpeed, 0xffe52de0)   
-NHSTUB(UnsetZoomForMovie, 0xffd354b4)   
-NHSTUB(LEDDrive, 0xffc42bc8)   
 NHSTUB(UnlockAndRefresh, 0xffd7afe0)   
 NHSTUB(LockAndRefresh, 0xffd7af9c)   
-NHSTUB(GetBatteryTemperature, 0xffc00b20)   
 NHSTUB(TurnOffMic, 0xffc43c30)   
 NHSTUB(TurnOnMic, 0xffc43c5c)   
-NHSTUB(PutInNdFilter, 0xffdf7ed8)   
-NHSTUB(PutOutNdFilter, 0xffdf7efc)   
 NHSTUB(SetZoomActuatorSpeedPercent, 0xffc00b20)   
-NHSTUB(WriteSDCard, 0xffcfc6fc)   // Best match: 94%
-NHSTUB(GetImageFolder, 0xffcf1008)   
 NHSTUB(kbd_pwr_on, 0xffc00b20)   
 NHSTUB(kbd_pwr_off, 0xffc00b20)   
-NHSTUB(Open, 0xffc4e5d8)   
-NHSTUB(write, 0xffc0b368)   
Index: /branches/release-1_0/platform/a490/sub/100d/boot.c
===================================================================
--- /branches/release-1_0/platform/a490/sub/100d/boot.c	(revision 1522)
+++ /branches/release-1_0/platform/a490/sub/100d/boot.c	(revision 1523)
@@ -8,13 +8,18 @@
 const char * const new_sa = &_end;
 
-void taskHook(int *p){
-
-	p-=17;
-
-	if(p[0]==0xFFC239C8) p[0]=(int)mykbd_task;
-	if(p[0]==0xFFC5919C) p[0]=(int)capt_seq_task;
-	if(p[0]==0xFFC704B4) p[0]=(int)init_file_modules_task;
-	if(p[0]==0xFFD0C8F8) p[0]=(int)movie_record_task;
-	if(p[0]==0xFFC91388) p[0]=(int)exp_drv_task;
+extern void task_CaptSeq();
+extern void task_InitFileModules();
+extern void task_MovieRecord();
+extern void task_ExpDrv();
+
+void taskHook(context_t **context)
+{
+	task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context));
+
+	// Replace firmware task addresses with ours
+	if(tcb->entry == (void*)task_CaptSeq)			tcb->entry = (void*)capt_seq_task; 
+	if(tcb->entry == (void*)task_InitFileModules)	tcb->entry = (void*)init_file_modules_task;
+	if(tcb->entry == (void*)task_MovieRecord)		tcb->entry = (void*)movie_record_task;
+	if(tcb->entry == (void*)task_ExpDrv)			tcb->entry = (void*)exp_drv_task;
 }
 
@@ -192,27 +197,5 @@
 			"LDR     R0, =0x19B\n"
 			"LDR     R1, =sub_FFC05E5C_my\n"	//--------->
-			"STR     R0, [SP,#0x20]\n"
-			"MOV     R0, #0x96\n"
-			"STR     R0, [SP,#0x24]\n"
-			"MOV     R0, #0x78\n"
-			"STR     R0, [SP,#0x28]\n"
-			"MOV     R0, #0x64\n"
-			"STR     R0, [SP,#0x2C]\n"
-			"MOV     R0, #0\n"
-			"STR     R0, [SP,#0x30]\n"
-			"STR     R0, [SP,#0x34]\n"
-			"MOV     R0, #0x10\n"
-			"STR     R0, [SP,#0x5C]\n"
-			"MOV     R0, #0x800\n"
-			"STR     R0, [SP,#0x60]\n"
-			"MOV     R0, #0xA0\n"
-			"STR     R0, [SP,#0x64]\n"
-			"MOV     R0, #0x280\n"
-			"STR     R0, [SP,#0x68]\n"
-			"MOV     R0, SP\n"
-			"MOV     R2, #0\n"
-			"BL      sub_FFC03408\n"
-			"ADD     SP, SP, #0x74\n"
-			"LDR     PC, [SP],#4\n"
+            "B       sub_FFC011F0\n"            // continue in firmware
 	);
 }
@@ -284,10 +267,5 @@
 			"STR     R3, [SP]\n"
 			"LDR     R3, =task_Startup_my\n"	//-------->
-			"MOV     R2, #0\n"
-			"MOV     R1, #0x19\n"
-			"LDR     R0, =0xFFC106D8\n"
-			"BL      sub_FFC0F1A8\n"
-			"MOV     R0, #0\n"
-			"LDMFD   SP!, {R12,PC}\n"
+            "B       sub_FFC106B8\n"            // continue in firmware
 	);
 }
@@ -309,15 +287,5 @@
 			//  "BL      sub_FFC237C0\n"		// original taskcreate_PhySw
 			"BL      taskcreate_PhySw_my\n"	// + ---------->
-			"BL      sub_FFC26CFC\n"
-			"BL      sub_FFC2AF8C\n"
-			//  "BL      nullsub_173\n"
-			"BL      sub_FFC22D48\n"
-			"BL      sub_FFC2A980\n"		// TaskCreate_bye
-			"BL      sub_FFC23220\n"
-			"BL      sub_FFC22CE8\n"
-			"BL      sub_FFC2B9B8\n"
-			"BL      sub_FFC22CC0\n"
-			"LDMFD   SP!, {R4,LR}\n"
-			"B       sub_FFC06128\n"
+            "B       sub_FFC10628\n"            // continue in firmware
 	);
 }
@@ -330,5 +298,5 @@
 			"LDR     R0, [R4,#0x10]\n"
 			"CMP     R0, #0\n"
-			"BNE     loc_FFC237F4\n"
+			"BNE     sub_FFC237F4\n"
 			"MOV     R3, #0\n"
 			"STR     R3, [SP]\n"
@@ -337,6 +305,4 @@
 			"MOV     R2, #0x2000\n"			// + stack size for new task_PhySw so we don't have to do stack switch
 			"B       sub_FFC237E4\n"    // Continue code
-"loc_FFC237F4:\n"
-			"B       sub_FFC237F4\n"    // Continue code
 	);
 }
Index: /branches/release-1_0/platform/a490/sub/100d/stubs_min.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100d/stubs_min.S	(revision 1522)
+++ /branches/release-1_0/platform/a490/sub/100d/stubs_min.S	(revision 1523)
@@ -1,17 +1,3 @@
 #include "stubs_asm.h"
 
-DEF(physw_status, 0x2E754)							// ok, search for "GpioStatus", 0xFFC23A8C
-DEF(physw_run, 0x1BE4 + 0x0C)						// Ok 0xFFC2378C (0x10???)
-DEF(FlashParamsTable,0xFFECA71C)					// Ok 0xFFE07CAC
-DEF(zoom_busy, 0x53DC + 0x14)           			// Ok Found at FFD09900, "ZoomLensController.c", 0x14 = FFD0993C
-DEF(focus_busy, 0x52F8 + 8)             			// Ok Found at FFD06F38, "FocusLensController.c", 0x08=FFD06F98
-DEF(canon_menu_active, 0x2A38 + 4)					// Ok ROM:FFC6A028 (FFC6A2A4???)
-DEF(canon_shoot_menu_active, 0x6570 + 1)			// Ok Found at FFD3F7E8
-DEF(recreview_hold, 0x61E0 + 0xD4)					// Ok ROM:FFD30D50, 0xd4=FFD30D5C
-DEF(zoom_status, 0x9588)							// Ok Found at FFE0AB5C, "TerminateDeliverToZoomController"
-DEF(movie_status, 0x5438 + 0x38)					// Maybe FFD0C404
 DEF(enabled_refresh_physical_screen, 0x7324+0x20)	// Ok Found at FFD7B254, "ScreenLock"
-DEF(playrec_mode, 0x2794+0x4)						// Ok FFC27AD0 "MenuIn", B FFC5D81C
-DEF(levent_table, 0xFFE9FE78)						// Ok FFD2A990
-DEF(some_flag_for_af_scan, 0x5818)					// Perhaps ok, FFD0F8A8
-DEF(full_screen_refresh, 0x72E8)					// Ok ROM:FFD794A0, called by RefreshPhysicalScreen()
Index: /branches/release-1_0/platform/a490/sub/100d/stubs_auto.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100d/stubs_auto.S	(revision 1522)
+++ /branches/release-1_0/platform/a490/sub/100d/stubs_auto.S	(revision 1523)
@@ -7,17 +7,15 @@
 STUB(FFC00B24)
 STUB(FFC0119C)
+STUB(FFC011F0)
 STUB(FFC01680)
 STUB(FFC01780)
-STUB(FFC03408)
 STUB(FFC03BF4)
 STUB(FFC05A98)
 STUB(FFC05B80)
 STUB(FFC05F50)
-STUB(FFC06128)
 STUB(FFC06278)
 STUB(FFC0A2C8)
 STUB(FFC0A8D0)
 STUB(FFC0F034)
-STUB(FFC0F1A8)
 STUB(FFC0F438)
 STUB(FFC0F480)
@@ -25,8 +23,6 @@
 STUB(FFC0F5C0)
 STUB(FFC0F680)
-STUB(FFC22CC0)
-STUB(FFC22CE8)
-STUB(FFC22D48)
-STUB(FFC23220)
+STUB(FFC10628)
+STUB(FFC106B8)
 STUB(FFC2326C)
 STUB(FFC237C0)
@@ -38,5 +34,4 @@
 STUB(FFC250C0)
 STUB(FFC26C7C)
-STUB(FFC26CFC)
 STUB(FFC28470)
 STUB(FFC28670)
@@ -48,5 +43,4 @@
 STUB(FFC291CC)
 STUB(FFC29220)
-STUB(FFC2A980)
 STUB(FFC2ABA8)
 STUB(FFC2AC7C)
@@ -55,6 +49,4 @@
 STUB(FFC2AF70)
 STUB(FFC2AF74)
-STUB(FFC2AF8C)
-STUB(FFC2B9B8)
 STUB(FFC445CC)
 STUB(FFC455B0)
@@ -182,5 +174,5 @@
 STUB(FFD10C1C)
 STUB(FFD10CE4)
-STUB(FFD10E48)
+STUB(FFD10D98)
 STUB(FFD10F70)
 STUB(FFD10FBC)
Index: /branches/release-1_0/platform/a490/sub/100e/capt_seq.c
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/capt_seq.c	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/capt_seq.c	(revision 1523)
@@ -0,0 +1,889 @@
+#include "lolevel.h"
+#include "platform.h"
+#include "core.h"
+#include "conf.h"
+
+static long *nrflag = (long*)0x57F8;	// ??? ROM:FFD10DA8 "ShutterSoundTask"
+
+#include "../../../generic/capt_seq.c"
+
+// ROM:FFC5919C task_CaptSeqTask()
+
+void __attribute__((naked,noinline)) capt_seq_task() {
+	asm volatile (
+			"STMFD   SP!, {R3-R7,LR}\n"
+			"LDR     R7, =0x33284\n"
+			"LDR     R6, =0x26C0\n"
+"loc_FFC591A8:\n"
+			"LDR     R0, [R6,#4]\n"
+			"MOV     R2, #0\n"
+			"MOV     R1, SP\n"
+			"BL      sub_FFC28AA4\n"
+			"TST     R0, #1\n"
+			"BEQ     loc_FFC591D4\n"
+			"LDR     R1, =0x5B4\n"
+			"LDR     R0, =0xFFC58DA8\n"
+			"BL      sub_FFC0F680\n"
+			"BL      sub_FFC0F438\n"
+			"LDMFD   SP!, {R3-R7,PC}\n"
+"loc_FFC591D4:\n"
+			"LDR     R0, [SP]\n"
+			"LDR     R1, [R0]\n"
+			"CMP     R1, #0x1D\n"
+			"ADDLS   PC, PC, R1,LSL#2\n"
+			"B       loc_FFC593E4\n"
+			"B       loc_FFC59260\n"
+			"B       loc_FFC59268\n"
+			"B       loc_FFC59290\n"
+			"B       loc_FFC592A4\n"
+			"B       loc_FFC5929C\n"
+			"B       loc_FFC592AC\n"
+			"B       loc_FFC592B4\n"
+			"B       loc_FFC592C0\n"
+			"B       loc_FFC59318\n"
+			"B       loc_FFC592A4\n"
+			"B       loc_FFC59320\n"
+			"B       loc_FFC5932C\n"
+			"B       loc_FFC59334\n"
+			"B       loc_FFC5933C\n"
+			"B       loc_FFC59344\n"
+			"B       loc_FFC5934C\n"
+			"B       loc_FFC59354\n"
+			"B       loc_FFC5935C\n"
+			"B       loc_FFC59368\n"
+			"B       loc_FFC59370\n"
+			"B       loc_FFC59378\n"
+			"B       loc_FFC59380\n"
+			"B       loc_FFC59388\n"
+			"B       loc_FFC59394\n"
+			"B       loc_FFC5939C\n"
+			"B       loc_FFC593A4\n"
+			"B       loc_FFC593AC\n"
+			"B       loc_FFC593B4\n"
+			"B       loc_FFC593C0\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59260:\n"
+			"BL      sub_FFC59A74\n"
+			"BL      shooting_expo_param_override\n"      // +
+			"B       loc_FFC592B8\n"
+"loc_FFC59268:\n"
+			"MOV     R0, #0xC\n"
+			"BL      sub_FFC5D758\n"
+			"TST     R0, #1\n"
+			"LDR     R0, [SP]\n"
+			"MOVNE   R1, #1\n"
+			"LDRNE   R2, [R0,#0xC]\n"
+			"MOVNE   R0, #1\n"
+			"BNE     loc_FFC59310\n"
+			"BL      sub_FFC5950C_my\n"  //--------->
+			"B       loc_FFC593F0\n"
+"loc_FFC59290:\n"
+			"MOV     R0, #1\n"
+			"BL      sub_FFC59CFC\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC5929C:\n"
+			"BL      sub_FFC596E0\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC592A4:\n"
+			"BL      sub_FFC59A54\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC592AC:\n"
+			"BL      sub_FFC59A5C\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC592B4:\n"
+			"BL      sub_FFC59C0C\n"
+"loc_FFC592B8:\n"
+			"BL      sub_FFC574B4\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC592C0:\n"
+			"LDR     R4, [R0,#0xC]\n"
+			"BL      sub_FFC59A64\n"
+			"MOV     R0, R4\n"
+			"BL      sub_FFD0FD5C\n"
+			"TST     R0, #1\n"
+			"MOV     R5, R0\n"
+			"BNE     loc_FFC59300\n"
+			"BL      sub_FFC69634\n"
+			"STR     R0, [R4,#0x18]\n"
+			"MOV     R0, R4\n"
+			"BL      sub_FFD10CCC\n"
+			"MOV     R0, R4\n"
+			"BL      sub_FFD1106C\n"
+			"MOV     R5, R0\n"
+			"LDR     R0, [R4,#0x18]\n"
+			"BL      sub_FFC6986C\n"
+"loc_FFC59300:\n"
+			"BL      sub_FFC59A54\n"
+			"MOV     R2, R4\n"
+			"MOV     R1, #9\n"
+			"MOV     R0, R5\n"
+"loc_FFC59310:\n"
+			"BL      sub_FFC578AC\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59318:\n"
+			"BL      sub_FFC59C74\n"
+			"B       loc_FFC592B8\n"
+"loc_FFC59320:\n"
+			"LDR     R0, [R7,#0x4C]\n"
+			"BL      sub_FFC5A01C\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC5932C:\n"
+			"BL      sub_FFC5A2CC\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59334:\n"
+			"BL      sub_FFC5A360\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC5933C:\n"
+			"BL      sub_FFD0FF88\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59344:\n"
+			"BL      sub_FFD10180\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC5934C:\n"
+			"BL      sub_FFD10214\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59354:\n"
+			"BL      sub_FFD102D4\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC5935C:\n"
+			"MOV     R0, #0\n"
+			"BL      sub_FFD104CC\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59368:\n"
+			"BL      sub_FFD1061C\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59370:\n"
+			"BL      sub_FFD106AC\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59378:\n"
+			"BL      sub_FFD1076C\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59380:\n"
+			"BL      sub_FFC59E58\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59388:\n"
+			"BL      sub_FFC59E94\n"
+			"BL      sub_FFC26C7C\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC59394:\n"
+			"BL      sub_FFD103A0\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC5939C:\n"
+			"BL      sub_FFD103E4\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC593A4:\n"
+			"BL      sub_FFC5BF9C\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC593AC:\n"
+			"BL      sub_FFC5C01C\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC593B4:\n"
+			"BL      sub_FFC5C078\n"
+			"BL      sub_FFC5C038\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC593C0:\n"
+			"LDRH    R0, [R7,#0x8C]\n"
+			"CMP     R0, #4\n"
+			"LDRNEH  R0, [R7]\n"
+			"SUBNE   R12, R0, #0x8200\n"
+			"SUBNES  R12, R12, #0x2A\n"
+			"BNE     loc_FFC593F0\n"
+			"BL      sub_FFC5C01C\n"
+			"BL      sub_FFC5C3BC\n"
+			"B       loc_FFC593F0\n"
+"loc_FFC593E4:\n"
+			"LDR     R1, =0x70B\n"
+			"LDR     R0, =0xFFC58DA8\n"
+			"BL      sub_FFC0F680\n"	//DebugAssert
+"loc_FFC593F0:\n"
+			"LDR     R0, [SP]\n"
+			"LDR     R1, [R0,#4]\n"
+			"LDR     R0, [R6]\n"
+			"BL      sub_FFC28814\n"
+			"LDR     R4, [SP]\n"
+			"LDR     R0, [R4,#8]\n"
+			"CMP     R0, #0\n"
+			"LDREQ   R1, =0x132\n"
+			"LDREQ   R0, =0xFFC58DA8\n"
+			"BLEQ    sub_FFC0F680\n"
+			"MOV     R0, #0\n"
+			"STR     R0, [R4,#8]\n"
+			"B       loc_FFC591A8\n"
+	);
+}
+
+
+void __attribute__((naked,noinline)) sub_FFC5950C_my(){ //
+	asm volatile(
+			"STMFD   SP!, {R3-R5,LR}\n"
+			"LDR     R4, [R0,#0xC]\n"
+			"LDR     R0, [R4,#8]\n"
+			"ORR     R0, R0, #1\n"
+			"STR     R0, [R4,#8]\n"
+			"BL      sub_FFC59A64\n"
+			"MOV     R0, R4\n"
+			"BL      sub_FFC59E0C\n"
+			"MOV     R0, R4\n"
+			"BL      sub_FFD0F9C8\n"
+			"CMP     R0, #0\n"
+			"MOV     R0, R4\n"
+			"BEQ     loc_FFC5955C\n"
+			"BL      sub_FFD0FA54\n"
+			"TST     R0, #1\n"
+			"MOVNE   R2, R4\n"
+			"LDMNEFD SP!, {R3-R5,LR}\n"
+			"MOVNE   R1, #1\n"
+			"BNE     sub_FFC578AC\n"
+			"B       loc_FFC59560\n"
+"loc_FFC5955C:\n"
+			"BL      sub_FFD0FA18\n"
+"loc_FFC59560:\n"
+			"MOV     R0, #0\n"
+			"STR     R0, [SP]\n"
+			"LDR     R0, =0x33284\n"
+			"MOV     R2, #2\n"
+			"LDRH    R0, [R0,#0x8A]\n"
+			"MOV     R1, SP\n"
+			"CMP     R0, #3\n"
+			"LDRNE   R0, [R4,#0xC]\n"
+			"CMPNE   R0, #1\n"
+			"MOVHI   R0, #1\n"
+			"STRHI   R0, [SP]\n"
+			"LDR     R0, =0x127\n"
+			"BL      sub_FFC69374\n"
+			"BL      sub_FFC69634\n"
+			"STR     R0, [R4,#0x18]\n"
+			"MOV     R0, R4\n"
+			"BL      sub_FFD10CCC\n"
+			"BL      sub_FFD116EC\n"
+			"MOV     R0, R4\n"
+			"BL      sub_FFD10D94_my\n"			//---------->
+			"MOV     R5, R0\n"
+			"BL      capt_seq_hook_raw_here\n"	// +
+			"BL      sub_FFC5C01C\n"
+			"BL      sub_FFC5C064\n"
+			"BL      sub_FFC5C0A4\n"
+			"MOV     R2, R4\n"
+			"MOV     R1, #1\n"
+			"MOV     R0, R5\n"
+			"BL      sub_FFC578AC\n"
+			"BL      sub_FFD11020\n"
+			"CMP     R0, #0\n"
+			"LDRNE   R0, [R4,#8]\n"
+			"ORRNE   R0, R0, #0x2000\n"
+			"STRNE   R0, [R4,#8]\n"
+			"LDMFD   SP!, {R3-R5,PC}\n"
+	);
+}
+
+
+
+
+void __attribute__((naked,noinline)) sub_FFD10D94_my(){ //
+	asm volatile(
+			"STMFD   SP!, {R0-R8,LR}\n"
+			"MOV     R4, R0\n"
+			"BL      sub_FFD11880\n"
+			"MOV     R1, #0xFFFFFFFF\n"
+			"BL      sub_FFC28848\n"
+			"LDR     R5, =0x57F8\n"
+			"LDR     R0, [R5,#0xC]\n"
+			"CMP     R0, #0\n"
+			"BNE     loc_FFD10DE4\n"
+			"MOV     R1, #1\n"
+			"MOV     R0, #0\n"
+			"BL      sub_FFC0F4B4\n"
+			"STR     R0, [R5,#0xC]\n"
+			"MOV     R3, #0\n"
+			"STR     R3, [SP]\n"
+			"LDR     R3, =0xFFD1085C\n"
+			"LDR     R0, =0xFFD10FF8\n"
+			"MOV     R2, #0x400\n"
+			"MOV     R1, #0x17\n"
+			"BL      sub_FFC0F480\n"	// KernelCreateTask
+"loc_FFD10DE4:\n"
+			"MOV     R2, #4\n"
+			"ADD     R1, SP, #8\n"
+			"MOV     R0, #0x8A\n"
+			"BL      sub_FFC694A4\n"	// PT_GetPropertyCaseString
+			"TST     R0, #1\n"
+			"LDRNE   R1, =0x3B4\n"		// 0x3BA
+			"LDRNE   R0, =0xFFD10A88\n"
+			"BLNE    sub_FFC0F680\n"	// DebugAssert
+			"LDR     R6, =0x33340\n"
+			"LDR     R7, =0x33284\n"
+			"LDR     R3, [R6]\n"
+			"LDRSH   R2, [R6,#0xC]\n"
+			"LDRSH   R1, [R6,#0xE]\n"
+			"LDR     R0, [R7,#0x80]\n"
+		//	"BL      nullsub_57\n"
+			"BL      sub_FFC455B0\n"
+			"LDR     R3, =0x5800\n"
+			"STRH    R0, [R4,#0xA4]\n"
+			"SUB     R2, R3, #4\n"
+			"STRD    R2, [SP]\n"
+			"MOV     R1, R0\n"
+			"LDRH    R0, [R7,#0x54]\n"
+			"LDRSH   R2, [R6,#0xC]\n"
+			"SUB     R3, R3, #8\n"
+			"BL      sub_FFD11EEC\n"
+			"BL      wait_until_remote_button_is_released\n"     // +
+			"BL      capt_seq_hook_set_nr\n"                     // +
+			"B       sub_FFD10E48\n"                             // continue function in firmware
+	);
+}
+
+/*************************************************************/
+
+// ROM:FFC91388 task_ExpDrvTask
+void __attribute__((naked,noinline)) exp_drv_task(){
+	asm volatile(
+			"STMFD   SP!, {R4-R8,LR}\n"
+			"SUB     SP, SP, #0x20\n"
+			"LDR     R8, =0xBB8\n"
+			"LDR     R7, =0x38B4\n"
+			"LDR     R5, =0x3C674\n"
+			"MOV     R0, #0\n"
+			"ADD     R6, SP, #0x10\n"
+			"STR     R0, [SP,#0xC]\n"
+"loc_FFC913A8:\n"
+			"LDR     R0, [R7,#0x20]\n"
+			"MOV     R2, #0\n"
+			"ADD     R1, SP, #0x1C\n"
+			"BL      sub_FFC28AA4\n"
+			"LDR     R0, [SP,#0xC]\n"
+			"CMP     R0, #1\n"
+			"BNE     loc_FFC913F4\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"LDR     R0, [R0]\n"
+			"CMP     R0, #0x13\n"
+			"CMPNE   R0, #0x14\n"
+			"CMPNE   R0, #0x15\n"
+			"CMPNE   R0, #0x16\n"
+			"BEQ     loc_FFC91558\n"
+			"CMP     R0, #0x28\n"
+			"BEQ     loc_FFC914E0\n"
+			"ADD     R1, SP, #0xC\n"
+			"MOV     R0, #0\n"
+			"BL      sub_FFC91338\n"
+"loc_FFC913F4:\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"LDR     R1, [R0]\n"
+			"CMP     R1, #0x2E\n"
+			"BNE     loc_FFC91424\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"BL      sub_FFC92690\n"
+			"LDR     R0, [R7,#0x1C]\n"
+			"MOV     R1, #1\n"
+			"BL      sub_FFC28814\n"
+			"BL      sub_FFC0F438\n"	// ExitTask
+			"ADD     SP, SP, #0x20\n"
+			"LDMFD   SP!, {R4-R8,PC}\n"
+"loc_FFC91424:\n"
+			"CMP     R1, #0x2D\n"
+			"BNE     loc_FFC91440\n"
+			"LDR     R2, [R0,#0x8C]!\n"
+			"LDR     R1, [R0,#4]\n"
+			"MOV     R0, R1\n"
+			"BLX     R2\n"
+			"B       loc_FFC91980\n"
+"loc_FFC91440:\n"
+			"CMP     R1, #0x26\n"
+			"BNE     loc_FFC91490\n"
+			"LDR     R0, [R7,#0x1C]\n"
+			"MOV     R1, #0x80\n"
+			"BL      sub_FFC28848\n"
+			"LDR     R0, =0xFFC8DB04\n"
+			"MOV     R1, #0x80\n"
+			"BL      sub_FFD084B4\n"
+			"LDR     R0, [R7,#0x1C]\n"
+			"MOV     R2, R8\n"
+			"MOV     R1, #0x80\n"
+			"BL      sub_FFC28754\n"
+			"TST     R0, #1\n"
+			"LDRNE   R1, =0xE5F\n"
+			"BNE     loc_FFC9154C\n"
+"loc_FFC9147C:\n"
+			"LDR     R1, [SP,#0x1C]\n"
+			"LDR     R0, [R1,#0x90]\n"
+			"LDR     R1, [R1,#0x8C]\n"
+			"BLX     R1\n"
+			"B       loc_FFC91980\n"
+"loc_FFC91490:\n"
+			"CMP     R1, #0x27\n"
+			"BNE     loc_FFC914D8\n"
+			"ADD     R1, SP, #0xC\n"
+			"BL      sub_FFC91338\n"
+			"LDR     R0, [R7,#0x1C]\n"
+			"MOV     R1, #0x100\n"
+			"BL      sub_FFC28848\n"
+			"LDR     R0, =0xFFC8DB14\n"
+			"MOV     R1, #0x100\n"
+			"BL      sub_FFD0873C\n"
+			"LDR     R0, [R7,#0x1C]\n"
+			"MOV     R2, R8\n"
+			"MOV     R1, #0x100\n"
+			"BL      sub_FFC28754\n"
+			"TST     R0, #1\n"
+			"BEQ     loc_FFC9147C\n"
+			"LDR     R1, =0xE69\n"
+			"B       loc_FFC9154C\n"
+"loc_FFC914D8:\n"
+			"CMP     R1, #0x28\n"
+			"BNE     loc_FFC914F0\n"
+"loc_FFC914E0:\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"ADD     R1, SP, #0xC\n"
+			"BL      sub_FFC91338\n"
+			"B       loc_FFC9147C\n"
+"loc_FFC914F0:\n"
+			"CMP     R1, #0x2B\n"
+			"BNE     loc_FFC91508\n"
+			"BL      sub_FFC80FC0\n"
+			"BL      sub_FFC81BE8\n"
+			"BL      sub_FFC81738\n"
+			"B       loc_FFC9147C\n"
+"loc_FFC91508:\n"
+			"CMP     R1, #0x2C\n"
+			"BNE     loc_FFC91558\n"
+			"LDR     R0, [R7,#0x1C]\n"
+			"MOV     R1, #4\n"
+			"BL      sub_FFC28848\n"
+			"LDR     R1, =0xFFC8DB34\n"
+			"LDR     R0, =0xFFFFF400\n"
+			"MOV     R2, #4\n"
+			"BL      sub_FFC80A3C\n"
+			"BL      sub_FFC80CC4\n"
+			"LDR     R0, [R7,#0x1C]\n"
+			"MOV     R2, R8\n"
+			"MOV     R1, #4\n"
+			"BL      sub_FFC28670\n"
+			"TST     R0, #1\n"
+			"BEQ     loc_FFC9147C\n"
+			"LDR     R1, =0xE91\n"
+"loc_FFC9154C:\n"
+			"LDR     R0, =0xFFC8E174\n"
+			"BL      sub_FFC0F680\n"
+			"B       loc_FFC9147C\n"
+"loc_FFC91558:\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"MOV     R4, #1\n"
+			"LDR     R1, [R0]\n"
+			"CMP     R1, #0x11\n"
+			"CMPNE   R1, #0x12\n"
+			"BNE     loc_FFC915C8\n"
+			"LDR     R1, [R0,#0x7C]\n"
+			"ADD     R1, R1, R1,LSL#1\n"
+			"ADD     R1, R0, R1,LSL#2\n"
+			"SUB     R1, R1, #8\n"
+			"LDMIA   R1, {R2-R4}\n"
+			"STMIA   R6, {R2-R4}\n"
+			"BL      sub_FFC8FCC4\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"LDR     R1, [R0,#0x7C]\n"
+			"LDR     R3, [R0,#0x8C]\n"
+			"LDR     R2, [R0,#0x90]\n"
+			"ADD     R0, R0, #4\n"
+			"BLX     R3\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"BL      sub_FFC92A58\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"LDR     R1, [R0,#0x7C]\n"
+			"LDR     R3, [R0,#0x94]\n"
+			"LDR     R2, [R0,#0x98]\n"
+			"ADD     R0, R0, #4\n"
+			"BLX     R3\n"
+			"B       loc_FFC918C0\n"
+"loc_FFC915C8:\n"
+			"CMP     R1, #0x13\n"
+			"CMPNE   R1, #0x14\n"
+			"CMPNE   R1, #0x15\n"
+			"CMPNE   R1, #0x16\n"
+			"BNE     loc_FFC91680\n"
+			"ADD     R3, SP, #0xC\n"
+			"MOV     R2, SP\n"
+			"ADD     R1, SP, #0x10\n"
+			"BL      sub_FFC8FFA0\n"
+			"CMP     R0, #1\n"
+			"MOV     R4, R0\n"
+			"CMPNE   R4, #5\n"
+			"BNE     loc_FFC9161C\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"MOV     R2, R4\n"
+			"LDR     R1, [R0,#0x7C]!\n"
+			"LDR     R12, [R0,#0x10]!\n"
+			"LDR     R3, [R0,#4]\n"
+			"MOV     R0, SP\n"
+			"BLX     R12\n"
+			"B       loc_FFC91654\n"
+"loc_FFC9161C:\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"CMP     R4, #2\n"
+			"LDR     R3, [R0,#0x90]\n"
+			"CMPNE   R4, #6\n"
+			"BNE     loc_FFC91668\n"
+			"LDR     R12, [R0,#0x8C]\n"
+			"MOV     R0, SP\n"
+			"MOV     R2, R4\n"
+			"MOV     R1, #1\n"
+			"BLX     R12\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"MOV     R2, SP\n"
+			"ADD     R1, SP, #0x10\n"
+			"BL      sub_FFC91040\n"
+"loc_FFC91654:\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"LDR     R2, [SP,#0xC]\n"
+			"MOV     R1, R4\n"
+			"BL      sub_FFC912D8\n"
+			"B       loc_FFC918C0\n"
+"loc_FFC91668:\n"
+			"LDR     R1, [R0,#0x7C]\n"
+			"LDR     R12, [R0,#0x8C]\n"
+			"ADD     R0, R0, #4\n"
+			"MOV     R2, R4\n"
+			"BLX     R12\n"
+			"B       loc_FFC918C0\n"
+"loc_FFC91680:\n"
+			"CMP     R1, #0x22\n"
+			"CMPNE   R1, #0x23\n"
+			"BNE     loc_FFC916CC\n"
+			"LDR     R1, [R0,#0x7C]\n"
+			"ADD     R1, R1, R1,LSL#1\n"
+			"ADD     R1, R0, R1,LSL#2\n"
+			"SUB     R1, R1, #8\n"
+			"LDMIA   R1, {R2-R4}\n"
+			"STMIA   R6, {R2-R4}\n"
+			"BL      sub_FFC8F214\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"LDR     R1, [R0,#0x7C]\n"
+			"LDR     R3, [R0,#0x8C]\n"
+			"LDR     R2, [R0,#0x90]\n"
+			"ADD     R0, R0, #4\n"
+			"BLX     R3\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"BL      sub_FFC8F508\n"
+			"B       loc_FFC918C0\n"
+"loc_FFC916CC:\n"
+			"ADD     R1, R0, #4\n"
+			"LDMIA   R1, {R2,R3,R12}\n"
+			"STMIA   R6, {R2,R3,R12}\n"
+			"LDR     R1, [R0]\n"
+			"CMP     R1, #0x25\n"
+			"ADDLS   PC, PC, R1,LSL#2\n"
+			"B       loc_FFC918A0\n"
+			"B       loc_FFC91780\n"
+			"B       loc_FFC91780\n"
+			"B       loc_FFC91788\n"
+			"B       loc_FFC91790\n"
+			"B       loc_FFC91790\n"
+			"B       loc_FFC91790\n"
+			"B       loc_FFC91780\n"
+			"B       loc_FFC91788\n"
+			"B       loc_FFC91790\n"
+			"B       loc_FFC91790\n"
+			"B       loc_FFC917A8\n"
+			"B       loc_FFC917A8\n"
+			"B       loc_FFC91894\n"
+			"B       loc_FFC9189C\n"
+			"B       loc_FFC9189C\n"
+			"B       loc_FFC9189C\n"
+			"B       loc_FFC9189C\n"
+			"B       loc_FFC918A0\n"
+			"B       loc_FFC918A0\n"
+			"B       loc_FFC918A0\n"
+			"B       loc_FFC918A0\n"
+			"B       loc_FFC918A0\n"
+			"B       loc_FFC918A0\n"
+			"B       loc_FFC91798\n"
+			"B       loc_FFC917A0\n"
+			"B       loc_FFC917A0\n"
+			"B       loc_FFC917B4\n"
+			"B       loc_FFC917B4\n"
+			"B       loc_FFC917BC\n"
+			"B       loc_FFC917EC\n"
+			"B       loc_FFC9181C\n"
+			"B       loc_FFC9184C\n"
+			"B       loc_FFC9187C\n"
+			"B       loc_FFC9187C\n"
+			"B       loc_FFC918A0\n"
+			"B       loc_FFC918A0\n"
+			"B       loc_FFC91884\n"
+			"B       loc_FFC9188C\n"
+"loc_FFC91780:\n"
+			"BL      sub_FFC8E01C\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC91788:\n"
+			"BL      sub_FFC8E2A0\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC91790:\n"
+			"BL      sub_FFC8E4A8\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC91798:\n"
+			"BL      sub_FFC8E720\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC917A0:\n"
+			"BL      sub_FFC8E918\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC917A8:\n"
+			"BL      sub_FFC8EBD4_my\n"		//---------->
+			"MOV     R4, #0\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC917B4:\n"
+			"BL      sub_FFC8ED14\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC917BC:\n"
+			"LDRH    R1, [R0,#4]\n"
+			"STRH    R1, [SP,#0x10]\n"
+			"LDRH    R1, [R5,#2]\n"
+			"STRH    R1, [SP,#0x12]\n"
+			"LDRH    R1, [R5,#4]\n"
+			"STRH    R1, [SP,#0x14]\n"
+			"LDRH    R1, [R5,#6]\n"
+			"STRH    R1, [SP,#0x16]\n"
+			"LDRH    R1, [R0,#0xC]\n"
+			"STRH    R1, [SP,#0x18]\n"
+			"BL      sub_FFC92704\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC917EC:\n"
+			"LDRH    R1, [R0,#4]\n"
+			"STRH    R1, [SP,#0x10]\n"
+			"LDRH    R1, [R5,#2]\n"
+			"STRH    R1, [SP,#0x12]\n"
+			"LDRH    R1, [R5,#4]\n"
+			"STRH    R1, [SP,#0x14]\n"
+			"LDRH    R1, [R5,#6]\n"
+			"STRH    R1, [SP,#0x16]\n"
+			"LDRH    R1, [R5,#8]\n"
+			"STRH    R1, [SP,#0x18]\n"
+			"BL      sub_FFC92870\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC9181C:\n"
+			"LDRH    R1, [R5]\n"
+			"STRH    R1, [SP,#0x10]\n"
+			"LDRH    R1, [R0,#6]\n"
+			"STRH    R1, [SP,#0x12]\n"
+			"LDRH    R1, [R5,#4]\n"
+			"STRH    R1, [SP,#0x14]\n"
+			"LDRH    R1, [R5,#6]\n"
+			"STRH    R1, [SP,#0x16]\n"
+			"LDRH    R1, [R5,#8]\n"
+			"STRH    R1, [SP,#0x18]\n"
+			"BL      sub_FFC9291C\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC9184C:\n"
+			"LDRH    R1, [R5]\n"
+			"STRH    R1, [SP,#0x10]\n"
+			"LDRH    R1, [R5,#2]\n"
+			"STRH    R1, [SP,#0x12]\n"
+			"LDRH    R1, [R5,#4]\n"
+			"STRH    R1, [SP,#0x14]\n"
+			"LDRH    R1, [R5,#6]\n"
+			"STRH    R1, [SP,#0x16]\n"
+			"LDRH    R1, [R0,#0xC]\n"
+			"STRH    R1, [SP,#0x18]\n"
+			"BL      sub_FFC929BC\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC9187C:\n"
+			"BL      sub_FFC8F06C\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC91884:\n"
+			"BL      sub_FFC8F60C\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC9188C:\n"
+			"BL      sub_FFC8F848\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC91894:\n"
+			"BL      sub_FFC8F9C4\n"
+			"B       loc_FFC918A0\n"
+"loc_FFC9189C:\n"
+			"BL      sub_FFC8FB60\n"
+"loc_FFC918A0:\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"LDR     R1, [R0,#0x7C]\n"
+			"LDR     R3, [R0,#0x8C]\n"
+			"LDR     R2, [R0,#0x90]\n"
+			"ADD     R0, R0, #4\n"
+			"BLX     R3\n"
+			"CMP     R4, #1\n"
+			"BNE     loc_FFC91908\n"
+"loc_FFC918C0:\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"MOV     R2, #0xC\n"
+			"LDR     R1, [R0,#0x7C]\n"
+			"ADD     R1, R1, R1,LSL#1\n"
+			"ADD     R0, R0, R1,LSL#2\n"
+			"SUB     R4, R0, #8\n"
+			"LDR     R0, =0x3C674\n"
+			"ADD     R1, SP, #0x10\n"
+			"BL      sub_FFE7E060\n"
+			"LDR     R0, =0x3C680\n"
+			"MOV     R2, #0xC\n"
+			"ADD     R1, SP, #0x10\n"
+			"BL      sub_FFE7E060\n"
+			"LDR     R0, =0x3C68C\n"
+			"MOV     R2, #0xC\n"
+			"MOV     R1, R4\n"
+			"BL      sub_FFE7E060\n"
+			"B       loc_FFC91980\n"
+"loc_FFC91908:\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"LDR     R0, [R0]\n"
+			"CMP     R0, #0xB\n"
+			"BNE     loc_FFC91950\n"
+			"MOV     R3, #0\n"
+			"STR     R3, [SP]\n"
+			"MOV     R3, #1\n"
+			"MOV     R2, #1\n"
+			"MOV     R1, #1\n"
+			"MOV     R0, #0\n"
+			"BL      sub_FFC8DE24\n"
+			"MOV     R3, #0\n"
+			"STR     R3, [SP]\n"
+			"MOV     R3, #1\n"
+			"MOV     R2, #1\n"
+			"MOV     R1, #1\n"
+			"MOV     R0, #0\n"
+			"B       loc_FFC9197C\n"
+"loc_FFC91950:\n"
+			"MOV     R3, #1\n"
+			"MOV     R2, #1\n"
+			"MOV     R1, #1\n"
+			"MOV     R0, #1\n"
+			"STR     R3, [SP]\n"
+			"BL      sub_FFC8DE24\n"
+			"MOV     R3, #1\n"
+			"MOV     R2, #1\n"
+			"MOV     R1, #1\n"
+			"MOV     R0, #1\n"
+			"STR     R3, [SP]\n"
+"loc_FFC9197C:\n"
+			"BL      sub_FFC8DF64\n"
+"loc_FFC91980:\n"
+			"LDR     R0, [SP,#0x1C]\n"
+			"BL      sub_FFC92690\n"
+			"B       loc_FFC913A8\n"
+	);
+}
+
+void __attribute__((naked,noinline)) sub_FFC8EBD4_my(){ //
+	asm volatile(
+		 "STMFD   SP!, {R4-R8,LR}\n"
+		"LDR     R7, =0x38B4\n"
+		"MOV     R4, R0\n"
+		"LDR     R0, [R7,#0x1C]\n"
+		"MOV     R1, #0x3E\n"
+		"BL      sub_FFC28848\n"
+		"LDRSH   R0, [R4,#4]\n"
+		"MOV     R2, #0\n"
+		"MOV     R1, #0\n"
+		"BL      sub_FFC8DB88\n"
+		"MOV     R6, R0\n"
+		"LDRSH   R0, [R4,#6]\n"
+		"BL      sub_FFC8DC98\n"
+		"LDRSH   R0, [R4,#8]\n"
+		"BL      sub_FFC8DCF0\n"
+		"LDRSH   R0, [R4,#0xA]\n"
+		"BL      sub_FFC8DD48\n"
+		"LDRSH   R0, [R4,#0xC]\n"
+		"MOV     R1, #0\n"
+		"BL      sub_FFC8DDA0\n"
+		"MOV     R5, R0\n"
+		"LDR     R0, [R4]\n"
+		"LDR     R8, =0x3C68C\n"
+		"CMP     R0, #0xB\n"
+		"MOVEQ   R6, #0\n"
+		"MOVEQ   R5, #0\n"
+		"BEQ     loc_FFC8EC68\n"
+		"CMP     R6, #1\n"
+		"BNE     loc_FFC8EC68\n"
+		"LDRSH   R0, [R4,#4]\n"
+		"LDR     R1, =0xFFC8DAF4\n"
+		"MOV     R2, #2\n"
+		"BL      sub_FFD08608\n"
+		"STRH    R0, [R4,#4]\n"
+		"MOV     R0, #0\n"
+		"STR     R0, [R7,#0x28]\n"
+		"B       loc_FFC8EC70\n"
+"loc_FFC8EC68:\n"
+		"LDRH    R0, [R8]\n"
+		"STRH    R0, [R4,#4]\n"
+"loc_FFC8EC70:\n"
+		"CMP     R5, #1\n"
+		"LDRNEH  R0, [R8,#8]\n"
+		"BNE     loc_FFC8EC8C\n"
+		"LDRSH   R0, [R4,#0xC]\n"
+		"LDR     R1, =0xFFC8DB78\n"
+		"MOV     R2, #0x20\n"
+		"BL      sub_FFC926C0\n"
+"loc_FFC8EC8C:\n"
+		"STRH    R0, [R4,#0xC]\n"
+		"LDRSH   R0, [R4,#6]\n"
+		"BL      sub_FFC80D30_my\n"		//----------->
+		"LDRSH   R0, [R4,#8]\n"
+		"MOV     R1, #1\n"
+		"BL      sub_FFC81480\n"
+		"MOV     R1, #0\n"
+		"ADD     R0, R4, #8\n"
+		"BL      sub_FFC81508\n"
+		"LDRSH   R0, [R4,#0xE]\n"
+		"BL      sub_FFC88EAC\n"
+		"LDR     R4, =0xBB8\n"
+		"CMP     R6, #1\n"
+		"BNE     loc_FFC8ECE4\n"
+		"LDR     R0, [R7,#0x1C]\n"
+		"MOV     R2, R4\n"
+		"MOV     R1, #2\n"
+		"BL      sub_FFC28754\n"
+		"TST     R0, #1\n"
+		"LDRNE   R1, =0x5A3\n"
+		"LDRNE   R0, =0xFFC8E174\n"
+		"BLNE    sub_FFC0F680\n"
+"loc_FFC8ECE4:\n"
+		"CMP     R5, #1\n"
+		"LDMNEFD SP!, {R4-R8,PC}\n"
+		"LDR     R0, [R7,#0x1C]\n"
+		"MOV     R2, R4\n"
+		"MOV     R1, #0x20\n"
+		"BL      sub_FFC28754\n"
+		"TST     R0, #1\n"
+		"LDRNE   R1, =0x5A8\n"
+		"LDRNE   R0, =0xFFC8E174\n"
+		"LDMNEFD SP!, {R4-R8,LR}\n"
+		"BNE     sub_FFC0F680\n"
+		"LDMFD   SP!, {R4-R8,PC}\n"
+	);
+}
+
+void __attribute__((naked,noinline)) sub_FFC80D30_my(){ //
+	asm volatile(
+			"STMFD   SP!, {R4-R6,LR}\n"
+			"LDR     R5, =0x35A8\n"
+			"MOV     R4, R0\n"
+			"LDR     R0, [R5,#4]\n"
+			"CMP     R0, #1\n"
+			"LDRNE   R1, =0x146\n"
+			"LDRNE   R0, =0xFFC80B34\n"
+			"BLNE    sub_FFC0F680\n"
+			"CMN     R4, #0xC00\n"
+			"LDREQSH R4, [R5,#2]\n"
+			"CMN     R4, #0xC00\n"
+			"MOVEQ   R1, #0x14C\n"
+			"LDREQ   R0, =0xFFC80B34\n"
+			"STRH    R4, [R5,#2]\n"
+			"BLEQ    sub_FFC0F680\n"
+			"MOV     R0, R4\n"
+		//  "BL      _sub_FFD7C39C\n"		// -
+			"BL      apex2us\n"				// +
+			"MOV     R4, R0\n"
+		//	"BL      nullsub_39\n"
+			"MOV     R0, R4\n"
+			"BL      sub_FFCB7E98\n"
+			"TST     R0, #1\n"
+			"LDRNE   R1, =0x151\n"
+			"LDMNEFD SP!, {R4-R6,LR}\n"
+			"LDRNE   R0, =0xFFC80B34\n"
+			"BNE     sub_FFC0F680\n"
+			"LDMFD   SP!, {R4-R6,PC}\n"
+	);
+}
Index: /branches/release-1_0/platform/a490/sub/100e/stubs_entry.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/stubs_entry.S	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/stubs_entry.S	(revision 1523)
@@ -0,0 +1,229 @@
+// !!! THIS FILE IS GENERATED. DO NOT EDIT. !!!
+#include "stubs_asm.h"
+
+// Camera info:
+//   DRYOS R43 (DRYOS version 2.3, release #0043)
+//   Firmware Ver GM1.00E
+//   Canon PowerShot A490
+
+// Values for makefile.inc
+//   PLATFORMID = 12784 (0x31f0) // Found @ 0xfffe0130
+//   MAXRAMADDR = 0x01ffffff
+//   KEYSYS = d4a                // Found @ 0xffff1a0c
+//   NEED_ENCODED_DISKBOOT = 4   // Found @ 0xffff1a1c
+
+// Stubs below should be checked. Stub not matched 100%, or difference found to current 'stubs_entry_2.S'
+//    Name                                     Address      Rule  %  Comp to stubs_entry_2.S
+//NSTUB(kbd_pwr_off                           ,0xffc435ec) //  2 64%    *** != 0xffc00b20
+// ERROR: kbd_pwr_on is not found.                         //--- ---    *** != 0xffc00b20
+
+// Check of modemap from 'platform/CAMERA/shooting.c':
+// Firmware modemap table found @ffc70628 -> ffc6d174 -> ffd2e028 -> ffe07d3c -> ffeca5dc
+// No problems found with modemap table.
+
+// Values below can be overridden in 'stubs_min.S':
+DEF(physw_status                            ,0x0002e754) // Found @0xffc23b2c
+DEF(physw_run                               ,0x00001bf0) // Found @0xffc23790
+DEF(levent_table                            ,0xffe9ff24) // Found @0xffe9ff24
+DEF(FlashParamsTable                        ,0xffeca7cc) // Found @0xffeca7cc
+DEF(movie_status                            ,0x00005470) // Found @0xffd0c6a4
+DEF(full_screen_refresh                     ,0x000072e8) // Found @0xffd794c4
+DEF(canon_menu_active                       ,0x00002a3c) // Found @0xffc6a028
+DEF(canon_shoot_menu_active                 ,0x00006571) // Found @0xffd3fa70
+DEF(playrec_mode                            ,0x00002798) // Found @0xffc5d828
+DEF(zoom_status                             ,0x000095a8) // Found @0xffe0ac18
+DEF(some_flag_for_af_scan                   ,0x00005818) // Found @0xffd0f010
+// focus_len_table contains zoom focus lengths for use in 'get_focal_length' (main.c).
+// each entry contains 3 int value(s), the first is the zoom focus length.
+// there are 7 entries in the table - set NUM_FL to 7
+DEF(focus_len_table                         ,0xfffe2990) // Found @0xfffe2990
+DEF(zoom_busy                               ,0x000053f0) // Found @0xffd09900
+DEF(focus_busy                              ,0x00005300) // Found @0xffd06f38
+DEF(recreview_hold                          ,0x0000302c) // Found @0xffc757dc
+
+// Values below go in 'lib.c':
+//void *vid_get_bitmap_fb()        { return (void*)0x10361000; } // Found @0xffc3f024
+//void *vid_get_viewport_fb()      { return (void*)0x10648cc0; } // Found @0xffe53c80
+//char *camera_jpeg_count_str()    { return (char*)0x0007571c; } // Found @0xffd70afc
+//long hook_raw_size()             { return 0x00ec04f0; }        // Found @0xffe57008
+//int get_flash_params_count(void) { return 0x94; }              // Found @0xffd2f0e4
+
+// Bitmap masks and physw_status index values for SD_READONLY and USB power flags (for kbd.c).
+//#define SD_READONLY_FLAG    0x00040000 // Found @0xffe8217c, levent 0x90a
+//#define SD_READONLY_IDX     2
+//#define USB_MASK            0x00080000 // Found @0xffe82188, levent 0x902
+//#define USB_IDX             2
+
+// Keymap values for kbd.c. Additional keys may be present, only common values included here.
+//static KeyMap keymap[] = {
+//    { 2, KEY_RIGHT           ,0x00000004 }, // Found @0xffe8211c, levent 0x07
+//    { 2, KEY_ZOOM_OUT        ,0x00000040 }, // Found @0xffe82140, levent 0x03
+//    { 2, KEY_ZOOM_IN         ,0x00000080 }, // Found @0xffe8214c, levent 0x02
+//    { 2, KEY_SET             ,0x00000100 }, // Found @0xffe82158, levent 0x08
+//    { 2, KEY_UP              ,0x00100000 }, // Found @0xffe82194, levent 0x04
+//    { 2, KEY_DOWN            ,0x00200000 }, // Found @0xffe821a0, levent 0x05
+//    { 2, KEY_LEFT            ,0x00400000 }, // Found @0xffe821ac, levent 0x06
+//    { 2, KEY_MENU            ,0x01000000 }, // Found @0xffe821c4, levent 0x09
+//    { 2, KEY_SHOOT_FULL      ,0x00000030 }, // Found @0xffe82134, levent 0x01
+//    { 2, KEY_SHOOT_FULL_ONLY ,0x00000020 }, // Found @0xffe82134, levent 0x01
+//    { 2, KEY_SHOOT_HALF      ,0x00000010 }, // Found @0xffe82128, levent 0x00
+//    { 0, 0, 0 }
+//};
+
+// Values below go in 'platform_camera.h':
+//#define CAM_DRYOS         1
+//#define CAM_DRYOS_2_3_R39 1 // Defined for cameras with DryOS version R39 or higher
+//#define CAM_RAW_ROWPIX    3720 // Found @0xffcea098
+//#define CAM_RAW_ROWS      2772 // Found @0xffcea0a4
+//#undef  CAM_UNCACHED_BIT
+//#define CAM_UNCACHED_BIT  0x10000000 // Found @0xffc29320
+
+// Misc stuff
+DEF(ctypes, 0xffe81a16)
+
+// Stubs below matched 100%.
+//    Name                                     Address                Comp to stubs_entry_2.S
+NSTUB(AllocateMemory                          ,0xffdfa458) //101
+NSTUB(AllocateUncacheableMemory               ,0xffc292dc) //112
+NSTUB(Close                                   ,0xffc2610c) //101
+NSTUB(CreateTask                              ,0xffc0f1a8) //101
+NSTUB(DebugAssert                             ,0xffc0f680) //111
+NSTUB(DeleteFile_Fut                          ,0xffc25a84) //112
+NSTUB(DoAFLock                                ,0xffc27558) //102
+NSTUB(EnterToCompensationEVF                  ,0xffc27608) //104
+NSTUB(ExecuteEventProcedure                   ,0xffc65798) //  1
+NSTUB(ExitFromCompensationEVF                 ,0xffc2764c) //104
+NSTUB(ExitTask                                ,0xffc0f438) //101
+NSTUB(ExpCtrlTool_StartContiAE                ,0xffc34ce8) //104
+NSTUB(ExpCtrlTool_StopContiAE                 ,0xffc34dc0) //104
+NSTUB(Fclose_Fut                              ,0xffc25c00) //101
+NSTUB(Feof_Fut                                ,0xffc25dec) //  1
+NSTUB(Fflush_Fut                              ,0xffc25e28) //  1
+NSTUB(Fgets_Fut                               ,0xffc25d54) //  1
+NSTUB(Fopen_Fut                               ,0xffc25bc0) //101
+NSTUB(Fread_Fut                               ,0xffc25cac) //101
+NSTUB(FreeMemory                              ,0xffdfa450) //101
+NSTUB(FreeUncacheableMemory                   ,0xffc2931c) //112
+NSTUB(Fseek_Fut                               ,0xffc25da0) //101
+NSTUB(Fwrite_Fut                              ,0xffc25d00) //101
+NSTUB(GetBatteryTemperature                   ,0xffc45624) //102
+NSTUB(GetCCDTemperature                       ,0xffc455b0) //102
+NSTUB(GetCurrentAvValue                       ,0xffd087b8) //102
+NSTUB(GetDrive_ClusterSize                    ,0xffc512bc) //  4
+NSTUB(GetDrive_FreeClusters                   ,0xffc23810) //  3
+// ALT: NSTUB(GetDrive_FreeClusters, 0xffc5131c) // 4 9/0
+NSTUB(GetDrive_TotalClusters                  ,0xffc512f0) //  3
+NSTUB(GetFocusLensSubjectDistance             ,0xffd07ab0) //102
+NSTUB(GetFocusLensSubjectDistanceFromLens     ,0xffd07f08) //  3
+NSTUB(GetImageFolder                          ,0xffcf1058) //106
+NSTUB(GetKbdState                             ,0xffc435d4) //109
+NSTUB(GetMemInfo                              ,0xffc0a7f8) //  3
+NSTUB(GetOpticalTemperature                   ,0xffc4569c) //102
+NSTUB(GetParameterData                        ,0xffd2f0a4) //101
+NSTUB(GetPropertyCase                         ,0xffc694a4) //102
+NSTUB(GetSystemTime                           ,0xffdfa4b0) //101
+NSTUB(GetZoomLensCurrentPoint                 ,0xffd09c78) //102
+NSTUB(GetZoomLensCurrentPosition              ,0xffdf24f4) //102
+NSTUB(GiveSemaphore                           ,0xffc0f104) //112
+NSTUB(IsStrobeChargeCompleted                 ,0xffca6ff0) //102
+NSTUB(LEDDrive                                ,0xffc42bc8) //103
+NSTUB(LocalTime                               ,0xffc634a8) //  1
+NSTUB(LockMainPower                           ,0xffc6cd7c) //103
+NSTUB(Lseek                                   ,0xffc26228) //101
+NSTUB(MakeDirectory_Fut                       ,0xffc25af8) //  1
+NSTUB(MoveFocusLensToDistance                 ,0xffe50700) //102
+NSTUB(MoveIrisWithAv                          ,0xffdf7b98) //102
+NSTUB(MoveZoomLensWithPoint                   ,0xffdf8124) //102
+NSTUB(NewTaskShell                            ,0xffc68eb0) //103
+NSTUB(Open                                    ,0xffc260a0) //101
+NSTUB(PB2Rec                                  ,0xffc6f9e8) //104
+NSTUB(PT_MoveDigitalZoomToWide                ,0xffc570e8) //102
+NSTUB(PT_MoveOpticalZoomAt                    ,0xffc570c0) //102
+NSTUB(PT_PlaySound                            ,0xffc5f328) //  7
+NSTUB(PostLogicalEventForNotPowerType         ,0xffc6c5ac) //103
+NSTUB(PostLogicalEventToUI                    ,0xffc6c5f8) //103
+NSTUB(PutInNdFilter                           ,0xffdf7f88) //102
+NSTUB(PutOutNdFilter                          ,0xffdf7fac) //102
+NSTUB(Read                                    ,0xffc0b308) //101
+NSTUB(ReadFastDir                             ,0xffde8ef0) //  4
+NSTUB(Rec2PB                                  ,0xffc6fa28) //104
+NSTUB(RefreshPhysicalScreen                   ,0xffd79ea0) //104
+NSTUB(Remove                                  ,0xffc26140) //  4
+NSTUB(RenameFile_Fut                          ,0xffc259f0) //  4
+NSTUB(Restart                                 ,0xffc2aab4) //106
+NSTUB(ScreenLock                              ,0xffd7b04c) //  3
+NSTUB(ScreenUnlock                            ,0xffd7b090) //  7
+NSTUB(SetAE_ShutterSpeed                      ,0xffe52e90) //102
+NSTUB(SetAutoShutdownTime                     ,0xffc6cdf0) //103
+NSTUB(SetCurrentCaptureModeType               ,0xffc7310c) //101
+NSTUB(SetFileTimeStamp                        ,0xffc263a8) //  4
+NSTUB(SetLogicalEventActive                   ,0xffc6caf4) //101
+NSTUB(SetParameterData                        ,0xffd2f014) //101
+NSTUB(SetPropertyCase                         ,0xffc69374) //102
+NSTUB(SetScriptMode                           ,0xffc6cb44) //101
+NSTUB(SleepTask                               ,0xffc29160) //101
+NSTUB(TakeSemaphore                           ,0xffc0f034) //101
+NSTUB(TurnOffBackLight                        ,0xffc77d88) //104
+NSTUB(TurnOnBackLight                         ,0xffc77d70) //104
+NSTUB(UIFS_WriteFirmInfoToFile                ,0xffd1f818) //101
+NSTUB(UnlockAF                                ,0xffc27590) //102
+NSTUB(UnlockMainPower                         ,0xffc6ccd0) //103
+NSTUB(UnsetZoomForMovie                       ,0xffd35564) //104
+NSTUB(UpdateMBROnFlash                        ,0xffc5113c) //105
+NSTUB(VbattGet                                ,0xffc22be4) //103
+NSTUB(Write                                   ,0xffc2619c) //101
+NSTUB(WriteSDCard                             ,0xffcfc7ac) //108
+NSTUB(_log                                    ,0xffe7f578) //111
+NSTUB(_log10                                  ,0xffe7e4bc) //112
+NSTUB(_pow                                    ,0xffe7e62c) //114
+NSTUB(_sqrt                                   ,0xffe808e0) //  1
+NSTUB(add_ptp_handler                         ,0xffdbd384) //  3
+NSTUB(apex2us                                 ,0xffd7c39c) //  4
+NSTUB(close                                   ,0xffc0b120) //  1
+NSTUB(closedir                                ,0xffde8d4c) //  4
+NSTUB(err_init_task                           ,0xffc05f50) //  4
+NSTUB(exmem_alloc                             ,0xffc64148) //103
+NSTUB(free                                    ,0xffc04160) //112
+NSTUB(kbd_p1_f                                ,0xffc23ba8) //109
+NSTUB(kbd_p1_f_cont                           ,0xffc23bb4) //109
+NSTUB(kbd_p2_f                                ,0xffc2345c) //109
+NSTUB(kbd_read_keys                           ,0xffc23b2c) //109
+NSTUB(kbd_read_keys_r2                        ,0xffc42fb8) //109
+NSTUB(lseek                                   ,0xffc26228) //101
+NSTUB(malloc                                  ,0xffc04104) //112
+NSTUB(memcmp                                  ,0xffc11318) //101
+NSTUB(memcpy                                  ,0xffc2e864) //101
+NSTUB(memset                                  ,0xffd7b3d4) //101
+NSTUB(mkdir                                   ,0xffc265a8) //  4
+NSTUB(mktime_ext                              ,0xffc7cba0) //  1
+NSTUB(open                                    ,0xffc0b070) //  1
+NSTUB(opendir                                 ,0xffde8d9c) //  4
+NSTUB(openfastdir                             ,0xffde8d9c) //  4
+NSTUB(qsort                                   ,0xffe39418) //  4
+NSTUB(rand                                    ,0xffc11420) //  1
+NSTUB(read                                    ,0xffc0b308) //101
+NSTUB(readfastdir                             ,0xffde8ef0) //  4
+NSTUB(reboot_fw_update                        ,0xffdea764) //  1
+NSTUB(rename                                  ,0xffc259f0) //  4
+NSTUB(set_control_event                       ,0xffc6c814) //111
+NSTUB(srand                                   ,0xffc11414) //  1
+NSTUB(stat                                    ,0xffc26270) //  3
+NSTUB(strcat                                  ,0xffc7c35c) //  1
+NSTUB(strchr                                  ,0xffc03fe8) //  1
+NSTUB(strcmp                                  ,0xffc112d4) //101
+NSTUB(strcpy                                  ,0xffc112bc) //101
+NSTUB(strftime                                ,0xffc7c5a8) //113
+NSTUB(strlen                                  ,0xffc04034) //101
+NSTUB(strncmp                                 ,0xffc03f9c) //  1
+NSTUB(strncpy                                 ,0xffc03f60) //  1
+NSTUB(strrchr                                 ,0xffc0400c) //  1
+NSTUB(strtol                                  ,0xffc2eb44) //101
+NSTUB(strtolx                                 ,0xffc2e948) //109
+  DEF(task_CaptSeq                            ,0xffc5919c) //107
+  DEF(task_ExpDrv                             ,0xffc91388) //110
+  DEF(task_InitFileModules                    ,0xffc704b4) //107
+  DEF(task_MovieRecord                        ,0xffd0c8f8) //107
+  DEF(task_PhySw                              ,0xffc2378c) //107
+NSTUB(time                                    ,0xffc6335c) //  1
+NSTUB(vsprintf                                ,0xffc11280) //  4
+NSTUB(write                                   ,0xffc2619c) //101
Index: /branches/release-1_0/platform/a490/sub/100e/stubs_entry_2.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/stubs_entry_2.S	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/stubs_entry_2.S	(revision 1523)
@@ -0,0 +1,10 @@
+#include "stubs_asm.h"
+
+NHSTUB(MakeAFScan, 0xFFD0F178)					// Ok
+NHSTUB(UnlockAndRefresh, 0xFFD7B090)			// "Window.c"
+NHSTUB(LockAndRefresh, 0xFFD7B04C)				// "Window.c"
+NHSTUB(TurnOffMic, 0xFFC43C30)					// Doesn't work
+NHSTUB(TurnOnMic, 0xFFC43C5C)					// Doesn't work
+NHSTUB(SetZoomActuatorSpeedPercent, 0xFFC00B20)		// nullsub_1
+NHSTUB(kbd_pwr_on, 0xFFC00B20)
+NHSTUB(kbd_pwr_off, 0xFFC00B20)
Index: /branches/release-1_0/platform/a490/sub/100e/boot.c
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/boot.c	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/boot.c	(revision 1523)
@@ -0,0 +1,531 @@
+#include "lolevel.h"
+#include "platform.h"
+#include "core.h"
+#include "dryos31.h"
+
+#define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)
+
+const char * const new_sa = &_end;
+
+extern void task_CaptSeq();
+extern void task_InitFileModules();
+extern void task_MovieRecord();
+extern void task_ExpDrv();
+
+void taskHook(context_t **context)
+{
+	task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context));
+
+	// Replace firmware task addresses with ours
+	if(tcb->entry == (void*)task_CaptSeq)			tcb->entry = (void*)capt_seq_task; 
+	if(tcb->entry == (void*)task_InitFileModules)	tcb->entry = (void*)init_file_modules_task;
+	if(tcb->entry == (void*)task_MovieRecord)		tcb->entry = (void*)movie_record_task;
+	if(tcb->entry == (void*)task_ExpDrv)			tcb->entry = (void*)exp_drv_task;
+}
+
+void CreateTask_spytask() {
+	_CreateTask("SpyTask", 0x19, 0x2000, core_spytask, 0);
+};
+
+
+
+
+void __attribute__((naked,noinline)) boot() {
+	asm volatile (
+			// LED Test
+/*			"LDR     R1, =0xC0220088\n"	// Green LED
+			"MOV     R0, #0x46\n"			// Power on LED
+			"STR     R0, [R1]\n"
+			// End LED Test
+*/
+			"LDR     R1, =0xC0410000\n"
+			"MOV     R0, #0\n"
+			"STR     R0, [R1]\n"
+			"MOV     R1, #0x78\n"
+			"MCR     p15, 0, R1,c1,c0\n"
+			"MOV     R1, #0\n"
+			"MCR     p15, 0, R1,c7,c10, 4\n"
+			"MCR     p15, 0, R1,c7,c5\n"
+			"MCR     p15, 0, R1,c7,c6\n"
+			"MOV     R0, #0x3D\n"
+			"MCR     p15, 0, R0,c6,c0\n"
+			"MOV     R0, #0xC000002F\n"
+			"MCR     p15, 0, R0,c6,c1\n"
+			"MOV     R0, #0x31\n"
+			"MCR     p15, 0, R0,c6,c2\n"
+			"LDR     R0, =0x10000031\n"
+			"MCR     p15, 0, R0,c6,c3\n"
+			"MOV     R0, #0x40000017\n"
+			"MCR     p15, 0, R0,c6,c4\n"
+			"LDR     R0, =0xFFC0002B\n"
+			"MCR     p15, 0, R0,c6,c5\n"
+			"MOV     R0, #0x34\n"
+			"MCR     p15, 0, R0,c2,c0\n"
+			"MOV     R0, #0x34\n"
+			"MCR     p15, 0, R0,c2,c0, 1\n"
+			"MOV     R0, #0x34\n"
+			"MCR     p15, 0, R0,c3,c0\n"
+			"LDR     R0, =0x3333330\n"
+			"MCR     p15, 0, R0,c5,c0, 2\n"
+			"LDR     R0, =0x3333330\n"
+			"MCR     p15, 0, R0,c5,c0, 3\n"
+			"MRC     p15, 0, R0,c1,c0\n"
+			"ORR     R0, R0, #0x1000\n"
+			"ORR     R0, R0, #4\n"
+			"ORR     R0, R0, #1\n"
+			"MCR     p15, 0, R0,c1,c0\n"
+			"MOV     R1, #0x40000006\n"
+			"MCR     p15, 0, R1,c9,c1\n"
+			"MOV     R1, #6\n"
+			"MCR     p15, 0, R1,c9,c1, 1\n"
+			"MRC     p15, 0, R1,c1,c0\n"
+			"ORR     R1, R1, #0x50000\n"
+			"MCR     p15, 0, R1,c1,c0\n"
+			"LDR     R2, =0xC0200000\n"
+			"MOV     R1, #1\n"
+			"STR     R1, [R2,#0x10C]\n"
+			"MOV     R1, #0xFF\n"
+			"STR     R1, [R2,#0xC]\n"
+			"STR     R1, [R2,#0x1C]\n"
+			"STR     R1, [R2,#0x2C]\n"
+			"STR     R1, [R2,#0x3C]\n"
+			"STR     R1, [R2,#0x4C]\n"
+			"STR     R1, [R2,#0x5C]\n"
+			"STR     R1, [R2,#0x6C]\n"
+			"STR     R1, [R2,#0x7C]\n"
+			"STR     R1, [R2,#0x8C]\n"
+			"STR     R1, [R2,#0x9C]\n"
+			"STR     R1, [R2,#0xAC]\n"
+			"STR     R1, [R2,#0xBC]\n"
+			"STR     R1, [R2,#0xCC]\n"
+			"STR     R1, [R2,#0xDC]\n"
+			"STR     R1, [R2,#0xEC]\n"
+			"STR     R1, [R2,#0xFC]\n"
+			"LDR     R1, =0xC0400008\n"
+			"LDR     R2, =0x430005\n"
+			"STR     R2, [R1]\n"
+			"MOV     R1, #1\n"
+			"LDR     R2, =0xC0243100\n"
+			"STR     R2, [R1]\n"
+			"LDR     R2, =0xC0242010\n"
+			"LDR     R1, [R2]\n"
+			"ORR     R1, R1, #1\n"
+			"STR     R1, [R2]\n"
+			"LDR     R0, =0xFFEE6708 \n"
+			"LDR     R1, =0x1900\n"
+			"LDR     R3, =0xAB04\n"
+"loc_FFC0013C:\n"
+			"CMP     R1, R3\n"
+			"LDRCC   R2, [R0],#4\n"
+			"STRCC   R2, [R1],#4\n"
+			"BCC     loc_FFC0013C\n"
+			"LDR     R1, =0x129140\n"
+			"MOV     R2, #0\n"
+"loc_FFC00154:\n"
+			"CMP     R3, R1\n"
+			"STRCC   R2, [R3],#4\n"
+			"BCC     loc_FFC00154\n"
+			"B       sub_FFC00358_my\n"  //--------->
+	);
+};
+
+
+void __attribute__((naked,noinline)) sub_FFC00358_my() {
+	*(int*)0x1934=(int)taskHook;	//http://chdk.setepontos.com/index.php/topic,4194.0.html
+	*(int*)0x1938=(int)taskHook;
+
+	// Replacement of sub_FFC00358 for correct power-on (power button=shoot mode, play button=play mode).
+	*(int*)(0x20F4)= (*(int*)0xC022005C) & 1 ? 0x4000000 : 0x2000000; //  0x20f4=FFC42F34
+
+asm volatile (
+			"LDR     R0, =0xFFC003D0\n"
+			"MOV     R1, #0\n"
+			"LDR     R3, =0xFFC00408\n"
+"loc_FFC00364:\n"
+			"CMP     R0, R3\n"
+			"LDRCC   R2, [R0],#4\n"
+			"STRCC   R2, [R1],#4\n"
+			"BCC     loc_FFC00364\n"
+			"LDR     R0, =0xFFC00408\n"
+			"MOV     R1, #0x4B0\n"
+			"LDR     R3, =0xFFC0061C\n"
+"loc_FFC00380:\n"
+			"CMP     R0, R3\n"
+			"LDRCC   R2, [R0],#4\n"
+			"STRCC   R2, [R1],#4\n"
+			"BCC     loc_FFC00380\n"
+			"MOV     R0, #0xD2\n"
+			"MSR     CPSR_cxsf, R0\n"
+			"MOV     SP, #0x1000\n"
+			"MOV     R0, #0xD3\n"
+			"MSR     CPSR_cxsf, R0\n"
+			"MOV     SP, #0x1000\n"
+			"LDR     R0, =0x6C4\n"
+			"LDR     R2, =0xEEEEEEEE\n"
+			"MOV     R3, #0x1000\n"
+"loc_FFC003B4:\n"
+			"CMP     R0, R3\n"
+			"STRCC   R2, [R0],#4\n"
+			"BCC     loc_FFC003B4\n"
+			"BL      sub_FFC0119C_my\n" //-------->
+	);
+}
+
+void __attribute__((naked,noinline)) sub_FFC0119C_my() {
+	asm volatile (
+			"STR     LR, [SP,#-4]!\n"
+			"SUB     SP, SP, #0x74\n"
+			"MOV     R0, SP\n"
+			"MOV     R1, #0x74\n"
+			"BL      sub_FFE7E2BC\n"
+			"MOV     R0, #0x53000\n"
+			"STR     R0, [SP,#4]\n"
+			//    "LDR     R0, =0x129140\n"			// -
+			"LDR     R0, =new_sa\n"				// +
+			"LDR     R0, [R0]\n"				// +
+			"LDR     R2, =0x279C00\n"
+			"LDR     R1, =0x2724A8\n"
+			"STR     R0, [SP,#8]\n"
+			"SUB     R0, R1, R0\n"
+			"ADD     R3, SP, #0xC\n"
+			"STR     R2, [SP]\n"
+			"STMIA   R3, {R0-R2}\n"
+			"MOV     R0, #0x22\n"
+			"STR     R0, [SP,#0x18]\n"
+			"MOV     R0, #0x68\n"
+			"STR     R0, [SP,#0x1C]\n"
+			"LDR     R0, =0x19B\n"
+			"LDR     R1, =sub_FFC05E5C_my\n"	//--------->
+			"B       sub_FFC011F0\n"            // continue in firmware
+	);
+}
+
+
+void __attribute__((naked,noinline)) sub_FFC05E5C_my() {
+	asm volatile (
+			"STMFD   SP!, {R4,LR}\n"
+			"BL      sub_FFC00B24\n"
+			"BL      sub_FFC0A8D0\n"	// dmsetup
+			"CMP     R0, #0\n"
+			"LDRLT   R0, =0xFFC05F70\n"
+			"BLLT    sub_FFC05F50\n"	// err_init_task
+			"BL      sub_FFC05A98\n"
+			"CMP     R0, #0\n"
+			"LDRLT   R0, =0xFFC05F78\n"
+			"BLLT    sub_FFC05F50\n"
+			"LDR     R0, =0xFFC05F88\n"
+			"BL      sub_FFC05B80\n"
+			"CMP     R0, #0\n"
+			"LDRLT   R0, =0xFFC05F90\n"
+			"BLLT    sub_FFC05F50\n"
+			"LDR     R0, =0xFFC05F88\n"
+			"BL      sub_FFC03BF4\n"
+			"CMP     R0, #0\n"
+			"LDRLT   R0, =0xFFC05FA4\n"
+			"BLLT    sub_FFC05F50\n"
+			"BL      sub_FFC0A2C8\n"
+			"CMP     R0, #0\n"
+			"LDRLT   R0, =0xFFC05FB0\n"
+			"BLLT    sub_FFC05F50\n"
+			"BL      sub_FFC01680\n"
+			"CMP     R0, #0\n"
+			"LDRLT   R0, =0xFFC05FBC\n"
+			"BLLT    sub_FFC05F50\n"
+			"LDMFD   SP!, {R4,LR}\n"
+			"B       taskcreate_Startup_my\n" //-------->
+	);
+};
+
+// ROM:0xFFC10654
+void __attribute__((naked,noinline)) taskcreate_Startup_my() {
+	asm volatile (
+			"STMFD   SP!, {R3,LR}\n"
+			//  "BL      j_nullsub_192\n"
+			"BL      sub_FFC2ABA8\n"
+			"CMP     R0, #0\n"
+			"BNE     loc_FFC10690\n"
+			"BL      sub_FFC250C0\n"
+			"CMP     R0, #0\n"
+			"BEQ     loc_FFC10690\n"
+			"BL      sub_FFC238CC\n"
+			"CMP     R0, #0\n"
+			"BNE     loc_FFC10690\n"
+			"LDR     R1, =0xC0220000\n"
+			"MOV     R0, #0x44\n"
+			"STR     R0, [R1,#0x20]\n"
+"loc_FFC1068C:\n"
+			"B       loc_FFC1068C\n"
+"loc_FFC10690:\n"
+			//  "BL      sub_FFC238D8\n"			// removed for correct power-on on 'on/off' button.
+			//  "BL      j_nullsub_193\n"
+			"BL      sub_FFC28FD8\n"
+			"LDR     R1, =0x2CE000\n"
+			"MOV     R0, #0\n"
+			"BL      sub_FFC29220\n"
+			"BL      sub_FFC291CC\n"
+			"MOV     R3, #0\n"
+			"STR     R3, [SP]\n"
+			"LDR     R3, =task_Startup_my\n"	//-------->
+            "B       sub_FFC106B8\n"            // Continue in firmware
+	);
+}
+// ROM:0xFFC105F8
+void __attribute__((naked,noinline)) task_Startup_my() {
+	asm volatile (
+			"STMFD   SP!, {R4,LR}\n"
+			"BL      sub_FFC06278\n"
+			"BL      sub_FFC249D0\n"
+			"BL      sub_FFC2326C\n"
+			//  "BL      j_nullsub_196\n"
+			"BL      sub_FFC2ADD4\n"
+			//  "BL      sub_FFC2AC7C\n"		// - start diskboot.bin
+			"BL      sub_FFC2AF70\n"
+			"BL      sub_FFC2AE04\n"
+			"BL      sub_FFC28470\n"
+			"BL      sub_FFC2AF74\n"
+			"BL      CreateTask_spytask\n"	// +
+			//  "BL      sub_FFC237C0\n"		// original taskcreate_PhySw
+			"BL      taskcreate_PhySw_my\n"	// + ---------->
+            "B       sub_FFC10628\n"            // continue in firmware
+	);
+}
+
+// ROM:FFC237C0 taskcreate_PhySw
+void __attribute__((naked,noinline)) taskcreate_PhySw_my() {
+	asm volatile(
+			"STMFD   SP!, {R3-R5,LR}\n"
+			"LDR     R4, =0x1BE4\n"
+			"LDR     R0, [R4,#0x10]\n"
+			"CMP     R0, #0\n"
+			"BNE     sub_FFC237F4\n"    // continue in firmware
+			"MOV     R3, #0\n"
+			"STR     R3, [SP]\n"
+			"LDR     R3, =mykbd_task\n"		// Changed
+			//  "MOV     R2, #0x800\n"
+			"MOV     R2, #0x2000\n"			// + stack size for new task_PhySw so we don't have to do stack switch
+			"B       sub_FFC237E4\n"    // Continue code
+	);
+}
+/*******************************************************************/
+
+// ROM:FFC704B4 task_InitFileModules
+void __attribute__((naked,noinline)) init_file_modules_task() {
+	asm volatile(
+			"STMFD   SP!, {R4-R6,LR}\n"
+			"BL      sub_FFC69D70\n"
+			"LDR     R5, =0x5006\n"
+			"MOVS    R4, R0\n"
+			"MOVNE   R1, #0\n"
+			"MOVNE   R0, R5\n"
+			"BLNE    sub_FFC6C5F8\n"
+			"BL      sub_FFC69D9C_my\n"			//------------->
+			"BL      core_spytask_can_start\n"	// + set "it's safe to start" flag for spytask
+            "B       sub_FFC704D4\n"            // continue in firmware
+	);
+}
+
+void __attribute__((naked,noinline)) sub_FFC69D9C_my() {
+	asm volatile(
+			"STMFD   SP!, {R4,LR}\n"
+			"MOV     R0, #3\n"
+			"BL      sub_FFC50E90_my\n"			//---------->
+            "B       sub_FFC69DA8\n"            // continue in firmware
+	);
+}
+
+
+void __attribute__((naked,noinline)) sub_FFC50E90_my() {
+		asm volatile(
+		"STMFD   SP!, {R4-R8,LR}\n"
+		"MOV     R8, R0\n"
+		"BL      sub_FFC50E10\n"
+		"LDR     R1, =0x322B0\n"
+		"MOV     R6, R0\n"
+		"ADD     R4, R1, R0,LSL#7\n"
+		"LDR     R0, [R4,#0x6C]\n"
+		"CMP     R0, #4\n"
+		"LDREQ   R1, =0x817\n"
+		"LDREQ   R0, =0xFFC50950\n"
+		"BLEQ    sub_FFC0F680\n"
+		"MOV     R1, R8\n"
+		"MOV     R0, R6\n"
+		"BL      sub_FFC506C8\n"
+		"LDR     R0, [R4,#0x38]\n"
+		"BL      sub_FFC51530\n"
+		"CMP     R0, #0\n"
+		"STREQ   R0, [R4,#0x6C]\n"
+		"MOV     R0, R6\n"
+		"BL      sub_FFC50758\n"
+		"MOV     R0, R6\n"
+		"BL      sub_FFC50AB8_my\n"		//--------->
+        "B       sub_FFC50EE8\n"        // continue in firmware
+		);
+}
+
+void __attribute__((naked,noinline)) sub_FFC50AB8_my() {
+	asm volatile(
+			"STMFD   SP!, {R4-R6,LR}\n"
+			"MOV     R5, R0\n"
+			"LDR     R0, =0x322B0\n"
+			"ADD     R4, R0, R5,LSL#7\n"
+			"LDR     R0, [R4,#0x6C]\n"
+			"TST     R0, #2\n"
+			"MOVNE   R0, #1\n"
+			"LDMNEFD SP!, {R4-R6,PC}\n"
+			"LDR     R0, [R4,#0x38]\n"
+			"MOV     R1, R5\n"
+			"BL      sub_FFC507D8_my\n"     //--------->
+            "B       sub_FFC50AE4\n"        // continue in firmware
+	);
+}
+
+void __attribute__((naked,noinline)) sub_FFC507D8_my() {
+asm volatile(
+			"STMFD   SP!, {R4-R10,LR}\n"
+			"MOV     R9, R0\n"
+			"LDR     R0, =0x322B0\n"
+			"MOV     R8, #0\n"
+			"ADD     R5, R0, R1,LSL#7\n"
+			"LDR     R0, [R5,#0x3C]\n"
+			"MOV     R7, #0\n"
+			"CMP     R0, #7\n"
+			"MOV     R6, #0\n"
+			"ADDLS   PC, PC, R0,LSL#2\n"
+			"B       loc_FFC50930\n"
+"loc_FFC50804:\n"
+			"B       loc_FFC5083C\n"
+"loc_FFC50808:\n"
+			"B       loc_FFC50824\n"
+"loc_FFC5080C:\n"
+			"B       loc_FFC50824\n"
+"loc_FFC50810:\n"
+			"B       loc_FFC50824\n"
+"loc_FFC50814:\n"
+			"B       loc_FFC50824\n"
+"loc_FFC50818:\n"
+			"B       loc_FFC50928\n"
+"loc_FFC5081C:\n"
+			"B       loc_FFC50824\n"
+"loc_FFC50820:\n"
+			"B       loc_FFC50824\n"
+"loc_FFC50824:\n"
+			"MOV     R2, #0\n"
+			"MOV     R1, #0x200\n"
+			"MOV     R0, #2\n"
+			"BL      sub_FFC63F9C\n"
+			"MOVS    R4, R0\n"
+			"BNE     loc_FFC50844\n"
+"loc_FFC5083C:\n"
+			"MOV     R0, #0\n"
+			"LDMFD   SP!, {R4-R10,PC}\n"
+"loc_FFC50844:\n"
+			"LDR     R12, [R5,#0x50]\n"
+			"MOV     R3, R4\n"
+			"MOV     R2, #1\n"
+			"MOV     R1, #0\n"
+			"MOV     R0, R9\n"
+			"BLX     R12\n"
+			"CMP     R0, #1\n"
+			"BNE     loc_FFC50870\n"
+			"MOV     R0, #2\n"
+			"BL      sub_FFC640E8\n"
+			"B       loc_FFC5083C\n"
+"loc_FFC50870:\n"
+			"LDR     R1, [R5,#0x64]\n"
+			"MOV     R0, R9\n"
+			"BLX     R1\n"
+
+			"MOV   R1, R4\n"           // + pointer to MBR in R1
+			"BL    mbr_read_dryos\n"   // + total sectors count in R0 before and after call
+
+			// Start of DataGhost's FAT32 autodetection code
+			// Policy: If there is a partition which has type W95 FAT32, use the first one of those for image storage
+			// According to the code below, we can use R1, R2, R3 and R12.
+			// LR wasn't really used anywhere but for storing a part of the partition signature. This is the only thing
+			// that won't work with an offset, but since we can load from LR+offset into LR, we can use this to do that :)
+			"MOV     R12, R4\n"                    // Copy the MBR start address so we have something to work with
+			"MOV     LR, R4\n"                     // Save old offset for MBR signature
+			"MOV     R1, #1\n"                     // Note the current partition number
+			"B       dg_sd_fat32_enter\n"          // We actually need to check the first partition as well, no increments yet!
+"dg_sd_fat32:\n"
+			"CMP     R1, #4\n"                     // Did we already see the 4th partition?
+			"BEQ     dg_sd_fat32_end\n"            // Yes, break. We didn't find anything, so don't change anything.
+			"ADD     R12, R12, #0x10\n"            // Second partition
+			"ADD     R1, R1, #1\n"                 // Second partition for the loop
+"dg_sd_fat32_enter:\n"
+			"LDRB    R2, [R12, #0x1BE]\n"          // Partition status
+			"LDRB    R3, [R12, #0x1C2]\n"          // Partition type (FAT32 = 0xB)
+			"CMP     R3, #0xB\n"                   // Is this a FAT32 partition?
+			"CMPNE   R3, #0xC\n"                   // Not 0xB, is it 0xC (FAT32 LBA) then?
+			"BNE     dg_sd_fat32\n"                // No, it isn't. Loop again.
+			"CMP     R2, #0x00\n"                  // It is, check the validity of the partition type
+			"CMPNE   R2, #0x80\n"
+			"BNE     dg_sd_fat32\n"                // Invalid, go to next partition
+			// This partition is valid, it's the first one, bingo!
+			"MOV     R4, R12\n"                    // Move the new MBR offset for the partition detection.
+
+"dg_sd_fat32_end:\n"
+			// End of DataGhost's FAT32 autodetection code
+
+
+			"LDRB    R1, [R4,#0x1C9]\n"
+			"LDRB    R3, [R4,#0x1C8]\n"
+			"LDRB    R12, [R4,#0x1CC]\n"
+			"MOV     R1, R1,LSL#24\n"
+			"ORR     R1, R1, R3,LSL#16\n"
+			"LDRB    R3, [R4,#0x1C7]\n"
+			"LDRB    R2, [R4,#0x1BE]\n"
+			//   "LDRB    LR, [R4,#0x1FF]\n"     // -
+			"ORR     R1, R1, R3,LSL#8\n"
+			"LDRB    R3, [R4,#0x1C6]\n"
+			"CMP     R2, #0\n"
+			"CMPNE   R2, #0x80\n"
+			"ORR     R1, R1, R3\n"
+			"LDRB    R3, [R4,#0x1CD]\n"
+			"MOV     R3, R3,LSL#24\n"
+			"ORR     R3, R3, R12,LSL#16\n"
+			"LDRB    R12, [R4,#0x1CB]\n"
+			"ORR     R3, R3, R12,LSL#8\n"
+			"LDRB    R12, [R4,#0x1CA]\n"
+			"ORR     R3, R3, R12\n"
+			//   "LDRB    R12, [R4,#0x1FE]\n"     // -
+			"LDRB    R12, [LR,#0x1FE]\n"           // + First MBR signature byte (0x55), LR is original offset.
+			"LDRB    LR, [LR,#0x1FF]\n"            // + Last MBR signature byte (0xAA), LR is original offset.
+			"BNE     loc_FFC508FC\n"
+			"CMP     R0, R1\n"
+			"BCC     loc_FFC508FC\n"
+			"ADD     R2, R1, R3\n"
+			"CMP     R2, R0\n"
+			"CMPLS   R12, #0x55\n"
+			"CMPEQ   LR, #0xAA\n"
+			"MOVEQ   R7, R1\n"
+			"MOVEQ   R6, R3\n"
+			"MOVEQ   R4, #1\n"
+			"BEQ     loc_FFC50900\n"
+"loc_FFC508FC:\n"
+			"MOV     R4, R8\n"
+"loc_FFC50900:\n"
+			"MOV     R0, #2\n"
+			"BL      sub_FFC640E8\n"
+			"CMP     R4, #0\n"
+			"BNE     loc_FFC5093C\n"
+			"LDR     R1, [R5,#0x64]\n"
+			"MOV     R7, #0\n"
+			"MOV     R0, R9\n"
+			"BLX     R1\n"
+			"MOV     R6, R0\n"
+			"B       loc_FFC5093C\n"
+"loc_FFC50928:\n"
+			"MOV     R6, #0x40\n"
+			"B       loc_FFC5093C\n"
+"loc_FFC50930:\n"
+			"LDR     R1, =0x572\n"
+			"LDR     R0, =0xFFC50950\n"
+			"BL      sub_FFC0F680\n"
+"loc_FFC5093C:\n"
+			"STR     R7, [R5,#0x44]!\n"
+			"STMIB   R5, {R6,R8}\n"
+			"MOV     R0, #1\n"
+			"LDMFD   SP!, {R4-R10,PC}\n"
+	);
+}
Index: /branches/release-1_0/platform/a490/sub/100e/stubs_min.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/stubs_min.S	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/stubs_min.S	(revision 1523)
@@ -0,0 +1,3 @@
+#include "stubs_asm.h"
+
+DEF(enabled_refresh_physical_screen, 0x7324+0x20)	// Ok Found at FFD7B254, "ScreenLock"
Index: /branches/release-1_0/platform/a490/sub/100e/makefile.inc
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/makefile.inc	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/makefile.inc	(revision 1523)
@@ -0,0 +1,27 @@
+#PLATFORMID=0x31F0
+PLATFORMID=12784
+
+PLATFORMOS=dryos
+
+# address where wif or diskboot code will be loaded by camera, ROM:FFC00134
+MEMBASEADDR=0x1900
+
+# size of memory region for CHDK
+RESTARTSTART=0x50000
+
+# ROM:FFC0014C
+MEMISOSTART=0x129140
+
+# Base address 0xFFC00000 for A
+ROMBASEADDR=0xFFC00000
+
+
+PLFLAGS=-DMEMBASEADDR=$(MEMBASEADDR) -DMEMISOSTART=$(MEMISOSTART) -DMEMISOSIZE=$(MEMISOSIZE)
+PLFLAGS+=-DRESTARTSTART=$(RESTARTSTART)
+
+# type of diskboot encoding: undefined = none; 1 = original; 2 = sx200, d10; 3 = ixus200...
+# Dancing Bits
+NEED_ENCODED_DISKBOOT=4
+
+# FIR (requires correct keys in platform/fi2.inc)
+KEYSYS=d4a
Index: /branches/release-1_0/platform/a490/sub/100e/stubs_asm.h
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/stubs_asm.h	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/stubs_asm.h	(revision 1523)
@@ -0,0 +1,20 @@
+    .text
+
+#define DEF(n,a) \
+    .globl n; n = a
+
+#define NSTUB(name, addr)\
+    .globl _##name ;\
+    .weak _##name ;\
+    _##name: ;\
+	ldr  pc, = ## addr
+
+#define NHSTUB(name, addr)\
+    .globl _##name ;\
+    _##name: ;\
+	ldr  pc, = ## addr
+
+#define STUB(addr)\
+    .globl sub_ ## addr ;\
+    sub_ ## addr: ;\
+	ldr  pc, =0x ## addr
Index: /branches/release-1_0/platform/a490/sub/100e/lib.c
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/lib.c	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/lib.c	(revision 1523)
@@ -0,0 +1,53 @@
+#include "platform.h"
+#include "lolevel.h"
+
+char *hook_raw_image_addr()
+{
+	return (char*) 0x10E52420; // Ok, ROM:FFCE9A44
+}
+
+long hook_raw_size()
+{
+	return 0xEC04F0;           // "CRAW BUFF SIZE"
+}
+
+// Live picture buffer (shoot not pressed)
+void *vid_get_viewport_live_fb()
+{
+	return (void*)0;
+    /*void **fb=(void **)0x3E80;  // ?
+    unsigned char buff = *((unsigned char*)0x3CF0); // sub_FFC87F0C
+    if (buff == 0) buff = 2;  else buff--;
+    return fb[buff];*/
+}
+
+// OSD buffer
+void *vid_get_bitmap_fb()
+{
+	return (void*)0x10361000; // "BmpDDev.c", found at 0xFFCD1DD4
+}
+
+// Live picture buffer (shoot half-pressed)
+void *vid_get_viewport_fb()
+{
+	return (void*)0x10648CC0;  // "VRAM Address", found at sub_FFE53B88
+}
+
+void *vid_get_viewport_fb_d()
+{
+	return (void*)(*(int*)(0x2540+0x54)); // sub_FFC528C0 / sub_FFC53554?
+}
+
+long vid_get_bitmap_screen_width() { return 360; }
+long vid_get_bitmap_screen_height() { return 240; }
+
+long vid_get_viewport_height() { return 240; }
+
+long vid_get_bitmap_buffer_width() { return 360; }
+long vid_get_bitmap_buffer_height() { return 240; }
+
+char *camera_jpeg_count_str()
+{
+	return (char*)0x7571C;  // "9999" at loc_FFD70AF0
+}
+
Index: /branches/release-1_0/platform/a490/sub/100e/movie_rec.c
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/movie_rec.c	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/movie_rec.c	(revision 1523)
@@ -0,0 +1,327 @@
+#include "conf.h"
+
+int *video_quality = &conf.video_quality;
+int *video_mode    = &conf.video_mode;
+
+long def_table[24]={0x2000, 0x38D, 0x788, 0x5800, 0x9C5, 0x14B8, 0x10000, 0x1C6A, 0x3C45, 0x8000, 0xE35, 0x1E23,
+           0x1CCD, -0x2E1, -0x579, 0x4F33, -0x7EB, -0xF0C, 0xE666, -0x170A, -0x2BC6, 0x7333, -0xB85, -0x15E3};
+
+long table[24];
+
+void change_video_tables(int a, int b){
+ int i;
+ for (i=0;i<24;i++) table[i]=(def_table[i]*a)/b;
+}
+
+long CompressionRateTable[]={0x60, 0x5D, 0x5A, 0x57, 0x54, 0x51, 0x4D, 0x48, 0x42, 0x3B, 0x32, 0x29, 0x22, 0x1D, 0x17, 0x14, 0x10, 0xE, 0xB, 9, 7, 6, 5, 4, 3, 2, 1};
+
+
+
+// ROM: 0xFFD0C8F8
+void __attribute__((naked,noinline)) movie_record_task(){
+	asm volatile(
+			"STMFD   SP!, {R2-R8,LR}\n"
+			"LDR     R8, =0x346\n"
+			"LDR     R7, =0x2710\n"
+			"LDR     R4, =0x5438\n"
+			"MOV     R6, #0\n"
+			"MOV     R5, #1\n"
+"loc_FFD0C910:\n"
+			"LDR     R0, [R4,#0x18]\n"
+			"MOV     R2, #0\n"
+			"ADD     R1, SP, #4\n"
+			"BL      sub_FFC28AA4\n"
+			"LDR     R0, [R4,#0x20]\n"
+			"CMP     R0, #0\n"
+			"BNE     loc_FFD0C9E0\n"
+			"LDR     R0, [SP,#4]\n"
+			"LDR     R1, [R0]\n"
+			"SUB     R1, R1, #2\n"
+			"CMP     R1, #9\n"
+			"ADDLS   PC, PC, R1,LSL#2\n"
+			"B       loc_FFD0C9E0\n"
+			"B       loc_FFD0C994\n"
+			"B       loc_FFD0C9B4\n"
+			"B       loc_FFD0C9C4\n"
+			"B       loc_FFD0C9CC\n"
+			"B       loc_FFD0C99C\n"
+			"B       loc_FFD0C9D4\n"
+			"B       loc_FFD0C9A4\n"
+			"B       loc_FFD0C9E0\n"
+			"B       loc_FFD0C9DC\n"
+			"B       loc_FFD0C96C\n"
+"loc_FFD0C96C:\n"
+			"LDR     R0, =0xFFD0C604\n"		// nullsub_258?
+			"STR     R6, [R4,#0x34]\n"
+			"STR     R0, [R4,#0xA8]\n"
+			"LDR     R0, =0xFFD0C094\n"
+			"LDR     R2, =0xFFD0BFB0\n"
+			"LDR     R1, =0x6FA40\n"
+			"STR     R6, [R4,#0x24]\n"
+			"BL      sub_FFCB63C0\n"
+			"STR     R5, [R4,#0x38]\n"
+			"B       loc_FFD0C9E0\n"
+"loc_FFD0C994:\n"
+			"BL      unlock_optical_zoom\n"		//  +
+			"BL      sub_FFD0C6FC\n"
+			"B       loc_FFD0C9E0\n"
+"loc_FFD0C99C:\n"
+			"BL      sub_FFD0C404_my\n"			//---------->
+			"B       loc_FFD0C9E0\n"
+"loc_FFD0C9A4:\n"
+			"LDR     R1, [R0,#0x10]\n"
+			"LDR     R0, [R0,#4]\n"
+			"BL      sub_FFDF5FD8\n"
+			"B       loc_FFD0C9E0\n"
+"loc_FFD0C9B4:\n"
+			"LDR     R0, [R4,#0x38]\n"
+			"CMP     R0, #5\n"
+			"STRNE   R5, [R4,#0x28]\n"
+			"B       loc_FFD0C9E0\n"
+"loc_FFD0C9C4:\n"
+			"BL      sub_FFD0C21C\n"
+			"B       loc_FFD0C9E0\n"
+"loc_FFD0C9CC:\n"
+			"BL      sub_FFD0C0E0\n"
+			"B       loc_FFD0C9E0\n"
+"loc_FFD0C9D4:\n"
+			"BL      sub_FFD0BF3C\n"
+			"B       loc_FFD0C9E0\n"
+"loc_FFD0C9DC:\n"
+			"BL      sub_FFD0CB48\n"
+"loc_FFD0C9E0:\n"
+			"LDR     R1, [SP,#4]\n"
+			"LDR     R3, =0xFFD0BDCC\n"
+			"STR     R6, [R1]\n"
+			"STR     R8, [SP]\n"
+			"LDR     R0, [R4,#0x1C]\n"
+			"MOV     R2, R7\n"
+			"BL      sub_FFC0F5C0\n"
+			"B       loc_FFD0C910\n"
+	);
+}
+
+
+void __attribute__((naked,noinline)) sub_FFD0C404_my(){
+	asm volatile(
+			"STMFD   SP!, {R4-R8,LR}\n"
+			"SUB     SP, SP, #0x40\n"
+			"MOV     R6, #0\n"
+			"LDR     R5, =0x5438\n"
+			"MOV     R4, R0\n"
+			"STR     R6, [SP,#0x30]\n"
+			"STR     R6, [SP,#0x28]\n"
+			"LDR     R0, [R5,#0x38]\n"
+			"MOV     R8, #4\n"
+			"CMP     R0, #3\n"
+			"STREQ   R8, [R5,#0x38]\n"
+			"LDR     R0, [R5,#0xA8]\n"
+			"BLX     R0\n"
+			"LDR     R0, [R5,#0x38]\n"
+			"CMP     R0, #4\n"
+			"BNE     loc_FFD0C4DC\n"
+			"ADD     R3, SP, #0x28\n"
+			"ADD     R2, SP, #0x2C\n"
+			"ADD     R1, SP, #0x30\n"
+			"ADD     R0, SP, #0x34\n"
+			"BL      sub_FFDF616C\n"
+			"CMP     R0, #0\n"
+			"MOV     R7, #1\n"
+			"BNE     loc_FFD0C480\n"
+			"LDR     R1, [R5,#0x28]\n"
+			"CMP     R1, #1\n"
+			"BNE     loc_FFD0C4E4\n"
+			"LDR     R1, [R5,#0x60]\n"
+			"LDR     R2, [R5,#0x3C]\n"
+			"CMP     R1, R2\n"
+			"BCC     loc_FFD0C4E4\n"
+"loc_FFD0C480:\n"
+			"CMP     R0, #0x80000001\n"
+			"STREQ   R8, [R5,#0x64]\n"
+			"BEQ     loc_FFD0C4B8\n"
+			"CMP     R0, #0x80000003\n"
+			"STREQ   R7, [R5,#0x64]\n"
+			"BEQ     loc_FFD0C4B8\n"
+			"CMP     R0, #0x80000005\n"
+			"MOVEQ   R0, #2\n"
+			"BEQ     loc_FFD0C4B4\n"
+			"CMP     R0, #0x80000007\n"
+			"STRNE   R6, [R5,#0x64]\n"
+			"BNE     loc_FFD0C4B8\n"
+			"MOV     R0, #3\n"
+"loc_FFD0C4B4:\n"
+			"STR     R0, [R5,#0x64]\n"
+"loc_FFD0C4B8:\n"
+			"LDR     R0, =0x6FA70\n"
+			"LDR     R0, [R0,#8]\n"
+			"CMP     R0, #0\n"
+			"BEQ     loc_FFD0C4D0\n"
+			"BL      sub_FFC445CC\n"
+			"B       loc_FFD0C4D4\n"
+"loc_FFD0C4D0:\n"
+			"BL      sub_FFD0BF3C\n"
+"loc_FFD0C4D4:\n"
+			"MOV     R0, #5\n"
+			"STR     R0, [R5,#0x38]\n"
+"loc_FFD0C4DC:\n"
+			"ADD     SP, SP, #0x40\n"
+			"LDMFD   SP!, {R4-R8,PC}\n"
+"loc_FFD0C4E4:\n"
+			"LDR     LR, [SP,#0x30]\n"
+			"CMP     LR, #0\n"
+			"BEQ     loc_FFD0C5AC\n"
+			"STR     R7, [R5,#0x2C]\n"
+			"LDR     R0, [R5,#0x7C]\n"
+			"LDR     R1, [R4,#0x14]\n"
+			"LDR     R2, [R4,#0x18]\n"
+			"LDR     R12, [R4,#0xC]\n"
+			"ADD     R3, SP, #0x38\n"
+			"ADD     R8, SP, #0x14\n"
+			"STMIA   R8, {R0-R3}\n"
+			"LDR     R3, [R5,#0x68]\n"
+			"ADD     R2, SP, #0x3C\n"
+			"ADD     R8, SP, #8\n"
+			"LDRD    R0, [SP,#0x28]\n"
+			"STMIA   R8, {R0,R2,R3}\n"
+			"STR     R1, [SP,#4]\n"
+			"STR     LR, [SP]\n"
+			"LDMIB   R4, {R0,R1}\n"
+			"LDR     R3, [SP,#0x34]\n"
+			"MOV     R2, R12\n"
+			"BL      sub_FFDCB800\n"
+			"LDR     R0, [R5,#0x10]\n"
+			"LDR     R1, [R5,#0x58]\n"
+			"BL      sub_FFC0F034\n"		// TakeSemaphore
+			"CMP     R0, #9\n"
+			"BNE     loc_FFD0C560\n"
+			"BL      sub_FFDF6758\n"
+			"MOV     R0, #0x90000\n"
+			"STR     R7, [R5,#0x38]\n"
+			"B       loc_FFD0C578\n"
+"loc_FFD0C560:\n"
+			"LDR     R0, [SP,#0x38]\n"
+			"CMP     R0, #0\n"
+			"BEQ     loc_FFD0C580\n"
+			"BL      sub_FFDF6758\n"
+			"MOV     R0, #0xA0000\n"
+			"STR     R7, [R5,#0x38]\n"
+"loc_FFD0C578:\n"
+			"BL      sub_FFC6D01C\n"
+			"B       loc_FFD0C4DC\n"
+"loc_FFD0C580:\n"
+			"BL      sub_FFDCB8C4\n"
+			"LDR     R0, [SP,#0x34]\n"
+			"LDR     R1, [SP,#0x3C]\n"
+			"BL      sub_FFDF6500\n"
+			"LDR     R0, [R5,#0x5C]\n"
+			"LDR     R1, =0x54B4\n"
+			"ADD     R0, R0, #1\n"
+			"STR     R0, [R5,#0x5C]\n"
+			"LDR     R0, [SP,#0x3C]\n"
+			"MOV     R2, #0\n"
+			"BL      sub_FFDF4324_my\n"  //---------->
+"loc_FFD0C5AC:\n"
+			"LDR     R0, [R5,#0x60]\n"
+			"ADD     R0, R0, #1\n"
+			"STR     R0, [R5,#0x60]\n"
+			"LDR     R1, [R5,#0x4C]\n"
+			"MUL     R0, R1, R0\n"
+			"LDR     R1, [R5,#0x48]\n"
+			"BL      sub_FFE7FB6C\n"
+			"MOV     R4, R0\n"
+			"BL      sub_FFDF6790\n"
+			"LDR     R1, [R5,#0x80]\n"
+			"CMP     R1, R4\n"
+			"BNE     loc_FFD0C5E8\n"
+			"LDR     R0, [R5,#0x30]\n"
+			"CMP     R0, #1\n"
+			"BNE     loc_FFD0C5FC\n"
+"loc_FFD0C5E8:\n"
+			"LDR     R1, [R5,#0x8C]\n"
+			"MOV     R0, R4\n"
+			"BLX     R1\n"
+			"STR     R4, [R5,#0x80]\n"
+			"STR     R6, [R5,#0x30]\n"
+"loc_FFD0C5FC:\n"
+			"STR     R6, [R5,#0x2C]\n"
+			"B       loc_FFD0C4DC\n"
+	);
+}
+
+void __attribute__((naked,noinline)) sub_FFDF4324_my(){
+	asm volatile(
+			"STMFD   SP!, {R4-R8,LR}\n"
+			"LDR     R4, =0x88A0\n"
+			"LDR     LR, [R4]\n"
+			"LDR     R2, [R4,#8]\n"
+			"CMP     LR, #0\n"
+			"LDRNE   R3, [R4,#0xC]\n"
+			"MOV     R5, R2\n"
+			"CMPNE   R3, #1\n"
+			"MOVEQ   R2, #0\n"
+			"STREQ   R0, [R4]\n"
+			"STREQ   R2, [R4,#0xC]\n"
+			"BEQ     loc_FFDF43F0\n"
+			"LDR     R3, [R4,#4]\n"
+			"LDR     R7, =table\n"			// ok
+			"ADD     R12, R3, R3,LSL#1\n"
+			"LDR     R3, [R7,R12,LSL#2]\n"
+			"ADD     R6, R7, #0x30\n"
+			"LDR     R8, [R6,R12,LSL#2]\n"
+			"SUB     R3, LR, R3\n"
+			"CMP     R3, #0\n"
+			"SUB     LR, LR, R8\n"
+			"BLE     loc_FFDF43AC\n"
+			"ADD     R12, R7, R12,LSL#2\n"
+			"LDR     LR, [R12,#4]\n"
+			"CMP     LR, R3\n"
+			"ADDGE   R2, R2, #1\n"
+			"BGE     loc_FFDF43A0\n"
+			"LDR     R12, [R12,#8]\n"
+			"CMP     R12, R3\n"
+			"ADDLT   R2, R2, #3\n"
+			"ADDGE   R2, R2, #2\n"
+"loc_FFDF43A0:\n"
+		//  "CMP     R2, #0x17\n"   // -
+		//  "MOVGE   R2, #0x16\n"   // -
+			"CMP     R2, #0x1A\n"   // +
+			"MOVGE   R2, #0x19\n"   // +
+			"B       loc_FFDF43E0\n"
+"loc_FFDF43AC:\n"
+			"CMP     LR, #0\n"
+			"BGE     loc_FFDF43E0\n"
+			"ADD     R3, R6, R12,LSL#2\n"
+			"LDR     R12, [R3,#4]\n"
+			"CMP     R12, LR\n"
+			"SUBLE   R2, R2, #1\n"
+			"BLE     loc_FFDF43D8\n"
+			"LDR     R3, [R3,#8]\n"
+			"CMP     R3, LR\n"
+			"SUBGT   R2, R2, #3\n"
+			"SUBLE   R2, R2, #2\n"
+"loc_FFDF43D8:\n"
+			"CMP     R2, #0\n"
+			"MOVLT   R2, #0\n"
+"loc_FFDF43E0:\n"
+			"CMP     R2, R5\n"
+			"STRNE   R2, [R4,#8]\n"
+			"MOVNE   R2, #1\n"
+			"STRNE   R2, [R4,#0xC]\n"
+"loc_FFDF43F0:\n"
+			"LDR     R2, =CompressionRateTable\n"
+			"LDR     R3, [R4,#8]\n"
+			"LDR     R2, [R2,R3,LSL#2]\n"
+
+			"LDR     R3, =video_mode\n"      // +
+			"LDR     R3, [R3]\n"             // +
+			"LDR     R3, [R3]\n"             // +
+			"CMP     R3, #1\n"               // +
+			"LDREQ   R3, =video_quality\n"   // +
+			"LDREQ   R3, [R3]\n"             // +
+			"LDREQ   R2, [R3]\n"             // +
+
+			"STR     R2, [R1]\n"
+			"STR     R0, [R4]\n"
+			"LDMFD   SP!, {R4-R8,PC}\n"
+	);
+}
Index: /branches/release-1_0/platform/a490/sub/100e/stubs_auto.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/stubs_auto.S	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/stubs_auto.S	(revision 1523)
@@ -0,0 +1,183 @@
+/* THIS FILE IS GENERATED */
+/* DO NOT EDIT THIS FILE! */
+
+#include "stubs_asm.h"
+
+STUB(FFC00358)
+STUB(FFC00B24)
+STUB(FFC0119C)
+STUB(FFC011F0)
+STUB(FFC01680)
+STUB(FFC03BF4)
+STUB(FFC05A98)
+STUB(FFC05B80)
+STUB(FFC05F50)
+STUB(FFC06278)
+STUB(FFC0A2C8)
+STUB(FFC0A8D0)
+STUB(FFC0F034)
+STUB(FFC0F438)
+STUB(FFC0F480)
+STUB(FFC0F4B4)
+STUB(FFC0F5C0)
+STUB(FFC0F680)
+STUB(FFC10628)
+STUB(FFC106B8)
+STUB(FFC2326C)
+STUB(FFC237C0)
+STUB(FFC237E4)
+STUB(FFC237F4)
+STUB(FFC238CC)
+STUB(FFC238D8)
+STUB(FFC249D0)
+STUB(FFC250C0)
+STUB(FFC26C7C)
+STUB(FFC28470)
+STUB(FFC28670)
+STUB(FFC28754)
+STUB(FFC28814)
+STUB(FFC28848)
+STUB(FFC28AA4)
+STUB(FFC28FD8)
+STUB(FFC291CC)
+STUB(FFC29220)
+STUB(FFC2ABA8)
+STUB(FFC2AC7C)
+STUB(FFC2ADD4)
+STUB(FFC2AE04)
+STUB(FFC2AF70)
+STUB(FFC2AF74)
+STUB(FFC445CC)
+STUB(FFC455B0)
+STUB(FFC506C8)
+STUB(FFC50758)
+STUB(FFC507D8)
+STUB(FFC50AB8)
+STUB(FFC50AE4)
+STUB(FFC50E10)
+STUB(FFC50E90)
+STUB(FFC50EE8)
+STUB(FFC51530)
+STUB(FFC574B4)
+STUB(FFC578AC)
+STUB(FFC5950C)
+STUB(FFC596E0)
+STUB(FFC59A54)
+STUB(FFC59A5C)
+STUB(FFC59A64)
+STUB(FFC59A74)
+STUB(FFC59C0C)
+STUB(FFC59C74)
+STUB(FFC59CFC)
+STUB(FFC59E0C)
+STUB(FFC59E58)
+STUB(FFC59E94)
+STUB(FFC5A01C)
+STUB(FFC5A2CC)
+STUB(FFC5A360)
+STUB(FFC5BF9C)
+STUB(FFC5C01C)
+STUB(FFC5C038)
+STUB(FFC5C064)
+STUB(FFC5C078)
+STUB(FFC5C0A4)
+STUB(FFC5C3BC)
+STUB(FFC5D758)
+STUB(FFC63F9C)
+STUB(FFC640E8)
+STUB(FFC69374)
+STUB(FFC694A4)
+STUB(FFC69634)
+STUB(FFC6986C)
+STUB(FFC69D70)
+STUB(FFC69D9C)
+STUB(FFC69DA8)
+STUB(FFC6C5F8)
+STUB(FFC6D01C)
+STUB(FFC704D4)
+STUB(FFC80A3C)
+STUB(FFC80CC4)
+STUB(FFC80D30)
+STUB(FFC80FC0)
+STUB(FFC81480)
+STUB(FFC81508)
+STUB(FFC81738)
+STUB(FFC81BE8)
+STUB(FFC88EAC)
+STUB(FFC8DB88)
+STUB(FFC8DC98)
+STUB(FFC8DCF0)
+STUB(FFC8DD48)
+STUB(FFC8DDA0)
+STUB(FFC8DE24)
+STUB(FFC8DF64)
+STUB(FFC8E01C)
+STUB(FFC8E2A0)
+STUB(FFC8E4A8)
+STUB(FFC8E720)
+STUB(FFC8E918)
+STUB(FFC8EBD4)
+STUB(FFC8ED14)
+STUB(FFC8F06C)
+STUB(FFC8F214)
+STUB(FFC8F508)
+STUB(FFC8F60C)
+STUB(FFC8F848)
+STUB(FFC8F9C4)
+STUB(FFC8FB60)
+STUB(FFC8FCC4)
+STUB(FFC8FFA0)
+STUB(FFC91040)
+STUB(FFC912D8)
+STUB(FFC91338)
+STUB(FFC92690)
+STUB(FFC926C0)
+STUB(FFC92704)
+STUB(FFC92870)
+STUB(FFC9291C)
+STUB(FFC929BC)
+STUB(FFC92A58)
+STUB(FFCB63C0)
+STUB(FFCB7E98)
+STUB(FFD084B4)
+STUB(FFD08608)
+STUB(FFD0873C)
+STUB(FFD0BF3C)
+STUB(FFD0C0E0)
+STUB(FFD0C21C)
+STUB(FFD0C404)
+STUB(FFD0C6FC)
+STUB(FFD0CB48)
+STUB(FFD0F9C8)
+STUB(FFD0FA18)
+STUB(FFD0FA54)
+STUB(FFD0FD5C)
+STUB(FFD0FF88)
+STUB(FFD10180)
+STUB(FFD10214)
+STUB(FFD102D4)
+STUB(FFD103A0)
+STUB(FFD103E4)
+STUB(FFD104CC)
+STUB(FFD1061C)
+STUB(FFD106AC)
+STUB(FFD1076C)
+STUB(FFD10CCC)
+STUB(FFD10D94)
+STUB(FFD10E48)
+STUB(FFD11020)
+STUB(FFD1106C)
+STUB(FFD116EC)
+STUB(FFD11880)
+STUB(FFD11EEC)
+STUB(FFDCB800)
+STUB(FFDCB8C4)
+STUB(FFDF4324)
+STUB(FFDF5FD8)
+STUB(FFDF616C)
+STUB(FFDF6500)
+STUB(FFDF6758)
+STUB(FFDF6790)
+STUB(FFE7E060)
+STUB(FFE7E2BC)
+STUB(FFE7FB6C)
Index: /branches/release-1_0/platform/a490/sub/100e/Makefile
===================================================================
--- /branches/release-1_0/platform/a490/sub/100e/Makefile	(revision 1523)
+++ /branches/release-1_0/platform/a490/sub/100e/Makefile	(revision 1523)
@@ -0,0 +1,6 @@
+topdir=../../../../
+
+OBJS=boot.o stubs_min.o stubs_auto.o stubs_entry.o lib.o stubs_entry_2.o capt_seq.o movie_rec.o
+STUBS_AUTO_DEPS=boot.c capt_seq.c movie_rec.c
+
+include  $(topdir)platform/makefile_sub.inc
Index: /branches/release-1_0/platform/a490/sub/100f/stubs_entry.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100f/stubs_entry.S	(revision 1522)
+++ /branches/release-1_0/platform/a490/sub/100f/stubs_entry.S	(revision 1523)
@@ -15,16 +15,6 @@
 // Stubs below should be checked. Stub not matched 100%, or difference found to current 'stubs_entry_2.S'
 //    Name                                     Address      Rule  %  Comp to stubs_entry_2.S
-//NSTUB(EnterToCompensationEVF                ,0xffc27608) //104        *** != 0xffc27604
-//NSTUB(GetBatteryTemperature                 ,0xffc45624) //102        *** != 0xffc00b20
-//NSTUB(GetDrive_FreeClusters                 ,0xffc23810) //  3        *** != 0xffc5131c
-// ALT: NSTUB(GetDrive_FreeClusters, 0xffc5131c) // 4 9/0
-//NSTUB(Open                                  ,0xffc260a0) //101        *** != 0xffc4e5d8
-//NSTUB(SetScriptMode                         ,0xffc6cb44) //101        *** != 0xffc00f70
-//NSTUB(TurnOffBackLight                      ,0xffc77d88) //104        *** != 0xffc77f9c
 //NSTUB(kbd_pwr_off                           ,0xffc435ec) //  2 64%    *** != 0xffc00b20
 // ERROR: kbd_pwr_on is not found.                         //--- ---    *** != 0xffc00b20
-//NSTUB(kbd_read_keys_r2                      ,0xffc42fb8) //109        *** != 0xffc42fb0
-//NSTUB(rename                                ,0xffc259f0) //  4        *** != 0xffc261e8
-//NSTUB(write                                 ,0xffc2619c) //101        *** != 0xffc0b368
 
 // Check of modemap from 'platform/CAMERA/shooting.c':
@@ -33,22 +23,22 @@
 
 // Values below can be overridden in 'stubs_min.S':
-//DEF(physw_status                            ,0x0002e754) // Found @0xffc23b2c,          stubs_min = 0x0002e754 (0x2E754)
-//DEF(physw_run                               ,0x00001bf0) // Found @0xffc23790,          stubs_min = 0x00001bf0 (0x1BE4+0x0C)
-//DEF(levent_table                            ,0xffe9fe78) // Found @0xffe9fe78,          stubs_min = 0xffe9fe78 (0xFFE9FE78)
-//DEF(FlashParamsTable                        ,0xffeca71c) // Found @0xffeca71c,          stubs_min = 0xffeca71c (0xFFECA71C)
-//DEF(movie_status                            ,0x00005470) // Found @0xffd0c6a4,          stubs_min = 0x00005470 (0x5438+0x38)
-//DEF(full_screen_refresh                     ,0x000072e8) // Found @0xffd794c4,          stubs_min = 0x000072e8 (0x72E8)
-//DEF(canon_menu_active                       ,0x00002a3c) // Found @0xffc6a028,          stubs_min = 0x00002a3c (0x2A38+4)
-//DEF(canon_shoot_menu_active                 ,0x00006571) // Found @0xffd3fa70,          stubs_min = 0x00006571 (0x6570+1)
-//DEF(playrec_mode                            ,0x00002798) // Found @0xffc5d828,          stubs_min = 0x00002798 (0x2794+0x4)
-//DEF(zoom_status                             ,0x000095a8) // Found @0xffe0ab6c, ** != ** stubs_min = 0x00009588 (0x9588)
-//DEF(some_flag_for_af_scan                   ,0x00005818) // Found @0xffd0f010,          stubs_min = 0x00005818 (0x5818)
+DEF(physw_status                            ,0x0002e754) // Found @0xffc23b2c
+DEF(physw_run                               ,0x00001bf0) // Found @0xffc23790
+DEF(levent_table                            ,0xffe9fe78) // Found @0xffe9fe78
+DEF(FlashParamsTable                        ,0xffeca71c) // Found @0xffeca71c
+DEF(movie_status                            ,0x00005470) // Found @0xffd0c6a4
+DEF(full_screen_refresh                     ,0x000072e8) // Found @0xffd794c4
+DEF(canon_menu_active                       ,0x00002a3c) // Found @0xffc6a028
+DEF(canon_shoot_menu_active                 ,0x00006571) // Found @0xffd3fa70
+DEF(playrec_mode                            ,0x00002798) // Found @0xffc5d828
+DEF(zoom_status                             ,0x000095a8) // Found @0xffe0ab6c
+DEF(some_flag_for_af_scan                   ,0x00005818) // Found @0xffd0f010
 // focus_len_table contains zoom focus lengths for use in 'get_focal_length' (main.c).
 // each entry contains 3 int value(s), the first is the zoom focus length.
 // there are 7 entries in the table - set NUM_FL to 7
 DEF(focus_len_table                         ,0xfffe2990) // Found @0xfffe2990
-//DEF(zoom_busy                               ,0x000053f0) // Found @0xffd09900,          stubs_min = 0x000053f0 (0x53DC+0x14)
-//DEF(focus_busy                              ,0x00005300) // Found @0xffd06f38,          stubs_min = 0x00005300 (0x52F8+8)
-//DEF(recreview_hold                          ,0x0000302c) // Found @0xffc757dc, ** != ** stubs_min = 0x000062b4 (0x61E0+0xD4)
+DEF(zoom_busy                               ,0x000053f0) // Found @0xffd09900
+DEF(focus_busy                              ,0x00005300) // Found @0xffd06f38
+DEF(recreview_hold                          ,0x0000302c) // Found @0xffc757dc
 
 // Values below go in 'lib.c':
@@ -100,10 +90,11 @@
 NSTUB(DebugAssert                             ,0xffc0f680) //111
 NSTUB(DeleteFile_Fut                          ,0xffc25a84) //112
-//NSTUB(DoAFLock                              ,0xffc27558) //102            == 0xffc27558
+NSTUB(DoAFLock                                ,0xffc27558) //102
+NSTUB(EnterToCompensationEVF                  ,0xffc27608) //104
 NSTUB(ExecuteEventProcedure                   ,0xffc65798) //  1
-//NSTUB(ExitFromCompensationEVF               ,0xffc2764c) //104            == 0xffc2764c
+NSTUB(ExitFromCompensationEVF                 ,0xffc2764c) //104
 NSTUB(ExitTask                                ,0xffc0f438) //101
-//NSTUB(ExpCtrlTool_StartContiAE              ,0xffc34ce8) //104            == 0xffc34ce8
-//NSTUB(ExpCtrlTool_StopContiAE               ,0xffc34dc0) //104            == 0xffc34dc0
+NSTUB(ExpCtrlTool_StartContiAE                ,0xffc34ce8) //104
+NSTUB(ExpCtrlTool_StopContiAE                 ,0xffc34dc0) //104
 NSTUB(Fclose_Fut                              ,0xffc25c00) //101
 NSTUB(Feof_Fut                                ,0xffc25dec) //  1
@@ -116,25 +107,28 @@
 NSTUB(Fseek_Fut                               ,0xffc25da0) //101
 NSTUB(Fwrite_Fut                              ,0xffc25d00) //101
-//NSTUB(GetCCDTemperature                     ,0xffc455b0) //102            == 0xffc455b0
+NSTUB(GetBatteryTemperature                   ,0xffc45624) //102
+NSTUB(GetCCDTemperature                       ,0xffc455b0) //102
 NSTUB(GetCurrentAvValue                       ,0xffd087b8) //102
 NSTUB(GetDrive_ClusterSize                    ,0xffc512bc) //  4
+NSTUB(GetDrive_FreeClusters                   ,0xffc23810) //  3
+// ALT: NSTUB(GetDrive_FreeClusters, 0xffc5131c) // 4 9/0
 NSTUB(GetDrive_TotalClusters                  ,0xffc512f0) //  3
 NSTUB(GetFocusLensSubjectDistance             ,0xffd07ab0) //102
 NSTUB(GetFocusLensSubjectDistanceFromLens     ,0xffd07f08) //  3
-//NSTUB(GetImageFolder                        ,0xffcf1058) //106            == 0xffcf1058
+NSTUB(GetImageFolder                          ,0xffcf1058) //106
 NSTUB(GetKbdState                             ,0xffc435d4) //109
 NSTUB(GetMemInfo                              ,0xffc0a7f8) //  3
-//NSTUB(GetOpticalTemperature                 ,0xffc4569c) //102            == 0xffc4569c
+NSTUB(GetOpticalTemperature                   ,0xffc4569c) //102
 NSTUB(GetParameterData                        ,0xffd2f0a4) //101
 NSTUB(GetPropertyCase                         ,0xffc694a4) //102
 NSTUB(GetSystemTime                           ,0xffdfa404) //101
 NSTUB(GetZoomLensCurrentPoint                 ,0xffd09c78) //102
-//NSTUB(GetZoomLensCurrentPosition            ,0xffdf2448) //102            == 0xffdf2448
+NSTUB(GetZoomLensCurrentPosition              ,0xffdf2448) //102
 NSTUB(GiveSemaphore                           ,0xffc0f104) //112
 NSTUB(IsStrobeChargeCompleted                 ,0xffca6ff0) //102
-//NSTUB(LEDDrive                              ,0xffc42bc8) //103            == 0xffc42bc8
+NSTUB(LEDDrive                                ,0xffc42bc8) //103
 NSTUB(LocalTime                               ,0xffc634a8) //  1
 NSTUB(LockMainPower                           ,0xffc6cd7c) //103
-//NSTUB(Lseek                                 ,0xffc26228) //101            == 0xffc26228
+NSTUB(Lseek                                   ,0xffc26228) //101
 NSTUB(MakeDirectory_Fut                       ,0xffc25af8) //  1
 NSTUB(MoveFocusLensToDistance                 ,0xffe50654) //102
@@ -142,39 +136,42 @@
 NSTUB(MoveZoomLensWithPoint                   ,0xffdf8078) //102
 NSTUB(NewTaskShell                            ,0xffc68eb0) //103
+NSTUB(Open                                    ,0xffc260a0) //101
 NSTUB(PB2Rec                                  ,0xffc6f9e8) //104
 NSTUB(PT_MoveDigitalZoomToWide                ,0xffc570e8) //102
 NSTUB(PT_MoveOpticalZoomAt                    ,0xffc570c0) //102
-//NSTUB(PT_PlaySound                          ,0xffc5f328) //  7            == 0xffc5f328
+NSTUB(PT_PlaySound                            ,0xffc5f328) //  7
 NSTUB(PostLogicalEventForNotPowerType         ,0xffc6c5ac) //103
 NSTUB(PostLogicalEventToUI                    ,0xffc6c5f8) //103
-//NSTUB(PutInNdFilter                         ,0xffdf7edc) //102            == 0xffdf7edc
-//NSTUB(PutOutNdFilter                        ,0xffdf7f00) //102            == 0xffdf7f00
+NSTUB(PutInNdFilter                           ,0xffdf7edc) //102
+NSTUB(PutOutNdFilter                          ,0xffdf7f00) //102
 NSTUB(Read                                    ,0xffc0b308) //101
-//NSTUB(ReadFastDir                           ,0xffde8e44) //  4            == 0xffde8e44
+NSTUB(ReadFastDir                             ,0xffde8e44) //  4
 NSTUB(Rec2PB                                  ,0xffc6fa28) //104
-//NSTUB(RefreshPhysicalScreen                 ,0xffd79ea0) //104            == 0xffd79ea0
-//NSTUB(Remove                                ,0xffc26140) //  4            == 0xffc26140
-//NSTUB(RenameFile_Fut                        ,0xffc259f0) //  4            == 0xffc259f0
+NSTUB(RefreshPhysicalScreen                   ,0xffd79ea0) //104
+NSTUB(Remove                                  ,0xffc26140) //  4
+NSTUB(RenameFile_Fut                          ,0xffc259f0) //  4
 NSTUB(Restart                                 ,0xffc2aab4) //106
 NSTUB(ScreenLock                              ,0xffd7b04c) //  3
 NSTUB(ScreenUnlock                            ,0xffd7b090) //  7
-//NSTUB(SetAE_ShutterSpeed                    ,0xffe52de4) //102            == 0xffe52de4
+NSTUB(SetAE_ShutterSpeed                      ,0xffe52de4) //102
 NSTUB(SetAutoShutdownTime                     ,0xffc6cdf0) //103
 NSTUB(SetCurrentCaptureModeType               ,0xffc7310c) //101
-//NSTUB(SetFileTimeStamp                      ,0xffc263a8) //  4            == 0xffc263a8
+NSTUB(SetFileTimeStamp                        ,0xffc263a8) //  4
 NSTUB(SetLogicalEventActive                   ,0xffc6caf4) //101
 NSTUB(SetParameterData                        ,0xffd2f014) //101
 NSTUB(SetPropertyCase                         ,0xffc69374) //102
+NSTUB(SetScriptMode                           ,0xffc6cb44) //101
 NSTUB(SleepTask                               ,0xffc29160) //101
 NSTUB(TakeSemaphore                           ,0xffc0f034) //101
-//NSTUB(TurnOnBackLight                       ,0xffc77d70) //104            == 0xffc77d70
-//NSTUB(UIFS_WriteFirmInfoToFile              ,0xffd1f818) //101            == 0xffd1f818
-//NSTUB(UnlockAF                              ,0xffc27590) //102            == 0xffc27590
+NSTUB(TurnOffBackLight                        ,0xffc77d88) //104
+NSTUB(TurnOnBackLight                         ,0xffc77d70) //104
+NSTUB(UIFS_WriteFirmInfoToFile                ,0xffd1f818) //101
+NSTUB(UnlockAF                                ,0xffc27590) //102
 NSTUB(UnlockMainPower                         ,0xffc6ccd0) //103
-//NSTUB(UnsetZoomForMovie                     ,0xffd35564) //104            == 0xffd35564
-//NSTUB(UpdateMBROnFlash                      ,0xffc5113c) //105            == 0xffc5113c
+NSTUB(UnsetZoomForMovie                       ,0xffd35564) //104
+NSTUB(UpdateMBROnFlash                        ,0xffc5113c) //105
 NSTUB(VbattGet                                ,0xffc22be4) //103
 NSTUB(Write                                   ,0xffc2619c) //101
-//NSTUB(WriteSDCard                           ,0xffcfc7ac) //108            == 0xffcfc7ac
+NSTUB(WriteSDCard                             ,0xffcfc7ac) //108
 NSTUB(_log                                    ,0xffe7f4cc) //111
 NSTUB(_log10                                  ,0xffe7e410) //112
@@ -182,7 +179,7 @@
 NSTUB(_sqrt                                   ,0xffe80834) //  1
 NSTUB(add_ptp_handler                         ,0xffdbd2d8) //  3
-//NSTUB(apex2us                               ,0xffd7c39c) //  4            == 0xffd7c39c
+NSTUB(apex2us                                 ,0xffd7c39c) //  4
 NSTUB(close                                   ,0xffc0b120) //  1
-//NSTUB(closedir                              ,0xffde8ca0) //  4            == 0xffde8ca0
+NSTUB(closedir                                ,0xffde8ca0) //  4
 NSTUB(err_init_task                           ,0xffc05f50) //  4
 NSTUB(exmem_alloc                             ,0xffc64148) //103
@@ -192,5 +189,6 @@
 NSTUB(kbd_p2_f                                ,0xffc2345c) //109
 NSTUB(kbd_read_keys                           ,0xffc23b2c) //109
-//NSTUB(lseek                                 ,0xffc26228) //101            == 0xffc26228
+NSTUB(kbd_read_keys_r2                        ,0xffc42fb8) //109
+NSTUB(lseek                                   ,0xffc26228) //101
 NSTUB(malloc                                  ,0xffc04104) //112
 NSTUB(memcmp                                  ,0xffc11318) //101
@@ -201,14 +199,15 @@
 NSTUB(open                                    ,0xffc0b070) //  1
 NSTUB(opendir                                 ,0xffde8cf0) //  4
-//NSTUB(openfastdir                           ,0xffde8cf0) //  4            == 0xffde8cf0
-//NSTUB(qsort                                 ,0xffe3936c) //  4            == 0xffe3936c
+NSTUB(openfastdir                             ,0xffde8cf0) //  4
+NSTUB(qsort                                   ,0xffe3936c) //  4
 NSTUB(rand                                    ,0xffc11420) //  1
 NSTUB(read                                    ,0xffc0b308) //101
-//NSTUB(readfastdir                           ,0xffde8e44) //  4            == 0xffde8e44
+NSTUB(readfastdir                             ,0xffde8e44) //  4
 NSTUB(reboot_fw_update                        ,0xffdea6b8) //  1
+NSTUB(rename                                  ,0xffc259f0) //  4
 NSTUB(set_control_event                       ,0xffc6c814) //111
 NSTUB(srand                                   ,0xffc11414) //  1
 NSTUB(stat                                    ,0xffc26270) //  3
-//NSTUB(strcat                                ,0xffc7c35c) //  1            == 0xffc7c35c
+NSTUB(strcat                                  ,0xffc7c35c) //  1
 NSTUB(strchr                                  ,0xffc03fe8) //  1
 NSTUB(strcmp                                  ,0xffc112d4) //101
@@ -218,5 +217,5 @@
 NSTUB(strncmp                                 ,0xffc03f9c) //  1
 NSTUB(strncpy                                 ,0xffc03f60) //  1
-//NSTUB(strrchr                               ,0xffc0400c) //  1            == 0xffc0400c
+NSTUB(strrchr                                 ,0xffc0400c) //  1
 NSTUB(strtol                                  ,0xffc2eb44) //101
 NSTUB(strtolx                                 ,0xffc2e948) //109
@@ -228,2 +227,3 @@
 NSTUB(time                                    ,0xffc6335c) //  1
 NSTUB(vsprintf                                ,0xffc11280) //  4
+NSTUB(write                                   ,0xffc2619c) //101
Index: /branches/release-1_0/platform/a490/sub/100f/stubs_entry_2.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100f/stubs_entry_2.S	(revision 1522)
+++ /branches/release-1_0/platform/a490/sub/100f/stubs_entry_2.S	(revision 1523)
@@ -1,73 +1,10 @@
 #include "stubs_asm.h"
 
-// Not found automatically
-NHSTUB(EnterToCompensationEVF, 0xFFC27604)		// "ExpOn"
-NHSTUB(ExitFromCompensationEVF, 0xFFC2764C)		// "ExpOff"
-NHSTUB(GetCCDTemperature, 0xFFC455B0)			// Not tested
-NHSTUB(GetOpticalTemperature, 0xFFC4569C)		// Not tested
-NHSTUB(GetDrive_FreeClusters, 0xFFC5131C)		// Not tested, but maybe OK
-NHSTUB(PT_PlaySound, 0xFFC5F328)				// Tested, ok
-NHSTUB(ReadFastDir, 0xFFDE8E44)
-NHSTUB(RefreshPhysicalScreen, 0xFFD79EA0)
-NHSTUB(Remove, 0xFFC26140)
-NHSTUB(Lseek, 0xFFC26228)						// Same as lseek
-NHSTUB(openfastdir, 0xFFDE8CF0)
-NHSTUB(qsort, 0xFFE3936C)						// Probably ok
-NHSTUB(readfastdir, 0xFFDE8E44)					// Ok
-NHSTUB(rename, 0xFFC261E8)
-
-// Autofound failed
-NHSTUB(lseek, 0xFFC26228)						// Same as LSeek
-NHSTUB(GetZoomLensCurrentPosition, 0xFFDF2448)
-NHSTUB(UpdateMBROnFlash, 0xFFC5113C)
-NHSTUB(closedir, 0xFFDE8CA0)
-NHSTUB(closefastdir, 0xFFDE8CA0)				// Same as closedir
-NHSTUB(UIFS_WriteFirmInfoToFile, 0xFFD1F818)
-NHSTUB(strcat, 0xFFC7C35C)
-NHSTUB(RenameFile_Fut, 0xFFC259F0)				// Maybe ok, Find 0x9400013
-NHSTUB(SetFileTimeStamp, 0xFFC263A8)			// Maybe ok, Find 0x12CEA600
-NHSTUB(TurnOnBackLight, 0xFFC77D70)				// Seems ok
-NHSTUB(TurnOffBackLight, 0xFFC77F9C)			// Seems ok
-NHSTUB(kbd_read_keys_r2, 0xFFC42FB0)			// Probably ok
-NHSTUB(strrchr, 0xFFC0400C)
-
-// Found manually
-NHSTUB(DoAFLock, 0xFFC27558)
-NHSTUB(UnlockAF, 0xFFC27590)
 NHSTUB(MakeAFScan, 0xFFD0F178)					// Ok
-NHSTUB(ExpCtrlTool_StartContiAE, 0xFFC34CE8)	// "StartContiAE"
-NHSTUB(ExpCtrlTool_StopContiAE, 0xFFC34DC0)		// "StopContiAE"
-NHSTUB(apex2us, 0xFFD7C39C)						// Untested, for extra long exposure
-NHSTUB(SetScriptMode, 0xFFC00F70)				// Ok
-
-NHSTUB(platformsub_kbd_fetch_data, 0xFFC435D4)
-NHSTUB(SetAE_ShutterSpeed, 0xFFE52DE4)			// Untested
-NHSTUB(UnsetZoomForMovie, 0xFFD35564)
-NHSTUB(LEDDrive, 0xFFC42BC8)					// Seems ok, "LEDDrv.c"
-
-// video buffer stuff
 NHSTUB(UnlockAndRefresh, 0xFFD7B090)			// "Window.c"
 NHSTUB(LockAndRefresh, 0xFFD7B04C)				// "Window.c"
-
-// null subs, Not yet found
-NHSTUB(GetBatteryTemperature, 0xFFC00B20)		// Maybe 0xFFC455B0 works???
 NHSTUB(TurnOffMic, 0xFFC43C30)					// Doesn't work
 NHSTUB(TurnOnMic, 0xFFC43C5C)					// Doesn't work
-
-NHSTUB(PutInNdFilter, 0xFFDF7EDC)					// Ok
-NHSTUB(PutOutNdFilter, 0xFFDF7F00)					// Ok
 NHSTUB(SetZoomActuatorSpeedPercent, 0xFFC00B20)		// nullsub_1
-NHSTUB(WriteSDCard, 0xFFCFC7AC)  					// Ok
-
-NHSTUB(GetImageFolder, 0xFFCF1058)	// function before 'GetCameraObjectTmpPath ERROR' string
-
-// --- Those aren't used or don't exist in DryOS (like A720 and other)
 NHSTUB(kbd_pwr_on, 0xFFC00B20)
 NHSTUB(kbd_pwr_off, 0xFFC00B20)
-
-
-// Added by finsig_dryos V2 to match old values found by finsig.
-// Values should be checked in firmware, if the new address in stubs_entry.S
-// is correct then delete the correspoding entry below.
-NHSTUB(Open                          ,0xffc4e5d8) // New address = 0xffc260a0
-NHSTUB(write                         ,0xffc0b368) // New address = 0xffc2619c
Index: /branches/release-1_0/platform/a490/sub/100f/boot.c
===================================================================
--- /branches/release-1_0/platform/a490/sub/100f/boot.c	(revision 1522)
+++ /branches/release-1_0/platform/a490/sub/100f/boot.c	(revision 1523)
@@ -8,13 +8,18 @@
 const char * const new_sa = &_end;
 
-void taskHook(int *p){
-
-	p-=17;
-
-	if(p[0]==0xFFC239C8) p[0]=(int)mykbd_task;
-	if(p[0]==0xFFC5919C) p[0]=(int)capt_seq_task;
-	if(p[0]==0xFFC704B4) p[0]=(int)init_file_modules_task;
-	if(p[0]==0xFFD0C8F8) p[0]=(int)movie_record_task;
-	if(p[0]==0xFFC91388) p[0]=(int)exp_drv_task;
+extern void task_CaptSeq();
+extern void task_InitFileModules();
+extern void task_MovieRecord();
+extern void task_ExpDrv();
+
+void taskHook(context_t **context)
+{
+	task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context));
+
+	// Replace firmware task addresses with ours
+	if(tcb->entry == (void*)task_CaptSeq)			tcb->entry = (void*)capt_seq_task; 
+	if(tcb->entry == (void*)task_InitFileModules)	tcb->entry = (void*)init_file_modules_task;
+	if(tcb->entry == (void*)task_MovieRecord)		tcb->entry = (void*)movie_record_task;
+	if(tcb->entry == (void*)task_ExpDrv)			tcb->entry = (void*)exp_drv_task;
 }
 
@@ -633,5 +638,2 @@
 	);
 }
-
-
-
Index: /branches/release-1_0/platform/a490/sub/100f/stubs_min.S
===================================================================
--- /branches/release-1_0/platform/a490/sub/100f/stubs_min.S	(revision 1522)
+++ /branches/release-1_0/platform/a490/sub/100f/stubs_min.S	(revision 1523)
@@ -1,17 +1,3 @@
 #include "stubs_asm.h"
 
-DEF(physw_status, 0x2E754)							// ok, search for "GpioStatus", 0xFFC23A8C
-DEF(physw_run, 0x1BE4 + 0x0C)						// Ok 0xFFC2378C (0x10???)
-DEF(FlashParamsTable,0xFFECA71C)					// Ok 0xFFE07CAC
-DEF(zoom_busy, 0x53DC + 0x14)           			// Ok Found at FFD09900, "ZoomLensController.c", 0x14 = FFD0993C
-DEF(focus_busy, 0x52F8 + 8)             			// Ok Found at FFD06F38, "FocusLensController.c", 0x08=FFD06F98
-DEF(canon_menu_active, 0x2A38 + 4)					// Ok ROM:FFC6A028 (FFC6A2A4???)
-DEF(canon_shoot_menu_active, 0x6570 + 1)			// Ok Found at FFD3F7E8
-DEF(recreview_hold, 0x61E0 + 0xD4)					// Ok ROM:FFD30D50, 0xd4=FFD30D5C
-DEF(zoom_status, 0x9588)							// Ok Found at FFE0AB5C, "TerminateDeliverToZoomController"
-DEF(movie_status, 0x5438 + 0x38)					// Maybe FFD0C404
 DEF(enabled_refresh_physical_screen, 0x7324+0x20)	// Ok Found at FFD7B254, "ScreenLock"
-DEF(playrec_mode, 0x2794+0x4)						// Ok FFC27AD0 "MenuIn", B FFC5D81C
-DEF(levent_table, 0xFFE9FE78)						// Ok FFD2A990
-DEF(some_flag_for_af_scan, 0x5818)					// Perhaps ok, FFD0F8A8
-DEF(full_screen_refresh, 0x72E8)					// Ok ROM:FFD794A0, called by RefreshPhysicalScreen()
Index: /branches/release-1_0/camera_list.csv
===================================================================
--- /branches/release-1_0/camera_list.csv	(revision 1522)
+++ /branches/release-1_0/camera_list.csv	(revision 1523)
@@ -14,4 +14,5 @@
 a480,100b,,,
 a490,100d,BETA,,
+a490,100e,ALPHA,,
 a490,100f,BETA,,
 a495,100d,BETA,,
