############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 25/Dec/2007 16:15:04 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\matrix_scr\main.c # # Command line = D:\Pasha\elf\matrix_scr\main.c -D NEWSGOLD -D ELKA # # -lC D:\Pasha\elf\matrix_scr\Release_ELKA\List\ -o # # D:\Pasha\elf\matrix_scr\Release_ELKA\Obj\ -s9 # # --cpu_mode arm --endian little --cpu ARM926EJ-S # # --stack_align 4 --interwork -e --fpu None # # --dlib_config "D:\Pasha\ARM_Embedded_Workbench\Embed # # ded Workbench 4.0 Evaluation\ARM\LIB\dl5tpainl8n.h" # # -I "D:\Pasha\ARM_Embedded_Workbench\Embedded # # Workbench 4.0 Evaluation\ARM\INC\" # # --inline_threshold=2 # # List file = D:\Pasha\elf\matrix_scr\Release_ELKA\List\main.lst # # Object file = D:\Pasha\elf\matrix_scr\Release_ELKA\Obj\main.r79 # # # # # ############################################################################## D:\Pasha\elf\matrix_scr\main.c 1 #include "..\inc\swilib.h" 2 #include "..\inc\cfg_items.h" 3 #include "random.h" \ In segment DATA_C, align 4, align-sorted \ int const __data rndmax \ rndmax: \ 00000000 00010000 DC32 256 \ In segment CODE, align 4, keep-with-next \ __??Code32?? __code __interwork __atpcs void Randomize() \ Randomize: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 \ 00000014 0F80BDE8 POP {R0-R3,PC} ;; return 4 #include "conf_loader.h" 5 #include "local_ipc.h" 6 7 const char ipc_my_name[]=IPC_TEXTINFO_NAME; 8 const IPC_REQ my_ipc={ 9 ipc_my_name, 10 ipc_my_name, 11 NULL 12 }; 13 14 #define TMR_SECOND 216 \ In segment DATA_Z, align 4, align-sorted 15 GBSTMR mytmr; \ mytmr: \ 00000000 DS8 16 16 \ In segment CODE, align 4, keep-with-next 17 void TimerProc(void) 18 { 19 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_UPDATE_STAT,&my_ipc); \ TimerProc: \ 00000000 ........ LDR R3,??DataTable9 ;; my_ipc \ 00000004 00402DE9 PUSH {LR} \ 00000008 0120A0E3 MOV R2,#+1 \ 0000000C B010A0E3 MOV R1,#+176 \ 00000010 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000014 0900A0E3 MOV R0,#+9 \ 00000018 420C80E3 ORR R0,R0,#0x4200 \ 0000001C 000100EF SWI +256 20 } \ 00000020 0080BDE8 POP {PC} ;; return 21 22 const int minus11=-11; 23 24 extern const int cfg_time; 25 extern const int cfg_sec; 26 extern const unsigned int cfg_tx; 27 extern const unsigned int cfg_ty; 28 \ In segment DATA_Z, align 4, align-sorted 29 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 30 \ In segment DATA_Z, align 4, align-sorted 31 unsigned int MAINCSM_ID = 0; \ MAINCSM_ID: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 32 unsigned int MAINGUI_ID = 0; \ MAINGUI_ID: \ 00000000 DS8 4 33 34 typedef struct 35 { 36 CSM_RAM csm; 37 int gui_id; 38 }MAIN_CSM; 39 40 typedef struct 41 { 42 GUI gui; 43 WSHDR *ws1; 44 WSHDR *ws2; 45 int i1; 46 }MAIN_GUI; 47 48 int speed=50; 49 int rnd=5,y=-10,rx,i,n=1; 50 int yy[66]; 51 int xx[66],spd[66]; 52 char OBLACK[]={0,0,0,8}; 53 char OOBLACK[]={0,0,0,20}; 54 char WHITE[]={255,255,255,100}; 55 char GREEN[]={30,240,30,100}; 56 char RED[]={255,0,0,100}; 57 char *buf; 58 int bufsize=256; 59 int yy[66]; 60 int xx[66]; 61 \ In segment CODE, align 4, keep-with-next 62 void window(void) 63 { 64 DrawRoundedFrame(0,0,131,175,0,0,0,OBLACK,OBLACK); \ window: \ 00000000 34009FE5 LDR R0,??window_0 ;; OBLACK \ 00000004 00402DE9 PUSH {LR} \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 02002DE9 PUSH {R1} \ 00000010 01002DE9 PUSH {R0} \ 00000014 AF30A0E3 MOV R3,#+175 \ 00000018 8320A0E3 MOV R2,#+131 \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 01002DE9 PUSH {R0} \ 00000028 01002DE9 PUSH {R0} \ 0000002C 01002DE9 PUSH {R0} \ 00000030 500100EF SWI +336 65 } \ 00000034 14D08DE2 ADD SP,SP,#+20 \ 00000038 0080BDE8 POP {PC} ;; return \ ??window_0: \ 0000003C ........ DC32 OBLACK 66 \ In segment CODE, align 4, keep-with-next 67 void line(int xpos,int y) 68 { \ line: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 69 DrawRoundedFrame(xpos,y,xpos,y+5,0,0,0,GREEN,GREEN); \ 00000004 ........ LDR R7,??DataTable10 ;; rndidx \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C CF0F87E2 ADD R0,R7,#+828 \ 00000010 01002DE9 PUSH {R0} \ 00000014 01002DE9 PUSH {R0} \ 00000018 0150A0E1 MOV R5,R1 \ 0000001C 056085E2 ADD R6,R5,#+5 \ 00000020 0630A0E1 MOV R3,R6 \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 01002DE9 PUSH {R0} \ 0000002C 01002DE9 PUSH {R0} \ 00000030 01002DE9 PUSH {R0} \ 00000034 0420A0E1 MOV R2,R4 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 500100EF SWI +336 70 DrawRoundedFrame(xpos,y+5,xpos,y+7,0,0,0,WHITE,WHITE); \ 00000040 CE0F87E2 ADD R0,R7,#+824 \ 00000044 01002DE9 PUSH {R0} \ 00000048 01002DE9 PUSH {R0} \ 0000004C 073085E2 ADD R3,R5,#+7 \ 00000050 0420A0E1 MOV R2,R4 \ 00000054 0610A0E1 MOV R1,R6 \ 00000058 0000A0E3 MOV R0,#+0 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 01002DE9 PUSH {R0} \ 00000064 01002DE9 PUSH {R0} \ 00000068 0400A0E1 MOV R0,R4 \ 0000006C 500100EF SWI +336 \ 00000070 28D08DE2 ADD SP,SP,#+40 71 } \ 00000074 F080BDE8 POP {R4-R7,PC} ;; return 72 \ In segment CODE, align 4, keep-with-next 73 void time(void) 74 { \ time: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 75 WSHDR *ws=AllocWS(256); 76 TDate date; TTime time; 77 GetDateTime(&date,&time); 78 if(cfg_sec!=1) \ 00000008 ........ LDR R5,??DataTable10 ;; rndidx \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 0D10A0E1 MOV R1,SP \ 0000001C 08008DE2 ADD R0,SP,#+8 \ 00000020 B40000EF SWI +180 \ 00000024 FC009FE5 LDR R0,??time_0 ;; cfg_sec \ 00000028 FC109FE5 LDR R1,??time_0+0x4 ;; `?` \ 0000002C 000090E5 LDR R0,[R0, #+0] \ 00000030 010050E3 CMP R0,#+1 \ 00000034 1C00000A BEQ ??time_1 79 { 80 sprintf(buf,"%d:%02d",time.hour,time.min); \ 00000038 0130DDE5 LDRB R3,[SP, #+1] \ 0000003C 0020DDE5 LDRB R2,[SP, #+0] \ 00000040 1C0195E5 LDR R0,[R5, #+284] \ 00000044 160000EF SWI +22 81 wsprintf(ws,buf); \ 00000048 1C1195E5 LDR R1,[R5, #+284] \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 240100EF SWI +292 82 DrawString(ws,cfg_tx+5,cfg_ty,cfg_tx+66,cfg_ty+22,0,2,WHITE,OOBLACK); \ 00000054 D4009FE5 LDR R0,??time_0+0x8 ;; cfg_tx \ 00000058 001090E5 LDR R1,[R0, #+0] \ 0000005C D0009FE5 LDR R0,??time_0+0xC ;; cfg_ty \ 00000060 423081E2 ADD R3,R1,#+66 \ 00000064 002090E5 LDR R2,[R0, #+0] \ 00000068 CD0F85E2 ADD R0,R5,#+820 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 051081E2 ADD R1,R1,#+5 \ 00000074 CE0F85E2 ADD R0,R5,#+824 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 0200A0E3 MOV R0,#+2 \ 00000080 01002DE9 PUSH {R0} \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 01002DE9 PUSH {R0} \ 0000008C 160082E2 ADD R0,R2,#+22 \ 00000090 01002DE9 PUSH {R0} \ 00000094 0400A0E1 MOV R0,R4 \ 00000098 4C0100EF SWI +332 \ 0000009C 14D08DE2 ADD SP,SP,#+20 \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 290100EF SWI +297 \ 000000A8 3F80BDE8 POP {R0-R5,PC} 83 } 84 else 85 { 86 sprintf(buf,"%d:%02d:%02d",time.hour,time.min,time.sec); \ ??time_1: \ 000000AC 0200DDE5 LDRB R0,[SP, #+2] \ 000000B0 081081E2 ADD R1,R1,#+8 \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 0530DDE5 LDRB R3,[SP, #+5] \ 000000BC 0420DDE5 LDRB R2,[SP, #+4] \ 000000C0 1C0195E5 LDR R0,[R5, #+284] \ 000000C4 160000EF SWI +22 87 wsprintf(ws,buf); \ 000000C8 1C1195E5 LDR R1,[R5, #+284] \ 000000CC 0400A0E1 MOV R0,R4 \ 000000D0 240100EF SWI +292 88 DrawString(ws,cfg_tx,cfg_ty,cfg_tx+72,cfg_ty+22,0,2,WHITE,OOBLACK); \ 000000D4 54009FE5 LDR R0,??time_0+0x8 ;; cfg_tx \ 000000D8 001090E5 LDR R1,[R0, #+0] \ 000000DC 50009FE5 LDR R0,??time_0+0xC ;; cfg_ty \ 000000E0 483081E2 ADD R3,R1,#+72 \ 000000E4 002090E5 LDR R2,[R0, #+0] \ 000000E8 CD0F85E2 ADD R0,R5,#+820 \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 CE0F85E2 ADD R0,R5,#+824 \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 0200A0E3 MOV R0,#+2 \ 000000FC 01002DE9 PUSH {R0} \ 00000100 0000A0E3 MOV R0,#+0 \ 00000104 01002DE9 PUSH {R0} \ 00000108 160082E2 ADD R0,R2,#+22 \ 0000010C 01002DE9 PUSH {R0} \ 00000110 0400A0E1 MOV R0,R4 \ 00000114 4C0100EF SWI +332 \ 00000118 18D08DE2 ADD SP,SP,#+24 89 } 90 FreeWS(ws); \ 0000011C 0400A0E1 MOV R0,R4 \ 00000120 290100EF SWI +297 91 } \ 00000124 3F80BDE8 POP {R0-R5,PC} ;; return \ ??time_0: \ 00000128 ........ DC32 cfg_sec \ 0000012C ........ DC32 `?` \ 00000130 ........ DC32 cfg_tx \ 00000134 ........ DC32 cfg_ty \ In segment DATA_I, align 4, align-sorted \ unsigned int __data rndidx \ rndidx: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ speed: \ 00000004 DS8 4 \ 00000008 REQUIRE `?` \ rx: \ 00000008 DS8 4 \ 0000000C REQUIRE `?` \ i: \ 0000000C DS8 4 \ 00000010 REQUIRE `?` \ n: \ 00000010 DS8 4 \ 00000014 REQUIRE `?` \ spd: \ 00000014 DS8 264 \ 0000011C REQUIRE `?` \ buf: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ bufsize: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ yy: \ 00000124 DS8 264 \ 0000022C REQUIRE `?` \ xx: \ 0000022C DS8 264 \ 00000334 REQUIRE `?` \ OOBLACK: \ 00000334 DS8 4 \ 00000338 REQUIRE `?` \ WHITE: \ 00000338 DS8 4 \ 0000033C REQUIRE `?` \ GREEN: \ 0000033C DS8 4 \ 00000340 REQUIRE `?` 92 93 GBSTMR matrix,chk; \ matrix: \ 00000340 DS8 16 \ 00000350 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ rnd: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ y: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ OBLACK: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ RED: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_Z, align 4, align-sorted \ chk: \ 00000000 DS8 16 94 void UpdateCSMname(void); 95 \ In segment CODE, align 4, keep-with-next 96 void timer(void) 97 { \ timer: \ 00000000 70402DE9 PUSH {R4-R6,LR} 98 window(); \ 00000004 ........ BL window 99 if(cfg_time==1) \ 00000008 D4009FE5 LDR R0,??timer_0 ;; cfg_time \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 0000001A BNE ??timer_1 100 time(); \ 00000018 ........ BL time 101 for(i=0;i<=65;i++) \ ??timer_1: \ 0000001C ........ LDR R4,??DataTable13 ;; rndidx \ 00000020 0050A0E3 MOV R5,#+0 \ 00000024 0C5084E5 STR R5,[R4, #+12] \ ??timer_2: \ 00000028 0C0094E5 LDR R0,[R4, #+12] \ 0000002C 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000030 241190E5 LDR R1,[R0, #+292] \ 00000034 142090E5 LDR R2,[R0, #+20] \ 00000038 011082E0 ADD R1,R2,R1 \ 0000003C 241180E5 STR R1,[R0, #+292] \ 00000040 2C0290E5 LDR R0,[R0, #+556] 102 { 103 line(xx[i],yy[i]+=spd[i]); \ 00000044 ........ BL line 104 if(yy[i]>176) \ 00000048 0C0094E5 LDR R0,[R4, #+12] \ 0000004C 002094E5 LDR R2,[R4, #+0] \ 00000050 001184E0 ADD R1,R4,R0, LSL #+2 \ 00000054 243191E5 LDR R3,[R1, #+292] \ 00000058 B10053E3 CMP R3,#+177 \ 0000005C 130000BA BLT ??timer_3 105 { 106 yy[i]-=186; \ 00000060 B9C0E0E3 MVN R12,#+185 \ 00000064 03308CE0 ADD R3,R12,R3 107 spd[i]=random()/50; \ 00000068 78C09FE5 LDR R12,??timer_0+0x4 ;; 0x51eb851f \ 0000006C 243181E5 STR R3,[R1, #+292] \ 00000070 ........ LDR R3,??DataTable12 ;; rndtab \ 00000074 012082E2 ADD R2,R2,#+1 \ 00000078 400F52E3 CMP R2,#+256 \ 0000007C 0020A023 MOVCS R2,#+0 \ 00000080 0330D2E7 LDRB R3,[R2, +R3] \ 00000084 9CE3C6E0 SMULL LR,R6,R12,R3 \ 00000088 4662A0E1 ASR R6,R6,#+4 \ 0000008C A33F86E0 ADD R3,R6,R3, LSR #+31 \ 00000090 143081E5 STR R3,[R1, #+20] 108 if (spd[i]>5) spd[i]=5; \ 00000094 060053E3 CMP R3,#+6 \ 00000098 0530A0A3 MOVGE R3,#+5 \ 0000009C 020000AA BGE ??timer_4 109 if (spd[i]<=0) spd[i]=1; \ 000000A0 010053E3 CMP R3,#+1 \ 000000A4 010000AA BGE ??timer_3 \ 000000A8 0130A0E3 MOV R3,#+1 \ ??timer_4: \ 000000AC 143081E5 STR R3,[R1, #+20] \ ??timer_3: \ 000000B0 002084E5 STR R2,[R4, #+0] 110 } 111 } \ 000000B4 010080E2 ADD R0,R0,#+1 \ 000000B8 0C0084E5 STR R0,[R4, #+12] \ 000000BC 420050E3 CMP R0,#+66 \ 000000C0 D8FFFFBA BLT ??timer_2 112 GBS_StartTimerProc(&matrix,262/speed,timer); \ 000000C4 ........ LDR R2,??DataTable11 ;; timer \ 000000C8 041094E5 LDR R1,[R4, #+4] \ 000000CC 0600A0E3 MOV R0,#+6 \ 000000D0 400F80E3 ORR R0,R0,#0x100 \ 000000D4 ........ _BLF ??div32_a,??rA??div32_a \ 000000D8 D00F84E2 ADD R0,R4,#+832 \ 000000DC 4D0000EF SWI +77 113 } \ 000000E0 7080BDE8 POP {R4-R6,PC} ;; return \ ??timer_0: \ 000000E4 ........ DC32 cfg_time \ 000000E8 1F85EB51 DC32 0x51eb851f 114 \ In segment CODE, align 4, keep-with-next 115 void OnRedraw(MAIN_GUI *data) // OnRedraw 116 { 117 } \ OnRedraw: \ 00000000 1EFF2FE1 BX LR ;; return 118 \ In segment CODE, align 4, keep-with-next 119 void onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) //Create 120 { 121 // Тут можно создать переменные 122 123 data->gui.state=1; \ onCreate: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] 124 } \ 00000008 1EFF2FE1 BX LR ;; return 125 \ In segment CODE, align 4, keep-with-next 126 void onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) //Close 127 { \ onClose: \ 00000000 30402DE9 PUSH {R4,R5,LR} 128 // Тут можно освободить выделяемую память 129 if(buf) mfree(buf); // Освобождаем память \ 00000004 ........ LDR R5,??DataTable10 ;; rndidx \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 1C0195E5 LDR R0,[R5, #+284] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0000000A BEQ ??onClose_0 \ 00000018 150000EF SWI +21 130 GBS_DelTimer(&matrix); \ ??onClose_0: \ 0000001C D00F85E2 ADD R0,R5,#+832 \ 00000020 8C0100EF SWI +396 131 data->gui.state=1; \ 00000024 0100A0E3 MOV R0,#+1 \ 00000028 0C00C4E5 STRB R0,[R4, #+12] 132 } \ 0000002C 3080BDE8 POP {R4,R5,PC} ;; return 133 \ In segment CODE, align 4, keep-with-next 134 void onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *))//Focus 135 { \ onFocus: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 136 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 137 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 138 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 139 \ In segment CODE, align 4, keep-with-next 140 void onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) //Unfocus 141 { \ onUnfocus: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 142 143 GBS_DelTimer(&matrix); \ 00000008 ........ LDR R0,??DataTable8 ;; rndidx + 832 \ 0000000C 8C0100EF SWI +396 144 if (data->gui.state!=2) return; \ 00000010 0C00D4E5 LDRB R0,[R4, #+12] \ 00000014 020050E3 CMP R0,#+2 \ 00000018 1080BD18 POPNE {R4,PC} 145 RestartIDLETMR(); \ 0000001C 7E0100EF SWI +382 146 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 147 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 148 \ In segment CODE, align 4, keep-with-next 149 int OnKey(MAIN_GUI *data, GUI_MSG *msg) //OnKey 150 { \ OnKey: \ 00000000 00402DE9 PUSH {LR} 151 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000004 040091E5 LDR R0,[R1, #+4] \ 00000008 9320A0E3 MOV R2,#+147 \ 0000000C 041090E5 LDR R1,[R0, #+4] \ 00000010 402F82E3 ORR R2,R2,#0x100 \ 00000014 020051E1 CMP R1,R2 152 { 153 int bt=msg->gbsmsg->submess; 154 switch(bt) \ 00000018 08009005 LDREQ R0,[R0, #+8] \ 0000001C 23005003 CMPEQ R0,#+35 \ 00000020 0300001A BNE ??OnKey_0 155 { 156 case '#': 157 GBS_DelTimer(&matrix); \ 00000024 ........ LDR R0,??DataTable8 ;; rndidx + 832 \ 00000028 8C0100EF SWI +396 158 RestartIDLETMR(); \ 0000002C 7E0100EF SWI +382 159 DirectRedrawGUI(); \ 00000030 3F0100EF SWI +319 160 } 161 } 162 return(0); \ ??OnKey_0: \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 0080BDE8 POP {PC} ;; return 163 } 164 165 /* 166 #ifdef NEWSGOLD 167 void onDestroy(MAIN_GUI *data, void (*mfree_adr)(void *)) 168 { 169 mfree_adr(data); 170 } 171 #else*/ 172 extern void kill_data(void *p, void (*func_p)(void *)); 173 /* 174 void method7(MAIN_GUI *data, void (*mfree_adr)(void *)) 175 { 176 kill_data(data,mfree_adr); 177 mfree_adr(data); 178 } 179 #endif 180 */ 181 \ In segment CODE, align 4, keep-with-next 182 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 183 184 \ In segment CODE, align 4, keep-with-next 185 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 186 187 // Массив с методами, чтобы дать ОС информацию, какие когда вызывать 188 const void * const gui_methods[11]={ 189 (void *)OnRedraw, //Redraw 190 (void *)onCreate, //Create 191 (void *)onClose, //Close 192 (void *)onFocus, //Focus 193 (void *)onUnfocus, //Unfocus 194 (void *)OnKey, //OnKey 195 0, 196 (void *)kill_data, //Destroy 197 (void *)method8, 198 (void *)method9, 199 0 200 }; 201 202 // Канвас для основного GUI 203 const RECT Canvas={0,0,129,129}; 204 205 // Вызывается при создании главного CSM. В данном примере 206 // создаётся GUI, его ID записывается в MAINGUI_ID 207 // на всякий случай - вдруг понадобится ;) \ In segment CODE, align 4, keep-with-next 208 void maincsm_oncreate(CSM_RAM *data) 209 { \ maincsm_oncreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} 210 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); 211 MAIN_CSM*csm=(MAIN_CSM*)data; 212 zeromem(main_gui,sizeof(MAIN_GUI)); 213 main_gui->gui.canvas=(void *)(&Canvas); \ 00000004 ........ LDR R4,??DataTable9 ;; my_ipc \ 00000008 0050A0E1 MOV R5,R0 \ 0000000C 4000A0E3 MOV R0,#+64 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 4010A0E3 MOV R1,#+64 \ 0000001C 1D0100EF SWI +285 \ 00000020 380084E2 ADD R0,R4,#+56 \ 00000024 000086E5 STR R0,[R6, #+0] 214 main_gui->gui.flag30=2; \ 00000028 0200A0E3 MOV R0,#+2 \ 0000002C 300086E5 STR R0,[R6, #+48] 215 main_gui->gui.methods=(void *)gui_methods; \ 00000030 0C0084E2 ADD R0,R4,#+12 \ 00000034 040086E5 STR R0,[R6, #+4] 216 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000038 158000EF SWI +32789 \ 0000003C 200086E5 STR R0,[R6, #+32] 217 csm->csm.state=0; \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 100085E5 STR R0,[R5, #+16] 218 csm->csm.unk1=0; \ 00000048 140085E5 STR R0,[R5, #+20] 219 csm->gui_id=CreateGUI(main_gui); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 370100EF SWI +311 \ 00000054 280085E5 STR R0,[R5, #+40] 220 MAINGUI_ID=csm->gui_id; \ 00000058 24009FE5 LDR R0,??maincsm_oncreate_0 ;; MAINGUI_ID \ 0000005C 281095E5 LDR R1,[R5, #+40] 221 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_UPDATE_STAT,&my_ipc); \ 00000060 0430A0E1 MOV R3,R4 \ 00000064 001080E5 STR R1,[R0, #+0] \ 00000068 0120A0E3 MOV R2,#+1 \ 0000006C B010A0E3 MOV R1,#+176 \ 00000070 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000074 0900A0E3 MOV R0,#+9 \ 00000078 420C80E3 ORR R0,R0,#0x4200 \ 0000007C 000100EF SWI +256 222 } \ 00000080 7080BDE8 POP {R4-R6,PC} ;; return \ ??maincsm_oncreate_0: \ 00000084 ........ DC32 MAINGUI_ID 223 /* 224 // Всё ясно из названия ;) оставить как есть 225 void ElfKiller(void) 226 { 227 extern void kill_data(void *p, void (*func_p)(void *)); 228 extern void *ELF_BEGIN; 229 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); 230 }*/ \ In segment CODE, align 4, keep-with-next 231 void ElfKiller(void) 232 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 233 extern void *ELF_BEGIN; 234 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000004 158000EF SWI +32789 \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 00000018 ........ DC32 ELF_BEGIN 235 } 236 237 // Вызывается при закрытии главного CSM. Тут и вызывается киллер \ In segment CODE, align 4, keep-with-next 238 void maincsm_onclose(CSM_RAM *csm) 239 { 240 SUBPROC((void *)ElfKiller); \ maincsm_onclose: \ 00000000 08009FE5 LDR R0,??maincsm_onclose_0 ;; ElfKiller \ 00000004 00402DE9 PUSH {LR} \ 00000008 710100EF SWI +369 241 } \ 0000000C 0080BDE8 POP {PC} ;; return \ ??maincsm_onclose_0: \ 00000010 ........ DC32 ElfKiller 242 243 // Обработчик событий главного CSM \ In segment CODE, align 4, keep-with-next 244 int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg) 245 { 246 MAIN_CSM *csm=(MAIN_CSM*)data; 247 if ((msg->msg==MSG_GUI_DESTROYED)&&((int)msg->data0==csm->gui_id)) \ maincsm_onmessage: \ 00000000 042091E5 LDR R2,[R1, #+4] \ 00000004 0E30A0E3 MOV R3,#+14 \ 00000008 643C83E3 ORR R3,R3,#0x6400 \ 0000000C 030052E1 CMP R2,R3 \ 00000010 0400001A BNE ??maincsm_onmessage_0 \ 00000014 0C1091E5 LDR R1,[R1, #+12] \ 00000018 282090E5 LDR R2,[R0, #+40] \ 0000001C 020051E1 CMP R1,R2 248 { 249 csm->csm.state=-3; \ 00000020 0210E003 MVNEQ R1,#+2 \ 00000024 10108005 STREQ R1,[R0, #+16] 250 } 251 return(1); \ ??maincsm_onmessage_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 1EFF2FE1 BX LR ;; return 252 } \ In segment DATA_C, align 4, align-sorted \ unsigned char const __data rndtab[256] \ rndtab: \ 00000000 01086DDCDEF1 DC8 1, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66, 74 \ 956B4BF8FE8C \ 10424A \ 0000000F 15D32F50F29A DC8 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36, 95, 110 \ 1BCD80A1594D \ 245F6E \ 0000001E 5530D48CD3F9 DC8 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188, 52, 140, 202 \ 164FC8321CBC \ 348CCA \ 0000002D 7844913E46B8 DC8 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224, 149, 104, 25 \ BE5BC598E095 \ 6819 \ 0000003B B2FCB6CAB68D DC8 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242, 145, 42, 39 \ C50451B5F291 \ 2A27 \ 00000049 E39CC6E1C1DB DC8 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 1, 175, 143, 70 \ 5D7AAFF901AF \ 8F46 \ 00000057 EF2EF6A335A3 DC8 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235, 25, 92, 20, 145 \ 6DA88702EB19 \ 5C1491 \ 00000066 8A4D45A64EB0 DC8 138, 77, 69, 166, 78, 176, 173, 212, 166, 113, 94, 161, 41, 50, 239 \ ADD4A6715EA1 \ 2932EF \ 00000075 316FA4463C02 DC8 49, 111, 164, 70, 60, 2, 37, 171, 75, 136, 156, 11, 56, 42, 146 \ 25AB4B889C0B \ 382A92 \ 00000084 8AE549924D3D DC8 138, 229, 73, 146, 77, 61, 98, 196, 135, 106, 63, 197, 195, 86, 96 \ 62C4876A3FC5 \ C35660 \ 00000093 CB7165AAF7B5 DC8 203, 113, 101, 170, 247, 181, 113, 80, 250, 108, 7, 255, 237, 129 \ 7150FA6C07FF \ ED81 \ 000000A1 E24F6B70A667 DC8 226, 79, 107, 112, 166, 103, 241, 24, 223, 239, 120, 198, 58, 60 \ F118DFEF78C6 \ 3A3C \ 000000AF 528003B8428F DC8 82, 128, 3, 184, 66, 143, 224, 145, 224, 81, 206, 163, 45, 63, 90 \ E091E051CEA3 \ 2D3F5A \ 000000BE A8723B219F5F DC8 168, 114, 59, 33, 159, 95, 28, 139, 123, 98, 125, 196, 15, 70, 194 \ 1C8B7B627DC4 \ 0F46C2 \ 000000CD FD360E6DE247 DC8 253, 54, 14, 109, 226, 71, 17, 161, 93, 186, 87, 244, 138, 20, 52 \ 11A15DBA57F4 \ 8A1434 \ 000000DC 7BFB1A24112E DC8 123, 251, 26, 36, 17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216 \ 34E7E84C1FDD \ 5425D8 \ 000000EB A5D46AC5F262 DC8 165, 212, 106, 197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118 \ 2B27AFFE91BE \ 5476 \ 000000F9 DEBB8878A3EC DC8 222, 187, 136, 120, 163, 236, 249 \ F9 \ 00000100 4D6174726978 DC8 "Matrix has you!" \ 206861732079 \ 6F752100 \ 00000110 746865206D61 DC8 "the matrix" \ 7472697800 \ 0000011B 00 DC8 0 253 254 // Инициализация структуры MAINCSM 255 const struct 256 { 257 CSM_DESC maincsm; 258 WSHDR maincsm_name; 259 }MAINCSM = \ MAINCSM: \ 0000011C ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 00000138 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00000154 8B00 DC16 139 \ 00000156 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ ipc_my_name: \ 00000000 456C66537461 DC8 "ElfStart" \ 727400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ my_ipc: \ 00000000 ............ DC32 ipc_my_name, ipc_my_name, 0H \ ....00000000 \ gui_methods: \ 0000000C ............ DC32 OnRedraw, onCreate, onClose, onFocus, onUnfocus, OnKey, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000028 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ Canvas: \ 00000038 000000008100 DC16 0, 0, 129, 129 \ 8100 \ In segment DATA_C, align 4, align-sorted \ minus11: \ 00000000 F5FFFFFF DC32 -11 260 { 261 { 262 maincsm_onmessage, 263 maincsm_oncreate, 264 #ifdef NEWSGOLD 265 0, 266 0, 267 0, 268 0, 269 #endif 270 maincsm_onclose, 271 sizeof(MAIN_CSM), 272 1, 273 &minus11 274 }, 275 { 276 maincsm_name_body, 277 NAMECSM_MAGIC1, 278 NAMECSM_MAGIC2, 279 0x0, 280 139 281 } 282 }; 283 284 // Функция, которая устанавливает название этого CSM для X-Task. 285 /*void UpdateCSMname(void) 286 { 287 WSHDR *ws=AllocWS(256); 288 wsprintf((WSHDR *)(&MAINCSM.maincsm_name),"THE MATRIX"); 289 FreeWS(ws); 290 } 291 */ 292 static void UpdateCSMname(void) 293 { 294 wsprintf((WSHDR *)(&MAINCSM.maincsm_name),"the matrix"); 295 } 296 \ In segment CODE, align 4, keep-with-next 297 void check(void) 298 { 299 // if(!IsUnlocked()) 300 GBS_StartTimerProc(&matrix,262/speed,timer); \ check: \ 00000000 ........ LDR R3,??DataTable10 ;; rndidx \ 00000004 ........ LDR R2,??DataTable11 ;; timer \ 00000008 00402DE9 PUSH {LR} \ 0000000C 041093E5 LDR R1,[R3, #+4] \ 00000010 0600A0E3 MOV R0,#+6 \ 00000014 400F80E3 ORR R0,R0,#0x100 \ 00000018 ........ _BLF ??div32_a,??rA??div32_a \ 0000001C D00F83E2 ADD R0,R3,#+832 \ 00000020 4D0000EF SWI +77 301 //GBS_StartTimerProc(&chk,262*10,check); 302 } \ 00000024 0080BDE8 POP {PC} ;; return 303 304 305 // Основная процедура. Она первой получает управление при старте эльфа. \ In segment CODE, align 4, keep-with-next 306 int main() 307 { \ main: \ 00000000 70402DE9 PUSH {R4-R6,LR} 308 ShowMSG(1,(int)"Matrix has you!"); \ 00000004 ........ LDR R4,??DataTable12 ;; rndtab \ 00000008 28D04DE2 SUB SP,SP,#+40 \ 0000000C 401F84E2 ADD R1,R4,#+256 \ 00000010 0100A0E3 MOV R0,#+1 \ 00000014 480100EF SWI +328 309 CSMROOT *csmr; 310 CSM_RAM *save_cmpc; 311 CSM_RAM main_csm; 312 InitConfig(); \ 00000018 ........ _BLF InitConfig,??InitConfig??rA 313 UpdateCSMname(); \ 0000001C 441F84E2 ADD R1,R4,#+272 \ 00000020 510F84E2 ADD R0,R4,#+324 \ 00000024 240100EF SWI +292 314 LockSched(); \ 00000028 460100EF SWI +326 315 csmr=CSM_root(); \ 0000002C 068100EF SWI +33030 \ 00000030 0050A0E1 MOV R5,R0 316 save_cmpc=csmr->csm_q->current_msg_processing_csm; \ 00000034 080095E5 LDR R0,[R5, #+8] 317 csmr->csm_q->current_msg_processing_csm=csmr->csm_q->csm.first; 318 CreateCSM(&MAINCSM.maincsm,&main_csm,0); \ 00000038 0020A0E3 MOV R2,#+0 \ 0000003C 081090E5 LDR R1,[R0, #+8] \ 00000040 046090E5 LDR R6,[R0, #+4] \ 00000044 041080E5 STR R1,[R0, #+4] \ 00000048 0D10A0E1 MOV R1,SP \ 0000004C 470F84E2 ADD R0,R4,#+284 \ 00000050 070100EF SWI +263 319 csmr->csm_q->current_msg_processing_csm=save_cmpc; \ 00000054 080095E5 LDR R0,[R5, #+8] 320 UnlockSched(); 321 for(i=0;i<=65;i++) \ 00000058 ........ LDR R5,??DataTable13 ;; rndidx \ 0000005C 046080E5 STR R6,[R0, #+4] \ 00000060 470100EF SWI +327 \ 00000064 0000A0E3 MOV R0,#+0 \ 00000068 0C0085E5 STR R0,[R5, #+12] \ 0000006C 141085E2 ADD R1,R5,#+20 \ 00000070 492F85E2 ADD R2,R5,#+292 \ 00000074 8B3F85E2 ADD R3,R5,#+556 \ 00000078 03C0A0E3 MOV R12,#+3 322 { 323 spd[i]=3; \ ??main_0: \ 0000007C 00C081E5 STR R12,[R1, #+0] 324 rx=random(); \ 00000080 006095E5 LDR R6,[R5, #+0] 325 yy[i]=rx; 326 xx[i]=n; 327 n+=2; 328 } \ 00000084 041081E2 ADD R1,R1,#+4 \ 00000088 016086E2 ADD R6,R6,#+1 \ 0000008C 006085E5 STR R6,[R5, #+0] \ 00000090 400F56E3 CMP R6,#+256 \ 00000094 00008525 STRCS R0,[R5, #+0] \ 00000098 006095E5 LDR R6,[R5, #+0] \ 0000009C 0460D6E7 LDRB R6,[R6, +R4] \ 000000A0 086085E5 STR R6,[R5, #+8] \ 000000A4 ........ STR R6,[R2], #+4 \ 000000A8 106095E5 LDR R6,[R5, #+16] \ 000000AC ........ STR R6,[R3], #+4 \ 000000B0 026086E2 ADD R6,R6,#+2 \ 000000B4 106085E5 STR R6,[R5, #+16] \ 000000B8 0C6095E5 LDR R6,[R5, #+12] \ 000000BC 016086E2 ADD R6,R6,#+1 \ 000000C0 0C6085E5 STR R6,[R5, #+12] \ 000000C4 420056E3 CMP R6,#+66 \ 000000C8 EBFFFFBA BLT ??main_0 329 buf=(char *)malloc(bufsize); // Выделяем память и т.п. \ 000000CC 200195E5 LDR R0,[R5, #+288] \ 000000D0 140000EF SWI +20 \ 000000D4 1C0185E5 STR R0,[R5, #+284] 330 if(!buf) SUBPROC((void *)onClose); // Не получилось - выходим \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0100001A BNE ??main_1 \ 000000E0 14009FE5 LDR R0,??main_2 ;; onClose \ 000000E4 710100EF SWI +369 331 SUBPROC((void *)check); \ ??main_1: \ 000000E8 10009FE5 LDR R0,??main_2+0x4 ;; check \ 000000EC 710100EF SWI +369 332 return 0; \ 000000F0 0000A0E3 MOV R0,#+0 \ 000000F4 28D08DE2 ADD SP,SP,#+40 \ 000000F8 7080BDE8 POP {R4-R6,PC} ;; return \ ??main_2: \ 000000FC ........ DC32 onClose \ 00000100 ........ DC32 check 333 } \ In segment CODE, align 4, keep-with-next \ ??DataTable8: \ 00000000 ........ DC32 rndidx + 832 \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 my_ipc \ In segment CODE, align 4, keep-with-next \ ??DataTable10: \ 00000000 ........ DC32 rndidx \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 timer \ In segment CODE, align 4, keep-with-next \ ??DataTable12: \ 00000000 ........ DC32 rndtab \ In segment CODE, align 4, keep-with-next \ ??DataTable13: \ 00000000 ........ DC32 rndidx \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 00000000 DC32 0 \ `?`: \ 00000004 32000000 DC32 50 \ `?`: \ 00000008 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000000C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000010 01000000 DC32 1 \ `?`: \ 00000014 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000024 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000034 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000044 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000054 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000064 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000074 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000084 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000094 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000104 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000114 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 00010000 DC32 256 \ `?`: \ 00000124 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000134 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000144 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000154 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000164 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000174 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000184 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000194 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000204 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000214 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000224 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 0000022C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000023C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000024C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000025C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000026C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000027C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000028C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000029C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000030C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000031C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000032C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000334 00000014 DC8 0, 0, 0, 20 \ `?`: \ 00000338 FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 0000033C 1EF01E64 DC8 30, 240, 30, 100 \ `?`: \ 00000340 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 05000000 DC32 5 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 F6FFFFFF DC32 -10 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 00000008 DC8 0, 0, 0, 8 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF000064 DC8 255, 0, 0, 100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25643A253032 DC8 "%d:%02d" \ 6400 \ 00000008 25643A253032 DC8 "%d:%02d:%02d" \ 643A25303264 \ 00 \ 00000015 000000 DC8 0, 0, 0 Maximum stack usage in bytes: Function CSTACK -------- ------ ElfKiller 4 OnKey 4 OnRedraw 0 Randomize 20 TimerProc 4 check 4 line 60 main 56 maincsm_onclose 4 maincsm_oncreate 16 maincsm_onmessage 0 method8 0 method9 0 onClose 12 onCreate 0 onFocus 8 onUnfocus 8 time 52 timer 16 window 24 Segment part sizes: Function/Label Bytes -------------- ----- rndmax 4 Randomize 24 mytmr 16 TimerProc 36 maincsm_name_body 280 MAINCSM_ID 4 MAINGUI_ID 4 window 64 line 120 time 312 rndidx 848 rnd 4 y 4 OBLACK 4 RED 4 chk 16 timer 236 OnRedraw 4 onCreate 12 onClose 48 onFocus 24 onUnfocus 44 OnKey 60 method8 8 method9 8 maincsm_oncreate 136 ElfKiller 28 maincsm_onclose 20 maincsm_onmessage 48 rndtab 344 ipc_my_name 12 my_ipc 64 minus11 4 check 40 main 260 ??DataTable8 4 ??DataTable9 4 ??DataTable10 4 ??DataTable11 4 ??DataTable12 4 ??DataTable13 4 ? 848 ? 4 ? 4 ? 4 ? 4 ? 24 Others 140 1 672 bytes in segment CODE 452 bytes in segment DATA_C 864 bytes in segment DATA_I 864 bytes in segment DATA_ID 320 bytes in segment DATA_Z 24 bytes in segment INITTAB 1 556 bytes of CODE memory (+ 140 bytes shared) 1 316 bytes of CONST memory 1 184 bytes of DATA memory Errors: none Warnings: none