📄 gui_bmp.txt
字号:
000012 2800 CMP r0,#0
000014 da00 BGE |L3.24|
000016 4240 RSBS r0,r0,#0
|L3.24|
;;;139 }
000018 bd08 POP {r3,pc}
;;;140
ENDP
AREA ||i._DrawBitmap_24bpp||, CODE, READONLY, ALIGN=2
_DrawBitmap_24bpp PROC
;;;87 */
;;;88 static int _DrawBitmap_24bpp(const U8 * pData, int x0, int y0, int XSize, int YSize) {
000000 e92d4ff8 PUSH {r3-r11,lr}
000004 4605 MOV r5,r0
000006 4689 MOV r9,r1
000008 4692 MOV r10,r2
00000a 461f MOV r7,r3
;;;89 int x, y, BytesPerLine, Step;
;;;90 Step = _GetStep(&YSize, &y);
00000c 4669 MOV r1,sp
00000e a80a ADD r0,sp,#0x28
000010 f7fffffe BL _GetStep
000014 0006 MOVS r6,r0
;;;91 if (!Step) {
000016 d102 BNE |L4.30|
;;;92 return 1;
000018 2001 MOVS r0,#1
|L4.26|
;;;93 }
;;;94 BytesPerLine = ((24 * XSize + 31) >> 5) << 2;
;;;95 for (; (y < YSize) && (y >= 0); y += Step) {
;;;96 for (x = 0; x < XSize; x++) {
;;;97 const U8 * pColor = pData + 3 * x;
;;;98 U8 r, g, b;
;;;99 b = *(pColor);
;;;100 g = *(pColor + 1);
;;;101 r = *(pColor + 2);
;;;102 LCD_SetPixelIndex(x0 + x, y0 + y, LCD_Color2Index(((U32)b << 16) | (g << 8) | r));
;;;103 }
;;;104 pData += BytesPerLine;
;;;105 }
;;;106 return 0;
;;;107 }
00001a e8bd8ff8 POP {r3-r11,pc}
|L4.30|
00001e eb070047 ADD r0,r7,r7,LSL #1 ;94
000022 211f MOVS r1,#0x1f ;94
000024 eb0100c0 ADD r0,r1,r0,LSL #3 ;94
000028 1140 ASRS r0,r0,#5 ;94
00002a ea4f0880 LSL r8,r0,#2 ;94
00002e 9800 LDR r0,[sp,#0] ;95
000030 e01c B |L4.108|
|L4.50|
000032 2400 MOVS r4,#0 ;96
000034 e014 B |L4.96|
000036 bf00 NOP ;97
|L4.56|
000038 eb040044 ADD r0,r4,r4,LSL #1 ;97
00003c 4428 ADD r0,r0,r5 ;97
00003e 7802 LDRB r2,[r0,#0] ;99
000040 7841 LDRB r1,[r0,#1] ;100
000042 7883 LDRB r3,[r0,#2] ;101
000044 0410 LSLS r0,r2,#16 ;102
000046 ea402001 ORR r0,r0,r1,LSL #8 ;102
00004a 4318 ORRS r0,r0,r3 ;102
00004c f7fffffe BL LCD_Color2Index
000050 9900 LDR r1,[sp,#0] ;102
000052 4602 MOV r2,r0 ;102
000054 4451 ADD r1,r1,r10 ;102
000056 eb090004 ADD r0,r9,r4 ;102
00005a f7fffffe BL LCD_SetPixelIndex
00005e 1c64 ADDS r4,r4,#1 ;96
|L4.96|
000060 42bc CMP r4,r7 ;96
000062 dbe9 BLT |L4.56|
000064 9800 LDR r0,[sp,#0] ;95
000066 4445 ADD r5,r5,r8 ;104
000068 4430 ADD r0,r0,r6 ;95
00006a 9000 STR r0,[sp,#0] ;95
|L4.108|
00006c 990a LDR r1,[sp,#0x28] ;95
00006e 4288 CMP r0,r1 ;95
000070 da01 BGE |L4.118|
000072 2800 CMP r0,#0 ;95
000074 dadd BGE |L4.50|
|L4.118|
000076 2000 MOVS r0,#0 ;106
000078 e7cf B |L4.26|
;;;108
ENDP
AREA ||i._DrawBitmap_Pal||, CODE, READONLY, ALIGN=2
_DrawBitmap_Pal PROC
;;;50 */
;;;51 static int _DrawBitmap_Pal(const U8 * pData, int x0, int y0, int XSize, int YSize, int Bpp, int NumColors) {
000000 e92d4fff PUSH {r0-r11,lr}
000004 b087 SUB sp,sp,#0x1c
000006 4604 MOV r4,r0
000008 4692 MOV r10,r2
00000a 4698 MOV r8,r3
;;;52 int i, y, Step;
;;;53 int BytesPerLine = 0;
00000c 2600 MOVS r6,#0
;;;54 Step = _GetStep(&YSize, &y);
00000e a906 ADD r1,sp,#0x18
000010 a814 ADD r0,sp,#0x50
000012 f8dd9058 LDR r9,[sp,#0x58]
000016 f7fffffe BL _GetStep
00001a 0007 MOVS r7,r0
;;;55 if (!Step) {
00001c d103 BNE |L5.38|
;;;56 return 1;
00001e 2001 MOVS r0,#1
|L5.32|
;;;57 }
;;;58 for (i = 0; i < NumColors; i++) {
;;;59 U8 r, g, b;
;;;60 b = *(pData);
;;;61 g = *(pData + 1);
;;;62 r = *(pData + 2);
;;;63 pData += 4;
;;;64 LCD__aConvTable[i] = LCD_Color2Index(((U32)b << 16) | (g << 8) | r);
;;;65 }
;;;66 switch (Bpp) {
;;;67 case 1:
;;;68 BytesPerLine = ((XSize + 31) >> 5) << 2;
;;;69 break;
;;;70 case 4:
;;;71 BytesPerLine = (((XSize << 2) + 31) >> 5) << 2;
;;;72 break;
;;;73 case 8:
;;;74 BytesPerLine = ((XSize + 3) >> 2) << 2;
;;;75 break;
;;;76 }
;;;77 for (; (y < YSize) && (y >= 0); y += Step) {
;;;78 LCD_DrawBitmap(x0, y0 + y, XSize, 1, 1, 1, Bpp, XSize, pData, LCD__aConvTable);
;;;79 pData += BytesPerLine;
;;;80 }
;;;81 return 0;
;;;82 }
000020 b00b ADD sp,sp,#0x2c
000022 e8bd8ff0 POP {r4-r11,pc}
|L5.38|
000026 2500 MOVS r5,#0 ;58
000028 f8dfb080 LDR r11,|L5.172|
00002c e00c B |L5.72|
|L5.46|
00002e 7822 LDRB r2,[r4,#0] ;60
000030 7860 LDRB r0,[r4,#1] ;61
000032 78a1 LDRB r1,[r4,#2] ;62
000034 0412 LSLS r2,r2,#16 ;64
000036 ea422000 ORR r0,r2,r0,LSL #8 ;64
00003a 1d24 ADDS r4,r4,#4 ;63
00003c 4308 ORRS r0,r0,r1 ;64
00003e f7fffffe BL LCD_Color2Index
000042 f82b0015 STRH r0,[r11,r5,LSL #1] ;64
000046 1c6d ADDS r5,r5,#1 ;58
|L5.72|
000048 454d CMP r5,r9 ;58
00004a dbf0 BLT |L5.46|
00004c 9815 LDR r0,[sp,#0x54] ;66
00004e 2801 CMP r0,#1 ;66
000050 d008 BEQ |L5.100|
000052 2804 CMP r0,#4 ;66
000054 d009 BEQ |L5.106|
000056 2808 CMP r0,#8 ;66
000058 d120 BNE |L5.156|
00005a f1080003 ADD r0,r8,#3 ;74
00005e f0200603 BIC r6,r0,#3 ;74
000062 e01b B |L5.156|
|L5.100|
000064 f108001f ADD r0,r8,#0x1f ;68
000068 e002 B |L5.112|
|L5.106|
00006a 211f MOVS r1,#0x1f ;71
00006c eb010088 ADD r0,r1,r8,LSL #2 ;71
|L5.112|
000070 1140 ASRS r0,r0,#5 ;71
000072 0086 LSLS r6,r0,#2 ;71
000074 e012 B |L5.156|
|L5.118|
000076 9815 LDR r0,[sp,#0x54] ;78
000078 e9cd8403 STRD r8,r4,[sp,#0xc] ;78
00007c 4b0b LDR r3,|L5.172|
00007e 9305 STR r3,[sp,#0x14] ;78
000080 2301 MOVS r3,#1 ;78
000082 9002 STR r0,[sp,#8] ;78
000084 9300 STR r3,[sp,#0] ;78
000086 eb0a0105 ADD r1,r10,r5 ;78
00008a 4642 MOV r2,r8 ;78
00008c 9301 STR r3,[sp,#4] ;78
00008e 9808 LDR r0,[sp,#0x20] ;78
000090 f7fffffe BL LCD_DrawBitmap
000094 9806 LDR r0,[sp,#0x18] ;77
000096 4434 ADD r4,r4,r6 ;79
000098 4438 ADD r0,r0,r7 ;77
00009a 9006 STR r0,[sp,#0x18] ;77
|L5.156|
00009c 9d06 LDR r5,[sp,#0x18] ;77
00009e 9814 LDR r0,[sp,#0x50] ;77
0000a0 4285 CMP r5,r0 ;77
0000a2 da01 BGE |L5.168|
0000a4 2d00 CMP r5,#0 ;77
0000a6 dae6 BGE |L5.118|
|L5.168|
0000a8 2000 MOVS r0,#0 ;81
0000aa e7b9 B |L5.32|
;;;83
ENDP
|L5.172|
DCD LCD__aConvTable
AREA ||i._GetStep||, CODE, READONLY, ALIGN=1
_GetStep PROC
;;;33 */
;;;34 static int _GetStep(int * pYSize, int * pY) {
000000 6802 LDR r2,[r0,#0]
;;;35 if (*pYSize > 0) {
000002 2a00 CMP r2,#0
000004 dd05 BLE |L6.18|
;;;36 *pY = *pYSize - 1;
000006 f1a20201 SUB r2,r2,#1
;;;37 return -1;
00000a f04f30ff MOV r0,#0xffffffff
00000e 600a STR r2,[r1,#0]
;;;38 } else if (*pYSize < 0) {
;;;39 *pYSize = -*pYSize;
;;;40 *pY = 0;
;;;41 return 1;
;;;42 } else {
;;;43 return 0;
;;;44 }
;;;45 }
000010 4770 BX lr
|L6.18|
000012 da08 BGE |L6.38|
000014 f1c20200 RSB r2,r2,#0 ;39
000018 6002 STR r2,[r0,#0] ;40
00001a f04f0000 MOV r0,#0 ;40
00001e 6008 STR r0,[r1,#0] ;41
000020 f04f0001 MOV r0,#1 ;41
000024 4770 BX lr
|L6.38|
000026 2000 MOVS r0,#0 ;43
000028 4770 BX lr
;;;46
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -