📄 guidev_16.txt
字号:
;;;342 pixels = *++p;
;;;343 }
;;;344 /* Draw incomplete bytes to the right of center area */
;;;345 if (xsize) {
;;;346 if (pixels >>= 4) {
;;;347 *pDest = *(pTrans + pixels);
;;;348 if (pUsage) {
;;;349 GUI_USAGE_AddPixel(pUsage, x, y);
;;;350 }
;;;351 }
;;;352 }
;;;353 break;
;;;354 case LCD_DRAWMODE_XOR:;
;;;355 PixelLoopXor:
;;;356 if (PixelCnt > xsize)
;;;357 PixelCnt = xsize;
;;;358 xsize -= PixelCnt;
;;;359 do {
;;;360 if ((pixels & 0xc0)) {
;;;361 *pDest ^= 255;
;;;362 }
;;;363 pDest++;
;;;364 pixels <<= 4;
;;;365 } while (--PixelCnt);
;;;366 if (xsize) {
;;;367 PixelCnt = 2;
;;;368 pixels = *(++p);
;;;369 goto PixelLoopXor;
;;;370 }
;;;371 break;
;;;372 }
;;;373 }
0000a6 e8bd9ff0 POP {r4-r12,pc}
|L3.170|
0000aa 0928 LSRS r0,r5,#4 ;326
0000ac d00d BEQ |L3.202|
0000ae 0928 LSRS r0,r5,#4 ;327
0000b0 f8380010 LDRH r0,[r8,r0,LSL #1] ;327
0000b4 8020 STRH r0,[r4,#0] ;327
0000b6 f1b90f00 CMP r9,#0 ;328
0000ba d006 BEQ |L3.202|
0000bc f8d90008 LDR r0,[r9,#8] ;329
0000c0 465a MOV r2,r11 ;329
0000c2 6803 LDR r3,[r0,#0] ;329
0000c4 4651 MOV r1,r10 ;329
0000c6 4648 MOV r0,r9 ;329
0000c8 4798 BLX r3 ;329
|L3.202|
0000ca f015000f ANDS r0,r5,#0xf ;333
0000ce d00d BEQ |L3.236|
0000d0 f8380010 LDRH r0,[r8,r0,LSL #1] ;334
0000d4 8060 STRH r0,[r4,#2] ;334
0000d6 f1b90f00 CMP r9,#0 ;335
0000da d007 BEQ |L3.236|
0000dc f8d90008 LDR r0,[r9,#8] ;336
0000e0 465a MOV r2,r11 ;336
0000e2 6803 LDR r3,[r0,#0] ;336
0000e4 f10a0101 ADD r1,r10,#1 ;336
0000e8 4648 MOV r0,r9 ;336
0000ea 4798 BLX r3 ;336
|L3.236|
0000ec 1d24 ADDS r4,r4,#4 ;339
0000ee f10a0a02 ADD r10,r10,#2 ;340
0000f2 1eb6 SUBS r6,r6,#2 ;341
|L3.244|
0000f4 f8175f01 LDRB r5,[r7,#1]! ;321
|L3.248|
0000f8 2e02 CMP r6,#2 ;324
0000fa dad6 BGE |L3.170|
0000fc 2e00 CMP r6,#0 ;345
0000fe d0d2 BEQ |L3.166|
000100 0928 LSRS r0,r5,#4 ;346
000102 d0d0 BEQ |L3.166|
000104 f8380010 LDRH r0,[r8,r0,LSL #1] ;347
000108 8020 STRH r0,[r4,#0] ;347
00010a f1b90f00 CMP r9,#0 ;348
00010e d0ca BEQ |L3.166|
000110 f8d90008 LDR r0,[r9,#8] ;349
000114 465a MOV r2,r11 ;349
000116 6803 LDR r3,[r0,#0] ;349
000118 4651 MOV r1,r10 ;349
00011a 4648 MOV r0,r9 ;349
00011c e8bd5ff0 POP {r4-r12,lr} ;349
000120 4718 BX r3 ;349
000122 e7ff B |L3.292|
|L3.292|
000124 42b0 CMP r0,r6 ;356
000126 dd00 BLE |L3.298|
000128 b2f0 UXTB r0,r6 ;357
|L3.298|
00012a 1a36 SUBS r6,r6,r0 ;358
|L3.300|
00012c 09a9 LSRS r1,r5,#6 ;360
00012e d003 BEQ |L3.312|
000130 8821 LDRH r1,[r4,#0] ;361
000132 f08101ff EOR r1,r1,#0xff ;361
000136 8021 STRH r1,[r4,#0] ;361
|L3.312|
000138 0729 LSLS r1,r5,#28 ;363
00013a 1ca4 ADDS r4,r4,#2 ;363
00013c 0e0d LSRS r5,r1,#24 ;364
00013e 1e40 SUBS r0,r0,#1 ;365
000140 f01000ff ANDS r0,r0,#0xff ;365
000144 d1f2 BNE |L3.300|
000146 2e00 CMP r6,#0 ;366
000148 d0ad BEQ |L3.166|
00014a 2002 MOVS r0,#2 ;367
00014c f8175f01 LDRB r5,[r7,#1]! ;368
000150 e7e8 B |L3.292|
;;;374
ENDP
000152 0000 DCW 0x0000
|L3.340|
DCD GUI_Context
AREA ||i._DrawBitmap||, CODE, READONLY, ALIGN=2
_DrawBitmap PROC
;;;449 */
;;;450 static void _DrawBitmap(int x0, int y0, int xsize, int ysize,
000000 e92d4fff PUSH {r0-r11,lr}
;;;451 int BitsPerPixel, int BytesPerLine,
;;;452 const U8 GUI_UNI_PTR * pData, int Diff, const LCD_PIXELINDEX* pTrans)
;;;453 {
000004 b087 SUB sp,sp,#0x1c
000006 4605 MOV r5,r0
;;;454 int i;
;;;455 GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
000008 488b LDR r0,|L4.568|
00000a e9dd8b16 LDRD r8,r11,[sp,#0x58]
00000e 468a MOV r10,r1 ;453
000010 f9b0004c LDRSH r0,[r0,#0x4c] ; GUI_Context
000014 9e14 LDR r6,[sp,#0x50]
000016 f7fffffe BL GUI_ALLOC_h2p
00001a 4681 MOV r9,r0
;;;456 GUI_USAGE* pUsage = (pDev->hUsage) ? GUI_USAGE_H2P(pDev->hUsage) : 0;
00001c f9b00018 LDRSH r0,[r0,#0x18]
000020 b108 CBZ r0,|L4.38|
000022 f7fffffe BL GUI_ALLOC_h2p
|L4.38|
000026 0004 MOVS r4,r0
;;;457 unsigned BytesPerLineDest;
;;;458 PIXELINDEX* pDest;
;;;459 BytesPerLineDest = pDev->BytesPerLine;
;;;460 x0 += Diff;
000028 eb05000b ADD r0,r5,r11
00002c f8d9100c LDR r1,[r9,#0xc]
;;;461 /* Mark all affected pixels dirty unless transparency is set */
;;;462 if (pUsage) {
000030 e9cd1006 STRD r1,r0,[sp,#0x18]
000034 d00b BEQ |L4.78|
;;;463 if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0) {
000036 4880 LDR r0,|L4.568|
000038 7b00 LDRB r0,[r0,#0xc] ; GUI_Context
00003a 0780 LSLS r0,r0,#30
00003c d407 BMI |L4.78|
;;;464 GUI_USAGE_AddRect(pUsage, x0, y0 , xsize, ysize);
00003e 9b0a LDR r3,[sp,#0x28]
000040 9300 STR r3,[sp,#0]
000042 4652 MOV r2,r10
000044 4620 MOV r0,r4
000046 9b09 LDR r3,[sp,#0x24]
000048 9907 LDR r1,[sp,#0x1c]
00004a f7fffffe BL GUI_USAGE_AddRect
|L4.78|
;;;465 }
;;;466 }
;;;467 pDest = _XY2PTR(x0, y0);
00004e 4651 MOV r1,r10
000050 9807 LDR r0,[sp,#0x1c]
000052 f7fffffe BL _XY2PTR
000056 4607 MOV r7,r0
;;;468 #if BITSPERPIXEL == 16
;;;469 /* handle 16 bpp bitmaps in high color modes, but only without palette */
;;;470 if (BitsPerPixel == 16) {
000058 2e10 CMP r6,#0x10
00005a d13a BNE |L4.210|
;;;471 for (i = 0; i < ysize; i++) {
00005c 2000 MOVS r0,#0
00005e e031 B |L4.196|
|L4.96|
;;;472 _DrawBitLine16BPP_DDB(pUsage, x0, i + y0, (const U16*)pData, xsize, pDest);
000060 9807 LDR r0,[sp,#0x1c]
000062 9004 STR r0,[sp,#0x10]
000064 eb0b000a ADD r0,r11,r10
000068 9005 STR r0,[sp,#0x14]
00006a 4873 LDR r0,|L4.568|
00006c f8dd9024 LDR r9,[sp,#0x24]
000070 7b00 LDRB r0,[r0,#0xc] ; GUI_Context
000072 4646 MOV r6,r8
000074 463d MOV r5,r7
000076 f0100003 ANDS r0,r0,#3
00007a d002 BEQ |L4.130|
00007c 2802 CMP r0,#2
00007e d11b BNE |L4.184|
000080 e006 B |L4.144|
|L4.130|
000082 ea4f0249 LSL r2,r9,#1
000086 4631 MOV r1,r6
000088 4628 MOV r0,r5
00008a f7fffffe BL __aeabi_memcpy
00008e e013 B |L4.184|
|L4.144|
000090 8830 LDRH r0,[r6,#0]
000092 b138 CBZ r0,|L4.164|
000094 8028 STRH r0,[r5,#0]
000096 b12c CBZ r4,|L4.164|
000098 68a0 LDR r0,[r4,#8]
00009a e9dd1204 LDRD r1,r2,[sp,#0x10]
00009e 6803 LDR r3,[r0,#0]
0000a0 4620 MOV r0,r4
0000a2 4798 BLX r3
|L4.164|
0000a4 9804 LDR r0,[sp,#0x10]
0000a6 1cad ADDS r5,r5,#2
0000a8 1c40 ADDS r0,r0,#1
0000aa 9004 STR r0,[sp,#0x10]
0000ac 1cb6 ADDS r6,r6,#2
0000ae f1a90001 SUB r0,r9,#1
0000b2 ea5f0900 MOVS r9,r0
0000b6 d1eb BNE |L4.144|
|L4.184|
;;;473 pData += BytesPerLine;
;;;474 pDest = (PIXELINDEX*)((U8*)pDest + BytesPerLineDest);
0000b8 9806 LDR r0,[sp,#0x18]
0000ba 9915 LDR r1,[sp,#0x54] ;473
0000bc 4407 ADD r7,r7,r0
0000be 4488 ADD r8,r8,r1 ;473
0000c0 f10b0001 ADD r0,r11,#1 ;471
|L4.196|
0000c4 990a LDR r1,[sp,#0x28] ;471
0000c6 4683 MOV r11,r0 ;471
0000c8 4288 CMP r0,r1 ;471
0000ca dbc9 BLT |L4.96|
|L4.204|
;;;475 }
;;;476 return;
;;;477 }
;;;478 #endif
;;;479 /* Handle 8 bpp bitmaps seperately as we have different routine bitmaps with or without palette */
;;;480 if (BitsPerPixel == 8) {
;;;481 for (i = 0; i < ysize; i++) {
;;;482 if (pTrans) {
;;;483 _DrawBitLine8BPP(pUsage, x0, i + y0, pData, xsize, pTrans, pDest);
;;;484 } else {
;;;485 _DrawBitLine8BPP_DDB(pUsage, x0, i + y0, pData, xsize, pDest);
;;;486 }
;;;487 pData += BytesPerLine;
;;;488 pDest = (PIXELINDEX*)((U8*)pDest + BytesPerLineDest);
;;;489 }
;;;490 return;
;;;491 }
;;;492 /* Use aID for bitmaps without palette */
;;;493 if (!pTrans) {
;;;494 pTrans = aID;
;;;495 }
;;;496 for (i = 0; i < ysize; i++) {
;;;497 switch (BitsPerPixel) {
;;;498 case 1:
;;;499 _DrawBitLine1BPP(pUsage, x0, i + y0, pData, Diff, xsize, pTrans, pDev, pDest);
;;;500 break;
;;;501 case 2:
;;;502 _DrawBitLine2BPP(pUsage, x0, i + y0, pData, Diff, xsize, pTrans, pDest);
;;;503 break;
;;;504 case 4:
;;;505 _DrawBitLine4BPP(pUsage, x0, i + y0, pData, Diff, xsize, pTrans, pDest);
;;;506 break;
;;;507 }
;;;508 pData += BytesPerLine;
;;;509 pDest = (PIXELINDEX*)((U8*)pDest + BytesPerLineDest);
;;;510 }
;;;511 }
0000cc b00b ADD sp,sp,#0x2c
0000ce e8bd8ff0 POP {r4-r11,pc}
|L4.210|
0000d2 2e08 CMP r6,#8 ;480
0000d4 d170 BNE |L4.440|
0000d6 2000 MOVS r0,#0 ;481
0000d8 e068 B |L4.428|
|L4.218|
0000da 9818 LDR r0,[sp,#0x60] ;482
0000dc 2800 CMP r0,#0 ;482
0000de 9807 LDR r0,[sp,#0x1c] ;483
0000e0 9004 STR r0,[sp,#0x10] ;482
0000e2 d034 BEQ |L4.334|
0000e4 eb0b000a ADD r0,r11,r10 ;483
0000e8 9005 STR r0,[sp,#0x14] ;483
0000ea 4853 LDR r0,|L4.568|
0000ec f8dd9024 LDR r9,[sp,#0x24] ;483
0000f0 7b00 LDRB r0,[r0,#0xc] ;483 ; GUI_Context
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -