⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdrle8.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\lcdrle8.o --depend=.\Obj\lcdrle8.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\LCDRLE8.c]
                          THUMB

                          AREA ||i._DrawBitmap_RLE8||, CODE, READONLY, ALIGN=2

                  _DrawBitmap_RLE8 PROC
;;;47     */
;;;48     static void _DrawBitmap_RLE8(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  b085              SUB      sp,sp,#0x14
;;;49       LCD_PIXELINDEX aColorIndex[2];
;;;50       LCD_PIXELINDEX PixelIndex;
;;;51       int xi,y;
;;;52       int xL, yL;
;;;53       const U8 GUI_UNI_PTR * pPixelOrg = pPixel;
;;;54       char NoTrans = !(GUI_Context.DrawMode & LCD_DRAWMODE_TRANS);
000006  4c72              LDR      r4,|L1.464|
000008  4681              MOV      r9,r0                 ;48
00000a  7b23              LDRB     r3,[r4,#0xc]  ; GUI_Context
00000c  468a              MOV      r10,r1                ;48
;;;55       const LCD_PIXELINDEX* pTrans =NULL;
00000e  f8ddb054          LDR      r11,[sp,#0x54]
000012  f3430340          SBFX     r3,r3,#1,#1           ;54
000016  e9dd6012          LDRD     r6,r0,[sp,#0x48]      ;53
00001a  2100              MOVS     r1,#0
00001c  1c5b              ADDS     r3,r3,#1              ;54
;;;56       char IsMagnified = ((yMag | xMag) != 1);
00001e  9d14              LDR      r5,[sp,#0x50]
000020  9101              STR      r1,[sp,#4]
000022  9302              STR      r3,[sp,#8]
000024  2101              MOVS     r1,#1
000026  ea4b0305          ORR      r3,r11,r5
00002a  4637              MOV      r7,r6                 ;53
00002c  2b01              CMP      r3,#1
00002e  d100              BNE      |L1.50|
000030  2100              MOVS     r1,#0
                  |L1.50|
;;;57       aColorIndex[0] = LCD_ACOLORINDEX[0];
000032  9100              STR      r1,[sp,#0]
000034  4966              LDR      r1,|L1.464|
000036  880b              LDRH     r3,[r1,#0]  ; GUI_Context
;;;58       aColorIndex[1] = LCD_ACOLORINDEX[1];
000038  8849              LDRH     r1,[r1,#2]  ; GUI_Context
00003a  f363020f          BFI      r2,r3,#0,#16
00003e  f361421f          BFI      r2,r1,#16,#16
;;;59       /* Handle color translation */
;;;60       if ((pLogPal) && (pLogPal->pPalEntries)) {
000042  9203              STR      r2,[sp,#0xc]
000044  b130              CBZ      r0,|L1.84|
000046  6881              LDR      r1,[r0,#8]
000048  b121              CBZ      r1,|L1.84|
;;;61         if ((pTrans = LCD_GetpPalConvTable(pLogPal)) == NULL) {
00004a  f7fffffe          BL       LCD_GetpPalConvTable
00004e  9001              STR      r0,[sp,#4]
000050  2800              CMP      r0,#0
000052  d072              BEQ      |L1.314|
                  |L1.84|
;;;62           return;
;;;63         }
;;;64       }
;;;65      /* Check if we can limit the number of lines due to clipping) */
;;;66       if (yMag == 1) {
000054  f1bb0f01          CMP      r11,#1
000058  d10a              BNE      |L1.112|
;;;67         if (ysize > GUI_Context.ClipRect.y1 - y0 + 1)
00005a  485d              LDR      r0,|L1.464|
00005c  9a08              LDR      r2,[sp,#0x20]
00005e  f9b0100a          LDRSH    r1,[r0,#0xa]  ; GUI_Context
000062  eba1000a          SUB      r0,r1,r10
000066  1c41              ADDS     r1,r0,#1
000068  4291              CMP      r1,r2
00006a  da01              BGE      |L1.112|
;;;68           ysize = GUI_Context.ClipRect.y1 - y0 + 1;
00006c  1c40              ADDS     r0,r0,#1
00006e  9008              STR      r0,[sp,#0x20]
                  |L1.112|
;;;69       }
;;;70       /* Init variables for looping */
;;;71       xi=0;
000070  2400              MOVS     r4,#0
;;;72       y =0;
;;;73       /* Check if we can use the cache to save some unnecessary iterations */
;;;74       if (!IsMagnified) {
;;;75         int yDiff = GUI_Context.ClipRect.y0 - y0;
;;;76         if ((Cache.pPixelStart == pPixel) && (yDiff > Cache.y)) {
000072  4958              LDR      r1,|L1.468|
000074  9800              LDR      r0,[sp,#0]            ;74
000076  4625              MOV      r5,r4                 ;72
000078  b968              CBNZ     r0,|L1.150|
00007a  4855              LDR      r0,|L1.464|
00007c  f9b00006          LDRSH    r0,[r0,#6]            ;75  ; GUI_Context
000080  eba0020a          SUB      r2,r0,r10             ;75
000084  68c8              LDR      r0,[r1,#0xc]  ; Cache
000086  42b0              CMP      r0,r6
000088  d105              BNE      |L1.150|
00008a  6848              LDR      r0,[r1,#4]  ; Cache
00008c  4290              CMP      r0,r2
00008e  da02              BGE      |L1.150|
;;;77           /* Accept cache values */
;;;78           y = Cache.y;
;;;79           xi = Cache.x;
;;;80           pPixel = Cache.pPixel;
000090  688e              LDR      r6,[r1,#8]  ; Cache
000092  680c              LDR      r4,[r1,#0]  ; Cache
000094  4605              MOV      r5,r0                 ;78
                  |L1.150|
;;;81         }
;;;82       }
;;;83       /* Init values for caching */
;;;84       Cache.pPixel = Cache.pPixelStart = pPixelOrg;
000096  494f              LDR      r1,|L1.468|
;;;85       Cache.x = Cache.y = 0;
000098  2000              MOVS     r0,#0
00009a  60cf              STR      r7,[r1,#0xc]          ;84  ; Cache
00009c  e9c10701          STRD     r0,r7,[r1,#4]
;;;86       /* Repeat until we have reached bottom */
;;;87       for (; y < ysize; ) {
0000a0  6008              STR      r0,[r1,#0]  ; Cache
0000a2  e088              B        |L1.438|
                  |L1.164|
;;;88         U8 Cmd  = *pPixel++;
0000a4  f8968000          LDRB     r8,[r6,#0]
;;;89         U8 Data = *pPixel++;
0000a8  f8167f01          LDRB     r7,[r6,#1]!
0000ac  1c76              ADDS     r6,r6,#1
;;;90         if (Cmd) {
0000ae  f1b80f00          CMP      r8,#0
0000b2  d043              BEQ      |L1.316|
;;;91           /* Save cache info */
;;;92           Cache.pPixel = pPixel-2;
0000b4  4847              LDR      r0,|L1.468|
0000b6  1eb1              SUBS     r1,r6,#2
;;;93           Cache.x = xi;
;;;94           Cache.y = y;
;;;95           LCD_ACOLORINDEX[1] = pTrans ? *(pTrans+Data) : Data;
0000b8  e9c04500          STRD     r4,r5,[r0,#0]
0000bc  6081              STR      r1,[r0,#8]  ; Cache
0000be  9901              LDR      r1,[sp,#4]
0000c0  4638              MOV      r0,r7
0000c2  b109              CBZ      r1,|L1.200|
0000c4  f8310017          LDRH     r0,[r1,r7,LSL #1]
                  |L1.200|
0000c8  4941              LDR      r1,|L1.464|
0000ca  8048              STRH     r0,[r1,#2]
;;;96           while (Cmd) {
;;;97             int xi1 = xi+Cmd;
;;;98             if (xi1>=xsize)
;;;99               xi1 = xsize;
;;;100            Cmd -= (xi1-xi);
;;;101            if (Data || NoTrans) {  /* Skip transparent pixels */
0000cc  9802              LDR      r0,[sp,#8]
0000ce  4307              ORRS     r7,r7,r0
0000d0  f8cd7010          STR.W    r7,[sp,#0x10]
                  |L1.212|
0000d4  9807              LDR      r0,[sp,#0x1c]         ;98
0000d6  eb040708          ADD      r7,r4,r8              ;97
0000da  4287              CMP      r7,r0                 ;98
0000dc  db00              BLT      |L1.224|
0000de  4607              MOV      r7,r0                 ;99
                  |L1.224|
0000e0  1b3a              SUBS     r2,r7,r4              ;100
0000e2  eba80002          SUB      r0,r8,r2              ;100
0000e6  f00008ff          AND      r8,r0,#0xff           ;100
0000ea  9804              LDR      r0,[sp,#0x10]
0000ec  b1d8              CBZ      r0,|L1.294|
;;;102              if (IsMagnified) {
0000ee  9800              LDR      r0,[sp,#0]
0000f0  2800              CMP      r0,#0
;;;103                xL = xMag * xi + x0;
0000f2  4648              MOV      r0,r9
0000f4  d00f              BEQ      |L1.278|
0000f6  9914              LDR      r1,[sp,#0x50]
;;;104                yL = yMag * y + y0;
;;;105                LCD_FillRect(xL, yL, xL + xMag * (xi1 - xi) -1 , yL + yMag - 1);
0000f8  f8ddc050          LDR      r12,[sp,#0x50]
0000fc  fb010004          MLA      r0,r1,r4,r0           ;103
000100  fb0ba105          MLA      r1,r11,r5,r10         ;104
000104  1e44              SUBS     r4,r0,#1
000106  eb01030b          ADD      r3,r1,r11
00010a  fb0c4202          MLA      r2,r12,r2,r4
00010e  1e5b              SUBS     r3,r3,#1
000110  f7fffffe          BL       LCD_FillRect
000114  e007              B        |L1.294|
                  |L1.278|
;;;106              } else {
;;;107                LCD_DrawHLine(x0+xi, y + y0, xi1+x0-1);
000116  183a              ADDS     r2,r7,r0
000118  1e52              SUBS     r2,r2,#1
00011a  eb05010a          ADD      r1,r5,r10
00011e  eb090004          ADD      r0,r9,r4
000122  f7fffffe          BL       LCD_DrawHLine
                  |L1.294|
;;;108              }
;;;109            }
;;;110            xi =xi1;
;;;111            if (xi1==xsize) {
000126  9807              LDR      r0,[sp,#0x1c]
000128  463c              MOV      r4,r7
00012a  4287              CMP      r7,r0
00012c  d101              BNE      |L1.306|
;;;112              y++;
00012e  1c6d              ADDS     r5,r5,#1
;;;113              xi=0;
000130  2400              MOVS     r4,#0
                  |L1.306|
000132  f1b80f00          CMP      r8,#0                 ;96
000136  d1cd              BNE      |L1.212|
000138  e03d              B        |L1.438|
                  |L1.314|
00013a  e046              B        |L1.458|
                  |L1.316|
;;;114            }
;;;115          }
;;;116        } else {
;;;117          do {
;;;118            U8 Index = *pPixel++;
00013c  f8162b01          LDRB     r2,[r6],#1
;;;119            if (Index || NoTrans) {  /* Skip transparent pixels */
000140  9802              LDR      r0,[sp,#8]
000142  4310              ORRS     r0,r0,r2
000144  d02a              BEQ      |L1.412|
;;;120              int x = x0+xi;
;;;121              PixelIndex = pTrans ? *(pTrans+Index) : Index;
000146  9901              LDR      r1,[sp,#4]
000148  eb090004          ADD      r0,r9,r4              ;120
00014c  b109              CBZ      r1,|L1.338|
00014e  f8312012          LDRH     r2,[r1,r2,LSL #1]
                  |L1.338|
;;;122              if (IsMagnified) {
000152  9900              LDR      r1,[sp,#0]
000154  b181              CBZ      r1,|L1.376|
;;;123                LCD_SetColorIndex(PixelIndex);
000156  4610              MOV      r0,r2
000158  f7fffffe          BL       LCD_SetColorIndex
;;;124                xL = xMag * xi + x0;
00015c  9914              LDR      r1,[sp,#0x50]
;;;125                yL = yMag * y + y0;
;;;126                LCD_FillRect(xL, yL, xL + xMag -1 , yL + yMag - 1);
00015e  9a14              LDR      r2,[sp,#0x50]
000160  fb019004          MLA      r0,r1,r4,r9           ;124
000164  fb0ba105          MLA      r1,r11,r5,r10         ;125
000168  eb01030b          ADD      r3,r1,r11
00016c  4402              ADD      r2,r2,r0
00016e  1e5b              SUBS     r3,r3,#1
000170  1e52              SUBS     r2,r2,#1
000172  f7fffffe          BL       LCD_FillRect
000176  e011              B        |L1.412|
                  |L1.376|
;;;127              } else {
;;;128                #if 1 /* High speed variant */
;;;129                  if (y + y0>= GUI_Context.ClipRect.y0)
000178  4b15              LDR      r3,|L1.464|
00017a  eb05010a          ADD      r1,r5,r10
00017e  f9b3c006          LDRSH    r12,[r3,#6]  ; GUI_Context
000182  4561              CMP      r1,r12
000184  db0a              BLT      |L1.412|
;;;130                    if (x >= GUI_Context.ClipRect.x0)
000186  f9b3c004          LDRSH    r12,[r3,#4]  ; GUI_Context
00018a  4584              CMP      r12,r0
00018c  dc06              BGT      |L1.412|
;;;131                      if (x <= GUI_Context.ClipRect.x1)
00018e  f9b3c008          LDRSH    r12,[r3,#8]  ; GUI_Context
000192  4584              CMP      r12,r0
000194  db02              BLT      |L1.412|
;;;132                        LCDDEV_L0_SetPixelIndex(x, y + y0, PixelIndex);
000196  6c9b              LDR      r3,[r3,#0x48]  ; GUI_Context
000198  6a5b              LDR      r3,[r3,#0x24]
00019a  4798              BLX      r3
                  |L1.412|
;;;133                #else
;;;134                  LCD_SetPixelIndex(x, y + y0, PixelIndex);
;;;135                #endif
;;;136              }
;;;137            }
;;;138            if (++xi >= xsize) {
00019c  9807              LDR      r0,[sp,#0x1c]
00019e  1c64              ADDS     r4,r4,#1
0001a0  4284              CMP      r4,r0
0001a2  db04              BLT      |L1.430|
;;;139              xi=0; y++;
;;;140              if (y >= ysize)
0001a4  9808              LDR      r0,[sp,#0x20]
0001a6  2400              MOVS     r4,#0                 ;139
0001a8  1c6d              ADDS     r5,r5,#1              ;139
0001aa  4285              CMP      r5,r0
0001ac  da03              BGE      |L1.438|
                  |L1.430|
;;;141                break;
;;;142            }
;;;143          } while (--Data);
0001ae  1e7f              SUBS     r7,r7,#1
0001b0  f01707ff          ANDS     r7,r7,#0xff
0001b4  d1c2              BNE      |L1.316|
                  |L1.438|
0001b6  9808              LDR      r0,[sp,#0x20]         ;87
0001b8  4285              CMP      r5,r0                 ;87
0001ba  f6ffaf73          BLT      |L1.164|
;;;144        }
;;;145      }
;;;146      LCD_ACOLORINDEX[0] = aColorIndex[0];
0001be  4804              LDR      r0,|L1.464|
0001c0  9903              LDR      r1,[sp,#0xc]
0001c2  8001              STRH     r1,[r0,#0]
;;;147      LCD_ACOLORINDEX[1] = aColorIndex[1];
0001c4  9903              LDR      r1,[sp,#0xc]
0001c6  0c09              LSRS     r1,r1,#16
0001c8  8041              STRH     r1,[r0,#2]
                  |L1.458|
;;;148    }
0001ca  b009              ADD      sp,sp,#0x24
0001cc  e8bd8ff0          POP      {r4-r11,pc}
;;;149    
                          ENDP

                  |L1.464|
                          DCD      GUI_Context
                  |L1.468|
                          DCD      ||.bss||

                          AREA ||.bss||, DATA, NOINIT, ALIGN=2

                  Cache
                          %        16

                          AREA ||.constdata||, DATA, READONLY, ALIGN=2

                  GUI_BitmapMethodsRLE8
                          DCD      _DrawBitmap_RLE8
                          DCD      0x00000000

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -