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 + -
显示快捷键?