📄 guidev_writeex.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\guidev_writeex.o --depend=.\Obj\guidev_writeex.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\MemDev\GUIDEV_WriteEx.c]
THUMB
AREA ||i.GUI_MEMDEV_WriteEx||, CODE, READONLY, ALIGN=2
GUI_MEMDEV_WriteEx PROC
;;;261 */
;;;262 void GUI_MEMDEV_WriteEx(GUI_MEMDEV_Handle hMem, int xMag, int yMag, int Alpha) {
000000 b51c PUSH {r2-r4,lr}
;;;263 GUI_MEMDEV_WriteExAt(hMem, GUI_POS_AUTO, GUI_POS_AUTO, xMag, yMag, Alpha);
000002 e9cd2300 STRD r2,r3,[sp,#0]
000006 460b MOV r3,r1
000008 4902 LDR r1,|L1.20|
00000a 460a MOV r2,r1
00000c f7fffffe BL GUI_MEMDEV_WriteExAt
;;;264 }
000010 bd1c POP {r2-r4,pc}
;;;265
ENDP
000012 0000 DCW 0x0000
|L1.20|
DCD 0xfffff001
AREA ||i.GUI_MEMDEV_WriteExAt||, CODE, READONLY, ALIGN=2
GUI_MEMDEV_WriteExAt PROC
;;;239 */
;;;240 void GUI_MEMDEV_WriteExAt(GUI_MEMDEV_Handle hMem, int x, int y, int xMag, int yMag, int Alpha) {
000000 e92d5ffc PUSH {r2-r12,lr}
;;;241 if (hMem) {
000004 f8ddb030 LDR r11,[sp,#0x30]
000008 ea5f0800 MOVS r8,r0 ;240
00000c 460d MOV r5,r1 ;240
00000e 4691 MOV r9,r2 ;240
000010 469a MOV r10,r3 ;240
000012 d01a BEQ |L2.74|
;;;242 GUI_MEMDEV* pDevData;
;;;243 GUI_RECT ClipRectPrev;
;;;244 GUI_LOCK();
;;;245 pDevData = (GUI_MEMDEV*) GUI_ALLOC_h2p(hMem);
000014 4640 MOV r0,r8
000016 f7fffffe BL GUI_ALLOC_h2p
;;;246 if (x == GUI_POS_AUTO) {
00001a f64071ff MOV r1,#0xfff
00001e 1949 ADDS r1,r1,r5
000020 d103 BNE |L2.42|
;;;247 x = pDevData->x0;
000022 f9b05000 LDRSH r5,[r0,#0]
;;;248 y = pDevData->y0;
000026 f9b09002 LDRSH r9,[r0,#2]
|L2.42|
;;;249 }
;;;250 ClipRectPrev = GUI_Context.ClipRect;
00002a 4c09 LDR r4,|L2.80|
;;;251 LCD_SetClipRectMax();
00002c e9d46701 LDRD r6,r7,[r4,#4]
000030 f7fffffe BL LCD_SetClipRectMax
;;;252 _WriteExToActiveAt(hMem, x, y, xMag, yMag, Alpha);
000034 9b0d LDR r3,[sp,#0x34]
000036 464a MOV r2,r9
000038 e9cdb300 STRD r11,r3,[sp,#0]
00003c 4653 MOV r3,r10
00003e 4629 MOV r1,r5
000040 4640 MOV r0,r8
000042 f7fffffe BL _WriteExToActiveAt
;;;253 GUI_Context.ClipRect = ClipRectPrev;
;;;254 GUI_UNLOCK();
;;;255 }
000046 e9c46701 STRD r6,r7,[r4,#4]
|L2.74|
;;;256 }
00004a e8bd9ffc POP {r2-r12,pc}
;;;257
ENDP
00004e 0000 DCW 0x0000
|L2.80|
DCD GUI_Context
AREA ||i._DrawBitmapEx||, CODE, READONLY, ALIGN=2
_DrawBitmapEx PROC
;;;149 */
;;;150 static void _DrawBitmapEx(int x0, int y0, int xOff, int yOff, int xSize, int ySize, int xMag, int yMag,
000000 e92d4fff PUSH {r0-r11,lr}
;;;151 int Alpha, int BmpSizeX, int BmpSizeY, int bpp, int BytesPerLine, const U8* pData) {
000004 b087 SUB sp,sp,#0x1c
000006 4689 MOV r9,r1
000008 461e MOV r6,r3
;;;152 int y, yi, yMin, yMax, yEnd, yPrev;
;;;153 yMin = GUI_Context.ClipRect.y0;
00000a 4930 LDR r1,|L3.204|
;;;154 yMax = GUI_Context.ClipRect.y1;
;;;155 if (xMag < 0) {
00000c e9dd3716 LDRD r3,r7,[sp,#0x58]
000010 e9dd2019 LDRD r2,r0,[sp,#0x64]
000014 f9b1b006 LDRSH r11,[r1,#6] ;153 ; GUI_Context
000018 f9b1a00a LDRSH r10,[r1,#0xa] ;154 ; GUI_Context
;;;156 x0 -= (BmpSizeX - (xOff << 1) - xSize) * xMag / 1000;
00001c f44f717a MOV r1,#0x3e8
000020 2b00 CMP r3,#0 ;155
000022 da0b BGE |L3.60|
000024 9b09 LDR r3,[sp,#0x24]
000026 eba20243 SUB r2,r2,r3,LSL #1
00002a 9b14 LDR r3,[sp,#0x50]
00002c 1ad2 SUBS r2,r2,r3
00002e 9b16 LDR r3,[sp,#0x58]
000030 435a MULS r2,r3,r2
000032 fb92f2f1 SDIV r2,r2,r1
000036 9b07 LDR r3,[sp,#0x1c]
000038 1a9a SUBS r2,r3,r2
00003a 9207 STR r2,[sp,#0x1c]
|L3.60|
;;;157 }
;;;158 if (yMag < 0) {
00003c 2f00 CMP r7,#0
00003e da05 BGE |L3.76|
;;;159 y0 -= (BmpSizeY - 1) * yMag / 1000;
000040 1e40 SUBS r0,r0,#1
000042 4378 MULS r0,r7,r0
000044 fb90f2f1 SDIV r2,r0,r1
000048 eba90902 SUB r9,r9,r2
|L3.76|
;;;160 }
;;;161 yEnd = y0 + GUI__DivideRound32(((I32)(yOff) * yMag), 1000);
00004c fb06f007 MUL r0,r6,r7
000050 f44f717a MOV r1,#0x3e8
000054 f7fffffe BL GUI__DivideRound32
000058 eb000509 ADD r5,r0,r9
;;;162 yPrev = yEnd + 1;
;;;163 for (yi = yOff; yi < (yOff + ySize); yi++) {
00005c 9915 LDR r1,[sp,#0x54]
00005e f1050801 ADD r8,r5,#1 ;162
000062 1870 ADDS r0,r6,r1
000064 9006 STR r0,[sp,#0x18]
000066 e02b B |L3.192|
|L3.104|
;;;164 y = yEnd;
;;;165 yEnd = y0 + GUI__DivideRound32(((I32)(yi + 1) * yMag), 1000);
000068 1c70 ADDS r0,r6,#1
00006a 462c MOV r4,r5 ;164
00006c 4378 MULS r0,r7,r0
00006e f44f717a MOV r1,#0x3e8
000072 f7fffffe BL GUI__DivideRound32
000076 eb000509 ADD r5,r0,r9
;;;166 if (y != yPrev) {
00007a 4544 CMP r4,r8
00007c d01e BEQ |L3.188|
;;;167 yPrev = y;
00007e 46a0 MOV r8,r4
|L3.128|
;;;168 do {
;;;169 if ((y >= yMin) && (y <= yMax)) {
000080 455c CMP r4,r11
000082 db12 BLT |L3.170|
000084 4554 CMP r4,r10
000086 dc10 BGT |L3.170|
;;;170 _DrawBitmapLineEx(x0, y, xOff, yi, xSize, xMag, Alpha, bpp, BytesPerLine, pData);
000088 a91b ADD r1,sp,#0x6c
00008a c90e LDM r1,{r1-r3}
00008c 9818 LDR r0,[sp,#0x60]
00008e e9cd0102 STRD r0,r1,[sp,#8]
000092 e9cd2304 STRD r2,r3,[sp,#0x10]
000096 9b16 LDR r3,[sp,#0x58]
000098 9a14 LDR r2,[sp,#0x50]
00009a e9cd2300 STRD r2,r3,[sp,#0]
00009e 4633 MOV r3,r6
0000a0 4621 MOV r1,r4
0000a2 9a09 LDR r2,[sp,#0x24]
0000a4 9807 LDR r0,[sp,#0x1c]
0000a6 f7fffffe BL _DrawBitmapLineEx
|L3.170|
;;;171 }
;;;172 } while ((yMag < 0) ? (--y > yEnd) : (++y < yEnd));
0000aa 2f00 CMP r7,#0
0000ac da03 BGE |L3.182|
0000ae 1e64 SUBS r4,r4,#1
0000b0 42ac CMP r4,r5
0000b2 dce5 BGT |L3.128|
0000b4 e002 B |L3.188|
|L3.182|
0000b6 1c64 ADDS r4,r4,#1
0000b8 42ac CMP r4,r5
0000ba dbe1 BLT |L3.128|
|L3.188|
0000bc 9806 LDR r0,[sp,#0x18] ;163
0000be 1c76 ADDS r6,r6,#1 ;163
|L3.192|
0000c0 42b0 CMP r0,r6 ;163
0000c2 dcd1 BGT |L3.104|
;;;173 }
;;;174 }
;;;175 }
0000c4 b00b ADD sp,sp,#0x2c
0000c6 e8bd8ff0 POP {r4-r11,pc}
;;;176
ENDP
0000ca 0000 DCW 0x0000
|L3.204|
DCD GUI_Context
AREA ||i._DrawBitmapLineEx||, CODE, READONLY, ALIGN=2
_DrawBitmapLineEx PROC
;;;85 */
;;;86 static void _DrawBitmapLineEx(int x0, int y0, int xOff, int yOff, int xSize, int xMag, int Alpha,
000000 e92d4fff PUSH {r0-r11,lr}
;;;87 int bpp, int BytesPerLine, const U8* pData) {
;;;88 int x, xi, xAct, xStart, xMagAbs, xiMag, xMin, xMax, Cached;
;;;89 LCD_PIXELINDEX Index = 0, IndexPrev = 0;
;;;90 /* Use clipping rect */
;;;91 xMin = GUI_Context.ClipRect.x0 - x0;
000004 4953 LDR r1,|L4.340|
000006 4607 MOV r7,r0 ;87
000008 f9b14004 LDRSH r4,[r1,#4] ; GUI_Context
00000c b083 SUB sp,sp,#0xc ;87
;;;92 xMax = GUI_Context.ClipRect.x1 - x0;
00000e f9b11008 LDRSH r1,[r1,#8] ; GUI_Context
000012 eba40907 SUB r9,r4,r7 ;91
;;;93 /* Init some values */
;;;94 xMagAbs = (xMag > 0) ? xMag : -xMag;
000016 9c11 LDR r4,[sp,#0x44]
000018 f04f0a00 MOV r10,#0 ;89
00001c 9a14 LDR r2,[sp,#0x50]
00001e eba10107 SUB r1,r1,r7 ;92
000022 4650 MOV r0,r10 ;89
000024 2c00 CMP r4,#0
000026 9101 STR r1,[sp,#4]
000028 dc00 BGT |L4.44|
00002a 4264 RSBS r4,r4,#0
|L4.44|
;;;95 x = (xOff * xMagAbs) / 1000;
00002c 9905 LDR r1,[sp,#0x14]
00002e 9402 STR r4,[sp,#8]
000030 4361 MULS r1,r4,r1
000032 f44f757a MOV r5,#0x3e8
000036 fb91f4f5 SDIV r4,r1,r5
;;;96 xiMag = (xOff * xMagAbs) % 1000;
00003a fb051614 MLS r6,r5,r4,r1
;;;97 xStart = -1;
;;;98 Cached = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -