lcd_rotateccw.txt

来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 548 行 · 第 1/2 页

TXT
548
字号
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\lcd_rotateccw.o --depend=.\Obj\lcd_rotateccw.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\LCD_RotateCCW.c]
                          THUMB

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

                  _DrawBitLine1BPP PROC
;;;37     */
;;;38     static void  _DrawBitLine1BPP(int x, int y, U8 const GUI_UNI_PTR *p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) {
000000  e92d5fff          PUSH     {r0-r12,lr}
;;;39       LCD_PIXELINDEX Index0 = *(pTrans+0);
000004  e9dd700e          LDRD     r7,r0,[sp,#0x38]
;;;40       LCD_PIXELINDEX Index1 = *(pTrans+1);
;;;41       y -= Diff;
000008  1ace              SUBS     r6,r1,r3
;;;42       switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
00000a  492f              LDR      r1,|L1.200|
00000c  f8b08000          LDRH     r8,[r0,#0]            ;39
000010  f8b09002          LDRH     r9,[r0,#2]            ;40
000014  4615              MOV      r5,r2                 ;38
000016  7b08              LDRB     r0,[r1,#0xc]  ; GUI_Context
;;;43       case 0:
;;;44         do {
;;;45           LCDDEV_L0_SetPixelIndex(x, y, (*p & (0x80 >> Diff)) ? Index1 : Index0);
000018  2280              MOVS     r2,#0x80
00001a  461c              MOV      r4,r3                 ;38
00001c  f0100003          ANDS     r0,r0,#3              ;42
000020  d006              BEQ      |L1.48|
000022  2801              CMP      r0,#1                 ;42
000024  d032              BEQ      |L1.140|
000026  2802              CMP      r0,#2                 ;42
000028  d119              BNE      |L1.94|
00002a  4692              MOV      r10,r2
00002c  4688              MOV      r8,r1                 ;42
;;;46           y--;
;;;47     			if (++Diff == 8) {
;;;48             Diff = 0;
;;;49     				p++;
;;;50     			}
;;;51     		} while (--xsize);
;;;52         break;
;;;53       case LCD_DRAWMODE_TRANS:
;;;54         do {
00002e  e018              B        |L1.98|
                  |L1.48|
000030  4692              MOV      r10,r2                ;45
000032  468b              MOV      r11,r1                ;42
                  |L1.52|
000034  7829              LDRB     r1,[r5,#0]            ;45
000036  fa2af004          LSR      r0,r10,r4             ;45
00003a  464a              MOV      r2,r9                 ;45
00003c  4201              TST      r1,r0                 ;45
00003e  d100              BNE      |L1.66|
000040  4642              MOV      r2,r8                 ;45
                  |L1.66|
000042  f8db0048          LDR      r0,[r11,#0x48]        ;45  ; GUI_Context
000046  4631              MOV      r1,r6                 ;45
000048  6a43              LDR      r3,[r0,#0x24]         ;45
00004a  9800              LDR      r0,[sp,#0]            ;45
00004c  4798              BLX      r3                    ;45
00004e  1e76              SUBS     r6,r6,#1              ;46
000050  1c64              ADDS     r4,r4,#1              ;47
000052  2c08              CMP      r4,#8                 ;47
000054  d101              BNE      |L1.90|
000056  2400              MOVS     r4,#0                 ;48
000058  1c6d              ADDS     r5,r5,#1              ;49
                  |L1.90|
00005a  1e7f              SUBS     r7,r7,#1              ;51
00005c  d1ea              BNE      |L1.52|
                  |L1.94|
;;;55       		if (*p & (0x80 >> Diff))
;;;56             LCDDEV_L0_SetPixelIndex(x, y, Index1);
;;;57           y--;
;;;58     			if (++Diff == 8) {
;;;59             Diff = 0;
;;;60     				p++;
;;;61     			}
;;;62     		} while (--xsize);
;;;63         break;
;;;64       case LCD_DRAWMODE_XOR:;
;;;65         do {
;;;66       		if (*p & (0x80 >> Diff)) {
;;;67             int Pixel = LCD_L0_GetPixelIndex(x, y);
;;;68             LCDDEV_L0_SetPixelIndex(x, y, LCD_NUM_COLORS - 1 - Pixel);
;;;69           }
;;;70           y--;
;;;71     			if (++Diff == 8) {
;;;72             Diff = 0;
;;;73     				p++;
;;;74     			}
;;;75     		} while (--xsize);
;;;76         break;
;;;77     	}
;;;78     }
00005e  e8bd9fff          POP      {r0-r12,pc}
                  |L1.98|
000062  7828              LDRB     r0,[r5,#0]            ;55
000064  fa2af104          LSR      r1,r10,r4             ;55
000068  4208              TST      r0,r1                 ;55
00006a  d006              BEQ      |L1.122|
00006c  f8d80048          LDR      r0,[r8,#0x48]         ;56  ; GUI_Context
000070  464a              MOV      r2,r9                 ;56
000072  6a43              LDR      r3,[r0,#0x24]         ;56
000074  4631              MOV      r1,r6                 ;56
000076  9800              LDR      r0,[sp,#0]            ;56
000078  4798              BLX      r3                    ;56
                  |L1.122|
00007a  1e76              SUBS     r6,r6,#1              ;57
00007c  1c64              ADDS     r4,r4,#1              ;58
00007e  2c08              CMP      r4,#8                 ;58
000080  d101              BNE      |L1.134|
000082  2400              MOVS     r4,#0                 ;59
000084  1c6d              ADDS     r5,r5,#1              ;60
                  |L1.134|
000086  1e7f              SUBS     r7,r7,#1              ;62
000088  d1eb              BNE      |L1.98|
00008a  e7e8              B        |L1.94|
                  |L1.140|
00008c  4691              MOV      r9,r2                 ;45
00008e  4688              MOV      r8,r1                 ;42
000090  f64f7aff          MOV      r10,#0xffff           ;68
                  |L1.148|
000094  7829              LDRB     r1,[r5,#0]            ;66
000096  fa29f004          LSR      r0,r9,r4              ;66
00009a  4201              TST      r1,r0                 ;66
00009c  d00b              BEQ      |L1.182|
00009e  4631              MOV      r1,r6                 ;67
0000a0  9800              LDR      r0,[sp,#0]            ;67
0000a2  f7fffffe          BL       LCD_L0_GetPixelIndex
0000a6  ebaa0200          SUB      r2,r10,r0             ;68
0000aa  f8d80048          LDR      r0,[r8,#0x48]         ;68  ; GUI_Context
0000ae  4631              MOV      r1,r6                 ;68
0000b0  6a43              LDR      r3,[r0,#0x24]         ;68
0000b2  9800              LDR      r0,[sp,#0]            ;68
0000b4  4798              BLX      r3                    ;68
                  |L1.182|
0000b6  1e76              SUBS     r6,r6,#1              ;70
0000b8  1c64              ADDS     r4,r4,#1              ;71
0000ba  2c08              CMP      r4,#8                 ;71
0000bc  d101              BNE      |L1.194|
0000be  2400              MOVS     r4,#0                 ;72
0000c0  1c6d              ADDS     r5,r5,#1              ;73
                  |L1.194|
0000c2  1e7f              SUBS     r7,r7,#1              ;75
0000c4  d1e6              BNE      |L1.148|
0000c6  e7ca              B        |L1.94|
;;;79     
                          ENDP

                  |L1.200|
                          DCD      GUI_Context

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

                  _DrawBitmapCCW PROC
;;;162    */
;;;163    static void _DrawBitmapCCW(int x0, int y0, int xsize, int ysize, int xMul, int yMul,
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;164                               int BitsPerPixel, int BytesPerLine,
;;;165                               const U8 GUI_UNI_PTR * pPixel, const LCD_PIXELINDEX* pTrans)
;;;166    {
000004  b089              SUB      sp,sp,#0x24
;;;167      U8  Data = 0;
;;;168      int x1, y1;
;;;169      /* Handle the optional Y-magnification */
;;;170      y1 = y0 + ysize - 1;
000006  980a              LDR      r0,[sp,#0x28]
000008  9e1a              LDR      r6,[sp,#0x68]
00000a  4418              ADD      r0,r0,r3
00000c  1e40              SUBS     r0,r0,#1
;;;171      x1 = x0 + xsize - 1;
00000e  9006              STR      r0,[sp,#0x18]
000010  990b              LDR      r1,[sp,#0x2c]
000012  9809              LDR      r0,[sp,#0x24]
000014  469b              MOV      r11,r3                ;166
000016  4408              ADD      r0,r0,r1
000018  1e40              SUBS     r0,r0,#1
;;;172      /* Rotate positions */
;;;173      _TransformPointCCW(&x0, &y0);
00001a  9007              STR      r0,[sp,#0x1c]
00001c  2500              MOVS     r5,#0                 ;167
00001e  f8dda060          LDR      r10,[sp,#0x60]        ;170
000022  a90a              ADD      r1,sp,#0x28
000024  a809              ADD      r0,sp,#0x24
000026  f7fffffe          BL       _TransformPointCCW
;;;174      _TransformPointCCW(&x1, &y1);
00002a  a906              ADD      r1,sp,#0x18
00002c  a807              ADD      r0,sp,#0x1c
00002e  f7fffffe          BL       _TransformPointCCW
;;;175      /*  Handle BITMAP without magnification */
;;;176      if ((xMul == 1) && (yMul == 1)) {
000032  9816              LDR      r0,[sp,#0x58]
000034  2801              CMP      r0,#1
000036  d154              BNE      |L2.226|
000038  9817              LDR      r0,[sp,#0x5c]
00003a  2801              CMP      r0,#1
00003c  d151              BNE      |L2.226|
;;;177        int Diff = 0;
;;;178        /* Clip top */
;;;179        if (y1 < GUI_Context.ClipRect.y0) {
00003e  4a54              LDR      r2,|L2.400|
000040  9806              LDR      r0,[sp,#0x18]
000042  f9b21006          LDRSH    r1,[r2,#6]  ; GUI_Context
000046  4281              CMP      r1,r0
000048  dd03              BLE      |L2.82|
;;;180          int Diff = GUI_Context.ClipRect.y0 - y1;
00004a  1a08              SUBS     r0,r1,r0
;;;181          xsize -= Diff;
00004c  990b              LDR      r1,[sp,#0x2c]
00004e  1a08              SUBS     r0,r1,r0
000050  900b              STR      r0,[sp,#0x2c]
                  |L2.82|
;;;182        }
;;;183        /* Clip bottom */
;;;184        if (y0 > GUI_Context.ClipRect.y1) {
000052  f9b2100a          LDRSH    r1,[r2,#0xa]  ; GUI_Context
000056  980a              LDR      r0,[sp,#0x28]
000058  4281              CMP      r1,r0
00005a  da0e              BGE      |L2.122|
;;;185          Diff = y0 - GUI_Context.ClipRect.y1;
00005c  1a45              SUBS     r5,r0,r1
;;;186    			xsize -= Diff;
00005e  990b              LDR      r1,[sp,#0x2c]
000060  1b49              SUBS     r1,r1,r5
;;;187    			switch (BitsPerPixel) {
000062  910b              STR      r1,[sp,#0x2c]
000064  f1ba0f01          CMP      r10,#1
000068  d107              BNE      |L2.122|
;;;188    			case 1:
;;;189      			pPixel += (Diff >> 3); y0 -= (Diff >> 3) << 3; Diff &= 7;
00006a  f0250107          BIC      r1,r5,#7
00006e  eb0606e5          ADD      r6,r6,r5,ASR #3
000072  1a40              SUBS     r0,r0,r1
000074  f0050507          AND      r5,r5,#7
000078  900a              STR      r0,[sp,#0x28]
                  |L2.122|
;;;190    				break;
;;;191    			}
;;;192        }
;;;193        if (ysize <= 0) {
00007a  f1bb0f00          CMP      r11,#0
00007e  dd2d              BLE      |L2.220|
;;;194    		  return;
;;;195        }
;;;196        /* Clip right side */
;;;197        if (x1 > GUI_Context.ClipRect.x1) {
000080  f9b21008          LDRSH    r1,[r2,#8]  ; GUI_Context
000084  9807              LDR      r0,[sp,#0x1c]
000086  4281              CMP      r1,r0
000088  da02              BGE      |L2.144|
;;;198          int Diff = x1 - GUI_Context.ClipRect.x1;
00008a  1a40              SUBS     r0,r0,r1
;;;199          ysize -= Diff;
00008c  ebab0b00          SUB      r11,r11,r0
                  |L2.144|
;;;200        }
;;;201        /* Clip left side */
;;;202        if (x0 < GUI_Context.ClipRect.x0) {
000090  f9b20004          LDRSH    r0,[r2,#4]  ; GUI_Context
000094  9909              LDR      r1,[sp,#0x24]
000096  4288              CMP      r0,r1
000098  dd07              BLE      |L2.170|
;;;203          int Diff = GUI_Context.ClipRect.x0 - x0;
00009a  1a40              SUBS     r0,r0,r1
;;;204          pPixel += Diff * BytesPerLine;
00009c  9a19              LDR      r2,[sp,#0x64]
;;;205          x0 += Diff;
00009e  4401              ADD      r1,r1,r0
0000a0  fb006602          MLA      r6,r0,r2,r6           ;204
;;;206          ysize -= Diff;
0000a4  ebab0b00          SUB      r11,r11,r0
0000a8  9109              STR      r1,[sp,#0x24]
                  |L2.170|
;;;207        }

⌨️ 快捷键说明

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