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

📄 guidev_1.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;;;230    static void _DrawBitLine4BPP(GUI_USAGE* pUsage, int x, int y, const U8 GUI_UNI_PTR * p, int Diff, int xsize,
000000  e92d5fff          PUSH     {r0-r12,lr}
;;;231                                 const LCD_PIXELINDEX* pTrans, GUI_MEMDEV* pDev, PIXELINDEX* pDest)
;;;232    {
;;;233      U8 pixels;
;;;234      GUI_USE_PARA(pUsage);
;;;235      GUI_USE_PARA(pDest);
;;;236      pixels = (*p) << ((Diff & 1) << 2);
000004  a80e              ADD      r0,sp,#0x38
000006  e8900641          LDM      r0,{r0,r6,r9,r10}
00000a  460d              MOV      r5,r1                 ;232
00000c  7819              LDRB     r1,[r3,#0]
00000e  07c2              LSLS     r2,r0,#31
000010  0f52              LSRS     r2,r2,#29
000012  4091              LSLS     r1,r1,r2
000014  b2cc              UXTB     r4,r1
;;;237      switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
000016  4941              LDR      r1,|L3.284|
000018  461f              MOV      r7,r3                 ;232
00001a  7b09              LDRB     r1,[r1,#0xc]  ; GUI_Context
00001c  f0110103          ANDS     r1,r1,#3
000020  d011              BEQ      |L3.70|
000022  2902              CMP      r1,#2
000024  d178              BNE      |L3.280|
;;;238    /*
;;;239              * Write mode *
;;;240    */
;;;241      case 0:
;;;242        /* Draw incomplete bytes to the left of center area */
;;;243        if (Diff) {
;;;244          (*pDev->pAPIList->pfSetPixelIndex)(x++, y, *(pTrans + (pixels >> 4)));
;;;245          xsize--;
;;;246          pixels = *++p;
;;;247        }
;;;248        /* Draw center area (2 pixels in one byte) */
;;;249        if (xsize >= 2) {
;;;250          int i = xsize >> 1;
;;;251          xsize &= 1;
;;;252          do {
;;;253            (*pDev->pAPIList->pfSetPixelIndex)(x++, y, *(pTrans + (pixels >>  4)));
;;;254            (*pDev->pAPIList->pfSetPixelIndex)(x++, y, *(pTrans + (pixels  & 15)));
;;;255            pixels = *++p;
;;;256          } while (--i);
;;;257        }
;;;258        /* Draw incomplete bytes to the right of center area */
;;;259        if (xsize) {
;;;260          (*pDev->pAPIList->pfSetPixelIndex)(x++, y, *(pTrans + (pixels >> 4)));
;;;261        }
;;;262        break;
;;;263    /*
;;;264              * Transparent draw mode *
;;;265    */
;;;266      case LCD_DRAWMODE_TRANS:
;;;267        /* Draw incomplete bytes to the left of center area */
;;;268        if (Diff) {
000026  2800              CMP      r0,#0
000028  d064              BEQ      |L3.244|
;;;269          if (pixels & 0xF0) {
00002a  0920              LSRS     r0,r4,#4
00002c  d008              BEQ      |L3.64|
;;;270            (*pDev->pAPIList->pfSetPixelIndex)(x, y, *(pTrans + (pixels >> 4)));
00002e  f8da0028          LDR      r0,[r10,#0x28]
000032  0921              LSRS     r1,r4,#4
000034  f8392011          LDRH     r2,[r9,r1,LSL #1]
000038  6a43              LDR      r3,[r0,#0x24]
00003a  4628              MOV      r0,r5
00003c  9902              LDR      r1,[sp,#8]
00003e  4798              BLX      r3
                  |L3.64|
;;;271          }
;;;272          x++;
000040  1c6d              ADDS     r5,r5,#1
;;;273          xsize--;
000042  1e76              SUBS     r6,r6,#1
;;;274          pixels = *++p;
000044  e054              B        |L3.240|
                  |L3.70|
000046  b160              CBZ      r0,|L3.98|
000048  0921              LSRS     r1,r4,#4              ;244
00004a  f8392011          LDRH     r2,[r9,r1,LSL #1]     ;244
00004e  f8da1028          LDR      r1,[r10,#0x28]        ;244
000052  4628              MOV      r0,r5                 ;244
000054  6a4b              LDR      r3,[r1,#0x24]         ;244
000056  1c6d              ADDS     r5,r5,#1              ;244
000058  9902              LDR      r1,[sp,#8]            ;244
00005a  4798              BLX      r3                    ;244
00005c  f8174f01          LDRB     r4,[r7,#1]!           ;246
000060  1e76              SUBS     r6,r6,#1              ;245
                  |L3.98|
000062  2e02              CMP      r6,#2                 ;249
000064  db21              BLT      |L3.170|
000066  ea4f0b66          ASR      r11,r6,#1             ;250
00006a  f0060601          AND      r6,r6,#1              ;251
                  |L3.110|
00006e  f8da1028          LDR      r1,[r10,#0x28]        ;253
000072  0920              LSRS     r0,r4,#4              ;253
000074  f8392010          LDRH     r2,[r9,r0,LSL #1]     ;253
000078  6a4b              LDR      r3,[r1,#0x24]         ;253
00007a  4628              MOV      r0,r5                 ;253
00007c  f1050801          ADD      r8,r5,#1              ;253
000080  9902              LDR      r1,[sp,#8]            ;253
000082  4798              BLX      r3                    ;253
000084  f004000f          AND      r0,r4,#0xf            ;254
000088  f8392010          LDRH     r2,[r9,r0,LSL #1]     ;254
00008c  f8da0028          LDR      r0,[r10,#0x28]        ;254
000090  f1080501          ADD      r5,r8,#1              ;254
000094  6a43              LDR      r3,[r0,#0x24]         ;254
000096  4640              MOV      r0,r8                 ;254
000098  9902              LDR      r1,[sp,#8]            ;254
00009a  4798              BLX      r3                    ;254
00009c  f8174f01          LDRB     r4,[r7,#1]!           ;255
0000a0  f1ab0001          SUB      r0,r11,#1             ;256
0000a4  ea5f0b00          MOVS     r11,r0                ;256
0000a8  d1e1              BNE      |L3.110|
                  |L3.170|
0000aa  2e00              CMP      r6,#0                 ;259
0000ac  d034              BEQ      |L3.280|
0000ae  0921              LSRS     r1,r4,#4              ;260
0000b0  f8392011          LDRH     r2,[r9,r1,LSL #1]     ;260
0000b4  f8da1028          LDR      r1,[r10,#0x28]        ;260
0000b8  4628              MOV      r0,r5                 ;260
0000ba  6a4b              LDR      r3,[r1,#0x24]         ;260
0000bc  9902              LDR      r1,[sp,#8]            ;260
0000be  e026              B        |L3.270|
                  |L3.192|
;;;275        }
;;;276        /* Draw center area (2 pixels in one byte) */
;;;277        while (xsize >= 2) {
;;;278          /* Draw 1. (left) pixel */
;;;279          if (pixels & 0xF0) {
0000c0  0920              LSRS     r0,r4,#4
0000c2  d008              BEQ      |L3.214|
;;;280            (*pDev->pAPIList->pfSetPixelIndex)(x, y, *(pTrans + (pixels >> 4)));
0000c4  0920              LSRS     r0,r4,#4
0000c6  f8392010          LDRH     r2,[r9,r0,LSL #1]
0000ca  f8da0028          LDR      r0,[r10,#0x28]
0000ce  9902              LDR      r1,[sp,#8]
0000d0  6a43              LDR      r3,[r0,#0x24]
0000d2  4628              MOV      r0,r5
0000d4  4798              BLX      r3
                  |L3.214|
;;;281          }
;;;282          /* Draw 2. (right) pixel */
;;;283          if (pixels &= 15) {
0000d6  f014000f          ANDS     r0,r4,#0xf
0000da  d007              BEQ      |L3.236|
;;;284            (*pDev->pAPIList->pfSetPixelIndex)(x + 1, y, *(pTrans + pixels));
0000dc  f8392010          LDRH     r2,[r9,r0,LSL #1]
0000e0  f8da0028          LDR      r0,[r10,#0x28]
0000e4  9902              LDR      r1,[sp,#8]
0000e6  6a43              LDR      r3,[r0,#0x24]
0000e8  1c68              ADDS     r0,r5,#1
0000ea  4798              BLX      r3
                  |L3.236|
;;;285          }
;;;286          x += 2;
0000ec  1cad              ADDS     r5,r5,#2
;;;287          xsize -= 2;
0000ee  1eb6              SUBS     r6,r6,#2
                  |L3.240|
0000f0  f8174f01          LDRB     r4,[r7,#1]!           ;274
                  |L3.244|
0000f4  2e02              CMP      r6,#2                 ;277
0000f6  dae3              BGE      |L3.192|
;;;288          pixels = *++p;
;;;289        }
;;;290        /* Draw incomplete bytes to the right of center area */
;;;291        if (xsize) {
0000f8  2e00              CMP      r6,#0
0000fa  d00d              BEQ      |L3.280|
;;;292          if (pixels >>= 4) {
0000fc  0920              LSRS     r0,r4,#4
0000fe  d00b              BEQ      |L3.280|
;;;293            (*pDev->pAPIList->pfSetPixelIndex)(x, y, *(pTrans + pixels));
000100  f8392010          LDRH     r2,[r9,r0,LSL #1]
000104  f8da0028          LDR      r0,[r10,#0x28]
000108  9902              LDR      r1,[sp,#8]
00010a  6a43              LDR      r3,[r0,#0x24]
00010c  4628              MOV      r0,r5
                  |L3.270|
00010e  b004              ADD      sp,sp,#0x10
000110  e8bd5ff0          POP      {r4-r12,lr}
000114  4718              BX       r3
000116  e7ff              B        |L3.280|
                  |L3.280|
;;;294          }
;;;295        }
;;;296        break;
;;;297      }
;;;298    }
000118  e8bd9fff          POP      {r0-r12,pc}
;;;299    
                          ENDP

                  |L3.284|
                          DCD      GUI_Context

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

                  _DrawBitmap PROC
;;;356    */
;;;357    static void _DrawBitmap(int x0, int y0, int xsize, int ysize,
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;358                            int BitsPerPixel, int BytesPerLine,
;;;359                            const U8 GUI_UNI_PTR * pData, int Diff, const LCD_PIXELINDEX* pTrans)
;;;360    {
000004  b087              SUB      sp,sp,#0x1c
000006  4604              MOV      r4,r0
;;;361      int i;
;;;362      GUI_MEMDEV* pDev   = GUI_MEMDEV_H2P(GUI_Context.hDevData);
000008  4861              LDR      r0,|L4.400|
00000a  468b              MOV      r11,r1                ;360
00000c  f9b0004c          LDRSH    r0,[r0,#0x4c]  ; GUI_Context
000010  f8dda060          LDR      r10,[sp,#0x60]
000014  f8dd8058          LDR      r8,[sp,#0x58]
000018  9d14              LDR      r5,[sp,#0x50]
00001a  f7fffffe          BL       GUI_ALLOC_h2p
00001e  4606              MOV      r6,r0
;;;363      GUI_USAGE*  pUsage = (pDev->hUsage) ? GUI_USAGE_H2P(pDev->hUsage) : 0;
000020  f9b00018          LDRSH    r0,[r0,#0x18]
000024  b108              CBZ      r0,|L4.42|
000026  f7fffffe          BL       GUI_ALLOC_h2p
                  |L4.42|
;;;364      unsigned    BytesPerLineDest;
;;;365      PIXELINDEX* pDest;
;;;366      BytesPerLineDest = pDev->BytesPerLine;
00002a  9006              STR      r0,[sp,#0x18]
;;;367      x0 += Diff;
00002c  9817              LDR      r0,[sp,#0x5c]
00002e  f8d6900c          LDR      r9,[r6,#0xc]
000032  4420              ADD      r0,r0,r4
;;;368      /* Mark all affected pixels dirty unless transparency is set */
;;;369      if (pUsage) {
000034  9007              STR      r0,[sp,#0x1c]
000036  9806              LDR      r0,[sp,#0x18]
000038  b158              CBZ      r0,|L4.82|
;;;370        if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0) {
00003a  4855              LDR      r0,|L4.400|
00003c  7b00              LDRB     r0,[r0,#0xc]  ; GUI_Context
00003e  0780              LSLS     r0,r0,#30
000040  d407              BMI      |L4.82|
;;;371          GUI_USAGE_AddRect(pUsage, x0, y0 , xsize, ysize);
000042  9b0a              LDR      r3,[sp,#0x28]
000044  e9dd0106          LDRD     r0,r1,[sp,#0x18]
000048  9300              STR      r3,[sp,#0]
00004a  465a              MOV      r2,r11
00004c  9b09              LDR      r3,[sp,#0x24]
00004e  f7fffffe          BL       GUI_USAGE_AddRect
                  |L4.82|
;;;372        }
;;;373      }
;;;374      pDest = _XY2PTR_BITOFFSET(x0, y0, 0);
000052  2200              MOVS     r2,#0
000054  4659              MOV      r1,r11
000056  9807              LDR      r0,[sp,#0x1c]
000058  f7fffffe          BL       _XY2PTR_BITOFFSET
00005c  4607              MOV      r7,r0
;;;375    #if BITSPERPIXEL == 16
;;;376      /* handle 16 bpp bitmaps in high color modes, but only without palette */
;;;377      if (BitsPerPixel == 16) {
;;;378        for (i = 0; i < ysize; i++) {
;;;379          _DrawBitLine16BPP_DDB(pUsage, x0, i + y0, (const U16*)pData, xsize, pDev, pDest);
;;;380          pData += BytesPerLine;
;;;381          pDest = (PIXELINDEX*)((U8*)pDest + BytesPerLineDest); 
;;;382        }
;;;383        return;
;;;384      }
;;;385    #endif
;;;386      /* Handle 8 bpp bitmaps seperately as we have different routine bitmaps with or without palette */
;;;387      if (BitsPerPixel == 8) {
00005e  2d08              CMP      r5,#8
000060  d154              BNE      |L4.268|
;;;388        for (i = 0; i < ysize; i++) {
000062  2000              MOVS     r0,#0
000064  e04a              B        |L4.252|
;;;389          if (pTrans) {
000066  bf00              NOP      
                  |L4.104|
;;;390            _DrawBitLine8BPP(pUsage, x0, i + y0, pData, xsize, pTrans, pDev, pDest);
000068  eb09000b          ADD      r0,r9,r11
00006c  9005              STR      r0,[sp,#0x14]
00006e  4848              LDR      r0,|L4.400|
000070  9d07              LDR      r5,[sp,#0x1c]
000072  7b00              LDRB     r0,[r0,#0xc]  ; GUI_Context
000074  9f09              LDR      r7,[sp,#0x24]         ;389
000076  f1ba0f00          CMP      r10,#0                ;389
00007a  4644              MOV      r4,r8
00007c  f0000003          AND      r0,r0,#3
000080  d01e              BEQ      |L4.192|
000082  b110              CBZ      r0,|L4.138|
000084  2802              CMP      r0,#2                 ;389
000086  d135              BNE      |L4.244|
000088  e00c              B        |L4.164|
                  |L4.138|
00008a  7820              LDRB     r0,[r4,#0]            ;389
00008c  6ab1              LDR      r1,[r6,#0x28]         ;389
00008e  f83a2010          LDRH     r2,[r10,r0,LSL #1]    ;389
000092  4628              MOV      r0,r5                 ;389
000094  6a4b              LDR      r3,[r1,#0x24]         ;389
000096  1c6d              ADDS     r5,r5,#1              ;389
000098  9905              LDR      r1,[sp,#0x14]         ;389
00009a  4798              BLX      r3                    ;389
00009c  1c64              ADDS     r4,r4,#1              ;389
00009e  1e7f              SUBS     r7,r7,#1              ;389
0000a0  d1f3              BNE      |L4.138|
0000a2  e027              B        |L4.244|
                  |L4.164|
0000a4  7820              LDRB     r0,[r4,#0]            ;389
0000a6  b130              CBZ      r0,|L4.182|
0000a8  f83a2010          LDRH     r2,[r10,r0,LSL #1]    ;389
0000ac  6ab0              LDR      r0,[r6,#0x28]         ;389
0000ae  9905              LDR      r1,[sp,#0x14]         ;389
0000b0  6a43              LDR      r3,[r0,#0x24]         ;389
0000b2  4628              MOV      r0,r5                 ;389
0000b4  4798              BLX      r3                    ;389
                  |L4.182|
0000b6  1c6d              ADDS     r5,r5,#1              ;389
0000b8  1c64              ADDS     r4,r4,#1              ;389
0000ba  1e7f              SUBS     r7,r7,#1              ;389
0000bc  d1f2              BNE      |L4.164|
0000be  e019              B        |L4.244|
                  |L4.192|
0000c0  b110              CBZ      r0,|L4.200|
0000c2  2802              CMP      r0,#2                 ;389
0000c4  d116              BNE      |L4.244|
0000c6  e00a              B        |L4.222|
                  |L4.200|
0000c8  6ab1              LDR      r1,[r6,#0x28]         ;389
0000ca  4628              MOV      r0,r5                 ;389
0000cc  6a4b              LDR      r3,[r1,#0x24]         ;389
0000ce  7822              LDRB     r2,[r4,#0]            ;389
0000d0  1c6d              ADDS     r5,r5,#1              ;389
0000d2  9905              LDR      r1,[sp,#0x14]         ;389
0000d4  4798              BLX      r3                    ;389
0000d6  1c64              ADDS     r4,r4,#1              ;389
0000d8  1e7f              SUBS     r7,r7,#1              ;389
0000da  d1f5              BNE      |L4.200|
0000dc  e00a              B        |L4.244|
                  |L4.222|
0000de  7822              LDRB     r2,[r4,#0]            ;389
0000e0  b122              CBZ      r2,|L4.236|
0000e2  6ab0              LDR      r0,[r6,#0x28]         ;389
0000e4  9905              LDR      r1,[sp,#0x14]         ;389

⌨️ 快捷键说明

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