📄 lcd_rotatecw.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\lcd_rotatecw.o --depend=.\Obj\lcd_rotatecw.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_RotateCW.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 1c76 ADDS 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 1c76 ADDS 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 1c76 ADDS 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._DrawBitmapCW||, CODE, READONLY, ALIGN=2
_DrawBitmapCW PROC
;;;162 */
;;;163 static void _DrawBitmapCW(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 990a LDR r1,[sp,#0x28]
000008 f8dd8068 LDR r8,[sp,#0x68]
00000c 18c8 ADDS r0,r1,r3
00000e 1e40 SUBS r0,r0,#1
;;;171 x1 = x0 + xsize - 1;
000010 9006 STR r0,[sp,#0x18]
000012 9909 LDR r1,[sp,#0x24]
000014 980b LDR r0,[sp,#0x2c]
000016 469b MOV r11,r3 ;166
000018 4408 ADD r0,r0,r1
00001a 1e40 SUBS r0,r0,#1
;;;172 /* Rotate positions */
;;;173 _TransformPointCW(&x0, &y0);
00001c 9007 STR r0,[sp,#0x1c]
00001e 2500 MOVS r5,#0 ;167
000020 f8dda060 LDR r10,[sp,#0x60] ;170
000024 a90a ADD r1,sp,#0x28
000026 a809 ADD r0,sp,#0x24
000028 f7fffffe BL _TransformPointCW
;;;174 _TransformPointCW(&x1, &y1);
00002c a906 ADD r1,sp,#0x18
00002e a807 ADD r0,sp,#0x1c
000030 f7fffffe BL _TransformPointCW
;;;175 /* Handle BITMAP without magnification */
;;;176 if ((xMul == 1) && (yMul == 1)) {
000034 9816 LDR r0,[sp,#0x58]
000036 2801 CMP r0,#1
000038 d157 BNE |L2.234|
00003a 9817 LDR r0,[sp,#0x5c]
00003c 2801 CMP r0,#1
00003e d154 BNE |L2.234|
;;;177 int Diff = 0;
;;;178 /* Clip top */
;;;179 if (y1 > GUI_Context.ClipRect.y1) {
000040 4a55 LDR r2,|L2.408|
000042 9906 LDR r1,[sp,#0x18]
000044 f9b2000a LDRSH r0,[r2,#0xa] ; GUI_Context
000048 4288 CMP r0,r1
00004a da03 BGE |L2.84|
;;;180 int Diff = y1 - GUI_Context.ClipRect.y1;
;;;181 xsize -= Diff;
00004c 9b0b LDR r3,[sp,#0x2c]
00004e 1a09 SUBS r1,r1,r0 ;180
000050 1a59 SUBS r1,r3,r1
000052 910b STR r1,[sp,#0x2c]
|L2.84|
;;;182 }
;;;183 /* Clip bottom */
;;;184 if (y0 < GUI_Context.ClipRect.y0) {
000054 f9b23006 LDRSH r3,[r2,#6] ; GUI_Context
000058 990a LDR r1,[sp,#0x28]
00005a 428b CMP r3,r1
00005c dd0e BLE |L2.124|
;;;185 Diff = GUI_Context.ClipRect.y1 - y0;
00005e 1a45 SUBS r5,r0,r1
;;;186 xsize -= Diff;
000060 980b LDR r0,[sp,#0x2c]
000062 1b40 SUBS r0,r0,r5
;;;187 switch (BitsPerPixel) {
000064 900b STR r0,[sp,#0x2c]
000066 f1ba0f01 CMP r10,#1
00006a d107 BNE |L2.124|
;;;188 case 1:
;;;189 pPixel += (Diff >> 3); y0 -= (Diff >> 3) << 3; Diff &= 7;
00006c f0250007 BIC r0,r5,#7
000070 eb0808e5 ADD r8,r8,r5,ASR #3
000074 1a08 SUBS r0,r1,r0
000076 f0050507 AND r5,r5,#7
00007a 900a STR r0,[sp,#0x28]
|L2.124|
;;;190 break;
;;;191 }
;;;192 }
;;;193 if (ysize <=0) {
00007c f1bb0f00 CMP r11,#0
000080 dd30 BLE |L2.228|
;;;194 return;
;;;195 }
;;;196 /* Clip right side */
;;;197 if (x0 > GUI_Context.ClipRect.x1) {
000082 f9b20008 LDRSH r0,[r2,#8] ; GUI_Context
000086 9909 LDR r1,[sp,#0x24]
000088 4288 CMP r0,r1
00008a da07 BGE |L2.156|
;;;198 int Diff = x0 - GUI_Context.ClipRect.x1;
00008c 1a08 SUBS r0,r1,r0
;;;199 ysize -= Diff;
;;;200 x0 -= Diff;
;;;201 pPixel += Diff * BytesPerLine;
00008e 9b19 LDR r3,[sp,#0x64]
000090 1a09 SUBS r1,r1,r0 ;200
000092 fb008803 MLA r8,r0,r3,r8
000096 ebab0b00 SUB r11,r11,r0 ;199
00009a 9109 STR r1,[sp,#0x24]
|L2.156|
;;;202 }
;;;203 /* Clip left side */
;;;204 if (x1 < GUI_Context.ClipRect.x0) {
00009c f9b20004 LDRSH r0,[r2,#4] ; GUI_Context
0000a0 9907 LDR r1,[sp,#0x1c]
0000a2 4288 CMP r0,r1
0000a4 dd04 BLE |L2.176|
;;;205 int Diff = GUI_Context.ClipRect.x0 - x1;
0000a6 1a40 SUBS r0,r0,r1
;;;206 x1 += Diff;
0000a8 4401 ADD r1,r1,r0
;;;207 ysize -= Diff;
0000aa ebab0b00 SUB r11,r11,r0
0000ae 9107 STR r1,[sp,#0x1c]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -