📄 gui2dlib.txt
字号:
;;;489 GUI_LOCK();
;;;490 #if (GUI_WINSUPPORT)
;;;491 WM_ADDORG(x,y);
000002 4c0d LDR r4,|L10.56|
000004 6c22 LDR r2,[r4,#0x40] ; GUI_Context
000006 1815 ADDS r5,r2,r0
000008 6c60 LDR r0,[r4,#0x44] ; GUI_Context
00000a 1846 ADDS r6,r0,r1
;;;492 WM_ITERATE_START(NULL); {
00000c 2000 MOVS r0,#0
00000e f7fffffe BL WM__InitIVRSearch
000012 e009 B |L10.40|
|L10.20|
000014 f9b41028 LDRSH r1,[r4,#0x28] ; GUI_Context
000018 f9b40026 LDRSH r0,[r4,#0x26] ; GUI_Context
00001c 4633 MOV r3,r6
00001e 462a MOV r2,r5
000020 f7fffffe BL GL_DrawLine
;;;493 #endif
;;;494 GL_DrawLineToNM(x,y);
;;;495 #if (GUI_WINSUPPORT)
;;;496 } WM_ITERATE_END();
000024 f7fffffe BL WM__GetNextIVR
|L10.40|
000028 2800 CMP r0,#0
00002a d1f3 BNE |L10.20|
;;;497 #endif
;;;498 GL_MoveTo(x,y);
00002c 4631 MOV r1,r6
00002e 4628 MOV r0,r5
000030 e8bd4070 POP {r4-r6,lr}
000034 f7ffbffe B.W GL_MoveTo
;;;499 GUI_UNLOCK();
;;;500 }
;;;501
ENDP
|L10.56|
DCD GUI_Context
AREA ||i.GUI_DrawPoint||, CODE, READONLY, ALIGN=2
GUI_DrawPoint PROC
;;;675 */
;;;676 void GUI_DrawPoint(int x, int y) {
000000 b570 PUSH {r4-r6,lr}
;;;677 GUI_LOCK();
;;;678 #if (GUI_WINSUPPORT)
;;;679 WM_ADDORG(x, y);
000002 4a09 LDR r2,|L11.40|
000004 6c13 LDR r3,[r2,#0x40] ; GUI_Context
000006 181c ADDS r4,r3,r0
000008 6c50 LDR r0,[r2,#0x44] ; GUI_Context
00000a 1845 ADDS r5,r0,r1
;;;680 WM_ITERATE_START(NULL); {
00000c 2000 MOVS r0,#0
00000e f7fffffe BL WM__InitIVRSearch
000012 e005 B |L11.32|
|L11.20|
;;;681 #endif
;;;682 GL_DrawPoint(x, y);
000014 4629 MOV r1,r5
000016 4620 MOV r0,r4
000018 f7fffffe BL GL_DrawPoint
;;;683 #if (GUI_WINSUPPORT)
;;;684 } WM_ITERATE_END();
00001c f7fffffe BL WM__GetNextIVR
|L11.32|
000020 2800 CMP r0,#0
000022 d1f7 BNE |L11.20|
;;;685 #endif
;;;686 GUI_UNLOCK();
;;;687 }
000024 bd70 POP {r4-r6,pc}
;;;688
ENDP
000026 0000 DCW 0x0000
|L11.40|
DCD GUI_Context
AREA ||i.GUI_DrawPolygon||, CODE, READONLY, ALIGN=2
GUI_DrawPolygon PROC
;;;420 */
;;;421 void GUI_DrawPolygon(const GUI_POINT* pPoints, int NumPoints, int x0, int y0) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4606 MOV r6,r0
;;;422 GUI_LOCK();
;;;423 #if (GUI_WINSUPPORT)
;;;424 WM_ADDORG(x0,y0);
000006 480b LDR r0,|L12.52|
000008 460f MOV r7,r1 ;421
00000a 6c01 LDR r1,[r0,#0x40] ; GUI_Context
00000c 6c40 LDR r0,[r0,#0x44] ; GUI_Context
00000e 188c ADDS r4,r1,r2
000010 18c5 ADDS r5,r0,r3
;;;425 WM_ITERATE_START(NULL); {
000012 2000 MOVS r0,#0
000014 f7fffffe BL WM__InitIVRSearch
000018 e007 B |L12.42|
|L12.26|
;;;426 #endif
;;;427 GL_DrawPolygon (pPoints, NumPoints, x0, y0);
00001a 462b MOV r3,r5
00001c 4622 MOV r2,r4
00001e 4639 MOV r1,r7
000020 4630 MOV r0,r6
000022 f7fffffe BL GL_DrawPolygon
;;;428 #if (GUI_WINSUPPORT)
;;;429 } WM_ITERATE_END();
000026 f7fffffe BL WM__GetNextIVR
|L12.42|
00002a 2800 CMP r0,#0
00002c d1f5 BNE |L12.26|
;;;430 #endif
;;;431 GUI_UNLOCK();
;;;432 }
00002e e8bd81f0 POP {r4-r8,pc}
;;;433
ENDP
000032 0000 DCW 0x0000
|L12.52|
DCD GUI_Context
AREA ||i.GUI_DrawRect||, CODE, READONLY, ALIGN=2
GUI_DrawRect PROC
;;;555 */
;;;556 void GUI_DrawRect(int x0, int y0, int x1, int y1) {
000000 e92d41fc PUSH {r2-r8,lr}
;;;557 #if (GUI_WINSUPPORT)
;;;558 int Off;
;;;559 GUI_RECT r;
;;;560 #endif
;;;561 GUI_LOCK();
;;;562 #if (GUI_WINSUPPORT)
;;;563 Off = GUI_Context.PenSize -1;
000004 4c1c LDR r4,|L13.120|
;;;564 WM_ADDORG(x0,y0);
000006 6c25 LDR r5,[r4,#0x40] ; GUI_Context
000008 f894c014 LDRB r12,[r4,#0x14] ;563 ; GUI_Context
00000c 182e ADDS r6,r5,r0
00000e 6c60 LDR r0,[r4,#0x44] ; GUI_Context
;;;565 WM_ADDORG(x1,y1);
000010 18af ADDS r7,r5,r2
000012 f1ac0c01 SUB r12,r12,#1 ;563
000016 1844 ADDS r4,r0,r1 ;564
000018 18c5 ADDS r5,r0,r3
;;;566 r.x0 = x0 - Off;
00001a eba6000c SUB r0,r6,r12
00001e f8ad0000 STRH r0,[sp,#0]
;;;567 r.x1 = x1 + Off;
000022 eb07000c ADD r0,r7,r12
000026 f8ad0004 STRH r0,[sp,#4]
;;;568 r.y0 = y0 - Off;
00002a eba4000c SUB r0,r4,r12
00002e f8ad0002 STRH r0,[sp,#2]
;;;569 r.y1 = y1 + Off;
000032 eb05000c ADD r0,r5,r12
000036 f8ad0006 STRH r0,[sp,#6]
;;;570 WM_ITERATE_START(&r); {
00003a 4668 MOV r0,sp
00003c f7fffffe BL WM__InitIVRSearch
000040 e015 B |L13.110|
|L13.66|
000042 463a MOV r2,r7
000044 4621 MOV r1,r4
000046 4630 MOV r0,r6
000048 f7fffffe BL LCD_DrawHLine
00004c 463a MOV r2,r7
00004e 4629 MOV r1,r5
000050 4630 MOV r0,r6
000052 f7fffffe BL LCD_DrawHLine
000056 1e6a SUBS r2,r5,#1
000058 1c61 ADDS r1,r4,#1
00005a 4630 MOV r0,r6
00005c f7fffffe BL LCD_DrawVLine
000060 1e6a SUBS r2,r5,#1
000062 1c61 ADDS r1,r4,#1
000064 4638 MOV r0,r7
000066 f7fffffe BL LCD_DrawVLine
;;;571 #endif
;;;572 _DrawRect(x0, y0, x1, y1);
;;;573 #if (GUI_WINSUPPORT)
;;;574 } WM_ITERATE_END();
00006a f7fffffe BL WM__GetNextIVR
|L13.110|
00006e 2800 CMP r0,#0
000070 d1e7 BNE |L13.66|
;;;575 #endif
;;;576 GUI_UNLOCK();
;;;577 }
000072 e8bd81fc POP {r2-r8,pc}
;;;578
ENDP
000076 0000 DCW 0x0000
|L13.120|
DCD GUI_Context
AREA ||i.GUI_MoveRel||, CODE, READONLY, ALIGN=2
GUI_MoveRel PROC
;;;505 */
;;;506 void GUI_MoveRel(int dx, int dy) { /*tbd: GL_LinePos. */
000000 4a03 LDR r2,|L14.16|
;;;507 GUI_LOCK();
;;;508 GUI_Context.DrawPosX += dx;
000002 8cd3 LDRH r3,[r2,#0x26] ; GUI_Context
000004 4418 ADD r0,r0,r3
000006 84d0 STRH r0,[r2,#0x26]
;;;509 GUI_Context.DrawPosY += dy;
000008 8d10 LDRH r0,[r2,#0x28] ; GUI_Context
00000a 4408 ADD r0,r0,r1
00000c 8510 STRH r0,[r2,#0x28]
;;;510 GUI_UNLOCK();
;;;511 }
00000e 4770 BX lr
;;;512
ENDP
|L14.16|
DCD GUI_Context
AREA ||i.GUI_MoveTo||, CODE, READONLY, ALIGN=2
GUI_MoveTo PROC
;;;525 */
;;;526 void GUI_MoveTo(int x, int y) {
000000 4a03 LDR r2,|L15.16|
;;;527 GUI_LOCK();
;;;528 #if (GUI_WINSUPPORT)
;;;529 WM_ADDORG(x,y);
000002 6c13 LDR r3,[r2,#0x40] ; GUI_Context
000004 6c52 LDR r2,[r2,#0x44] ; GUI_Context
000006 4418 ADD r0,r0,r3
000008 4411 ADD r1,r1,r2
;;;530 #endif
;;;531 GL_MoveTo(x,y);
00000a f7ffbffe B.W GL_MoveTo
;;;532 GUI_UNLOCK();
;;;533 }
;;;534
ENDP
00000e 0000 DCW 0x0000
|L15.16|
DCD GUI_Context
AREA ||i.GUI_cos||, CODE, READONLY, ALIGN=1
GUI_cos PROC
;;;146 */
;;;147 int GUI_cos(int angle) {
000000 f5006080 ADD r0,r0,#0x400
;;;148 return GUI_sin(angle+GUI_90DEG);
000004 f7ffbffe B.W GUI_sin
;;;149 }
;;;150
ENDP
AREA ||i.GUI_sin||, CODE, READONLY, ALIGN=2
GUI_sin PROC
;;;105 */
;;;106 int GUI_sin(int angle) {
000000 b510 PUSH {r4,lr}
;;;107 char IsNeg =0;
000002 2200 MOVS r2,#0
;;;108 int i;
;;;109 U16 Faktor;
;;;110 U32 t;
;;;111 angle &= ((1<<12)-1); /* reduce to 0-360 degrees */
000004 f3c0000b UBFX r0,r0,#0,#12
;;;112 if (angle> 2* GUI_90DEG) {
000008 f5b06f00 CMP r0,#0x800
00000c dd02 BLE |L17.20|
;;;113 angle -= 2* GUI_90DEG;
00000e f5a06000 SUB r0,r0,#0x800
;;;114 IsNeg =1;
000012 2201 MOVS r2,#1
|L17.20|
;;;115 }
;;;116 if (angle> GUI_90DEG) { /* between 90-180 */
000014 f5b06f80 CMP r0,#0x400
000018 dd01 BLE |L17.30|
;;;117 angle = 2*GUI_90DEG-angle; /* use sine symetry */
00001a f5c06000 RSB r0,r0,#0x800
|L17.30|
;;;118 }
;;;119 /* Now angle is reduced to 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -