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

📄 lcdrle4.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\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 + -