📄 lcdrle4.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\lcdrle4.o --depend=.\Obj\lcdrle4.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\Core\LCDRLE4.c]
THUMB
AREA ||i._DrawBitmap_RLE4||, CODE, READONLY, ALIGN=2
_DrawBitmap_RLE4 PROC
;;;34 */
;;;35 static void _DrawBitmap_RLE4(int x0,int y0,int xsize, int ysize, const U8 GUI_UNI_PTR * pPixel, const LCD_LOGPALETTE GUI_UNI_PTR* pLogPal, int xMag, int yMag) {
000000 e92d4fff PUSH {r0-r11,lr}
000004 b087 SUB sp,sp,#0x1c
000006 468a MOV r10,r1
;;;36 const LCD_PIXELINDEX* pTrans =NULL;
000008 2100 MOVS r1,#0
;;;37 char NoTrans = !(GUI_Context.DrawMode & LCD_DRAWMODE_TRANS);
00000a 4e76 LDR r6,|L1.484|
00000c 9105 STR r1,[sp,#0x14]
00000e 7b34 LDRB r4,[r6,#0xc] ; GUI_Context
000010 e9ddb916 LDRD r11,r9,[sp,#0x58] ;36
000014 f3440440 SBFX r4,r4,#1,#1
000018 4605 MOV r5,r0 ;35
00001a 1c64 ADDS r4,r4,#1
00001c 9815 LDR r0,[sp,#0x54] ;36
;;;38 LCD_PIXELINDEX aColorIndex[2];
;;;39 LCD_PIXELINDEX PixelIndex;
;;;40 int xi,y;
;;;41 int xL, yL;
;;;42 char IsMagnified = ((yMag | xMag) != 1);
00001e 2101 MOVS r1,#1
000020 ea49030b ORR r3,r9,r11
000024 9404 STR r4,[sp,#0x10]
000026 2b01 CMP r3,#1
000028 d100 BNE |L1.44|
00002a 2100 MOVS r1,#0
|L1.44|
;;;43 aColorIndex[0] = LCD_ACOLORINDEX[0];
00002c 9102 STR r1,[sp,#8]
00002e 496d LDR r1,|L1.484|
000030 880b LDRH r3,[r1,#0] ; GUI_Context
;;;44 aColorIndex[1] = LCD_ACOLORINDEX[1];
000032 8849 LDRH r1,[r1,#2] ; GUI_Context
000034 f363020f BFI r2,r3,#0,#16
000038 f361421f BFI r2,r1,#16,#16
;;;45 /* Handle color translation */
;;;46 if ((pLogPal) && (pLogPal->pPalEntries)) {
00003c 9203 STR r2,[sp,#0xc]
00003e b130 CBZ r0,|L1.78|
000040 6881 LDR r1,[r0,#8]
000042 b121 CBZ r1,|L1.78|
;;;47 if ((pTrans = LCD_GetpPalConvTable(pLogPal)) == NULL) {
000044 f7fffffe BL LCD_GetpPalConvTable
000048 9005 STR r0,[sp,#0x14]
00004a 2800 CMP r0,#0
00004c d077 BEQ |L1.318|
|L1.78|
;;;48 return;
;;;49 }
;;;50 }
;;;51 /* Check if we can limit the number of lines due to clipping) */
;;;52 if (yMag == 1) {
00004e f1b90f01 CMP r9,#1
000052 d10a BNE |L1.106|
;;;53 if (ysize > GUI_Context.ClipRect.y1 - y0 + 1)
000054 4863 LDR r0,|L1.484|
000056 9a0a LDR r2,[sp,#0x28]
000058 f9b0100a LDRSH r1,[r0,#0xa] ; GUI_Context
00005c eba1000a SUB r0,r1,r10
000060 1c41 ADDS r1,r0,#1
000062 4291 CMP r1,r2
000064 da01 BGE |L1.106|
;;;54 ysize = GUI_Context.ClipRect.y1 - y0 + 1;
000066 1c40 ADDS r0,r0,#1
000068 900a STR r0,[sp,#0x28]
|L1.106|
;;;55 }
;;;56 /* Repeat until we have reached bottom */
;;;57 for (xi=0, y = 0; y < ysize; ) {
00006a f04f0800 MOV r8,#0
00006e 4644 MOV r4,r8
000070 e0aa B |L1.456|
|L1.114|
;;;58 U8 Cmd,Data;
;;;59 Cmd= *pPixel++;
000072 9814 LDR r0,[sp,#0x50]
000074 7801 LDRB r1,[r0,#0]
;;;60 Data = *pPixel++;
000076 f8107f01 LDRB r7,[r0,#1]!
00007a 1c40 ADDS r0,r0,#1
;;;61 if (Cmd) {
00007c 9101 STR r1,[sp,#4]
00007e 9014 STR r0,[sp,#0x50]
000080 2900 CMP r1,#0
000082 d07d BEQ |L1.384|
;;;62 LCD_SetColorIndex(pTrans ? *(pTrans+Data) : Data);
000084 9905 LDR r1,[sp,#0x14]
000086 4638 MOV r0,r7
000088 b109 CBZ r1,|L1.142|
00008a f8310017 LDRH r0,[r1,r7,LSL #1]
|L1.142|
00008e f7fffffe BL LCD_SetColorIndex
;;;63 while (Cmd) {
;;;64 int xi1 = xi+Cmd;
;;;65 if (xi1>=xsize)
;;;66 xi1 = xsize;
;;;67 Cmd -= (xi1-xi);
;;;68 if (Data || NoTrans) { /* Skip transparent pixels */
000092 9904 LDR r1,[sp,#0x10]
000094 ea470001 ORR r0,r7,r1
000098 9006 STR r0,[sp,#0x18]
|L1.154|
00009a 9801 LDR r0,[sp,#4] ;64
00009c eb080600 ADD r6,r8,r0 ;64
0000a0 9809 LDR r0,[sp,#0x24] ;65
0000a2 4286 CMP r6,r0 ;65
0000a4 db00 BLT |L1.168|
0000a6 4606 MOV r6,r0 ;66
|L1.168|
0000a8 9801 LDR r0,[sp,#4] ;67
0000aa eba60708 SUB r7,r6,r8 ;67
0000ae 1bc0 SUBS r0,r0,r7 ;67
0000b0 b2c0 UXTB r0,r0 ;67
0000b2 9001 STR r0,[sp,#4] ;67
0000b4 9806 LDR r0,[sp,#0x18]
0000b6 b1b0 CBZ r0,|L1.230|
;;;69 if (IsMagnified) {
0000b8 9802 LDR r0,[sp,#8]
0000ba b160 CBZ r0,|L1.214|
;;;70 xL = xMag * xi + x0;
0000bc fb0b5008 MLA r0,r11,r8,r5
;;;71 yL = yMag * y + y0;
0000c0 fb09a104 MLA r1,r9,r4,r10
;;;72 LCD_FillRect(xL, yL, xL + xMag * (xi1 - xi) -1 , yL + yMag - 1);
0000c4 1e42 SUBS r2,r0,#1
0000c6 eb010309 ADD r3,r1,r9
0000ca fb0b2207 MLA r2,r11,r7,r2
0000ce 1e5b SUBS r3,r3,#1
0000d0 f7fffffe BL LCD_FillRect
0000d4 e007 B |L1.230|
|L1.214|
;;;73 } else {
;;;74 LCD_DrawHLine(x0+xi, y + y0, xi1+x0-1);
0000d6 1972 ADDS r2,r6,r5
0000d8 1e52 SUBS r2,r2,#1
0000da eb04010a ADD r1,r4,r10
0000de eb050008 ADD r0,r5,r8
0000e2 f7fffffe BL LCD_DrawHLine
|L1.230|
;;;75 }
;;;76 }
;;;77 xi =xi1;
;;;78 if (xi1==xsize) {
0000e6 9809 LDR r0,[sp,#0x24]
0000e8 46b0 MOV r8,r6 ;77
0000ea 4286 CMP r6,r0
0000ec d102 BNE |L1.244|
;;;79 y++;
0000ee 1c64 ADDS r4,r4,#1
;;;80 xi=0;
0000f0 f04f0800 MOV r8,#0
|L1.244|
0000f4 9801 LDR r0,[sp,#4] ;63
0000f6 2800 CMP r0,#0 ;63
0000f8 d1cf BNE |L1.154|
0000fa e065 B |L1.456|
|L1.252|
;;;81 }
;;;82 }
;;;83 } else {
;;;84 while (Data--) {
;;;85 U8 Index = *pPixel++;
0000fc 9814 LDR r0,[sp,#0x50]
0000fe 9914 LDR r1,[sp,#0x50]
000100 7800 LDRB r0,[r0,#0]
000102 1c49 ADDS r1,r1,#1
;;;86 if ((Index>>4) || NoTrans) { /* Skip transparent pixels */
000104 9114 STR r1,[sp,#0x50]
000106 9904 LDR r1,[sp,#0x10] ;85
000108 9000 STR r0,[sp,#0]
00010a ea511010 ORRS r0,r1,r0,LSR #4
00010e d01f BEQ |L1.336|
;;;87 PixelIndex = pTrans ? *(pTrans+(Index>>4)) : (Index>>4);
000110 9800 LDR r0,[sp,#0]
000112 9905 LDR r1,[sp,#0x14]
000114 0900 LSRS r0,r0,#4
000116 b109 CBZ r1,|L1.284|
000118 f8310010 LDRH r0,[r1,r0,LSL #1]
|L1.284|
;;;88 if (IsMagnified) {
00011c 9902 LDR r1,[sp,#8]
00011e b179 CBZ r1,|L1.320|
;;;89 LCD_SetColorIndex(PixelIndex);
000120 f7fffffe BL LCD_SetColorIndex
;;;90 xL = xMag * xi + x0;
000124 fb0b5008 MLA r0,r11,r8,r5
;;;91 yL = yMag * y + y0;
000128 fb09a104 MLA r1,r9,r4,r10
;;;92 LCD_FillRect(xL, yL, xL + xMag -1 , yL + yMag - 1);
00012c eb010309 ADD r3,r1,r9
000130 eb00020b ADD r2,r0,r11
000134 1e5b SUBS r3,r3,#1
000136 1e52 SUBS r2,r2,#1
000138 f7fffffe BL LCD_FillRect
00013c e008 B |L1.336|
|L1.318|
00013e e04d B |L1.476|
|L1.320|
;;;93 } else {
;;;94 LCD_SetPixelIndex(x0+xi, y + y0, PixelIndex);
000140 eb050308 ADD r3,r5,r8
000144 4602 MOV r2,r0
000146 eb04010a ADD r1,r4,r10
00014a 4618 MOV r0,r3
00014c f7fffffe BL LCD_SetPixelIndex
|L1.336|
;;;95 }
;;;96 }
;;;97 if (++xi >= xsize) {
000150 9809 LDR r0,[sp,#0x24]
000152 f1080801 ADD r8,r8,#1
000156 4580 CMP r8,r0
000158 db02 BLT |L1.352|
;;;98 xi=0; y++;
00015a f04f0800 MOV r8,#0
00015e 1c64 ADDS r4,r4,#1
|L1.352|
;;;99 }
;;;100 if (Data-- == 0)
000160 1e70 SUBS r0,r6,#1
000162 b2c7 UXTB r7,r0
000164 b386 CBZ r6,|L1.456|
;;;101 break;
;;;102 if ((Index&15) || NoTrans) { /* Skip transparent pixels */
000166 9800 LDR r0,[sp,#0]
000168 9904 LDR r1,[sp,#0x10]
00016a f000000f AND r0,r0,#0xf
00016e 4301 ORRS r1,r1,r0
000170 d01e BEQ |L1.432|
;;;103 PixelIndex = pTrans ? *(pTrans+(Index&15)) : (Index&15);
000172 9905 LDR r1,[sp,#0x14]
000174 b109 CBZ r1,|L1.378|
000176 f8310010 LDRH r0,[r1,r0,LSL #1]
|L1.378|
;;;104 if (IsMagnified) {
00017a 9902 LDR r1,[sp,#8]
00017c b181 CBZ r1,|L1.416|
;;;105 LCD_SetColorIndex(PixelIndex);
00017e e000 B |L1.386|
|L1.384|
000180 e01e B |L1.448|
|L1.386|
000182 f7fffffe BL LCD_SetColorIndex
;;;106 xL = xMag * xi + x0;
000186 fb0b5008 MLA r0,r11,r8,r5
;;;107 yL = yMag * y + y0;
00018a fb09a104 MLA r1,r9,r4,r10
;;;108 LCD_FillRect(xL, yL, xL + xMag -1 , yL + yMag - 1);
00018e eb010309 ADD r3,r1,r9
000192 eb00020b ADD r2,r0,r11
000196 1e5b SUBS r3,r3,#1
000198 1e52 SUBS r2,r2,#1
00019a f7fffffe BL LCD_FillRect
00019e e007 B |L1.432|
|L1.416|
;;;109 } else {
;;;110 LCD_SetPixelIndex(x0+xi, y + y0, PixelIndex);
0001a0 eb050308 ADD r3,r5,r8
0001a4 4602 MOV r2,r0
0001a6 eb04010a ADD r1,r4,r10
0001aa 4618 MOV r0,r3
0001ac f7fffffe BL LCD_SetPixelIndex
|L1.432|
;;;111 }
;;;112 }
;;;113 if (++xi >= xsize) {
0001b0 9809 LDR r0,[sp,#0x24]
0001b2 f1080801 ADD r8,r8,#1
0001b6 4580 CMP r8,r0
0001b8 db02 BLT |L1.448|
;;;114 xi=0; y++;
0001ba f04f0800 MOV r8,#0
0001be 1c64 ADDS r4,r4,#1
|L1.448|
0001c0 1e79 SUBS r1,r7,#1 ;84
0001c2 b2ce UXTB r6,r1 ;84
0001c4 2f00 CMP r7,#0 ;84
0001c6 d199 BNE |L1.252|
|L1.456|
0001c8 980a LDR r0,[sp,#0x28] ;57
0001ca 4284 CMP r4,r0 ;57
0001cc f6ffaf51 BLT |L1.114|
;;;115 }
;;;116 }
;;;117 }
;;;118 }
;;;119 LCD_ACOLORINDEX[0] = aColorIndex[0];
0001d0 4904 LDR r1,|L1.484|
0001d2 9803 LDR r0,[sp,#0xc]
0001d4 8008 STRH r0,[r1,#0]
;;;120 LCD_ACOLORINDEX[1] = aColorIndex[1];
0001d6 9803 LDR r0,[sp,#0xc]
0001d8 0c00 LSRS r0,r0,#16
0001da 8048 STRH r0,[r1,#2]
|L1.476|
;;;121 }
0001dc b00b ADD sp,sp,#0x2c
0001de e8bd8ff0 POP {r4-r11,pc}
;;;122
ENDP
0001e2 0000 DCW 0x0000
|L1.484|
DCD GUI_Context
AREA ||.constdata||, DATA, READONLY, ALIGN=2
GUI_BitmapMethodsRLE4
DCD _DrawBitmap_RLE4
DCD 0x00000000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -