📄 guidev_8.txt
字号:
000074 7038 STRB r0,[r7,#0]
;;;233 if (pUsage) {
000076 f1bb0f00 CMP r11,#0
00007a d006 BEQ |L2.138|
;;;234 GUI_USAGE_AddPixel(pUsage, x, y);
00007c f8db0008 LDR r0,[r11,#8]
000080 4649 MOV r1,r9
000082 6803 LDR r3,[r0,#0]
000084 4658 MOV r0,r11
000086 9a02 LDR r2,[sp,#8]
000088 4798 BLX r3
|L2.138|
;;;235 }
;;;236 }
;;;237 pDest++;
;;;238 x++;
00008a 06a8 LSLS r0,r5,#26
00008c 1c7f ADDS r7,r7,#1 ;237
;;;239 pixels <<= 2;
00008e 0e05 LSRS r5,r0,#24
;;;240 } while (--PixelCnt);
000090 1e64 SUBS r4,r4,#1
000092 f1090901 ADD r9,r9,#1 ;238
000096 f01404ff ANDS r4,r4,#0xff
00009a d1e6 BNE |L2.106|
;;;241 if (xsize) {
00009c 2e00 CMP r6,#0
00009e d01d BEQ |L2.220|
;;;242 PixelCnt = 4;
;;;243 pixels = *(++p);
0000a0 f1080001 ADD r0,r8,#1
0000a4 2404 MOVS r4,#4 ;242
0000a6 4680 MOV r8,r0
0000a8 7805 LDRB r5,[r0,#0]
;;;244 goto PixelLoopTrans;
0000aa e7da B |L2.98|
|L2.172|
;;;245 }
;;;246 break;
;;;247 case LCD_DRAWMODE_XOR:;
;;;248 PixelLoopXor:
;;;249 if (PixelCnt > xsize)
0000ac 42b4 CMP r4,r6
0000ae dd00 BLE |L2.178|
;;;250 PixelCnt = xsize;
0000b0 b2f4 UXTB r4,r6
|L2.178|
;;;251 xsize -= PixelCnt;
0000b2 1b36 SUBS r6,r6,r4
|L2.180|
;;;252 do {
;;;253 if ((pixels & 0xc0))
0000b4 09a8 LSRS r0,r5,#6
0000b6 d002 BEQ |L2.190|
;;;254 *pDest ^= 255;
0000b8 7838 LDRB r0,[r7,#0]
0000ba 43c0 MVNS r0,r0
0000bc 7038 STRB r0,[r7,#0]
|L2.190|
;;;255 pDest++;
0000be 06a8 LSLS r0,r5,#26
0000c0 1c7f ADDS r7,r7,#1
;;;256 pixels <<= 2;
0000c2 0e05 LSRS r5,r0,#24
;;;257 } while (--PixelCnt);
0000c4 1e64 SUBS r4,r4,#1
0000c6 f01404ff ANDS r4,r4,#0xff
0000ca d1f3 BNE |L2.180|
;;;258 if (xsize) {
0000cc 2e00 CMP r6,#0
0000ce d005 BEQ |L2.220|
;;;259 PixelCnt = 4;
;;;260 pixels = *(++p);
0000d0 f1080001 ADD r0,r8,#1
0000d4 2404 MOVS r4,#4 ;259
0000d6 4680 MOV r8,r0
0000d8 7805 LDRB r5,[r0,#0]
;;;261 goto PixelLoopXor;
0000da e7e7 B |L2.172|
|L2.220|
;;;262 }
;;;263 break;
;;;264 }
;;;265 }
0000dc e8bd9fff POP {r0-r12,pc}
;;;266
ENDP
|L2.224|
DCD GUI_Context
AREA ||i._DrawBitLine4BPP||, CODE, READONLY, ALIGN=2
_DrawBitLine4BPP PROC
;;;270 */
;;;271 static void _DrawBitLine4BPP(GUI_USAGE* pUsage, int x, int y, const U8 GUI_UNI_PTR * p, int Diff, int xsize,
000000 e92d5ff0 PUSH {r4-r12,lr}
;;;272 const LCD_PIXELINDEX* pTrans, PIXELINDEX* pDest)
;;;273 {
000004 468a MOV r10,r1
;;;274 U8 pixels;
;;;275 U8 PixelCnt;
;;;276 PixelCnt = 2 - Diff;
000006 e9dd160a LDRD r1,r6,[sp,#0x28]
00000a 4693 MOV r11,r2 ;273
00000c 461f MOV r7,r3 ;273
;;;277 pixels = (*p) << (Diff << 2);
00000e 781b LDRB r3,[r3,#0]
;;;278 switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
000010 4a4f LDR r2,|L3.336|
000012 008d LSLS r5,r1,#2 ;277
000014 4681 MOV r9,r0 ;273
000016 40ab LSLS r3,r3,r5 ;277
000018 7b12 LDRB r2,[r2,#0xc] ; GUI_Context
00001a e9dd840c LDRD r8,r4,[sp,#0x30]
00001e f1c10002 RSB r0,r1,#2 ;276
000022 b2c0 UXTB r0,r0 ;276
000024 b2dd UXTB r5,r3 ;277
000026 f0120203 ANDS r2,r2,#3
00002a d01a BEQ |L3.98|
00002c 2a01 CMP r2,#1
00002e d079 BEQ |L3.292|
000030 2a02 CMP r2,#2
000032 d138 BNE |L3.166|
;;;279 /*
;;;280 * Write mode *
;;;281 */
;;;282 case 0:
;;;283 /* Draw incomplete bytes to the left of center area */
;;;284 if (Diff) {
;;;285 *pDest = *(pTrans + (pixels >> 4));
;;;286 pDest++;
;;;287 xsize--;
;;;288 pixels = *++p;
;;;289 }
;;;290 /* Draw center area (2 pixels in one byte) */
;;;291 if (xsize >= 2) {
;;;292 int i = xsize >> 1;
;;;293 xsize &= 1;
;;;294 do {
;;;295 *pDest = *(pTrans + (pixels >> 4)); /* Draw 1. (left) pixel */
;;;296 *(pDest+1) = *(pTrans + (pixels & 15)); /* Draw 2. (right) pixel */
;;;297 pDest += 2;
;;;298 pixels = *++p;
;;;299 } while (--i);
;;;300 }
;;;301 /* Draw incomplete bytes to the right of center area */
;;;302 if (xsize) {
;;;303 *pDest = * (pTrans + (pixels >> 4));
;;;304 }
;;;305 break;
;;;306 /*
;;;307 * Transparent draw mode *
;;;308 */
;;;309 case LCD_DRAWMODE_TRANS:
;;;310 /* Draw incomplete bytes to the left of center area */
;;;311 if (Diff) {
000034 2900 CMP r1,#0
000036 d05f BEQ |L3.248|
;;;312 if (pixels & 0xF0) {
000038 0928 LSRS r0,r5,#4
00003a d00d BEQ |L3.88|
;;;313 *pDest = *(pTrans + (pixels >> 4));
00003c 0929 LSRS r1,r5,#4
00003e f8380011 LDRH r0,[r8,r1,LSL #1]
000042 7020 STRB r0,[r4,#0]
;;;314 if (pUsage) {
000044 f1b90f00 CMP r9,#0
000048 d006 BEQ |L3.88|
;;;315 GUI_USAGE_AddPixel(pUsage, x, y);
00004a f8d90008 LDR r0,[r9,#8]
00004e 465a MOV r2,r11
000050 6803 LDR r3,[r0,#0]
000052 4651 MOV r1,r10
000054 4648 MOV r0,r9
000056 4798 BLX r3
|L3.88|
;;;316 }
;;;317 }
;;;318 pDest++;
000058 1c64 ADDS r4,r4,#1
;;;319 x++;
00005a f10a0a01 ADD r10,r10,#1
;;;320 xsize--;
00005e 1e76 SUBS r6,r6,#1
;;;321 pixels = *++p;
000060 e048 B |L3.244|
|L3.98|
000062 b139 CBZ r1,|L3.116|
000064 0929 LSRS r1,r5,#4 ;285
000066 f8380011 LDRH r0,[r8,r1,LSL #1] ;285
00006a f8040b01 STRB r0,[r4],#1 ;285
00006e f8175f01 LDRB r5,[r7,#1]! ;288
000072 1e76 SUBS r6,r6,#1 ;287
|L3.116|
000074 2e02 CMP r6,#2 ;291
000076 db10 BLT |L3.154|
000078 1070 ASRS r0,r6,#1 ;292
00007a f0060601 AND r6,r6,#1 ;293
|L3.126|
00007e 0929 LSRS r1,r5,#4 ;295
000080 f8381011 LDRH r1,[r8,r1,LSL #1] ;295
000084 7021 STRB r1,[r4,#0] ;295
000086 f005010f AND r1,r5,#0xf ;296
00008a f8381011 LDRH r1,[r8,r1,LSL #1] ;296
00008e 7061 STRB r1,[r4,#1] ;296
000090 1ca4 ADDS r4,r4,#2 ;297
000092 f8175f01 LDRB r5,[r7,#1]! ;298
000096 1e40 SUBS r0,r0,#1 ;299
000098 d1f1 BNE |L3.126|
|L3.154|
00009a 2e00 CMP r6,#0 ;302
00009c d003 BEQ |L3.166|
00009e 0929 LSRS r1,r5,#4 ;303
0000a0 f8380011 LDRH r0,[r8,r1,LSL #1] ;303
0000a4 7020 STRB r0,[r4,#0] ;303
|L3.166|
;;;322 }
;;;323 /* Draw center area (2 pixels in one byte) */
;;;324 while (xsize >= 2) {
;;;325 /* Draw 1. (left) pixel */
;;;326 if (pixels & 0xF0) {
;;;327 *pDest = *(pTrans + (pixels >> 4));
;;;328 if (pUsage) {
;;;329 GUI_USAGE_AddPixel(pUsage, x, y);
;;;330 }
;;;331 }
;;;332 /* Draw 2. (right) pixel */
;;;333 if (pixels &= 15) {
;;;334 *(pDest + 1) = *(pTrans + pixels);
;;;335 if (pUsage) {
;;;336 GUI_USAGE_AddPixel(pUsage, x + 1, y);
;;;337 }
;;;338 }
;;;339 pDest += 2;
;;;340 x += 2;
;;;341 xsize -= 2;
;;;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 7020 STRB 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 7060 STRB r0,[r4,#1] ;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 1ca4 ADDS r4,r4,#2 ;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 7020 STRB 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 d002 BEQ |L3.310|
000130 7821 LDRB r1,[r4,#0] ;361
000132 43c9 MVNS r1,r1 ;361
000134 7021 STRB r1,[r4,#0] ;361
|L3.310|
000136 0729 LSLS r1,r5,#28 ;363
000138 1c64 ADDS r4,r4,#1 ;363
00013a 0e0d LSRS r5,r1,#24 ;364
00013c 1e40 SUBS r0,r0,#1 ;365
00013e f01000ff ANDS r0,r0,#0xff ;365
000142 d1f3 BNE |L3.300|
000144 2e00 CMP r6,#0 ;366
000146 d0ae BEQ |L3.166|
000148 2002 MOVS r0,#2 ;367
00014a f8175f01 LDRB r5,[r7,#1]! ;368
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -