📄 guidev.txt
字号:
ENDP
|L5.48|
DCD GUI_Context
AREA ||i.GUI_MEMDEV_Select||, CODE, READONLY, ALIGN=2
GUI_MEMDEV_Select PROC
;;;226 */
;;;227 GUI_MEMDEV_Handle GUI_MEMDEV_Select(GUI_MEMDEV_Handle hMem) {
000000 e92d41f0 PUSH {r4-r8,lr}
;;;228 GUI_MEMDEV_Handle r;
;;;229 GUI_LOCK();
;;;230 r = GUI_Context.hDevData;
000004 4c0f LDR r4,|L6.68|
000006 0005 MOVS r5,r0 ;227
000008 f9b4704c LDRSH r7,[r4,#0x4c] ; GUI_Context
;;;231 if (hMem == 0) {
00000c d102 BNE |L6.20|
;;;232 GUI_SelectLCD();
00000e f7fffffe BL GUI_SelectLCD
000012 e014 B |L6.62|
|L6.20|
;;;233 } else {
;;;234 GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(hMem);
000014 4628 MOV r0,r5
000016 f7fffffe BL GUI_ALLOC_h2p
00001a 4606 MOV r6,r0
;;;235 #if GUI_WINSUPPORT
;;;236 WM_Deactivate();
00001c f7fffffe BL WM_Deactivate
;;;237 #endif
;;;238 /* If LCD was selected Save cliprect */
;;;239 if (GUI_Context.hDevData == 0) {
000020 f8b4004c LDRH r0,[r4,#0x4c] ; GUI_Context
000024 b928 CBNZ r0,|L6.50|
;;;240 GUI_Context.ClipRectPrev = GUI_Context.ClipRect;
000026 4807 LDR r0,|L6.68|
000028 2208 MOVS r2,#8
00002a 1d21 ADDS r1,r4,#4
00002c 304e ADDS r0,r0,#0x4e
00002e f7fffffe BL __aeabi_memcpy
|L6.50|
;;;241 }
;;;242 GUI_Context.hDevData = hMem;
000032 f8a4504c STRH r5,[r4,#0x4c]
;;;243 GUI_Context.pDeviceAPI = pDev->pAPIList;
000036 6ab0 LDR r0,[r6,#0x28]
;;;244 LCD_SetClipRectMax();
000038 64a0 STR r0,[r4,#0x48] ; GUI_Context
00003a f7fffffe BL LCD_SetClipRectMax
|L6.62|
;;;245 }
;;;246 GUI_UNLOCK();
;;;247 return r;
00003e 4638 MOV r0,r7
;;;248 }
000040 e8bd81f0 POP {r4-r8,pc}
;;;249
ENDP
|L6.68|
DCD GUI_Context
AREA ||i.GUI_MEMDEV__Color2Index||, CODE, READONLY, ALIGN=2
GUI_MEMDEV__Color2Index PROC
;;;55 */
;;;56 unsigned int GUI_MEMDEV__Color2Index(LCD_COLOR Color) {
000000 b510 PUSH {r4,lr}
000002 4604 MOV r4,r0
;;;57 GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
000004 4804 LDR r0,|L7.24|
000006 f9b0004c LDRSH r0,[r0,#0x4c] ; GUI_Context
00000a f7fffffe BL GUI_ALLOC_h2p
;;;58 return pDev->pfColor2Index(Color);
00000e 69c1 LDR r1,[r0,#0x1c]
000010 4620 MOV r0,r4
000012 e8bd4010 POP {r4,lr}
000016 4708 BX r1
;;;59 }
;;;60
ENDP
|L7.24|
DCD GUI_Context
AREA ||i.GUI_MEMDEV__CreateFixed||, CODE, READONLY, ALIGN=1
GUI_MEMDEV__CreateFixed PROC
;;;109 */
;;;110 GUI_MEMDEV_Handle GUI_MEMDEV__CreateFixed(int x0, int y0, int xsize, int ysize, int Flags
000000 e92d4fff PUSH {r0-r11,lr}
;;;111 ,const tLCDDEV_APIList * pMemDevAPI
;;;112 ,tLCDDEV_Color2Index* pfColor2Index
;;;113 ,tLCDDEV_Index2Color* pfIndex2Color
;;;114 ,tLCDDEV_GetIndexMask* pfGetIndexMask) {
000004 b081 SUB sp,sp,#4
;;;115 I32 MemSize;
;;;116 GUI_USAGE_Handle hUsage = 0;
;;;117 unsigned int BitsPerPixel, BytesPerLine;
;;;118 GUI_MEMDEV_Handle hMemDev;
;;;119 BitsPerPixel = pMemDevAPI->BitsPerPixel;
000006 e9dd4b0e LDRD r4,r11,[sp,#0x38]
;;;120 BytesPerLine = (xsize * BitsPerPixel + 7) >> 3; /* Note: This code works with 8 and 16 bit memory devices. If other BPPs are introduced for MemDevs, it needs to be changed */
00000a f8db903c LDR r9,[r11,#0x3c]
00000e 4692 MOV r10,r2 ;114
000010 fb02f009 MUL r0,r2,r9
000014 1dc0 ADDS r0,r0,#7
000016 461d MOV r5,r3 ;114
000018 2600 MOVS r6,#0 ;116
00001a 08c7 LSRS r7,r0,#3
;;;121 /* Calc available MemSize */
;;;122 MemSize = GUI_ALLOC_GetMaxSize();
00001c f7fffffe BL GUI_ALLOC_GetMaxSize
;;;123 if (!(Flags & GUI_MEMDEV_NOTRANS)) {
000020 07e1 LSLS r1,r4,#31
000022 d105 BNE |L8.48|
;;;124 MemSize = (MemSize / 4) * 3; /* We need to reserve some memory for usage object ... TBD: This can be optimized as we do not use memory perfectly. */
000024 17c1 ASRS r1,r0,#31
000026 eb007091 ADD r0,r0,r1,LSR #30
00002a 1080 ASRS r0,r0,#2
00002c eb000040 ADD r0,r0,r0,LSL #1
|L8.48|
;;;125 }
;;;126 if (ysize<=0) {
000030 2d00 CMP r5,#0
000032 dc06 BGT |L8.66|
;;;127 int MaxLines = (MemSize - sizeof(GUI_MEMDEV)) / BytesPerLine;
000034 382c SUBS r0,r0,#0x2c
000036 fbb0f0f7 UDIV r0,r0,r7
;;;128 ysize = (MaxLines > -ysize) ? -ysize : MaxLines;
00003a 426d RSBS r5,r5,#0
00003c 42a8 CMP r0,r5
00003e dc00 BGT |L8.66|
000040 4605 MOV r5,r0
|L8.66|
;;;129 }
;;;130 if (!(Flags & GUI_MEMDEV_NOTRANS)) {
000042 07e0 LSLS r0,r4,#31
000044 d108 BNE |L8.88|
;;;131 /* Create the usage map */
;;;132 hUsage = GUI_USAGE_BM_Create(x0, y0, xsize, ysize, 0);
000046 2300 MOVS r3,#0
000048 9300 STR r3,[sp,#0]
00004a e9dd0101 LDRD r0,r1,[sp,#4]
00004e 462b MOV r3,r5
000050 4652 MOV r2,r10
000052 f7fffffe BL GUI_USAGE_BM_Create
000056 4606 MOV r6,r0
|L8.88|
;;;133 }
;;;134 /* Check if we can alloc sufficient memory */
;;;135 if (ysize <= 0) {
000058 2d00 CMP r5,#0
00005a dc03 BGT |L8.100|
;;;136 GUI_DEBUG_WARN("GUI_MEMDEV_Create: Too little memory");
;;;137 GUI_UNLOCK();
;;;138 return 0;
00005c 2000 MOVS r0,#0
|L8.94|
;;;139 }
;;;140 MemSize = ysize * BytesPerLine + sizeof(GUI_MEMDEV);
;;;141 if (Flags & GUI_MEMDEV_NOTRANS) {
;;;142 hMemDev = GUI_ALLOC_AllocNoInit(MemSize);
;;;143 } else {
;;;144 hMemDev = GUI_ALLOC_AllocZero(MemSize);
;;;145 }
;;;146 if (hMemDev) {
;;;147 GUI_MEMDEV* pDevData;
;;;148 pDevData = GUI_MEMDEV_H2P(hMemDev);
;;;149 pDevData->x0 = x0;
;;;150 pDevData->y0 = y0;
;;;151 pDevData->XSize = xsize;
;;;152 pDevData->YSize = ysize;
;;;153 pDevData->NumColors =
;;;154 #if GUI_NUM_LAYERS == 1
;;;155 LCD_GET_NUMCOLORS();
;;;156 #else
;;;157 LCD_GetNumColorsEx(GUI_Context.SelLayer);
;;;158 #endif
;;;159 pDevData->BytesPerLine = BytesPerLine;
;;;160 pDevData->hUsage = hUsage;
;;;161 /* Set color conversion routine pointers */
;;;162 pDevData->pfColor2Index = pfColor2Index; /* LCD_L0_Color2Index; */
;;;163 pDevData->pfIndex2Color = pfIndex2Color; /* LCD_L0_Index2Color; */
;;;164 pDevData->pfGetIndexMask= pfGetIndexMask; /* LCD_L0_GetIndexMask */
;;;165
;;;166 pDevData->pAPIList = pMemDevAPI;
;;;167 pDevData->BitsPerPixel = BitsPerPixel;
;;;168 #if (GUI_NUM_LAYERS > 1) /* Size opt., preprocessor not required */
;;;169 pDevData->LayerIndex = GUI_Context.SelLayer;
;;;170 #else
;;;171 pDevData->LayerIndex = 0;
;;;172 #endif
;;;173 } else {
;;;174 if (hUsage) {
;;;175 GUI_ALLOC_Free(hUsage);
;;;176 }
;;;177 GUI_DEBUG_WARN("GUI_MEMDEV_Create: Alloc failed");
;;;178 }
;;;179 return hMemDev;
;;;180 }
00005e b005 ADD sp,sp,#0x14
000060 e8bd8ff0 POP {r4-r11,pc}
|L8.100|
000064 fb05f007 MUL r0,r5,r7 ;140
000068 f100002c ADD r0,r0,#0x2c ;140
00006c 07e1 LSLS r1,r4,#31 ;141
00006e b200 SXTH r0,r0 ;142
000070 d002 BEQ |L8.120|
000072 f7fffffe BL GUI_ALLOC_AllocNoInit
000076 e001 B |L8.124|
|L8.120|
000078 f7fffffe BL GUI_ALLOC_AllocZero
|L8.124|
00007c ea5f0800 MOVS r8,r0 ;144
000080 d01b BEQ |L8.186|
000082 4640 MOV r0,r8 ;148
000084 f7fffffe BL GUI_ALLOC_h2p
000088 9901 LDR r1,[sp,#4] ;149
00008a 8001 STRH r1,[r0,#0] ;149
00008c 9902 LDR r1,[sp,#8] ;150
00008e 8041 STRH r1,[r0,#2] ;150
000090 f8a0a004 STRH r10,[r0,#4] ;151
000094 4604 MOV r4,r0 ;148
000096 80c5 STRH r5,[r0,#6] ;152
000098 f7fffffe BL LCD_GetNumColors
00009c e9c40702 STRD r0,r7,[r4,#8] ;160
0000a0 8326 STRH r6,[r4,#0x18] ;160
0000a2 9910 LDR r1,[sp,#0x40] ;162
0000a4 61e1 STR r1,[r4,#0x1c] ;163
0000a6 9911 LDR r1,[sp,#0x44] ;163
0000a8 6221 STR r1,[r4,#0x20] ;164
0000aa 9912 LDR r1,[sp,#0x48] ;164
0000ac e9c41b09 STRD r1,r11,[r4,#0x24] ;171
0000b0 f8c49010 STR r9,[r4,#0x10] ;171
0000b4 2100 MOVS r1,#0 ;171
0000b6 6161 STR r1,[r4,#0x14] ;173
0000b8 e003 B |L8.194|
|L8.186|
0000ba b116 CBZ r6,|L8.194|
0000bc 4630 MOV r0,r6 ;175
0000be f7fffffe BL GUI_ALLOC_Free
|L8.194|
0000c2 4640 MOV r0,r8 ;179
0000c4 e7cb B |L8.94|
;;;181
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -