############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 08/Jul/2011 16:25:44 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\readimg.c # # Command line = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\readimg.c -D X75 # # -D GUI_INTERFACE -D START_OFFLINE --preprocess # # D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_START_OFFLINE # # \List\ -lC D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_ST # # ART_OFFLINE\List\ -o D:\pasha\elf\_MY_PROJECT_\_NATI # # CQ2\X75_START_OFFLINE\Obj\ -s9 --no_unroll # # --cpu_mode arm --endian little --cpu ARM926EJ-S # # --stack_align 4 --interwork -e --fpu None # # --dlib_config "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_START_OFFLINE # # \List\readimg.lst # # Object file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_START_OFFLINE # # \Obj\readimg.r79 # # # # # ############################################################################## D:\pasha\elf\_MY_PROJECT_\_NATICQ2\readimg.c 1 2 3 /**************************************************************************************************************************** 4 iphone_saver.elf (readimg.c) 5 (с)Mirrr (http://init.org.ua, mirrr@ukr.net) 6 (с)2008 7 8 Разрешается модифицировать и использовать по вашему усмотрению любой документ из архива, 9 при условиях: 10 - не удаляйте копирайты и адрес сайта, а также данное соглашение из исходных кодов программы. 11 - при модификации программы не удаляйте логотип сайта http://init.org.ua, отображаемый один раз при первом запуске эльфа. 12 13 Эта программа является свободно распространяемой; Вы можете распространять ее повторно и (или) изменять, 14 соблюдая условия Открытого лицензионного соглашения GNU (GNU GPL), опубликованного Фондом свободно распространяемого 15 программного обеспечения; либо редакции 2 Соглашения, либо (на ваше усмотрение) любой редакции, выпущенной позже. 16 Эта программа распространяется в надежде на то, что она окажется полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, 17 включая подразумеваемую гарантию КАЧЕСТВА либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. 18 19 Подробности содержатся в Открытом лицензионном соглашении GNU. 20 21 Вместе с этой программой должен распространяться экземпляр Открытого лицензионного соглашения GNU, если он 22 отсутствует, сообщите об этом в Фонд свободно распространяемого программного обеспечения 23 (Free Software Foundation, Inc.), 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 24 ***************************************************************************************************************************/ 25 \ In segment DATA_Z, align 4, align-sorted 26 short *screen; \ screen: \ 00000000 DS8 4 27 #ifndef _SWILIB_H_ 28 #include "swilib.h" 29 #define _SWILIB_H_ 30 #endif 31 32 //#include "jpeglib/jpeglib.h" 33 //#include "jpeglib/jerror.h" 34 #include "readimg.h" 35 36 #define PNG_BYTES_TO_CHECK 8 37 38 //================================================================================================================================================ 39 typedef struct { 40 const char *p; 41 char *row; 42 char *img; 43 IMGHDR * img_h; 44 }PP; 45 //================================================================================================================================================ \ In segment CODE, align 4, keep-with-next 46 void *xmalloc(int x,int n) 47 { \ xmalloc: \ 00000000 00402DE9 PUSH {LR} \ 00000004 0100A0E1 MOV R0,R1 48 return malloc(n); \ 00000008 140000EF SWI +20 \ 0000000C 0080BDE8 POP {PC} ;; return 49 } 50 //================================================================================================================================================ \ In segment CODE, align 4, keep-with-next 51 void xmfree(int x,void* ptr) 52 { \ xmfree: \ 00000000 00402DE9 PUSH {LR} \ 00000004 0100A0E1 MOV R0,R1 53 mfree(ptr); \ 00000008 150000EF SWI +21 54 } \ 0000000C 0080BDE8 POP {PC} ;; return 55 //================================================================================================================================================ \ In segment CODE, align 4, keep-with-next 56 void read_data_fn(png_structp png_ptr, png_bytep data, png_size_t length) 57 { \ read_data_fn: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 \ 00000008 0250A0E1 MOV R5,R2 58 PP *pp=png_get_io_ptr(png_ptr); \ 0000000C 5E0100EF SWI +350 \ 00000010 0060A0E1 MOV R6,R0 59 memcpy(data,pp->p,length); \ 00000014 001096E5 LDR R1,[R6, #+0] \ 00000018 0520A0E1 MOV R2,R5 \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 1E0100EF SWI +286 60 pp->p+=length; \ 00000024 000096E5 LDR R0,[R6, #+0] \ 00000028 000085E0 ADD R0,R5,R0 \ 0000002C 000086E5 STR R0,[R6, #+0] 61 } \ 00000030 7080BDE8 POP {R4-R6,PC} ;; return 62 //================================================================================================================================================ 63 \ In segment CODE, align 4, keep-with-next 64 IMGHDR *read_pngimg(const char *buf) 65 { \ read_pngimg: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 66 PP pp; 67 pp.p=buf; \ 00000008 08008DE5 STR R0,[SP, #+8] 68 pp.row=NULL; \ 0000000C 0040A0E3 MOV R4,#+0 \ 00000010 0C408DE5 STR R4,[SP, #+12] 69 pp.img=NULL; \ 00000014 10408DE5 STR R4,[SP, #+16] 70 pp.img_h=NULL; \ 00000018 14408DE5 STR R4,[SP, #+20] 71 72 IMGHDR * img_hc; 73 png_structp png_ptr=NULL; \ 0000001C 00408DE5 STR R4,[SP, #+0] 74 png_infop info_ptr=NULL; \ 00000020 04408DE5 STR R4,[SP, #+4] 75 png_uint_32 rowbytes; 76 77 78 79 if (!png_check_sig((png_bytep)pp.p,PNG_BYTES_TO_CHECK)) return 0; // не пнг \ 00000024 0810A0E3 MOV R1,#+8 \ 00000028 B20100EF SWI +434 \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 B300000A BEQ ??read_pngimg_0 80 pp.p+=PNG_BYTES_TO_CHECK; \ 00000034 08109DE5 LDR R1,[SP, #+8] 81 82 png_ptr = png_create_read_struct_2("1.2.5", (png_voidp)0, 0, 0, (png_voidp)0,(png_malloc_ptr)xmalloc,(png_free_ptr)xmfree); \ 00000038 CC029FE5 LDR R0,??read_pngimg_1 ;; xmfree \ 0000003C 081081E2 ADD R1,R1,#+8 \ 00000040 08108DE5 STR R1,[SP, #+8] \ 00000044 01002DE9 PUSH {R0} \ 00000048 C0029FE5 LDR R0,??read_pngimg_1+0x4 ;; xmalloc \ 0000004C 01002DE9 PUSH {R0} \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 01002DE9 PUSH {R0} \ 00000058 0030A0E1 MOV R3,R0 \ 0000005C 0020A0E1 MOV R2,R0 \ 00000060 0010A0E1 MOV R1,R0 \ 00000064 A8029FE5 LDR R0,??read_pngimg_1+0x8 ;; `?` \ 00000068 A80100EF SWI +424 \ 0000006C 0C008DE5 STR R0,[SP, #+12] 83 if (!png_ptr) goto L_CLOSE_FILE; \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0CD08DE2 ADD SP,SP,#+12 \ 00000078 7900000A BEQ ??read_pngimg_2 84 85 info_ptr = png_create_info_struct(png_ptr); \ 0000007C 560100EF SWI +342 \ 00000080 04008DE5 STR R0,[SP, #+4] 86 if (!info_ptr) \ 00000084 000050E3 CMP R0,#+0 \ 00000088 0400001A BNE ??read_pngimg_3 87 { 88 png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); \ 0000008C 0020A0E3 MOV R2,#+0 \ 00000090 0210A0E1 MOV R1,R2 \ ??read_pngimg_4: \ 00000094 0D00A0E1 MOV R0,SP \ 00000098 570100EF SWI +343 89 goto L_CLOSE_FILE; \ 0000009C 700000EA B ??read_pngimg_2 90 } 91 92 if (setjmp(png_jmpbuf(png_ptr))) \ ??read_pngimg_3: \ 000000A0 00009DE5 LDR R0,[SP, #+0] \ 000000A4 620100EF SWI +354 \ 000000A8 000050E3 CMP R0,#+0 93 { 94 png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); \ 000000AC 0020A013 MOVNE R2,#+0 \ 000000B0 04108D12 ADDNE R1,SP,#+4 \ 000000B4 F6FFFF1A BNE ??read_pngimg_4 95 goto L_CLOSE_FILE; 96 } 97 98 png_set_read_fn(png_ptr, &pp, read_data_fn); \ 000000B8 58229FE5 LDR R2,??read_pngimg_1+0xC ;; read_data_fn \ 000000BC 00009DE5 LDR R0,[SP, #+0] \ 000000C0 08108DE2 ADD R1,SP,#+8 \ 000000C4 A90100EF SWI +425 99 100 png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK); \ 000000C8 00009DE5 LDR R0,[SP, #+0] \ 000000CC 0810A0E3 MOV R1,#+8 \ 000000D0 580100EF SWI +344 101 png_read_info(png_ptr, info_ptr); \ 000000D4 04109DE5 LDR R1,[SP, #+4] \ 000000D8 00009DE5 LDR R0,[SP, #+0] \ 000000DC 590100EF SWI +345 102 103 png_uint_32 width, height; 104 int bit_depth, color_type; 105 106 png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, 0, 0, 0); \ 000000E0 0000A0E3 MOV R0,#+0 \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 01002DE9 PUSH {R0} \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 30008DE2 ADD R0,SP,#+48 \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 30008DE2 ADD R0,SP,#+48 \ 000000FC 01002DE9 PUSH {R0} \ 00000100 18109DE5 LDR R1,[SP, #+24] \ 00000104 30308DE2 ADD R3,SP,#+48 \ 00000108 14009DE5 LDR R0,[SP, #+20] \ 0000010C 2C208DE2 ADD R2,SP,#+44 \ 00000110 5A0100EF SWI +346 107 108 if (bit_depth < 8) png_set_gray_1_2_4_to_8(png_ptr); \ 00000114 34009DE5 LDR R0,[SP, #+52] \ 00000118 14D08DE2 ADD SP,SP,#+20 \ 0000011C 080050E3 CMP R0,#+8 \ 00000120 010000AA BGE ??read_pngimg_5 \ 00000124 00009DE5 LDR R0,[SP, #+0] \ 00000128 D60100EF SWI +470 109 if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))png_set_tRNS_to_alpha(png_ptr); \ ??read_pngimg_5: \ 0000012C 00009DE5 LDR R0,[SP, #+0] \ 00000130 04109DE5 LDR R1,[SP, #+4] \ 00000134 1020A0E3 MOV R2,#+16 \ 00000138 AC0100EF SWI +428 \ 0000013C 000050E3 CMP R0,#+0 \ 00000140 0100000A BEQ ??read_pngimg_6 \ 00000144 00009DE5 LDR R0,[SP, #+0] \ 00000148 AD0100EF SWI +429 110 if (bit_depth == 16) png_set_strip_16(png_ptr); \ ??read_pngimg_6: \ 0000014C 20009DE5 LDR R0,[SP, #+32] \ 00000150 100050E3 CMP R0,#+16 \ 00000154 0100001A BNE ??read_pngimg_7 \ 00000158 00009DE5 LDR R0,[SP, #+0] \ 0000015C AF0100EF SWI +431 111 if (bit_depth < 8) png_set_packing(png_ptr); \ ??read_pngimg_7: \ 00000160 20009DE5 LDR R0,[SP, #+32] \ 00000164 080050E3 CMP R0,#+8 \ 00000168 010000AA BGE ??read_pngimg_8 \ 0000016C 00009DE5 LDR R0,[SP, #+0] \ 00000170 B00100EF SWI +432 112 if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr); \ ??read_pngimg_8: \ 00000174 24009DE5 LDR R0,[SP, #+36] \ 00000178 030050E3 CMP R0,#+3 \ 0000017C 0100001A BNE ??read_pngimg_9 \ 00000180 00009DE5 LDR R0,[SP, #+0] \ 00000184 AB0100EF SWI +427 113 if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA || color_type == PNG_COLOR_TYPE_GRAY) png_set_gray_to_rgb(png_ptr); \ ??read_pngimg_9: \ 00000188 24009DE5 LDR R0,[SP, #+36] \ 0000018C 040050E3 CMP R0,#+4 \ 00000190 00005013 CMPNE R0,#+0 \ 00000194 0100001A BNE ??read_pngimg_10 \ 00000198 00009DE5 LDR R0,[SP, #+0] \ 0000019C B10100EF SWI +433 114 115 png_set_filler(png_ptr,0xFF,PNG_FILLER_AFTER); \ ??read_pngimg_10: \ 000001A0 00009DE5 LDR R0,[SP, #+0] \ 000001A4 0120A0E3 MOV R2,#+1 \ 000001A8 FF10A0E3 MOV R1,#+255 \ 000001AC AE0100EF SWI +430 116 png_read_update_info(png_ptr, info_ptr); \ 000001B0 04109DE5 LDR R1,[SP, #+4] \ 000001B4 00009DE5 LDR R0,[SP, #+0] 117 118 rowbytes = png_get_rowbytes(png_ptr, info_ptr); 119 120 pp.row=malloc(rowbytes); 121 pp.img_h=img_hc=malloc(sizeof(IMGHDR)); 122 123 { 124 int *iimg=(int *)(pp.img=malloc(width*height*sizeof(int))); 125 for (unsigned int y = 0; ybpnum=0xA; \ ??read_pngimg_12: \ 0000020C 14009DE5 LDR R0,[SP, #+20] \ 00000210 0A10A0E3 MOV R1,#+10 \ 00000214 B210C0E1 STRH R1,[R0, #+2] 136 pp.img_h->w=width; \ 00000218 14009DE5 LDR R0,[SP, #+20] \ 0000021C 18109DE5 LDR R1,[SP, #+24] \ 00000220 0010C0E5 STRB R1,[R0, #+0] 137 pp.img_h->h=height; \ 00000224 14009DE5 LDR R0,[SP, #+20] \ 00000228 1C109DE5 LDR R1,[SP, #+28] \ 0000022C 0110C0E5 STRB R1,[R0, #+1] 138 pp.img_h->bitmap=pp.img; \ 00000230 14009DE5 LDR R0,[SP, #+20] \ 00000234 10109DE5 LDR R1,[SP, #+16] \ 00000238 041080E5 STR R1,[R0, #+4] 139 140 png_read_end(png_ptr, info_ptr); \ 0000023C 04109DE5 LDR R1,[SP, #+4] \ 00000240 00009DE5 LDR R0,[SP, #+0] \ 00000244 5D0100EF SWI +349 141 png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); \ 00000248 0020A0E3 MOV R2,#+0 \ 0000024C 04108DE2 ADD R1,SP,#+4 \ 00000250 0D00A0E1 MOV R0,SP \ 00000254 570100EF SWI +343 142 if (!pp.img) \ 00000258 10009DE5 LDR R0,[SP, #+16] \ 0000025C 000050E3 CMP R0,#+0 \ 00000260 2400001A BNE ??read_pngimg_13 143 { 144 L_CLOSE_FILE: 145 mfree(pp.row); \ ??read_pngimg_2: \ 00000264 0C009DE5 LDR R0,[SP, #+12] \ 00000268 150000EF SWI +21 146 mfree(pp.img); \ 0000026C 10009DE5 LDR R0,[SP, #+16] \ 00000270 150000EF SWI +21 147 mfree(pp.img_h); \ 00000274 14009DE5 LDR R0,[SP, #+20] \ 00000278 150000EF SWI +21 148 return NULL; \ 0000027C 0000A0E3 MOV R0,#+0 \ 00000280 28D08DE2 ADD SP,SP,#+40 \ 00000284 F080BDE8 POP {R4-R7,PC} 149 } \ ??read_pngimg_14: \ 00000288 0C109DE5 LDR R1,[SP, #+12] \ 0000028C 001181E0 ADD R1,R1,R0, LSL #+2 \ 00000290 0320D1E5 LDRB R2,[R1, #+3] \ 00000294 0030D1E5 LDRB R3,[R1, #+0] \ 00000298 010080E2 ADD R0,R0,#+1 \ 0000029C 0338A0E1 LSL R3,R3,#+16 \ 000002A0 022C83E0 ADD R2,R3,R2, LSL #+24 \ 000002A4 0130D1E5 LDRB R3,[R1, #+1] \ 000002A8 0210D1E5 LDRB R1,[R1, #+2] \ 000002AC 032482E0 ADD R2,R2,R3, LSL #+8 \ 000002B0 021081E0 ADD R1,R1,R2 \ 000002B4 ........ STR R1,[R6], #+4 \ ??read_pngimg_15: \ 000002B8 18109DE5 LDR R1,[SP, #+24] \ 000002BC 010050E1 CMP R0,R1 \ 000002C0 F0FFFF3A BCC ??read_pngimg_14 \ ??read_pngimg_16: \ 000002C4 017087E2 ADD R7,R7,#+1 \ ??read_pngimg_11: \ 000002C8 1C009DE5 LDR R0,[SP, #+28] \ 000002CC 000057E1 CMP R7,R0 \ 000002D0 CDFFFF2A BCS ??read_pngimg_12 \ 000002D4 0C109DE5 LDR R1,[SP, #+12] \ 000002D8 00009DE5 LDR R0,[SP, #+0] \ 000002DC 0020A0E3 MOV R2,#+0 \ 000002E0 600100EF SWI +352 \ 000002E4 18109DE5 LDR R1,[SP, #+24] \ 000002E8 0400A0E1 MOV R0,R4 \ 000002EC 000051E3 CMP R1,#+0 \ 000002F0 F0FFFF1A BNE ??read_pngimg_15 \ 000002F4 F2FFFFEA B ??read_pngimg_16 150 mfree(pp.row); \ ??read_pngimg_13: \ 000002F8 0C009DE5 LDR R0,[SP, #+12] \ 000002FC 150000EF SWI +21 151 return (img_hc); \ 00000300 0500A0E1 MOV R0,R5 \ ??read_pngimg_0: \ 00000304 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 00000308 F080BDE8 POP {R4-R7,PC} ;; return \ ??read_pngimg_1: \ 0000030C ........ DC32 xmfree \ 00000310 ........ DC32 xmalloc \ 00000314 ........ DC32 `?` \ 00000318 ........ DC32 read_data_fn 152 } 153 // 154 155 extern void *memsetw(void *mem, int val, int size); \ In segment CODE, align 4, keep-with-next 156 IMGHDR *CreateImgr(int width, int height) 157 { \ CreateImgr: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 158 int ensize; 159 IMGHDR * img_hc=malloc(sizeof(IMGHDR)); \ 0000000C 0800A0E3 MOV R0,#+8 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 160 int *iimg=(int*)malloc(ensize=width*height*sizeof(int)); \ 00000018 950400E0 MUL R0,R5,R4 \ 0000001C 0071A0E1 LSL R7,R0,#+2 \ 00000020 0700A0E1 MOV R0,R7 \ 00000024 140000EF SWI +20 161 img_hc->w=width; \ 00000028 0040C6E5 STRB R4,[R6, #+0] 162 img_hc->h=height; \ 0000002C 0150C6E5 STRB R5,[R6, #+1] 163 img_hc->bpnum=0xA; \ 00000030 0A10A0E3 MOV R1,#+10 \ 00000034 B210C6E1 STRH R1,[R6, #+2] 164 img_hc->bitmap=(char*)iimg; \ 00000038 040086E5 STR R0,[R6, #+4] 165 memsetw(iimg,0xFF000000,ensize>>1); \ 0000003C C720A0E1 ASR R2,R7,#+1 \ 00000040 FF14A0E3 MOV R1,#-16777216 \ 00000044 ........ _BLF memsetw,??memsetw??rA 166 return (img_hc); \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C F080BDE8 POP {R4-R7,PC} ;; return 167 } 168 \ In segment CODE, align 4, keep-with-next 169 IMGHDR *CreateImgr16(int width, int height) 170 { \ CreateImgr16: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 171 int ensize; 172 IMGHDR * img_hc=malloc(sizeof(IMGHDR)); \ 0000000C 0800A0E3 MOV R0,#+8 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 173 short *iimg=(short*)malloc(ensize=width*height*sizeof(short)); \ 00000018 950400E0 MUL R0,R5,R4 \ 0000001C 8070A0E1 LSL R7,R0,#+1 \ 00000020 0700A0E1 MOV R0,R7 \ 00000024 140000EF SWI +20 174 img_hc->w=width; \ 00000028 0040C6E5 STRB R4,[R6, #+0] 175 img_hc->h=height; \ 0000002C 0150C6E5 STRB R5,[R6, #+1] 176 img_hc->bpnum=8; \ 00000030 0810A0E3 MOV R1,#+8 \ 00000034 B210C6E1 STRH R1,[R6, #+2] 177 img_hc->bitmap=(char*)iimg; \ 00000038 040086E5 STR R0,[R6, #+4] 178 memsetw(iimg,0xFF000000,ensize>>1); \ 0000003C C720A0E1 ASR R2,R7,#+1 \ 00000040 FF14A0E3 MOV R1,#-16777216 \ 00000044 ........ _BLF memsetw,??memsetw??rA 179 return (img_hc); \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C F080BDE8 POP {R4-R7,PC} ;; return 180 } \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 312E322E3500 DC8 "1.2.5" \ 00000006 0000 DC8 0, 0 181 182 Maximum stack usage in bytes: Function CSTACK -------- ------ CreateImgr 20 CreateImgr16 20 read_data_fn 16 read_pngimg 80 xmalloc 4 xmfree 4 Segment part sizes: Function/Label Bytes -------------- ----- screen 4 xmalloc 16 xmfree 16 read_data_fn 52 read_pngimg 796 CreateImgr 80 CreateImgr16 80 ? 8 Others 48 1 076 bytes in segment CODE 8 bytes in segment DATA_C 4 bytes in segment DATA_Z 12 bytes in segment INITTAB 1 040 bytes of CODE memory (+ 48 bytes shared) 8 bytes of CONST memory 4 bytes of DATA memory Errors: none Warnings: none