📄 lcd.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.o --depend=.\Obj\lcd.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.c]
THUMB
AREA ||i.LCD_Color2Index||, CODE, READONLY, ALIGN=2
LCD_Color2Index PROC
;;;314 */
;;;315 int LCD_Color2Index(LCD_COLOR Color) {
000000 4901 LDR r1,|L1.8|
;;;316 return LCDDEV_L0_Color2Index(Color);
000002 6c89 LDR r1,[r1,#0x48] ; GUI_Context
000004 6809 LDR r1,[r1,#0]
000006 4708 BX r1
;;;317 }
;;;318
ENDP
|L1.8|
DCD GUI_Context
AREA ||i.LCD_DrawBitmap||, CODE, READONLY, ALIGN=2
LCD_DrawBitmap PROC
;;;149 */
;;;150 void LCD_DrawBitmap(int x0, int y0, int xsize, int ysize, int xMul, int yMul,
000000 e92d4fff PUSH {r0-r11,lr}
;;;151 int BitsPerPixel, int BytesPerLine,
;;;152 const U8 GUI_UNI_PTR * pPixel, const LCD_PIXELINDEX* pTrans)
;;;153 {
000004 4605 MOV r5,r0
;;;154 U8 Data = 0;
;;;155 int x1, y1;
;;;156 /* Handle rotation if necessary */
;;;157 #if GUI_SUPPORT_ROTATION
;;;158 if (GUI_pLCD_APIList) {
000006 4873 LDR r0,|L2.468|
000008 b087 SUB sp,sp,#0x1c ;153
00000a f8d0c000 LDR r12,[r0,#0] ; GUI_pLCD_APIList
00000e 2600 MOVS r6,#0 ;154
000010 9c18 LDR r4,[sp,#0x60]
000012 460f MOV r7,r1 ;153
000014 4693 MOV r11,r2 ;153
000016 f1bc0f00 CMP r12,#0
00001a d00c BEQ |L2.54|
;;;159 GUI_pLCD_APIList->pfDrawBitmap(x0, y0, xsize, ysize, xMul, yMul, BitsPerPixel, BytesPerLine, pPixel, pTrans);
00001c e9dd0116 LDRD r0,r1,[sp,#0x58]
000020 9b19 LDR r3,[sp,#0x64]
000022 aa02 ADD r2,sp,#8
000024 c213 STM r2!,{r0,r1,r4}
000026 9305 STR r3,[sp,#0x14]
000028 e9dd2314 LDRD r2,r3,[sp,#0x50]
00002c e9cd2300 STRD r2,r3,[sp,#0]
;;;160 return;
000030 f8dc4000 LDR r4,[r12,#0]
000034 e05d B |L2.242|
|L2.54|
;;;161 }
;;;162 #endif
;;;163 /* Handle the optional Y-magnification */
;;;164 y1 = y0 + ysize - 1;
000036 980a LDR r0,[sp,#0x28]
;;;165 x1 = x0 + xsize - 1;
000038 eb05010b ADD r1,r5,r11
00003c 183a ADDS r2,r7,r0 ;164
;;;166 /* Handle BITMAP without magnification */
;;;167 if ((xMul | yMul) == 1) {
00003e e9dd0314 LDRD r0,r3,[sp,#0x50]
000042 1e52 SUBS r2,r2,#1 ;164
000044 1e49 SUBS r1,r1,#1 ;165
000046 4318 ORRS r0,r0,r3
000048 2801 CMP r0,#1
00004a d16c BNE |L2.294|
;;;168 int Diff;
;;;169 /* Clip y0 (top) */
;;;170 Diff = GUI_Context.ClipRect.y0 - y0;
00004c 4e62 LDR r6,|L2.472|
00004e f9b63006 LDRSH r3,[r6,#6] ; GUI_Context
000052 1bd8 SUBS r0,r3,r7
;;;171 if (Diff > 0) {
000054 2800 CMP r0,#0
000056 dd08 BLE |L2.106|
;;;172 ysize -= Diff;
000058 9f0a LDR r7,[sp,#0x28]
00005a 1a3f SUBS r7,r7,r0
;;;173 if (ysize <= 0) {
00005c 970a STR r7,[sp,#0x28]
00005e 2f00 CMP r7,#0
000060 dd4c BLE |L2.252|
;;;174 return;
;;;175 }
;;;176 y0 = GUI_Context.ClipRect.y0;
000062 461f MOV r7,r3
;;;177 #if GUI_SUPPORT_LARGE_BITMAPS /* Required only for 16 bit CPUs if some bitmaps are >64kByte */
;;;178 pPixel += (U32) Diff * (U32) BytesPerLine;
;;;179 #else
;;;180 pPixel += (unsigned)Diff * (unsigned)BytesPerLine;
000064 9b17 LDR r3,[sp,#0x5c]
000066 fb004403 MLA r4,r0,r3,r4
|L2.106|
;;;181 #endif
;;;182 }
;;;183 /* Clip y1 (bottom) */
;;;184 Diff = y1 - GUI_Context.ClipRect.y1;
00006a f9b6000a LDRSH r0,[r6,#0xa] ; GUI_Context
00006e 1a10 SUBS r0,r2,r0
;;;185 if (Diff > 0) {
000070 2800 CMP r0,#0
000072 dd04 BLE |L2.126|
;;;186 ysize -= Diff;
000074 9a0a LDR r2,[sp,#0x28]
000076 1a10 SUBS r0,r2,r0
;;;187 if (ysize <= 0) {
000078 900a STR r0,[sp,#0x28]
00007a 2800 CMP r0,#0
00007c dd3e BLE |L2.252|
|L2.126|
;;;188 return;
;;;189 }
;;;190 }
;;;191 /* Clip right side */
;;;192 Diff = x1 - GUI_Context.ClipRect.x1;
00007e f9b60008 LDRSH r0,[r6,#8] ; GUI_Context
000082 1a08 SUBS r0,r1,r0
;;;193 if (Diff > 0) {
000084 2800 CMP r0,#0
000086 dd01 BLE |L2.140|
;;;194 xsize -= Diff;
000088 ebab0b00 SUB r11,r11,r0
|L2.140|
;;;195 }
;;;196 /* Clip left side ... (The difficult side ...) */
;;;197 Diff = 0;
;;;198 if (x0 < GUI_Context.ClipRect.x0) {
00008c f9b60004 LDRSH r0,[r6,#4] ; GUI_Context
000090 2200 MOVS r2,#0 ;197
000092 42a8 CMP r0,r5
000094 dd20 BLE |L2.216|
;;;199 Diff = GUI_Context.ClipRect.x0 - x0;
000096 1b42 SUBS r2,r0,r5
;;;200 xsize -= Diff;
;;;201 switch (BitsPerPixel) {
000098 9816 LDR r0,[sp,#0x58]
00009a ebab0b02 SUB r11,r11,r2 ;200
00009e 2804 CMP r0,#4
0000a0 d037 BEQ |L2.274|
0000a2 dc0b BGT |L2.188|
0000a4 2801 CMP r0,#1
0000a6 d02c BEQ |L2.258|
0000a8 2802 CMP r0,#2
0000aa d115 BNE |L2.216|
;;;202 case 1:
;;;203 pPixel+= (Diff>>3); x0 += (Diff>>3)<<3; Diff &=7;
;;;204 break;
;;;205 case 2:
;;;206 pPixel+= (Diff>>2); x0 += (Diff>>2)<<2; Diff &=3;
0000ac f0220003 BIC r0,r2,#3
0000b0 eb0404a2 ADD r4,r4,r2,ASR #2
0000b4 4405 ADD r5,r5,r0
0000b6 f0020203 AND r2,r2,#3
;;;207 break;
0000ba e00d B |L2.216|
|L2.188|
0000bc 4946 LDR r1,|L2.472|
0000be 2808 CMP r0,#8 ;201
0000c0 f9b11004 LDRSH r1,[r1,#4] ;198
0000c4 eba10105 SUB r1,r1,r5 ;199
;;;208 case 4:
;;;209 pPixel+= (Diff>>1); x0 += (Diff>>1)<<1; Diff &=1;
;;;210 break;
;;;211 case 8:
;;;212 pPixel+= Diff; x0 += Diff; Diff=0;
0000c8 4429 ADD r1,r1,r5
0000ca d02a BEQ |L2.290|
0000cc 2810 CMP r0,#0x10 ;201
0000ce d103 BNE |L2.216|
;;;213 break;
;;;214 case 16:
;;;215 pPixel+= (Diff<<1); x0 += Diff; Diff=0;
0000d0 eb040442 ADD r4,r4,r2,LSL #1
|L2.212|
0000d4 460d MOV r5,r1
0000d6 2200 MOVS r2,#0
|L2.216|
;;;216 break;
;;;217 }
;;;218 }
;;;219 if (xsize <=0) {
0000d8 f1bb0f00 CMP r11,#0
0000dc dd0e BLE |L2.252|
;;;220 return;
;;;221 }
;;;222 LCDDEV_L0_DrawBitmap (x0,y0, xsize, ysize, BitsPerPixel, BytesPerLine, pPixel, Diff, pTrans);
0000de 9817 LDR r0,[sp,#0x5c]
0000e0 e9cd4202 STRD r4,r2,[sp,#8]
0000e4 9b19 LDR r3,[sp,#0x64]
0000e6 9304 STR r3,[sp,#0x10]
0000e8 9b16 LDR r3,[sp,#0x58]
0000ea 9001 STR r0,[sp,#4]
0000ec 9300 STR r3,[sp,#0]
0000ee 6cb0 LDR r0,[r6,#0x48] ; GUI_Context
0000f0 68c4 LDR r4,[r0,#0xc]
|L2.242|
0000f2 465a MOV r2,r11
0000f4 4639 MOV r1,r7
0000f6 4628 MOV r0,r5
0000f8 9b0a LDR r3,[sp,#0x28]
0000fa 47a0 BLX r4
|L2.252|
;;;223 } else {
;;;224 /**** Handle BITMAP with magnification ***/
;;;225 int x,y;
;;;226 int yi;
;;;227 int Shift = 8-BitsPerPixel;
;;;228 for (y=y0, yi=0; yi<ysize; yi++, y+= yMul, pPixel+=BytesPerLine) {
;;;229 int yMax = y+yMul-1;
;;;230 /* Draw if within clip area (Optimization ... "if" is not required !) */
;;;231 if ((yMax >= GUI_Context.ClipRect.y0) && (y <= GUI_Context.ClipRect.y1)) {
;;;232 int BitsLeft =0;
;;;233 int xi;
;;;234 const U8 GUI_UNI_PTR * pDataLine = pPixel;
;;;235 for (x=x0, xi=0; xi<xsize; xi++, x+=xMul) {
;;;236 U8 Index;
;;;237 if (!BitsLeft) {
;;;238 Data = *pDataLine++;
;;;239 BitsLeft =8;
;;;240 }
;;;241 Index = Data>>Shift;
;;;242 Data <<= BitsPerPixel;
;;;243 BitsLeft -= BitsPerPixel;
;;;244 if (Index || ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) ==0)) {
;;;245 LCD_PIXELINDEX OldColor = LCD_COLORINDEX;
;;;246 if (pTrans) {
;;;247 LCD_COLORINDEX = *(pTrans+Index);
;;;248 } else {
;;;249 LCD_COLORINDEX = Index;
;;;250 }
;;;251 LCD_FillRect(x,y, x+xMul-1, yMax);
;;;252 LCD_COLORINDEX = OldColor;
;;;253 }
;;;254 }
;;;255 }
;;;256 }
;;;257 }
;;;258 }
0000fc b00b ADD sp,sp,#0x2c
0000fe e8bd8ff0 POP {r4-r11,pc}
|L2.258|
000102 f0220007 BIC r0,r2,#7 ;203
000106 eb0404e2 ADD r4,r4,r2,ASR #3 ;203
00010a 4405 ADD r5,r5,r0 ;203
00010c f0020207 AND r2,r2,#7 ;203
000110 e7e2 B |L2.216|
|L2.274|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -