📄 guidev_16.txt
字号:
000034 42b4 CMP r4,r6
000036 dd00 BLE |L2.58|
;;;212 PixelCnt = xsize;
000038 b2f4 UXTB r4,r6
|L2.58|
;;;213 }
;;;214 xsize -= PixelCnt;
00003a 1b36 SUBS r6,r6,r4
|L2.60|
;;;215 do {
;;;216 *pDest++ = *(pTrans + (pixels >> 6));
00003c 09a8 LSRS r0,r5,#6
00003e f83a0010 LDRH r0,[r10,r0,LSL #1]
000042 f8270b02 STRH r0,[r7],#2
000046 06a8 LSLS r0,r5,#26
;;;217 pixels <<= 2;
000048 0e05 LSRS r5,r0,#24
;;;218 } while (--PixelCnt);
00004a 1e64 SUBS r4,r4,#1
00004c f01404ff ANDS r4,r4,#0xff
000050 d1f4 BNE |L2.60|
;;;219 if (xsize) {
000052 2e00 CMP r6,#0
000054 d043 BEQ |L2.222|
;;;220 PixelCnt = 4;
;;;221 pixels = *(++p);
000056 f1080001 ADD r0,r8,#1
00005a 2404 MOVS r4,#4 ;220
00005c 4680 MOV r8,r0
00005e 7805 LDRB r5,[r0,#0]
;;;222 goto PixelLoopWrite;
000060 e7e8 B |L2.52|
|L2.98|
;;;223 }
;;;224 break;
;;;225 case LCD_DRAWMODE_TRANS:
;;;226 PixelLoopTrans:
;;;227 if (PixelCnt > xsize)
000062 42b4 CMP r4,r6
000064 dd00 BLE |L2.104|
;;;228 PixelCnt = xsize;
000066 b2f4 UXTB r4,r6
|L2.104|
;;;229 xsize -= PixelCnt;
000068 1b36 SUBS r6,r6,r4
|L2.106|
;;;230 do {
;;;231 if (pixels & 0xc0) {
00006a 09a8 LSRS r0,r5,#6
00006c d00d BEQ |L2.138|
;;;232 *pDest = *(pTrans + (pixels >> 6));
00006e 09a8 LSRS r0,r5,#6
000070 f83a0010 LDRH r0,[r10,r0,LSL #1]
000074 8038 STRH 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 1cbf ADDS r7,r7,#2 ;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 d01e BEQ |L2.222|
;;;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 d003 BEQ |L2.192|
;;;254 *pDest ^= 255;
0000b8 8838 LDRH r0,[r7,#0]
0000ba f08000ff EOR r0,r0,#0xff
0000be 8038 STRH r0,[r7,#0]
|L2.192|
;;;255 pDest++;
0000c0 06a8 LSLS r0,r5,#26
0000c2 1cbf ADDS r7,r7,#2
;;;256 pixels <<= 2;
0000c4 0e05 LSRS r5,r0,#24
;;;257 } while (--PixelCnt);
0000c6 1e64 SUBS r4,r4,#1
0000c8 f01404ff ANDS r4,r4,#0xff
0000cc d1f2 BNE |L2.180|
;;;258 if (xsize) {
0000ce 2e00 CMP r6,#0
0000d0 d005 BEQ |L2.222|
;;;259 PixelCnt = 4;
;;;260 pixels = *(++p);
0000d2 f1080001 ADD r0,r8,#1
0000d6 2404 MOVS r4,#4 ;259
0000d8 4680 MOV r8,r0
0000da 7805 LDRB r5,[r0,#0]
;;;261 goto PixelLoopXor;
0000dc e7e6 B |L2.172|
|L2.222|
;;;262 }
;;;263 break;
;;;264 }
;;;265 }
0000de e8bd9fff POP {r0-r12,pc}
;;;266
ENDP
0000e2 0000 DCW 0x0000
|L2.228|
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 4a50 LDR r2,|L3.340|
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 8020 STRH 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 1ca4 ADDS r4,r4,#2
;;;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 f8240b02 STRH r0,[r4],#2 ;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 8021 STRH r1,[r4,#0] ;295
000086 f005010f AND r1,r5,#0xf ;296
00008a f8381011 LDRH r1,[r8,r1,LSL #1] ;296
00008e 8061 STRH r1,[r4,#2] ;296
000090 1d24 ADDS r4,r4,#4 ;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 8020 STRH 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -