📄 picdecode.cod
字号:
00000 AREA |.pdata$$Pic_GetPalNum|, PDATA, SELECTION=5, ASSOC=|.text| { |Pic_GetPalNum| } ; comdat associative
|$T42774| DCD |$L42773|
DCD 0x40000d00
; Function compile flags: /Ogsy
00000 AREA |.text| { |Pic_GetPalNum| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Pic_GetPalNum| PROC
; 157 : {
00000 |$L42773|
00000 |$M42771|
00000 e3500000 cmp r0, #0
; 158 : UINT16 palnum=0;
; 159 : PicHandle *handle = (PicHandle *)h;
; 160 : if(h == NULL) return 0;
00004 1a000001 bne |$L42607|
00008 |$L42770|
00008 e3a00000 mov r0, #0
; 171 : }
; 172 : return palnum;
; 173 : }
0000c e12fff1e bx lr
00010 |$L42607|
; 161 :
; 162 : switch(handle->head.gray){
00010 e5d03005 ldrb r3, [r0, #5]
00014 e3530001 cmp r3, #1
00018 0a000003 beq |$L42613|
0001c e3530008 cmp r3, #8
; 168 : break;
; 169 : default:
; 170 : palnum = 0;
00020 1afffff8 bne |$L42770|
; 163 : case 8:
; 164 : palnum = handle->palnum;
00024 e1d001bc ldrh r0, [r0, #0x1C]
; 171 : }
; 172 : return palnum;
; 173 : }
00028 e12fff1e bx lr
0002c |$L42613|
; 165 : break;
; 166 : case 1:
; 167 : palnum = 0x100;
0002c e3a00c01 mov r0, #1, 24
; 171 : }
; 172 : return palnum;
; 173 : }
00030 e12fff1e bx lr
00034 |$M42772|
ENDP ; |Pic_GetPalNum|
EXPORT |Pic_SetOutMode|
00000 AREA |.text| { |Pic_SetOutMode| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Pic_SetOutMode|, PDATA, SELECTION=5, ASSOC=|.text| { |Pic_SetOutMode| } ; comdat associative
|$T42787| DCD |$L42786|
DCD 0x40000d00
; Function compile flags: /Ogsy
00000 AREA |.text| { |Pic_SetOutMode| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Pic_SetOutMode| PROC
; 181 : {
00000 |$L42786|
00000 |$M42784|
00000 e3500000 cmp r0, #0
; 182 : PicHandle *handle = (PicHandle *)h;
; 183 : if(h == NULL) return FALSE;
00004 0a000003 beq |$L42783|
; 184 : if((mode !=0)&&(mode != 1)) return FALSE;
00008 e3510000 cmp r1, #0
0000c 0a000003 beq |$L42624|
00010 e3510001 cmp r1, #1
00014 0a000001 beq |$L42624|
00018 |$L42783|
00018 e3a00000 mov r0, #0
; 188 : }
0001c e12fff1e bx lr
00020 |$L42624|
; 185 : if(handle->head.gray !=8) return TRUE;
00020 e5d03005 ldrb r3, [r0, #5]
00024 e3530008 cmp r3, #8
; 186 : handle->mode = mode;
00028 05801024 streq r1, [r0, #0x24]
; 187 : return TRUE;
0002c e3a00001 mov r0, #1
; 188 : }
00030 e12fff1e bx lr
00034 |$M42785|
ENDP ; |Pic_SetOutMode|
EXPORT |Pic_GetPal|
00000 AREA |.text| { |Pic_GetPal| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Pic_GetPal|, PDATA, SELECTION=5, ASSOC=|.text| { |Pic_GetPal| } ; comdat associative
|$T42799| DCD |$L42798|
DCD 0x40003d01
; Function compile flags: /Ogsy
00000 AREA |.text| { |Pic_GetPal| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Pic_GetPal| PROC
; 198 : {
00000 |$L42798|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M42796|
00004 e1b02000 movs r2, r0
; 199 : PicHandle *handle = (PicHandle *)h;
; 200 : UINT16 paldata = 0;
00008 e3a00000 mov r0, #0
; 201 :
; 202 : if(h == NULL) return 0;
0000c 0a000034 beq |$L42644|
; 203 : switch(handle->head.gray){
00010 e5d23005 ldrb r3, [r2, #5]
00014 e3530001 cmp r3, #1
00018 0a00002c beq |$L42643|
0001c e3530008 cmp r3, #8
00020 1a000030 bne |$L42630|
; 204 : case 8:
; 205 : if(handle->mode == 0){
00024 e5923024 ldr r3, [r2, #0x24]
00028 e3530000 cmp r3, #0
0002c 1a000011 bne |$L42641|
; 206 : paldata = (((handle->ppal[index].red & 0xf8 ) << 8) // Red
; 207 : | ((handle->ppal[index].green & 0xfc) << 3) // Green
; 208 : | ((handle->ppal[index].blue) >> 3));
00030 e5923020 ldr r3, [r2, #0x20]
00034 e0812081 add r2, r1, r1, lsl #1
00038 e3a00cff mov r0, #0xFF, 24
0003c e7f23003 ldrb r3, [r2, +r3]!
00040 e38000f8 orr r0, r0, #0xF8
00044 e5d21001 ldrb r1, [r2, #1]
00048 e5d2e002 ldrb lr, [r2, #2]
0004c e0032000 and r2, r3, r0
00050 e20130fc and r3, r1, #0xFC
00054 e1833282 orr r3, r3, r2, lsl #5
00058 e1a03183 mov r3, r3, lsl #3
0005c e1a021ae mov r2, lr, lsr #3
00060 e1a01803 mov r1, r3, lsl #16
00064 e1a03802 mov r3, r2, lsl #16
00068 e1a03823 mov r3, r3, lsr #16
0006c e1830821 orr r0, r3, r1, lsr #16
; 219 : break;
; 220 : }
; 221 : return paldata;
; 222 : }
00070 e8bd4010 ldmia sp!, {r4, lr}
00074 e12fff1e bx lr
00078 |$L42641|
; 209 : }
; 210 : else{
; 211 : paldata =0xff-(11*handle->ppal[index].red // Red
; 212 : +59*handle->ppal[index].green // Green
; 213 : +30*handle->ppal[index].blue)/100;
00078 e592e020 ldr lr, [r2, #0x20]
0007c e0811081 add r1, r1, r1, lsl #1
00080 e59f4068 ldr r4, [pc, #0x68]
00084 e081300e add r3, r1, lr
00088 e5d32001 ldrb r2, [r3, #1]
0008c e5d30002 ldrb r0, [r3, #2]
00090 e7d1e00e ldrb lr, [r1, +lr]
00094 e0623202 rsb r3, r2, r2, lsl #4
00098 e0621103 rsb r1, r2, r3, lsl #2
0009c e0603200 rsb r3, r0, r0, lsl #4
000a0 e08e210e add r2, lr, lr, lsl #2
000a4 e0811083 add r1, r1, r3, lsl #1
000a8 e08e3082 add r3, lr, r2, lsl #1
000ac e0811003 add r1, r1, r3
000b0 e0c32491 smull r2, r3, r1, r4
000b4 e1a032c3 mov r3, r3, asr #5
000b8 e0833fa3 add r3, r3, r3, lsr #31
000bc e26330ff rsb r3, r3, #0xFF
000c0 e1a00803 mov r0, r3, lsl #16
000c4 e1a00820 mov r0, r0, lsr #16
; 219 : break;
; 220 : }
; 221 : return paldata;
; 222 : }
000c8 e8bd4010 ldmia sp!, {r4, lr}
000cc e12fff1e bx lr
000d0 |$L42643|
; 214 : }
; 215 : break;
; 216 : case 1:
; 217 : if(index ==0) paldata = 0xffff;
000d0 e3510000 cmp r1, #0
000d4 03a00cff moveq r0, #0xFF, 24
000d8 038000ff orreq r0, r0, #0xFF
; 219 : break;
; 220 : }
; 221 : return paldata;
; 222 : }
000dc 08bd4010 ldmeqia sp!, {r4, lr}
000e0 012fff1e bxeq lr
000e4 |$L42644|
; 218 : else return paldata = 0x0;
000e4 e3a00000 mov r0, #0
000e8 |$L42630|
; 219 : break;
; 220 : }
; 221 : return paldata;
; 222 : }
000e8 e8bd4010 ldmia sp!, {r4, lr}
000ec e12fff1e bx lr
000f0 |$L42801|
000f0 51eb851f DCD 0x51eb851f
000f4 |$M42797|
ENDP ; |Pic_GetPal|
EXPORT |Pic_GetData|
IMPORT |__rt_udiv|
00000 AREA |.text| { |Pic_GetData| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Pic_GetData|, PDATA, SELECTION=5, ASSOC=|.text| { |Pic_GetData| } ; comdat associative
|$T42820| DCD |$L42819|
DCD 0x40003f01
; Function compile flags: /Ogsy
00000 AREA |.text| { |Pic_GetData| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Pic_GetData| PROC
; 235 : {
00000 |$L42819|
00000 e92d40f0 stmdb sp!, {r4 - r7, lr}
00004 |$M42817|
00004 e1b04000 movs r4, r0
; 236 : PicHandle *handle = (PicHandle *)h;
; 237 : UINT8 data = 0;
; 238 : UINT16 x,y,real_width;
; 239 : if(h == NULL) return 0;
00008 0a000022 beq |$L42815|
; 240 :
; 241 : x = index%(handle->output_width);
0000c e1d400ba ldrh r0, [r4, #0xA]
00010 eb000000 bl __rt_udiv
; 242 : y = index/(handle->output_width);
; 243 : //如果在实际图像范围外,输出值为缺省值
; 244 : if((x<handle->left)||(x>=handle->right)||(y<handle->top)||(y>=handle->bottom)){
00014 e1d471b2 ldrh r7, [r4, #0x12]
00018 e1a06801 mov r6, r1, lsl #16
0001c e1a06826 mov r6, r6, lsr #16
00020 e1a01800 mov r1, r0, lsl #16
00024 e1560007 cmp r6, r7
00028 e1a01821 mov r1, r1, lsr #16
0002c 3a00002c bcc |$L42660|
00030 e1d431b4 ldrh r3, [r4, #0x14]
00034 e1560003 cmp r6, r3
00038 2a000029 bcs |$L42660|
0003c e1d4e0be ldrh lr, [r4, #0xE]
00040 e151000e cmp r1, lr
00044 3a000026 bcc |$L42660|
00048 e1d431b0 ldrh r3, [r4, #0x10]
0004c e1510003 cmp r1, r3
00050 2a000023 bcs |$L42660|
; 247 : }
; 248 :
; 249 : real_width = handle->head.w;
; 250 : //如果为1bit图时,width必须为8倍数,不足后面补零
; 251 : if(handle->head.gray==1) real_width = (real_width+7)&0xfff8;
00054 e5d40005 ldrb r0, [r4, #5]
00058 e5d42006 ldrb r2, [r4, #6]
0005c e5d43007 ldrb r3, [r4, #7]
00060 e3500001 cmp r0, #1
00064 e1825403 orr r5, r2, r3, lsl #8
00068 03a02cff moveq r2, #0xFF, 24
0006c 038220f8 orreq r2, r2, #0xF8
00070 02853007 addeq r3, r5, #7
00074 00035002 andeq r5, r3, r2
; 252 :
; 253 : //将index映射到实际图像坐标
; 254 : index = (x - handle->left)+(y - handle->top)*real_width;
00078 e041300e sub r3, r1, lr
0007c e0020593 mul r2, r3, r5
; 255 : switch(handle->head.gray){
00080 e3500001 cmp r0, #1
00084 e0423007 sub r3, r2, r7
00088 e0831006 add r1, r3, r6
0008c 0a000008 beq |$L42669|
00090 e3500008 cmp r0, #8
00094 0a000002 beq |$L42668|
00098 |$L42815|
; 269 : }
; 270 : break;
; 271 : }
; 272 : return 0;
00098 e3a00000 mov r0, #0
; 273 : }
0009c e8bd40f0 ldmia sp!, {r4 - r7, lr}
000a0 e12fff1e bx lr
000a4 |$L42668|
; 256 : case 8:
; 257 : return handle->pdata[index];
000a4 e5943028 ldr r3, [r4, #0x28]
000a8 e7d30001 ldrb r0, [r3, +r1]
; 273 : }
000ac e8bd40f0 ldmia sp!, {r4 - r7, lr}
000b0 e12fff1e bx lr
000b4 |$L42669|
; 258 : break;
; 259 : case 1:
; 260 : {
; 261 : UINT32 byteindex = index>>3;
; 262 : UINT8 offset=index-(byteindex<<3);
; 263 : //如果字节内逆序排列
; 264 : if(handle->byteorder==0) offset = 7-offset;
000b4 e5942018 ldr r2, [r4, #0x18]
000b8 e1a001a1 mov r0, r1, lsr #3
000bc e0413180 sub r3, r1, r0, lsl #3
000c0 e20310ff and r1, r3, #0xFF
000c4 e3520000 cmp r2, #0
000c8 02613007 rsbeq r3, r1, #7
000cc 020310ff andeq r1, r3, #0xFF
; 265 : if(((handle->pdata[byteindex])>>(offset))&0x1)
000d0 e5943028 ldr r3, [r4, #0x28]
000d4 e7d33000 ldrb r3, [r3, +r0]
000d8 e1a03133 mov r3, r3, lsr r1
000dc e3130001 tst r3, #1
; 266 : return 0xff;
; 267 : else
; 268 : return 0x0;
000e0 ea000001 b |$L42816|
000e4 |$L42660|
; 245 : if(handle->mode == 0) return 0;
000e4 e5943024 ldr r3, [r4, #0x24]
000e8 e3530000 cmp r3, #0
000ec |$L42816|
000ec 0affffe9 beq |$L42815|
; 246 : else return 0xff;
000f0 e3a000ff mov r0, #0xFF
; 273 : }
000f4 e8bd40f0 ldmia sp!, {r4 - r7, lr}
000f8 e12fff1e bx lr
000fc |$M42818|
ENDP ; |Pic_GetData|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -