############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 03/Apr/2008 22:32:05 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = C:\ARM\Write flasher Eng\main.c # # Command line = "C:\ARM\Write flasher Eng\main.c" -D NEWSGOLD -D # # ELKA -lC "C:\ARM\Write flasher Eng\Release\List\" # # -o "C:\ARM\Write flasher Eng\Release\Obj\" -s9 # # --no_unroll --no_clustering --cpu_mode arm --endian # # little --cpu ARM926EJ-S --stack_align 4 --interwork # # -e --fpu None -I "C:\Program Files\Embedded # # Workbench 4.0 Evaluation\ARM\INC\" # # --inline_threshold=2 # # List file = C:\ARM\Write flasher Eng\Release\List\main.lst # # Object file = C:\ARM\Write flasher Eng\Release\Obj\main.r79 # # # # # ############################################################################## C:\ARM\Write flasher Eng\main.c 1 #include "..\inc\swilib.h" 2 #include "..\inc\cfg_items.h" 3 #include "conf_loader.h" 4 #define MIN_UPTIME 1 5 #define MAX(a,b) (a)>(b)?(a):(b) 6 \ In segment DATA_Z, align 4, align-sorted 7 GBSTMR timer; \ timer: \ 00000000 DS8 16 8 extern const int ENA_HELLO_MSG; \ In segment DATA_C, align 4, align-sorted 9 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 10 11 extern const int dis; 12 extern const int key; 13 extern const int lig; 14 extern const int dyn; 15 16 extern const int lockdis; 17 extern const int lockkey; 18 extern const int locklig; 19 extern const int lockdyn; 20 21 extern const unsigned int light; 22 extern const unsigned int delay; \ In segment DATA_Z, align 4, align-sorted 23 unsigned int uiUpdateTime; \ uiUpdateTime: \ 00000000 DS8 4 24 extern const unsigned int cfgUpTime; 25 extern const int key_patch; 26 \ In segment DATA_Z, align 4, align-sorted 27 char b[256]; \ `b`: \ 00000000 DS8 256 \ In segment DATA_Z, align 4, align-sorted 28 int prespace0, space0, \ prespace0: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ space0: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 29 prespace1, space1, \ prespace1: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ space1: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 30 prespace2, space2, \ prespace2: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ space2: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 31 prespace4, space4, count, Oldillum; \ prespace4: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ space4: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ count: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ Oldillum: \ 00000000 DS8 4 32 33 typedef struct 34 {CSM_RAM csm; 35 }MAIN_CSM; 36 \ In segment DATA_Z, align 4, align-sorted 37 CSM_RAM *under_idle; \ under_idle: \ 00000000 DS8 4 38 39 extern void kill_data(void *p, void (*func_p)(void *)); 40 41 #pragma inline=forced 42 43 int toupper(int c) 44 {if ((c>='a')&&(c<='z')) c+='A'-'a'; 45 return(c); 46 } 47 \ In segment CODE, align 4, keep-with-next 48 int strcmp_nocase(const char *s1,const char *s2) 49 {int i,c; 50 while(!(i=(c=toupper(*s1++))-toupper(*s2++))) if (!c) break; \ strcmp_nocase: \ ??strcmp_nocase_0: \ 00000000 0020D0E5 LDRB R2,[R0, #+0] \ 00000004 610052E3 CMP R2,#+97 \ 00000008 010000BA BLT ??strcmp_nocase_1 \ 0000000C 7B0052E3 CMP R2,#+123 \ 00000010 202042B2 SUBLT R2,R2,#+32 \ ??strcmp_nocase_1: \ 00000014 00C0D1E5 LDRB R12,[R1, #+0] \ 00000018 010080E2 ADD R0,R0,#+1 \ 0000001C 0230A0E1 MOV R3,R2 \ 00000020 61005CE3 CMP R12,#+97 \ 00000024 010000BA BLT ??strcmp_nocase_2 \ 00000028 7B005CE3 CMP R12,#+123 \ 0000002C 20C04CB2 SUBLT R12,R12,#+32 \ ??strcmp_nocase_2: \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 0C2052E0 SUBS R2,R2,R12 \ 00000038 0100001A BNE ??strcmp_nocase_3 \ 0000003C 000053E3 CMP R3,#+0 \ 00000040 EEFFFF1A BNE ??strcmp_nocase_0 51 return(i); \ ??strcmp_nocase_3: \ 00000044 0200A0E1 MOV R0,R2 \ 00000048 1EFF2FE1 BX LR ;; return 52 } 53 \ In segment CODE, align 4, keep-with-next 54 int maincsm_onmessage(CSM_RAM* data,GBS_MSG* msg) 55 {if(msg->msg == MSG_RECONFIGURE_REQ) \ maincsm_onmessage: \ 00000000 00402DE9 PUSH {LR} \ 00000004 040091E5 LDR R0,[R1, #+4] \ 00000008 AF20A0E3 MOV R2,#+175 \ 0000000C DE2C82E3 ORR R2,R2,#0xDE00 \ 00000010 020050E1 CMP R0,R2 \ 00000014 0900001A BNE ??maincsm_onmessage_0 56 {extern const char *successed_config_filename; 57 if(strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 00000018 28009FE5 LDR R0,??maincsm_onmessage_1 ;; successed_config_filename \ 0000001C 0C1091E5 LDR R1,[R1, #+12] \ 00000020 000090E5 LDR R0,[R0, #+0] \ 00000024 ........ BL strcmp_nocase \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0300001A BNE ??maincsm_onmessage_0 58 {ShowMSG(1,(int)"Write flasher settings refreshed!"); \ 00000030 14109FE5 LDR R1,??maincsm_onmessage_1+0x4 ;; `?` \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 480100EF SWI +328 59 InitConfig(); \ 0000003C ........ _BLF InitConfig,??InitConfig??rA 60 } 61 } 62 return (1); \ ??maincsm_onmessage_0: \ 00000040 0100A0E3 MOV R0,#+1 \ 00000044 0080BDE8 POP {PC} ;; return \ ??maincsm_onmessage_1: \ 00000048 ........ DC32 successed_config_filename \ 0000004C ........ DC32 `?` 63 } 64 \ In segment CODE, align 4, keep-with-next 65 static void maincsm_oncreate(CSM_RAM *data) 66 { 67 } \ maincsm_oncreate: \ 00000000 1EFF2FE1 BX LR ;; return 68 \ In segment CODE, align 4, keep-with-next 69 static void Killer(void) 70 {extern void *ELF_BEGIN; 71 GBS_DelTimer(&timer); \ Killer: \ 00000000 ........ LDR R0,??DataTable35 ;; timer \ 00000004 00402DE9 PUSH {LR} \ 00000008 8C0100EF SWI +396 72 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 0000000C 158000EF SWI +32789 \ 00000010 0010A0E1 MOV R1,R0 \ 00000014 04009FE5 LDR R0,??Killer_0 ;; ELF_BEGIN \ 00000018 0040BDE8 POP {LR} ;; Pop \ 0000001C ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??Killer_0: \ 00000020 ........ DC32 ELF_BEGIN 73 } 74 \ In segment CODE, align 4, keep-with-next 75 static void maincsm_onclose(CSM_RAM *csm) 76 {SUBPROC((void *)Killer); \ maincsm_onclose: \ 00000000 08009FE5 LDR R0,??maincsm_onclose_0 ;; Killer \ 00000004 00402DE9 PUSH {LR} \ 00000008 710100EF SWI +369 77 } \ 0000000C 0080BDE8 POP {PC} ;; return \ ??maincsm_onclose_0: \ 00000010 ........ DC32 Killer 78 \ In segment DATA_Z, align 4, align-sorted 79 static unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 80 81 static const struct 82 {CSM_DESC maincsm; 83 WSHDR maincsm_name; \ In segment DATA_C, align 4, align-sorted 84 }MAINCSM = \ MAINCSM: \ 00000000 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 0000001C 280000000100 DC32 40, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00000038 8B00 DC16 139 \ 0000003A 0000 DC8 0, 0 85 { 86 { 87 maincsm_onmessage, 88 maincsm_oncreate, 89 #ifdef NEWSGOLD 90 0, 91 0, 92 0, 93 0, 94 #endif 95 maincsm_onclose, 96 sizeof(MAIN_CSM), 97 1, 98 &minus11 99 }, 100 { 101 maincsm_name_body, 102 NAMECSM_MAGIC1, 103 NAMECSM_MAGIC2, 104 0x0, 105 139 106 } 107 }; 108 109 static void UpdateCSMname(void) 110 {wsprintf((WSHDR *)(&MAINCSM.maincsm_name),"Write flasher - (c)SimaFish"); 111 } 112 113 void StartWorkTimer(void); 114 void InitSettings(); 115 void LightOn(); 116 void LightOff(); 117 \ In segment CODE, align 4, keep-with-next 118 void LightOn() 119 {if(IsUnlocked()) \ LightOn: \ 00000000 6C019FE5 LDR R0,??LightOn_0 ;; light \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 004090E5 LDR R4,[R0, #+0] \ 0000000C 430000EF SWI +67 \ 00000010 000050E3 CMP R0,#+0 \ 00000014 2600000A BEQ ??LightOn_1 120 {if(key) SetIllumination(1,1,light,0); \ 00000018 ........ LDR R0,??DataTable28 ;; key \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0500000A BEQ ??LightOn_2 \ 00000028 0030A0E3 MOV R3,#+0 \ 0000002C 0428A0E1 MOV R2,R4, LSL #+16 \ 00000030 2228A0E1 MOV R2,R2, LSR #+16 \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 0100A0E3 MOV R0,#+1 \ 0000003C 080000EF SWI +8 121 if(dis) SetIllumination(0,1,light,0); \ ??LightOn_2: \ 00000040 ........ LDR R0,??DataTable27 ;; dis \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0500000A BEQ ??LightOn_3 \ 00000050 0030A0E3 MOV R3,#+0 \ 00000054 0428A0E1 MOV R2,R4, LSL #+16 \ 00000058 2228A0E1 MOV R2,R2, LSR #+16 \ 0000005C 0110A0E3 MOV R1,#+1 \ 00000060 0000A0E3 MOV R0,#+0 \ 00000064 080000EF SWI +8 122 if(dyn) SetIllumination(2,1,light,0); \ ??LightOn_3: \ 00000068 ........ LDR R0,??DataTable29 ;; dyn \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0500000A BEQ ??LightOn_4 \ 00000078 0030A0E3 MOV R3,#+0 \ 0000007C 0428A0E1 MOV R2,R4, LSL #+16 \ 00000080 2228A0E1 MOV R2,R2, LSR #+16 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 0200A0E3 MOV R0,#+2 \ 0000008C 080000EF SWI +8 123 if(lig) SetIllumination(4,1,100,0); \ ??LightOn_4: \ 00000090 ........ LDR R0,??DataTable26 ;; lig \ 00000094 000090E5 LDR R0,[R0, #+0] \ 00000098 000050E3 CMP R0,#+0 \ 0000009C 0400000A BEQ ??LightOn_1 \ 000000A0 0030A0E3 MOV R3,#+0 \ 000000A4 6420A0E3 MOV R2,#+100 \ 000000A8 0110A0E3 MOV R1,#+1 \ 000000AC 0400A0E3 MOV R0,#+4 \ 000000B0 080000EF SWI +8 124 } 125 if(!IsUnlocked()) \ ??LightOn_1: \ 000000B4 430000EF SWI +67 \ 000000B8 000050E3 CMP R0,#+0 \ 000000BC 2600001A BNE ??LightOn_5 126 {if(lockkey) SetIllumination(1,1,light,0); \ 000000C0 ........ LDR R0,??DataTable15 ;; lockkey \ 000000C4 000090E5 LDR R0,[R0, #+0] \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 0500000A BEQ ??LightOn_6 \ 000000D0 0030A0E3 MOV R3,#+0 \ 000000D4 0428A0E1 MOV R2,R4, LSL #+16 \ 000000D8 2228A0E1 MOV R2,R2, LSR #+16 \ 000000DC 0110A0E3 MOV R1,#+1 \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 080000EF SWI +8 127 if(lockdis) SetIllumination(0,1,light,0); \ ??LightOn_6: \ 000000E8 ........ LDR R0,??DataTable16 ;; lockdis \ 000000EC 000090E5 LDR R0,[R0, #+0] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0500000A BEQ ??LightOn_7 \ 000000F8 0030A0E3 MOV R3,#+0 \ 000000FC 0428A0E1 MOV R2,R4, LSL #+16 \ 00000100 2228A0E1 MOV R2,R2, LSR #+16 \ 00000104 0110A0E3 MOV R1,#+1 \ 00000108 0000A0E3 MOV R0,#+0 \ 0000010C 080000EF SWI +8 128 if(lockdyn) SetIllumination(2,1,light,0); \ ??LightOn_7: \ 00000110 ........ LDR R0,??DataTable17 ;; lockdyn \ 00000114 000090E5 LDR R0,[R0, #+0] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0500000A BEQ ??LightOn_8 \ 00000120 0030A0E3 MOV R3,#+0 \ 00000124 0428A0E1 MOV R2,R4, LSL #+16 \ 00000128 2228A0E1 MOV R2,R2, LSR #+16 \ 0000012C 0110A0E3 MOV R1,#+1 \ 00000130 0200A0E3 MOV R0,#+2 \ 00000134 080000EF SWI +8 129 if(locklig) SetIllumination(4,1,100,0); \ ??LightOn_8: \ 00000138 ........ LDR R0,??DataTable18 ;; locklig \ 0000013C 000090E5 LDR R0,[R0, #+0] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 0400000A BEQ ??LightOn_5 \ 00000148 0030A0E3 MOV R3,#+0 \ 0000014C 6420A0E3 MOV R2,#+100 \ 00000150 0110A0E3 MOV R1,#+1 \ 00000154 0400A0E3 MOV R0,#+4 \ 00000158 080000EF SWI +8 130 } 131 GBS_StartTimerProc(&timer,delay,LightOff); \ ??LightOn_5: \ 0000015C ........ LDR R0,??DataTable20 ;; delay \ 00000160 10209FE5 LDR R2,??LightOn_0+0x4 ;; LightOff \ 00000164 001090E5 LDR R1,[R0, #+0] \ 00000168 ........ LDR R0,??DataTable35 ;; timer \ 0000016C 4D0000EF SWI +77 132 } \ 00000170 1080BDE8 POP {R4,PC} ;; return \ ??LightOn_0: \ 00000174 ........ DC32 light \ 00000178 ........ DC32 LightOff 133 \ In segment CODE, align 4, keep-with-next 134 void LightOff(void) 135 {if(IsUnlocked()) \ LightOff: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 2300000A BEQ ??LightOff_0 136 {if(key) SetIllumination(1,1,0,0); \ 00000010 ........ LDR R0,??DataTable28 ;; key \ 00000014 000090E5 LDR R0,[R0, #+0] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0400000A BEQ ??LightOff_1 \ 00000020 0030A0E3 MOV R3,#+0 \ 00000024 0020A0E3 MOV R2,#+0 \ 00000028 0110A0E3 MOV R1,#+1 \ 0000002C 0100A0E1 MOV R0,R1 \ 00000030 080000EF SWI +8 137 if(dis) SetIllumination(0,1,0,0); \ ??LightOff_1: \ 00000034 ........ LDR R0,??DataTable27 ;; dis \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0400000A BEQ ??LightOff_2 \ 00000044 0030A0E3 MOV R3,#+0 \ 00000048 0020A0E3 MOV R2,#+0 \ 0000004C 0110A0E3 MOV R1,#+1 \ 00000050 0200A0E1 MOV R0,R2 \ 00000054 080000EF SWI +8 138 if(dyn) SetIllumination(2,1,0,0); \ ??LightOff_2: \ 00000058 ........ LDR R0,??DataTable29 ;; dyn \ 0000005C 000090E5 LDR R0,[R0, #+0] \ 00000060 000050E3 CMP R0,#+0 \ 00000064 0400000A BEQ ??LightOff_3 \ 00000068 0030A0E3 MOV R3,#+0 \ 0000006C 0020A0E3 MOV R2,#+0 \ 00000070 0110A0E3 MOV R1,#+1 \ 00000074 0200A0E3 MOV R0,#+2 \ 00000078 080000EF SWI +8 139 if(lig) SetIllumination(4,1,0,0); \ ??LightOff_3: \ 0000007C ........ LDR R0,??DataTable26 ;; lig \ 00000080 000090E5 LDR R0,[R0, #+0] \ 00000084 000050E3 CMP R0,#+0 \ 00000088 0400000A BEQ ??LightOff_0 \ 0000008C 0030A0E3 MOV R3,#+0 \ 00000090 0020A0E3 MOV R2,#+0 \ 00000094 0110A0E3 MOV R1,#+1 \ 00000098 0400A0E3 MOV R0,#+4 \ 0000009C 080000EF SWI +8 140 } 141 if(!IsUnlocked()) \ ??LightOff_0: \ 000000A0 430000EF SWI +67 \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 2300001A BNE ??LightOff_4 142 {if(lockkey) SetIllumination(1,1,0,0); \ 000000AC ........ LDR R0,??DataTable15 ;; lockkey \ 000000B0 000090E5 LDR R0,[R0, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0400000A BEQ ??LightOff_5 \ 000000BC 0030A0E3 MOV R3,#+0 \ 000000C0 0020A0E3 MOV R2,#+0 \ 000000C4 0110A0E3 MOV R1,#+1 \ 000000C8 0100A0E1 MOV R0,R1 \ 000000CC 080000EF SWI +8 143 if(lockdis) SetIllumination(0,1,0,0); \ ??LightOff_5: \ 000000D0 ........ LDR R0,??DataTable16 ;; lockdis \ 000000D4 000090E5 LDR R0,[R0, #+0] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0400000A BEQ ??LightOff_6 \ 000000E0 0030A0E3 MOV R3,#+0 \ 000000E4 0020A0E3 MOV R2,#+0 \ 000000E8 0110A0E3 MOV R1,#+1 \ 000000EC 0200A0E1 MOV R0,R2 \ 000000F0 080000EF SWI +8 144 if(lockdyn) SetIllumination(2,1,0,0); \ ??LightOff_6: \ 000000F4 ........ LDR R0,??DataTable17 ;; lockdyn \ 000000F8 000090E5 LDR R0,[R0, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0400000A BEQ ??LightOff_7 \ 00000104 0030A0E3 MOV R3,#+0 \ 00000108 0020A0E3 MOV R2,#+0 \ 0000010C 0110A0E3 MOV R1,#+1 \ 00000110 0200A0E3 MOV R0,#+2 \ 00000114 080000EF SWI +8 145 if(locklig) SetIllumination(4,1,0,0); \ ??LightOff_7: \ 00000118 ........ LDR R0,??DataTable18 ;; locklig \ 0000011C 000090E5 LDR R0,[R0, #+0] \ 00000120 000050E3 CMP R0,#+0 \ 00000124 0400000A BEQ ??LightOff_4 \ 00000128 0030A0E3 MOV R3,#+0 \ 0000012C 0020A0E3 MOV R2,#+0 \ 00000130 0110A0E3 MOV R1,#+1 \ 00000134 0400A0E3 MOV R0,#+4 \ 00000138 080000EF SWI +8 146 } 147 count--; \ ??LightOff_4: \ 0000013C 80009FE5 LDR R0,??LightOff_8 ;; count 148 if (count>0) \ 00000140 ........ LDR R4,??DataTable35 ;; timer \ 00000144 001090E5 LDR R1,[R0, #+0] \ 00000148 011041E2 SUB R1,R1,#+1 \ 0000014C 001080E5 STR R1,[R0, #+0] \ 00000150 010051E3 CMP R1,#+1 149 {GBS_StartTimerProc(&timer,delay,LightOn); \ 00000154 6C209FA5 LDRGE R2,??LightOff_8+0x4 ;; LightOn \ 00000158 ........ LDRGE R0,??DataTable20 ;; delay \ 0000015C 140000AA BGE ??LightOff_9 150 } 151 else 152 {SetIllumination(0,1,Oldillum,0); \ 00000160 ........ LDR R5,??DataTable25 ;; Oldillum \ 00000164 0030A0E3 MOV R3,#+0 \ 00000168 002095E5 LDR R2,[R5, #+0] \ 0000016C 0110A0E3 MOV R1,#+1 \ 00000170 0228A0E1 MOV R2,R2, LSL #+16 \ 00000174 2228A0E1 MOV R2,R2, LSR #+16 \ 00000178 0000A0E3 MOV R0,#+0 \ 0000017C 080000EF SWI +8 153 if(!key_patch) SetIllumination(1,1,Oldillum,0); \ 00000180 44009FE5 LDR R0,??LightOff_8+0x8 ;; key_patch \ 00000184 000090E5 LDR R0,[R0, #+0] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0600001A BNE ??LightOff_10 \ 00000190 002095E5 LDR R2,[R5, #+0] \ 00000194 0030A0E3 MOV R3,#+0 \ 00000198 0228A0E1 MOV R2,R2, LSL #+16 \ 0000019C 2228A0E1 MOV R2,R2, LSR #+16 \ 000001A0 0110A0E3 MOV R1,#+1 \ 000001A4 0100A0E3 MOV R0,#+1 \ 000001A8 080000EF SWI +8 154 GBS_StartTimerProc(&timer, uiUpdateTime, StartWorkTimer); \ ??LightOff_10: \ 000001AC ........ LDR R2,??DataTable34 ;; StartWorkTimer \ 000001B0 ........ LDR R0,??DataTable36 ;; uiUpdateTime \ ??LightOff_9: \ 000001B4 001090E5 LDR R1,[R0, #+0] \ 000001B8 0400A0E1 MOV R0,R4 \ 000001BC 4D0000EF SWI +77 155 } 156 } \ 000001C0 3080BDE8 POP {R4,R5,PC} ;; return \ ??LightOff_8: \ 000001C4 ........ DC32 count \ 000001C8 ........ DC32 LightOn \ 000001CC ........ DC32 key_patch 157 \ In segment CODE, align 4, keep-with-next 158 void StartWorkTimer(void) 159 { Oldillum=GetIlluminationDataTable()[3]; \ StartWorkTimer: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 160 space0=GetFreeFlexSpace(0,0); \ 00000004 9C419FE5 LDR R4,??StartWorkTimer_0 ;; space0 161 space1=GetFreeFlexSpace(1,0); \ 00000008 9C519FE5 LDR R5,??StartWorkTimer_0+0x4 ;; space1 162 space2=GetFreeFlexSpace(2,0); \ 0000000C 9C619FE5 LDR R6,??StartWorkTimer_0+0x8 ;; space2 163 space4=GetFreeFlexSpace(4,0); \ 00000010 9C719FE5 LDR R7,??StartWorkTimer_0+0xC ;; space4 164 if(prespace0!=space0) \ 00000014 ........ LDR R8,??DataTable37 ;; prespace0 \ 00000018 528000EF SWI +32850 \ 0000001C 0300D0E5 LDRB R0,[R0, #+3] \ 00000020 ........ LDR R1,??DataTable25 ;; Oldillum \ 00000024 000081E5 STR R0,[R1, #+0] \ 00000028 0010A0E3 MOV R1,#+0 \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 8A0000EF SWI +138 \ 00000034 000084E5 STR R0,[R4, #+0] \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 8A0000EF SWI +138 \ 00000044 000085E5 STR R0,[R5, #+0] \ 00000048 0010A0E3 MOV R1,#+0 \ 0000004C 0200A0E3 MOV R0,#+2 \ 00000050 8A0000EF SWI +138 \ 00000054 000086E5 STR R0,[R6, #+0] \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 0400A0E3 MOV R0,#+4 \ 00000060 8A0000EF SWI +138 \ 00000064 ........ LDR R1,??DataTable26 ;; lig \ 00000068 ........ LDR R2,??DataTable27 ;; dis \ 0000006C ........ LDR R3,??DataTable28 ;; key \ 00000070 00C098E5 LDR R12,[R8, #+0] \ 00000074 00E094E5 LDR LR,[R4, #+0] \ 00000078 001091E5 LDR R1,[R1, #+0] \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 003093E5 LDR R3,[R3, #+0] \ 00000084 000087E5 STR R0,[R7, #+0] \ 00000088 ........ LDR R0,??DataTable29 ;; dyn \ 0000008C 0E005CE1 CMP R12,LR \ 00000090 000090E5 LDR R0,[R0, #+0] \ 00000094 0B00000A BEQ ??StartWorkTimer_1 165 {if((key||dis||lig||dyn)&&(!IsCalling())) LightOn(); \ 00000098 000053E3 CMP R3,#+0 \ 0000009C 00005203 CMPEQ R2,#+0 \ 000000A0 00005103 CMPEQ R1,#+0 \ 000000A4 00005003 CMPEQ R0,#+0 \ 000000A8 0300000A BEQ ??StartWorkTimer_2 \ 000000AC 6E0000EF SWI +110 \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 0000001A BNE ??StartWorkTimer_2 \ 000000B8 ........ BL LightOn 166 prespace0=space0; \ ??StartWorkTimer_2: \ 000000BC 000094E5 LDR R0,[R4, #+0] \ 000000C0 000088E5 STR R0,[R8, #+0] \ 000000C4 F081BDE8 POP {R4-R8,PC} 167 } 168 else 169 if(prespace1!=space1) \ ??StartWorkTimer_1: \ 000000C8 ........ LDR R4,??DataTable38 ;; prespace1 \ 000000CC 00C095E5 LDR R12,[R5, #+0] \ 000000D0 008094E5 LDR R8,[R4, #+0] \ 000000D4 0C0058E1 CMP R8,R12 \ 000000D8 0A00000A BEQ ??StartWorkTimer_3 170 {if((key||dis||lig||dyn)&&(!IsCalling())) LightOn(); \ 000000DC 000053E3 CMP R3,#+0 \ 000000E0 00005203 CMPEQ R2,#+0 \ 000000E4 00005103 CMPEQ R1,#+0 \ 000000E8 00005003 CMPEQ R0,#+0 \ 000000EC 0300000A BEQ ??StartWorkTimer_4 \ 000000F0 6E0000EF SWI +110 \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 0000001A BNE ??StartWorkTimer_4 \ 000000FC ........ BL LightOn 171 prespace1=space1; \ ??StartWorkTimer_4: \ 00000100 000095E5 LDR R0,[R5, #+0] \ 00000104 1F0000EA B ??StartWorkTimer_5 172 } 173 else 174 if(prespace2!=space2) \ ??StartWorkTimer_3: \ 00000108 ........ LDR R4,??DataTable39 ;; prespace2 \ 0000010C 008096E5 LDR R8,[R6, #+0] \ 00000110 005094E5 LDR R5,[R4, #+0] \ 00000114 080055E1 CMP R5,R8 \ 00000118 0B00000A BEQ ??StartWorkTimer_6 175 {if((key||dis||lig||dyn)&&(!IsCalling())) LightOn(); \ 0000011C 000053E3 CMP R3,#+0 \ 00000120 00005203 CMPEQ R2,#+0 \ 00000124 00005103 CMPEQ R1,#+0 \ 00000128 00005003 CMPEQ R0,#+0 \ 0000012C 0300000A BEQ ??StartWorkTimer_7 \ 00000130 6E0000EF SWI +110 \ 00000134 000050E3 CMP R0,#+0 \ 00000138 0000001A BNE ??StartWorkTimer_7 \ 0000013C ........ BL LightOn 176 prespace2=space2; \ ??StartWorkTimer_7: \ 00000140 000096E5 LDR R0,[R6, #+0] \ 00000144 000084E5 STR R0,[R4, #+0] \ 00000148 F081BDE8 POP {R4-R8,PC} 177 } 178 else 179 if(prespace4!=space4) \ ??StartWorkTimer_6: \ 0000014C ........ LDR R4,??DataTable40 ;; prespace4 \ 00000150 006097E5 LDR R6,[R7, #+0] \ 00000154 005094E5 LDR R5,[R4, #+0] \ 00000158 060055E1 CMP R5,R6 \ 0000015C 0B00000A BEQ ??StartWorkTimer_8 180 {if((key||dis||lig||dyn)&&(!IsCalling())) LightOn(); \ 00000160 000053E3 CMP R3,#+0 \ 00000164 00005203 CMPEQ R2,#+0 \ 00000168 00005103 CMPEQ R1,#+0 \ 0000016C 00005003 CMPEQ R0,#+0 \ 00000170 0300000A BEQ ??StartWorkTimer_9 \ 00000174 6E0000EF SWI +110 \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 0000001A BNE ??StartWorkTimer_9 \ 00000180 ........ BL LightOn 181 prespace4=space4; \ ??StartWorkTimer_9: \ 00000184 000097E5 LDR R0,[R7, #+0] \ ??StartWorkTimer_5: \ 00000188 000084E5 STR R0,[R4, #+0] \ 0000018C F081BDE8 POP {R4-R8,PC} 182 } 183 else GBS_StartTimerProc(&timer, uiUpdateTime, StartWorkTimer); \ ??StartWorkTimer_8: \ 00000190 ........ LDR R0,??DataTable36 ;; uiUpdateTime \ 00000194 ........ LDR R2,??DataTable34 ;; StartWorkTimer \ 00000198 001090E5 LDR R1,[R0, #+0] \ 0000019C ........ LDR R0,??DataTable35 ;; timer \ 000001A0 4D0000EF SWI +77 184 } \ 000001A4 F081BDE8 POP {R4-R8,PC} ;; return \ ??StartWorkTimer_0: \ 000001A8 ........ DC32 space0 \ 000001AC ........ DC32 space1 \ 000001B0 ........ DC32 space2 \ 000001B4 ........ DC32 space4 185 \ In segment CODE, align 4, keep-with-next 186 void InitSettings() 187 {InitConfig(); \ InitSettings: \ 00000000 00402DE9 PUSH {LR} \ 00000004 ........ _BLF InitConfig,??InitConfig??rA 188 uiUpdateTime = MAX(((216*cfgUpTime)/10),MIN_UPTIME); \ 00000008 98009FE5 LDR R0,??InitSettings_0 ;; cfgUpTime \ 0000000C D810A0E3 MOV R1,#+216 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 910002E0 MUL R2,R1,R0 \ 00000018 8C109FE5 LDR R1,??InitSettings_0+0x4 ;; 0xffffffffcccccccd \ 0000001C 913280E0 UMULL R3,R0,R1,R2 \ 00000020 ........ LDR R1,??DataTable36 ;; uiUpdateTime \ 00000024 A001A0E1 LSR R0,R0,#+3 \ 00000028 020050E3 CMP R0,#+2 \ 0000002C 0100A033 MOVCC R0,#+1 \ 00000030 000081E5 STR R0,[R1, #+0] 189 prespace0=GetFreeFlexSpace(0,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 8A0000EF SWI +138 \ 00000040 ........ LDR R1,??DataTable37 ;; prespace0 \ 00000044 000081E5 STR R0,[R1, #+0] 190 prespace1=GetFreeFlexSpace(1,0); \ 00000048 0010A0E3 MOV R1,#+0 \ 0000004C 0100A0E3 MOV R0,#+1 \ 00000050 8A0000EF SWI +138 \ 00000054 ........ LDR R1,??DataTable38 ;; prespace1 \ 00000058 000081E5 STR R0,[R1, #+0] 191 prespace2=GetFreeFlexSpace(2,0); \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 0200A0E3 MOV R0,#+2 \ 00000064 8A0000EF SWI +138 \ 00000068 ........ LDR R1,??DataTable39 ;; prespace2 \ 0000006C 000081E5 STR R0,[R1, #+0] 192 prespace4=GetFreeFlexSpace(4,0); \ 00000070 0010A0E3 MOV R1,#+0 \ 00000074 0400A0E3 MOV R0,#+4 \ 00000078 8A0000EF SWI +138 \ 0000007C ........ LDR R1,??DataTable40 ;; prespace4 \ 00000080 000081E5 STR R0,[R1, #+0] 193 if(ENA_HELLO_MSG) ShowMSG(1,(int)"Write flasher installed! (c)SimaFish!"); \ 00000084 24009FE5 LDR R0,??InitSettings_0+0x8 ;; ENA_HELLO_MSG \ 00000088 000090E5 LDR R0,[R0, #+0] \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 0200000A BEQ ??InitSettings_1 \ 00000094 18109FE5 LDR R1,??InitSettings_0+0xC ;; `?` \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 480100EF SWI +328 194 StartWorkTimer(); \ ??InitSettings_1: \ 000000A0 ........ BL StartWorkTimer 195 } \ 000000A4 0080BDE8 POP {PC} ;; return \ ??InitSettings_0: \ 000000A8 ........ DC32 cfgUpTime \ 000000AC CDCCCCCC DC32 0xffffffffcccccccd \ 000000B0 ........ DC32 ENA_HELLO_MSG \ 000000B4 ........ DC32 `?` 196 \ In segment CODE, align 4, keep-with-next 197 void main() 198 { \ main: \ 00000000 70402DE9 PUSH {R4-R6,LR} 199 InitSettings(); 200 CSM_RAM *save_cmpc; 201 char dummy[sizeof(MAIN_CSM)]; 202 UpdateCSMname(); \ 00000004 64409FE5 LDR R4,??main_0 ;; MAINCSM \ 00000008 28D04DE2 SUB SP,SP,#+40 \ 0000000C ........ BL InitSettings \ 00000010 5C109FE5 LDR R1,??main_0+0x4 ;; `?` \ 00000014 280084E2 ADD R0,R4,#+40 \ 00000018 240100EF SWI +292 203 LockSched(); \ 0000001C 460100EF SWI +326 204 save_cmpc=CSM_root()->csm_q->current_msg_processing_csm; \ 00000020 068100EF SWI +33030 \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 045090E5 LDR R5,[R0, #+4] 205 CSM_root()->csm_q->current_msg_processing_csm=CSM_root()->csm_q->csm.first; \ 0000002C 068100EF SWI +33030 \ 00000030 0060A0E1 MOV R6,R0 \ 00000034 068100EF SWI +33030 \ 00000038 080090E5 LDR R0,[R0, #+8] \ 0000003C 081096E5 LDR R1,[R6, #+8] \ 00000040 080090E5 LDR R0,[R0, #+8] 206 CreateCSM(&MAINCSM.maincsm,dummy,0); \ 00000044 0020A0E3 MOV R2,#+0 \ 00000048 040081E5 STR R0,[R1, #+4] \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 070100EF SWI +263 207 CSM_root()->csm_q->current_msg_processing_csm=save_cmpc; \ 00000058 068100EF SWI +33030 \ 0000005C 080090E5 LDR R0,[R0, #+8] \ 00000060 045080E5 STR R5,[R0, #+4] 208 UnlockSched(); \ 00000064 470100EF SWI +327 209 } \ 00000068 28D08DE2 ADD SP,SP,#+40 \ 0000006C 7080BDE8 POP {R4-R6,PC} ;; return \ ??main_0: \ 00000070 ........ DC32 MAINCSM \ 00000074 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable15: \ 00000000 ........ DC32 lockkey \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 lockdis \ In segment CODE, align 4, keep-with-next \ ??DataTable17: \ 00000000 ........ DC32 lockdyn \ In segment CODE, align 4, keep-with-next \ ??DataTable18: \ 00000000 ........ DC32 locklig \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 delay \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 Oldillum \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 lig \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 dis \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 key \ In segment CODE, align 4, keep-with-next \ ??DataTable29: \ 00000000 ........ DC32 dyn \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 StartWorkTimer \ In segment CODE, align 4, keep-with-next \ ??DataTable35: \ 00000000 ........ DC32 timer \ In segment CODE, align 4, keep-with-next \ ??DataTable36: \ 00000000 ........ DC32 uiUpdateTime \ In segment CODE, align 4, keep-with-next \ ??DataTable37: \ 00000000 ........ DC32 prespace0 \ In segment CODE, align 4, keep-with-next \ ??DataTable38: \ 00000000 ........ DC32 prespace1 \ In segment CODE, align 4, keep-with-next \ ??DataTable39: \ 00000000 ........ DC32 prespace2 \ In segment CODE, align 4, keep-with-next \ ??DataTable40: \ 00000000 ........ DC32 prespace4 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 577269746520 DC8 "Write flasher settings refreshed!" \ 666C61736865 \ 722073657474 \ 696E67732072 \ 656672657368 \ 65642100 \ 00000022 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 577269746520 DC8 "Write flasher - (c)SimaFish" \ 666C61736865 \ 72202D202863 \ 2953696D6146 \ 69736800 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 577269746520 DC8 57H, 72H, 69H, 74H, 65H, 20H, 66H, 6CH \ 666C \ 00000008 617368657220 DC8 61H, 73H, 68H, 65H, 72H, 20H, 69H, 6EH \ 696E \ 00000010 7374616C6C65 DC8 73H, 74H, 61H, 6CH, 6CH, 65H, 64H, 21H \ 6421 \ 00000018 202020202020 DC8 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H \ 2020 \ 00000020 202020202020 DC8 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H \ 2020 \ 00000028 202020286329 DC8 20H, 20H, 20H, 28H, 63H, 29H, 53H, 69H \ 5369 \ 00000030 6D6146697368 DC8 6DH, 61H, 46H, 69H, 73H, 68H, 21H, 0 \ 2100 Maximum stack usage in bytes: Function CSTACK -------- ------ InitSettings 4 Killer 4 LightOff 12 LightOn 8 StartWorkTimer 24 main 56 maincsm_onclose 4 maincsm_oncreate 0 maincsm_onmessage 4 strcmp_nocase 0 Segment part sizes: Function/Label Bytes -------------- ----- timer 16 minus11 4 uiUpdateTime 4 b 256 prespace0 4 space0 4 prespace1 4 space1 4 prespace2 4 space2 4 prespace4 4 space4 4 count 4 Oldillum 4 under_idle 4 ??strcmp_nocase_0 76 maincsm_onmessage 80 maincsm_oncreate 4 Killer 36 maincsm_onclose 20 maincsm_name_body 280 MAINCSM 60 LightOn 380 LightOff 464 StartWorkTimer 440 InitSettings 184 main 120 ??DataTable15 4 ??DataTable16 4 ??DataTable17 4 ??DataTable18 4 ??DataTable20 4 ??DataTable25 4 ??DataTable26 4 ??DataTable27 4 ??DataTable28 4 ??DataTable29 4 ??DataTable34 4 ??DataTable35 4 ??DataTable36 4 ??DataTable37 4 ??DataTable38 4 ??DataTable39 4 ??DataTable40 4 ? 36 ? 28 ? 56 Others 76 1 936 bytes in segment CODE 184 bytes in segment DATA_C 600 bytes in segment DATA_Z 12 bytes in segment INITTAB 1 872 bytes of CODE memory (+ 76 bytes shared) 184 bytes of CONST memory 600 bytes of DATA memory Errors: none Warnings: none