📄 guidev_1.txt
字号:
;;;230 static void _DrawBitLine4BPP(GUI_USAGE* pUsage, int x, int y, const U8 GUI_UNI_PTR * p, int Diff, int xsize,
000000 e92d5fff PUSH {r0-r12,lr}
;;;231 const LCD_PIXELINDEX* pTrans, GUI_MEMDEV* pDev, PIXELINDEX* pDest)
;;;232 {
;;;233 U8 pixels;
;;;234 GUI_USE_PARA(pUsage);
;;;235 GUI_USE_PARA(pDest);
;;;236 pixels = (*p) << ((Diff & 1) << 2);
000004 a80e ADD r0,sp,#0x38
000006 e8900641 LDM r0,{r0,r6,r9,r10}
00000a 460d MOV r5,r1 ;232
00000c 7819 LDRB r1,[r3,#0]
00000e 07c2 LSLS r2,r0,#31
000010 0f52 LSRS r2,r2,#29
000012 4091 LSLS r1,r1,r2
000014 b2cc UXTB r4,r1
;;;237 switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
000016 4941 LDR r1,|L3.284|
000018 461f MOV r7,r3 ;232
00001a 7b09 LDRB r1,[r1,#0xc] ; GUI_Context
00001c f0110103 ANDS r1,r1,#3
000020 d011 BEQ |L3.70|
000022 2902 CMP r1,#2
000024 d178 BNE |L3.280|
;;;238 /*
;;;239 * Write mode *
;;;240 */
;;;241 case 0:
;;;242 /* Draw incomplete bytes to the left of center area */
;;;243 if (Diff) {
;;;244 (*pDev->pAPIList->pfSetPixelIndex)(x++, y, *(pTrans + (pixels >> 4)));
;;;245 xsize--;
;;;246 pixels = *++p;
;;;247 }
;;;248 /* Draw center area (2 pixels in one byte) */
;;;249 if (xsize >= 2) {
;;;250 int i = xsize >> 1;
;;;251 xsize &= 1;
;;;252 do {
;;;253 (*pDev->pAPIList->pfSetPixelIndex)(x++, y, *(pTrans + (pixels >> 4)));
;;;254 (*pDev->pAPIList->pfSetPixelIndex)(x++, y, *(pTrans + (pixels & 15)));
;;;255 pixels = *++p;
;;;256 } while (--i);
;;;257 }
;;;258 /* Draw incomplete bytes to the right of center area */
;;;259 if (xsize) {
;;;260 (*pDev->pAPIList->pfSetPixelIndex)(x++, y, *(pTrans + (pixels >> 4)));
;;;261 }
;;;262 break;
;;;263 /*
;;;264 * Transparent draw mode *
;;;265 */
;;;266 case LCD_DRAWMODE_TRANS:
;;;267 /* Draw incomplete bytes to the left of center area */
;;;268 if (Diff) {
000026 2800 CMP r0,#0
000028 d064 BEQ |L3.244|
;;;269 if (pixels & 0xF0) {
00002a 0920 LSRS r0,r4,#4
00002c d008 BEQ |L3.64|
;;;270 (*pDev->pAPIList->pfSetPixelIndex)(x, y, *(pTrans + (pixels >> 4)));
00002e f8da0028 LDR r0,[r10,#0x28]
000032 0921 LSRS r1,r4,#4
000034 f8392011 LDRH r2,[r9,r1,LSL #1]
000038 6a43 LDR r3,[r0,#0x24]
00003a 4628 MOV r0,r5
00003c 9902 LDR r1,[sp,#8]
00003e 4798 BLX r3
|L3.64|
;;;271 }
;;;272 x++;
000040 1c6d ADDS r5,r5,#1
;;;273 xsize--;
000042 1e76 SUBS r6,r6,#1
;;;274 pixels = *++p;
000044 e054 B |L3.240|
|L3.70|
000046 b160 CBZ r0,|L3.98|
000048 0921 LSRS r1,r4,#4 ;244
00004a f8392011 LDRH r2,[r9,r1,LSL #1] ;244
00004e f8da1028 LDR r1,[r10,#0x28] ;244
000052 4628 MOV r0,r5 ;244
000054 6a4b LDR r3,[r1,#0x24] ;244
000056 1c6d ADDS r5,r5,#1 ;244
000058 9902 LDR r1,[sp,#8] ;244
00005a 4798 BLX r3 ;244
00005c f8174f01 LDRB r4,[r7,#1]! ;246
000060 1e76 SUBS r6,r6,#1 ;245
|L3.98|
000062 2e02 CMP r6,#2 ;249
000064 db21 BLT |L3.170|
000066 ea4f0b66 ASR r11,r6,#1 ;250
00006a f0060601 AND r6,r6,#1 ;251
|L3.110|
00006e f8da1028 LDR r1,[r10,#0x28] ;253
000072 0920 LSRS r0,r4,#4 ;253
000074 f8392010 LDRH r2,[r9,r0,LSL #1] ;253
000078 6a4b LDR r3,[r1,#0x24] ;253
00007a 4628 MOV r0,r5 ;253
00007c f1050801 ADD r8,r5,#1 ;253
000080 9902 LDR r1,[sp,#8] ;253
000082 4798 BLX r3 ;253
000084 f004000f AND r0,r4,#0xf ;254
000088 f8392010 LDRH r2,[r9,r0,LSL #1] ;254
00008c f8da0028 LDR r0,[r10,#0x28] ;254
000090 f1080501 ADD r5,r8,#1 ;254
000094 6a43 LDR r3,[r0,#0x24] ;254
000096 4640 MOV r0,r8 ;254
000098 9902 LDR r1,[sp,#8] ;254
00009a 4798 BLX r3 ;254
00009c f8174f01 LDRB r4,[r7,#1]! ;255
0000a0 f1ab0001 SUB r0,r11,#1 ;256
0000a4 ea5f0b00 MOVS r11,r0 ;256
0000a8 d1e1 BNE |L3.110|
|L3.170|
0000aa 2e00 CMP r6,#0 ;259
0000ac d034 BEQ |L3.280|
0000ae 0921 LSRS r1,r4,#4 ;260
0000b0 f8392011 LDRH r2,[r9,r1,LSL #1] ;260
0000b4 f8da1028 LDR r1,[r10,#0x28] ;260
0000b8 4628 MOV r0,r5 ;260
0000ba 6a4b LDR r3,[r1,#0x24] ;260
0000bc 9902 LDR r1,[sp,#8] ;260
0000be e026 B |L3.270|
|L3.192|
;;;275 }
;;;276 /* Draw center area (2 pixels in one byte) */
;;;277 while (xsize >= 2) {
;;;278 /* Draw 1. (left) pixel */
;;;279 if (pixels & 0xF0) {
0000c0 0920 LSRS r0,r4,#4
0000c2 d008 BEQ |L3.214|
;;;280 (*pDev->pAPIList->pfSetPixelIndex)(x, y, *(pTrans + (pixels >> 4)));
0000c4 0920 LSRS r0,r4,#4
0000c6 f8392010 LDRH r2,[r9,r0,LSL #1]
0000ca f8da0028 LDR r0,[r10,#0x28]
0000ce 9902 LDR r1,[sp,#8]
0000d0 6a43 LDR r3,[r0,#0x24]
0000d2 4628 MOV r0,r5
0000d4 4798 BLX r3
|L3.214|
;;;281 }
;;;282 /* Draw 2. (right) pixel */
;;;283 if (pixels &= 15) {
0000d6 f014000f ANDS r0,r4,#0xf
0000da d007 BEQ |L3.236|
;;;284 (*pDev->pAPIList->pfSetPixelIndex)(x + 1, y, *(pTrans + pixels));
0000dc f8392010 LDRH r2,[r9,r0,LSL #1]
0000e0 f8da0028 LDR r0,[r10,#0x28]
0000e4 9902 LDR r1,[sp,#8]
0000e6 6a43 LDR r3,[r0,#0x24]
0000e8 1c68 ADDS r0,r5,#1
0000ea 4798 BLX r3
|L3.236|
;;;285 }
;;;286 x += 2;
0000ec 1cad ADDS r5,r5,#2
;;;287 xsize -= 2;
0000ee 1eb6 SUBS r6,r6,#2
|L3.240|
0000f0 f8174f01 LDRB r4,[r7,#1]! ;274
|L3.244|
0000f4 2e02 CMP r6,#2 ;277
0000f6 dae3 BGE |L3.192|
;;;288 pixels = *++p;
;;;289 }
;;;290 /* Draw incomplete bytes to the right of center area */
;;;291 if (xsize) {
0000f8 2e00 CMP r6,#0
0000fa d00d BEQ |L3.280|
;;;292 if (pixels >>= 4) {
0000fc 0920 LSRS r0,r4,#4
0000fe d00b BEQ |L3.280|
;;;293 (*pDev->pAPIList->pfSetPixelIndex)(x, y, *(pTrans + pixels));
000100 f8392010 LDRH r2,[r9,r0,LSL #1]
000104 f8da0028 LDR r0,[r10,#0x28]
000108 9902 LDR r1,[sp,#8]
00010a 6a43 LDR r3,[r0,#0x24]
00010c 4628 MOV r0,r5
|L3.270|
00010e b004 ADD sp,sp,#0x10
000110 e8bd5ff0 POP {r4-r12,lr}
000114 4718 BX r3
000116 e7ff B |L3.280|
|L3.280|
;;;294 }
;;;295 }
;;;296 break;
;;;297 }
;;;298 }
000118 e8bd9fff POP {r0-r12,pc}
;;;299
ENDP
|L3.284|
DCD GUI_Context
AREA ||i._DrawBitmap||, CODE, READONLY, ALIGN=2
_DrawBitmap PROC
;;;356 */
;;;357 static void _DrawBitmap(int x0, int y0, int xsize, int ysize,
000000 e92d4fff PUSH {r0-r11,lr}
;;;358 int BitsPerPixel, int BytesPerLine,
;;;359 const U8 GUI_UNI_PTR * pData, int Diff, const LCD_PIXELINDEX* pTrans)
;;;360 {
000004 b087 SUB sp,sp,#0x1c
000006 4604 MOV r4,r0
;;;361 int i;
;;;362 GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
000008 4861 LDR r0,|L4.400|
00000a 468b MOV r11,r1 ;360
00000c f9b0004c LDRSH r0,[r0,#0x4c] ; GUI_Context
000010 f8dda060 LDR r10,[sp,#0x60]
000014 f8dd8058 LDR r8,[sp,#0x58]
000018 9d14 LDR r5,[sp,#0x50]
00001a f7fffffe BL GUI_ALLOC_h2p
00001e 4606 MOV r6,r0
;;;363 GUI_USAGE* pUsage = (pDev->hUsage) ? GUI_USAGE_H2P(pDev->hUsage) : 0;
000020 f9b00018 LDRSH r0,[r0,#0x18]
000024 b108 CBZ r0,|L4.42|
000026 f7fffffe BL GUI_ALLOC_h2p
|L4.42|
;;;364 unsigned BytesPerLineDest;
;;;365 PIXELINDEX* pDest;
;;;366 BytesPerLineDest = pDev->BytesPerLine;
00002a 9006 STR r0,[sp,#0x18]
;;;367 x0 += Diff;
00002c 9817 LDR r0,[sp,#0x5c]
00002e f8d6900c LDR r9,[r6,#0xc]
000032 4420 ADD r0,r0,r4
;;;368 /* Mark all affected pixels dirty unless transparency is set */
;;;369 if (pUsage) {
000034 9007 STR r0,[sp,#0x1c]
000036 9806 LDR r0,[sp,#0x18]
000038 b158 CBZ r0,|L4.82|
;;;370 if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0) {
00003a 4855 LDR r0,|L4.400|
00003c 7b00 LDRB r0,[r0,#0xc] ; GUI_Context
00003e 0780 LSLS r0,r0,#30
000040 d407 BMI |L4.82|
;;;371 GUI_USAGE_AddRect(pUsage, x0, y0 , xsize, ysize);
000042 9b0a LDR r3,[sp,#0x28]
000044 e9dd0106 LDRD r0,r1,[sp,#0x18]
000048 9300 STR r3,[sp,#0]
00004a 465a MOV r2,r11
00004c 9b09 LDR r3,[sp,#0x24]
00004e f7fffffe BL GUI_USAGE_AddRect
|L4.82|
;;;372 }
;;;373 }
;;;374 pDest = _XY2PTR_BITOFFSET(x0, y0, 0);
000052 2200 MOVS r2,#0
000054 4659 MOV r1,r11
000056 9807 LDR r0,[sp,#0x1c]
000058 f7fffffe BL _XY2PTR_BITOFFSET
00005c 4607 MOV r7,r0
;;;375 #if BITSPERPIXEL == 16
;;;376 /* handle 16 bpp bitmaps in high color modes, but only without palette */
;;;377 if (BitsPerPixel == 16) {
;;;378 for (i = 0; i < ysize; i++) {
;;;379 _DrawBitLine16BPP_DDB(pUsage, x0, i + y0, (const U16*)pData, xsize, pDev, pDest);
;;;380 pData += BytesPerLine;
;;;381 pDest = (PIXELINDEX*)((U8*)pDest + BytesPerLineDest);
;;;382 }
;;;383 return;
;;;384 }
;;;385 #endif
;;;386 /* Handle 8 bpp bitmaps seperately as we have different routine bitmaps with or without palette */
;;;387 if (BitsPerPixel == 8) {
00005e 2d08 CMP r5,#8
000060 d154 BNE |L4.268|
;;;388 for (i = 0; i < ysize; i++) {
000062 2000 MOVS r0,#0
000064 e04a B |L4.252|
;;;389 if (pTrans) {
000066 bf00 NOP
|L4.104|
;;;390 _DrawBitLine8BPP(pUsage, x0, i + y0, pData, xsize, pTrans, pDev, pDest);
000068 eb09000b ADD r0,r9,r11
00006c 9005 STR r0,[sp,#0x14]
00006e 4848 LDR r0,|L4.400|
000070 9d07 LDR r5,[sp,#0x1c]
000072 7b00 LDRB r0,[r0,#0xc] ; GUI_Context
000074 9f09 LDR r7,[sp,#0x24] ;389
000076 f1ba0f00 CMP r10,#0 ;389
00007a 4644 MOV r4,r8
00007c f0000003 AND r0,r0,#3
000080 d01e BEQ |L4.192|
000082 b110 CBZ r0,|L4.138|
000084 2802 CMP r0,#2 ;389
000086 d135 BNE |L4.244|
000088 e00c B |L4.164|
|L4.138|
00008a 7820 LDRB r0,[r4,#0] ;389
00008c 6ab1 LDR r1,[r6,#0x28] ;389
00008e f83a2010 LDRH r2,[r10,r0,LSL #1] ;389
000092 4628 MOV r0,r5 ;389
000094 6a4b LDR r3,[r1,#0x24] ;389
000096 1c6d ADDS r5,r5,#1 ;389
000098 9905 LDR r1,[sp,#0x14] ;389
00009a 4798 BLX r3 ;389
00009c 1c64 ADDS r4,r4,#1 ;389
00009e 1e7f SUBS r7,r7,#1 ;389
0000a0 d1f3 BNE |L4.138|
0000a2 e027 B |L4.244|
|L4.164|
0000a4 7820 LDRB r0,[r4,#0] ;389
0000a6 b130 CBZ r0,|L4.182|
0000a8 f83a2010 LDRH r2,[r10,r0,LSL #1] ;389
0000ac 6ab0 LDR r0,[r6,#0x28] ;389
0000ae 9905 LDR r1,[sp,#0x14] ;389
0000b0 6a43 LDR r3,[r0,#0x24] ;389
0000b2 4628 MOV r0,r5 ;389
0000b4 4798 BLX r3 ;389
|L4.182|
0000b6 1c6d ADDS r5,r5,#1 ;389
0000b8 1c64 ADDS r4,r4,#1 ;389
0000ba 1e7f SUBS r7,r7,#1 ;389
0000bc d1f2 BNE |L4.164|
0000be e019 B |L4.244|
|L4.192|
0000c0 b110 CBZ r0,|L4.200|
0000c2 2802 CMP r0,#2 ;389
0000c4 d116 BNE |L4.244|
0000c6 e00a B |L4.222|
|L4.200|
0000c8 6ab1 LDR r1,[r6,#0x28] ;389
0000ca 4628 MOV r0,r5 ;389
0000cc 6a4b LDR r3,[r1,#0x24] ;389
0000ce 7822 LDRB r2,[r4,#0] ;389
0000d0 1c6d ADDS r5,r5,#1 ;389
0000d2 9905 LDR r1,[sp,#0x14] ;389
0000d4 4798 BLX r3 ;389
0000d6 1c64 ADDS r4,r4,#1 ;389
0000d8 1e7f SUBS r7,r7,#1 ;389
0000da d1f5 BNE |L4.200|
0000dc e00a B |L4.244|
|L4.222|
0000de 7822 LDRB r2,[r4,#0] ;389
0000e0 b122 CBZ r2,|L4.236|
0000e2 6ab0 LDR r0,[r6,#0x28] ;389
0000e4 9905 LDR r1,[sp,#0x14] ;389
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -