📄 guidev_8.txt
字号:
00014e e7e9 B |L3.292|
;;;374
ENDP
|L3.336|
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 4604 MOV r4,r0
;;;454 int i;
;;;455 GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
000008 4861 LDR r0,|L4.400|
00000a e9dd7b17 LDRD r7,r11,[sp,#0x5c]
00000e f9b0004c LDRSH r0,[r0,#0x4c] ; GUI_Context
000012 f8dd9058 LDR r9,[sp,#0x58]
000016 9d14 LDR r5,[sp,#0x50]
000018 f7fffffe BL GUI_ALLOC_h2p
00001c 4682 MOV r10,r0
;;;456 GUI_USAGE* pUsage = (pDev->hUsage) ? GUI_USAGE_H2P(pDev->hUsage) : 0;
00001e f9b00018 LDRSH r0,[r0,#0x18]
000022 b108 CBZ r0,|L4.40|
000024 f7fffffe BL GUI_ALLOC_h2p
|L4.40|
000028 0006 MOVS r6,r0
;;;457 unsigned BytesPerLineDest;
;;;458 PIXELINDEX* pDest;
;;;459 BytesPerLineDest = pDev->BytesPerLine;
;;;460 x0 += Diff;
00002a eb040007 ADD r0,r4,r7
00002e f8da100c LDR r1,[r10,#0xc]
;;;461 /* Mark all affected pixels dirty unless transparency is set */
;;;462 if (pUsage) {
000032 e9cd1006 STRD r1,r0,[sp,#0x18]
000036 d00a BEQ |L4.78|
;;;463 if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0) {
000038 4855 LDR r0,|L4.400|
00003a 7b00 LDRB r0,[r0,#0xc] ; GUI_Context
00003c 0780 LSLS r0,r0,#30
00003e d406 BMI |L4.78|
;;;464 GUI_USAGE_AddRect(pUsage, x0, y0 , xsize, ysize);
000040 9b0a LDR r3,[sp,#0x28]
000042 9300 STR r3,[sp,#0]
000044 a907 ADD r1,sp,#0x1c
000046 c90e LDM r1,{r1-r3}
000048 4630 MOV r0,r6
00004a f7fffffe BL GUI_USAGE_AddRect
|L4.78|
;;;465 }
;;;466 }
;;;467 pDest = _XY2PTR(x0, y0);
00004e e9dd0107 LDRD r0,r1,[sp,#0x1c]
000052 f7fffffe BL _XY2PTR
000056 4680 MOV r8,r0
;;;468 #if BITSPERPIXEL == 16
;;;469 /* handle 16 bpp bitmaps in high color modes, but only without palette */
;;;470 if (BitsPerPixel == 16) {
;;;471 for (i = 0; i < ysize; i++) {
;;;472 _DrawBitLine16BPP_DDB(pUsage, x0, i + y0, (const U16*)pData, xsize, pDest);
;;;473 pData += BytesPerLine;
;;;474 pDest = (PIXELINDEX*)((U8*)pDest + BytesPerLineDest);
;;;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) {
000058 2d08 CMP r5,#8
00005a d15b BNE |L4.276|
;;;481 for (i = 0; i < ysize; i++) {
00005c 2000 MOVS r0,#0
00005e e052 B |L4.262|
|L4.96|
;;;482 if (pTrans) {
;;;483 _DrawBitLine8BPP(pUsage, x0, i + y0, pData, xsize, pTrans, pDest);
000060 9807 LDR r0,[sp,#0x1c]
000062 9908 LDR r1,[sp,#0x20]
000064 9004 STR r0,[sp,#0x10]
000066 eb0a0001 ADD r0,r10,r1
00006a 9005 STR r0,[sp,#0x14]
00006c 4848 LDR r0,|L4.400|
00006e 9f09 LDR r7,[sp,#0x24] ;482
000070 7b00 LDRB r0,[r0,#0xc] ;482 ; GUI_Context
000072 f1bb0f00 CMP r11,#0 ;482
000076 464c MOV r4,r9
000078 4645 MOV r5,r8
00007a f0000003 AND r0,r0,#3
00007e d021 BEQ |L4.196|
000080 b110 CBZ r0,|L4.136|
000082 2802 CMP r0,#2 ;482
000084 d139 BNE |L4.250|
000086 e009 B |L4.156|
|L4.136|
000088 f8141b01 LDRB r1,[r4],#1 ;482
00008c 4628 MOV r0,r5 ;482
00008e 1c6d ADDS r5,r5,#1 ;482
000090 f83b1011 LDRH r1,[r11,r1,LSL #1] ;482
000094 7001 STRB r1,[r0,#0] ;482
000096 1e7f SUBS r7,r7,#1 ;482
000098 d1f6 BNE |L4.136|
00009a e02e B |L4.250|
|L4.156|
00009c 7820 LDRB r0,[r4,#0] ;482
00009e b148 CBZ r0,|L4.180|
0000a0 f83b0010 LDRH r0,[r11,r0,LSL #1] ;482
0000a4 7028 STRB r0,[r5,#0] ;482
0000a6 b12e CBZ r6,|L4.180|
0000a8 68b0 LDR r0,[r6,#8] ;482
0000aa e9dd1204 LDRD r1,r2,[sp,#0x10] ;482
0000ae 6803 LDR r3,[r0,#0] ;482
0000b0 4630 MOV r0,r6 ;482
0000b2 4798 BLX r3 ;482
|L4.180|
0000b4 9804 LDR r0,[sp,#0x10] ;482
0000b6 1c6d ADDS r5,r5,#1 ;482
0000b8 1c40 ADDS r0,r0,#1 ;482
0000ba 1c64 ADDS r4,r4,#1 ;482
0000bc 9004 STR r0,[sp,#0x10] ;482
0000be 1e7f SUBS r7,r7,#1 ;482
0000c0 d1ec BNE |L4.156|
0000c2 e01a B |L4.250|
|L4.196|
0000c4 b110 CBZ r0,|L4.204|
0000c6 2802 CMP r0,#2 ;482
0000c8 d117 BNE |L4.250|
0000ca e005 B |L4.216|
|L4.204|
0000cc 463a MOV r2,r7 ;482
0000ce 4621 MOV r1,r4 ;482
0000d0 4628 MOV r0,r5 ;482
0000d2 f7fffffe BL __aeabi_memcpy
0000d6 e010 B |L4.250|
|L4.216|
0000d8 7820 LDRB r0,[r4,#0] ;482
0000da b138 CBZ r0,|L4.236|
0000dc 7028 STRB r0,[r5,#0] ;482
0000de b12e CBZ r6,|L4.236|
0000e0 68b0 LDR r0,[r6,#8] ;482
0000e2 e9dd1204 LDRD r1,r2,[sp,#0x10] ;482
0000e6 6803 LDR r3,[r0,#0] ;482
0000e8 4630 MOV r0,r6 ;482
0000ea 4798 BLX r3 ;482
|L4.236|
0000ec 9804 LDR r0,[sp,#0x10] ;482
0000ee 1c6d ADDS r5,r5,#1 ;482
0000f0 1c40 ADDS r0,r0,#1 ;482
0000f2 1c64 ADDS r4,r4,#1 ;482
0000f4 9004 STR r0,[sp,#0x10] ;482
0000f6 1e7f SUBS r7,r7,#1 ;482
0000f8 d1ee BNE |L4.216|
|L4.250|
;;;484 } else {
;;;485 _DrawBitLine8BPP_DDB(pUsage, x0, i + y0, pData, xsize, pDest);
;;;486 }
;;;487 pData += BytesPerLine;
0000fa 9915 LDR r1,[sp,#0x54]
0000fc f10a0001 ADD r0,r10,#1 ;481
000100 4489 ADD r9,r9,r1
;;;488 pDest = (PIXELINDEX*)((U8*)pDest + BytesPerLineDest);
000102 9906 LDR r1,[sp,#0x18]
000104 4488 ADD r8,r8,r1
|L4.262|
000106 990a LDR r1,[sp,#0x28] ;481
000108 4682 MOV r10,r0 ;481
00010a 4288 CMP r0,r1 ;481
00010c dba8 BLT |L4.96|
|L4.270|
;;;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 }
00010e b00b ADD sp,sp,#0x2c
000110 e8bd8ff0 POP {r4-r11,pc}
|L4.276|
000114 f1bb0f00 CMP r11,#0 ;493
000118 d101 BNE |L4.286|
00011a f8dfb078 LDR r11,|L4.404|
|L4.286|
00011e 2400 MOVS r4,#0 ;496
000120 e016 B |L4.336|
|L4.290|
000122 2d01 CMP r5,#1 ;497
000124 d018 BEQ |L4.344|
000126 2d02 CMP r5,#2 ;497
000128 d025 BEQ |L4.374|
00012a 2d04 CMP r5,#4 ;497
00012c d10b BNE |L4.326|
00012e e9cdb802 STRD r11,r8,[sp,#8] ;505
000132 9909 LDR r1,[sp,#0x24] ;505
000134 9808 LDR r0,[sp,#0x20] ;505
000136 e9cd7100 STRD r7,r1,[sp,#0] ;505
00013a 1822 ADDS r2,r4,r0 ;505
00013c 464b MOV r3,r9 ;505
00013e 4630 MOV r0,r6 ;505
000140 9907 LDR r1,[sp,#0x1c] ;505
000142 f7fffffe BL _DrawBitLine4BPP
|L4.326|
000146 9915 LDR r1,[sp,#0x54] ;508
000148 1c64 ADDS r4,r4,#1 ;496
00014a 4489 ADD r9,r9,r1 ;508
00014c 9906 LDR r1,[sp,#0x18] ;509
00014e 4488 ADD r8,r8,r1 ;509
|L4.336|
000150 980a LDR r0,[sp,#0x28] ;496
000152 4284 CMP r4,r0 ;496
000154 dbe5 BLT |L4.290|
000156 e7da B |L4.270|
|L4.344|
000158 9809 LDR r0,[sp,#0x24] ;499
00015a e9cdba02 STRD r11,r10,[sp,#8] ;499
00015e e9cd7000 STRD r7,r0,[sp,#0] ;499
000162 9808 LDR r0,[sp,#0x20] ;499
000164 f8cd8010 STR r8,[sp,#0x10] ;499
000168 1822 ADDS r2,r4,r0 ;499
00016a 464b MOV r3,r9 ;499
00016c 4630 MOV r0,r6 ;499
00016e 9907 LDR r1,[sp,#0x1c] ;499
000170 f7fffffe BL _DrawBitLine1BPP
000174 e7e7 B |L4.326|
|L4.374|
000176 e9cdb802 STRD r11,r8,[sp,#8] ;502
00017a 9909 LDR r1,[sp,#0x24] ;502
00017c 9808 LDR r0,[sp,#0x20] ;502
00017e e9cd7100 STRD r7,r1,[sp,#0] ;502
000182 1822 ADDS r2,r4,r0 ;502
000184 464b MOV r3,r9 ;502
000186 4630 MOV r0,r6 ;502
000188 9907 LDR r1,[sp,#0x1c] ;502
00018a f7fffffe BL _DrawBitLine2BPP
00018e e7da B |L4.326|
;;;512
ENDP
|L4.400|
DCD GUI_Context
|L4.404|
DCD ||.constdata||
AREA ||i._DrawHLine||, CODE, READONLY, ALIGN=1
_DrawHLine PROC
;;;557 */
;;;558 static void _DrawHLine(int x0, int y, int x1) {
000000 460b MOV r3,r1
;;;559 _FillRect(x0, y, x1, y);
000002 f7ffbffe B.W _FillRect
;;;560 }
;;;561
ENDP
AREA ||i._DrawVLine||, CODE, READONLY, ALIGN=2
_DrawVLine PROC
;;;565 */
;;;566 static void _DrawVLine(int x , int y0, int y1) {
000000 e92d4ff7 PUSH {r0-r2,r4-r11,lr}
;;;567 GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
000004 f8df809c LDR r8,|L6.164|
000008 460d MOV r5,r1 ;566
00000a 4692 MOV r10,r2 ;566
00000c f9b8004c LDRSH r0,[r8,#0x4c] ; GUI_Context
000010 f7fffffe BL GUI_ALLOC_h2p
;;;568 GUI_USAGE_h hUsage = pDev->hUsage;
000014 f9b09018 LDRSH r9,[r0,#0x18]
000018 4606 MOV r6,r0 ;567
;;;569 GUI_USAGE* pUsage = hUsage ? GUI_USAGE_H2P(hUsage) : NULL;
00001a ea5f0009 MOVS r0,r9
00001e d001 BEQ |L6.36|
000020 f7fffffe BL GUI_ALLOC_h2p
|L6.36|
000024 4683 MOV r11,r0
;;;570 PIXELINDEX* pData = _XY2PTR(x, y0);
000026 4629 MOV r1,r5
000028 9800 LDR r0,[sp,#0]
00002a f7fffffe BL _XY2PTR
00002e 4604 MOV r4,r0
;;;571 unsigned BytesPerLine = pDev->BytesPerLine;
;;;572
;;;573 if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
000030 f898000c LDRB r0,[r8,#0xc] ; GUI_Context
000034 68f7 LDR r7,[r6,#0xc]
000036 07c0 LSLS r0,r0,#31
000038 d016 BEQ |L6.104|
;;;574 PIXELINDEX IndexMask;
;;;575 IndexMask = pDev->pfGetIndexMask();
00003a 6a70 LDR r0,[r6,#0x24]
00003c 4780 BLX r0
00003e b2c7 UXTB r7,r0
|L6.64|
;;;576 do {
;;;577 if (hUsage) {
000040 f1b90f00 CMP r9,#0
000044 d006 BEQ |L6.84|
;;;578 GUI_USAGE_AddPixel(pUsage, x, y0);
000046 f8db0008 LDR r0,[r11,#8]
00004a 462a MOV r2,r5
00004c 6803 LDR r3,[r0,#0]
00004e 4658 MOV r0,r11
000050 9900 LDR r1,[sp,#0]
000052 4798 BLX r3
|L6.84|
;;;579 }
;;;580 *pData = *pData ^ IndexMask;
000054 7820 LDRB r0,[r4,#0]
;;;581 pData = (PIXELINDEX*)((U8*)pData + pDev->BytesPerLine); /* Same as "pData += pDev->BytesPerLine >> 1;", Just more efficient */
;;;582 } while (++y0 <= y1);
000056 1c6d ADDS r5,r5,#1
000058 4078 EORS r0,r0,r7 ;580
00005a 7020 STRB r0,[r4,#0] ;580
00005c 68f0 LDR r0,[r6,#0xc]
00005e 4555 CMP r5,r10
000060 4404 ADD r4,r4,r0 ;581
000062 dded BLE |L6.64|
|L6.100|
;;;583 } else {
;;;584 if (hUsage) {
;;;585 do {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -