📄 me.lst
字号:
__start:
__text_start:
0017 E5CF LDI R28,0x5F
0018 E0D4 LDI R29,4
0019 BFCD OUT 0x3D,R28
001A BFDE OUT 0x3E,R29
001B 51C0 SUBI R28,0x10
001C 40D0 SBCI R29,0
001D EA0A LDI R16,0xAA
001E 8308 STD Y+0,R16
001F 2400 CLR R0
0020 E6E7 LDI R30,0x67
0021 E0F0 LDI R31,0
0022 E010 LDI R17,0
0023 37E3 CPI R30,0x73
0024 07F1 CPC R31,R17
0025 F011 BEQ 0x0028
0026 9201 ST R0,Z+
0027 CFFB RJMP 0x0023
0028 8300 STD Z+0,R16
0029 E2E6 LDI R30,0x26
002A E0F0 LDI R31,0
002B E6A0 LDI R26,0x60
002C E0B0 LDI R27,0
002D E010 LDI R17,0
002E 32ED CPI R30,0x2D
002F 07F1 CPC R31,R17
0030 F021 BEQ 0x0035
0031 95C8 LPM
0032 9631 ADIW R30,1
0033 920D ST R0,X+
0034 CFF9 RJMP 0x002E
0035 D81A RCALL _main
_exit:
0036 CFFF RJMP _exit
_sc_cbk:
tm --> Y+8
b --> Y+6
g --> R22
r --> R20
0037 DC76 RCALL push_gset2
0038 2F62 MOV R22,R18
0039 2F40 MOV R20,R16
003A 9722 SBIW R28,2
FILE: E:\电子\ICCAVR\6610ME~1\lcd6610.c
(0001)
(0002) #define SCREEN_WIDTH 132 // Nokia6100, wobei aber nur 1,1-130,130 sichtbar sind. Denoch ben鰐igen wir vollen
(0003) #define SCREEN_HEIGHT 132 // Zugriff auf den RAM wenn wir zB. das Scrolling nutzen wollen
(0004) #define SCREEN_LEFT 1
(0005) #define SCREEN_TOP 1
(0006) #define SCREEN_RIGHT (SCREEN_WIDTH -2)
(0007) #define SCREEN_BOTTOM (SCREEN_HEIGHT -2)
(0008)
(0009) typedef struct {
(0010) unsigned char X1;
(0011) unsigned char Y1;
(0012) unsigned char X2;
(0013) unsigned char Y2;
(0014) } glcdRect_t;
(0015)
(0016) glcdRect_t glcd_Clip;
(0017) #define glcdDoSwapCoord(x, y) {unsigned char t = x; x = y; y = t;}
(0018) #define glcdDoCheckCoord(x, y) {if (x > y) {glcdDoSwapCoord(x, y)}}
(0019) #define glcdSetRect(r,x1,y1,x2,y2) {r.X1 = x1; r.Y1 = y1; r.X2 = x2; r.Y2 = y2;}
(0020)
(0021) unsigned char Color1=0,Color2=0;
(0022) unsigned char backgroundColor = RED,b2=0;
(0023) unsigned char memAccessCtrl=0,zx=0,zy=0;
(0024) int cbk,cfg,cfr,csh;
(0025)
(0026) void sc_cbk(unsigned char r,unsigned char g,unsigned char b,unsigned int tm)
(0027) {cbk= RGB(r,g,b)|(tm<<15);
003B 802E LDD R2,Y+6
003C 2433 CLR R3
003D 8239 STD Y+1,R3
003E 8228 STD Y+0,R2
003F 2F26 MOV R18,R22
0040 2733 CLR R19
0041 2F04 MOV R16,R20
0042 2711 CLR R17
0043 DB4F RCALL _RGB
0044 0118 MOVW R2,R16
0045 E02F LDI R18,0xF
0046 E030 LDI R19,0
0047 8508 LDD R16,Y+8
0048 8519 LDD R17,Y+9
0049 DC9E RCALL lsl16
004A 2A20 OR R2,R16
004B 2A31 OR R3,R17
004C 9230006E STS _cbk+1,R3
004E 9220006D STS _cbk,R2
(0028)
(0029) }
0050 9622 ADIW R28,2
0051 DC3F RCALL pop_gset2
0052 9508 RET
_sc_cfg:
tm --> Y+8
b --> Y+6
g --> R22
r --> R20
0053 DC5A RCALL push_gset2
0054 2F62 MOV R22,R18
0055 2F40 MOV R20,R16
0056 9722 SBIW R28,2
(0030)
(0031) void sc_cfg(unsigned char r,unsigned char g,unsigned char b,unsigned int tm)
(0032) {
(0033) cfg= RGB(r,g,b)|(tm<<15);
0057 802E LDD R2,Y+6
0058 2433 CLR R3
0059 8239 STD Y+1,R3
005A 8228 STD Y+0,R2
005B 2F26 MOV R18,R22
005C 2733 CLR R19
005D 2F04 MOV R16,R20
005E 2711 CLR R17
005F DB33 RCALL _RGB
0060 0118 MOVW R2,R16
0061 E02F LDI R18,0xF
0062 E030 LDI R19,0
0063 8508 LDD R16,Y+8
0064 8519 LDD R17,Y+9
0065 DC82 RCALL lsl16
0066 2A20 OR R2,R16
0067 2A31 OR R3,R17
0068 9230006C STS _cfg+1,R3
006A 9220006B STS _cfg,R2
(0034)
(0035) }
006C 9622 ADIW R28,2
006D DC23 RCALL pop_gset2
006E 9508 RET
_sc_cfr:
tm --> Y+8
b --> Y+6
g --> R22
r --> R20
006F DC3E RCALL push_gset2
0070 2F62 MOV R22,R18
0071 2F40 MOV R20,R16
0072 9722 SBIW R28,2
(0036)
(0037) void sc_cfr(unsigned char r,unsigned char g,unsigned char b,unsigned int tm)
(0038) {
(0039) cfr= RGB(r,g,b)|(tm<<15);
0073 802E LDD R2,Y+6
0074 2433 CLR R3
0075 8239 STD Y+1,R3
0076 8228 STD Y+0,R2
0077 2F26 MOV R18,R22
0078 2733 CLR R19
0079 2F04 MOV R16,R20
007A 2711 CLR R17
007B DB17 RCALL _RGB
007C 0118 MOVW R2,R16
007D E02F LDI R18,0xF
007E E030 LDI R19,0
007F 8508 LDD R16,Y+8
0080 8519 LDD R17,Y+9
0081 DC66 RCALL lsl16
0082 2A20 OR R2,R16
0083 2A31 OR R3,R17
0084 9230006A STS _cfr+1,R3
0086 92200069 STS _cfr,R2
(0040) }
0088 9622 ADIW R28,2
0089 DC07 RCALL pop_gset2
008A 9508 RET
_sc_csh:
tm --> Y+8
b --> Y+6
g --> R22
r --> R20
008B DC22 RCALL push_gset2
008C 2F62 MOV R22,R18
008D 2F40 MOV R20,R16
008E 9722 SBIW R28,2
(0041)
(0042) void sc_csh(unsigned char r,unsigned char g,unsigned char b,unsigned int tm)
(0043) {
(0044) csh= RGB(r,g,b)|(tm<<15);
008F 802E LDD R2,Y+6
0090 2433 CLR R3
0091 8239 STD Y+1,R3
0092 8228 STD Y+0,R2
0093 2F26 MOV R18,R22
0094 2733 CLR R19
0095 2F04 MOV R16,R20
0096 2711 CLR R17
0097 DAFB RCALL _RGB
0098 0118 MOVW R2,R16
0099 E02F LDI R18,0xF
009A E030 LDI R19,0
009B 8508 LDD R16,Y+8
009C 8519 LDD R17,Y+9
009D DC4A RCALL lsl16
009E 2A20 OR R2,R16
009F 2A31 OR R3,R17
00A0 92300068 STS _csh+1,R3
00A2 92200067 STS _csh,R2
(0045) }
00A4 9622 ADIW R28,2
00A5 DBEB RCALL pop_gset2
00A6 9508 RET
_glcdSetPixel:
y --> R22
x --> Y+10
00A7 DBA0 RCALL push_arg4
00A8 DC0E RCALL push_gset5
00A9 2F62 MOV R22,R18
(0046)
(0047) void glcdSetPixel(unsigned char x, unsigned char y) {
(0048)
(0049) if ((x >= glcd_Clip.X1) & (x <= glcd_Clip.X2) & (y >= glcd_Clip.Y1) & (y <= glcd_Clip.Y2)) {
00AA 9020006F LDS R2,_glcd_Clip
00AC 840A LDD R0,Y+10
00AD 1402 CP R0,R2
00AE F018 BCS 0x00B2
00AF E041 LDI R20,1
00B0 E050 LDI R21,0
00B1 C002 RJMP 0x00B4
00B2 2744 CLR R20
00B3 2755 CLR R21
00B4 90200071 LDS R2,_glcd_Clip+2
00B6 840A LDD R0,Y+10
00B7 1420 CP R2,R0
00B8 F020 BCS 0x00BD
00B9 E081 LDI R24,1
00BA E090 LDI R25,0
00BB 017C MOVW R14,R24
00BC C002 RJMP 0x00BF
00BD 24EE CLR R14
00BE 24FF CLR R15
00BF 90200070 LDS R2,_glcd_Clip+1
00C1 1562 CP R22,R2
00C2 F020 BCS 0x00C7
00C3 E081 LDI R24,1
00C4 E090 LDI R25,0
00C5 016C MOVW R12,R24
00C6 C002 RJMP 0x00C9
00C7 24CC CLR R12
00C8 24DD CLR R13
00C9 90200072 LDS R2,_glcd_Clip+3
00CB 1626 CP R2,R22
00CC F020 BCS 0x00D1
00CD E081 LDI R24,1
00CE E090 LDI R25,0
00CF 015C MOVW R10,R24
00D0 C002 RJMP 0x00D3
00D1 24AA CLR R10
00D2 24BB CLR R11
00D3 011A MOVW R2,R20
00D4 202E AND R2,R14
00D5 203F AND R3,R15
00D6 202C AND R2,R12
00D7 203D AND R3,R13
00D8 202A AND R2,R10
00D9 203B AND R3,R11
00DA 2022 TST R2
00DB F411 BNE 0x00DE
00DC 2033 TST R3
00DD F029 BEQ 0x00E3
(0050) point(x,y);
00DE 2F26 MOV R18,R22
00DF 2733 CLR R19
00E0 850A LDD R16,Y+10
00E1 2711 CLR R17
00E2 DAE0 RCALL _point
(0051) }
(0052) }
00E3 DBB1 RCALL pop_gset5
00E4 9624 ADIW R28,4
00E5 9508 RET
_glcdDoFillRect:
y --> R10
x --> R14
y2 --> R20
x2 --> Y+18
y1 --> Y+16
x1 --> Y+14
00E6 DB61 RCALL push_arg4
00E7 DBCF RCALL push_gset5
00E8 9724 SBIW R28,4
00E9 894C LDD R20,Y+20
(0053)
(0054) void glcdDoFillRect(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) {
(0055)
(0056) char x, y;
(0057) //RGB(r,g,b);
(0058)
(0059) if ((x1 > glcd_Clip.X2) | (x2 < glcd_Clip.X1) | (y1 > glcd_Clip.Y2) | (y2 < glcd_Clip.Y1)) {return;}
00EA 90200071 LDS R2,_glcd_Clip+2
00EC 840E LDD R0,Y+14
00ED 1420 CP R2,R0
00EE F420 BCC 0x00F3
00EF E081 LDI R24,1
00F0 E090 LDI R25,0
00F1 016C MOVW R12,R24
00F2 C002 RJMP 0x00F5
00F3 24CC CLR R12
00F4 24DD CLR R13
00F5 9020006F LDS R2,_glcd_Clip
00F7 880A LDD R0,Y+18
00F8 1402 CP R0,R2
00F9 F420 BCC 0x00FE
00FA E081 LDI R24,1
00FB E090 LDI R25,0
00FC 017C MOVW R14,R24
00FD C002 RJMP 0x0100
00FE 24EE CLR R14
00FF 24FF CLR R15
0100 90200072 LDS R2,_glcd_Clip+3
0102 8808 LDD R0,Y+16
0103 1420 CP R2,R0
0104 F420 BCC 0x0109
0105 E081 LDI R24,1
0106 E090 LDI R25,0
0107 015C MOVW R10,R24
0108 C002 RJMP 0x010B
0109 24AA CLR R10
010A 24BB CLR R11
010B 90200070 LDS R2,_glcd_Clip+1
010D 1542 CP R20,R2
010E F418 BCC 0x0112
010F E061 LDI R22,1
0110 E070 LDI R23,0
0111 C002 RJMP 0x0114
0112 2766 CLR R22
0113 2777 CLR R23
0114 0116 MOVW R2,R12
0115 282E OR R2,R14
0116 283F OR R3,R15
0117 282A OR R2,R10
0118 283B OR R3,R11
0119 2A26 OR R2,R22
011A 2A37 OR R3,R23
011B 2022 TST R2
011C F411 BNE 0x011F
011D 2033 TST R3
011E F009 BEQ 0x0120
011F C053 RJMP 0x0173
(0060) if (x1 < glcd_Clip.X1) {x1 = glcd_Clip.X1;}
0120 9020006F LDS R2,_glcd_Clip
0122 840E LDD R0,Y+14
0123 1402 CP R0,R2
0124 F408 BCC 0x0126
0125 862E STD Y+14,R2
(0061) if (y1 < glcd_Clip.Y1) {y1 = glcd_Clip.Y1;}
0126 90200070 LDS R2,_glcd_Clip+1
0128 8808 LDD R0,Y+16
0129 1402 CP R0,R2
012A F408 BCC 0x012C
012B 8A28 STD Y+16,R2
(0062) if (x2 > glcd_Clip.X2) {x2 = glcd_Clip.X2;}
012C 90200071 LDS R2,_glcd_Clip+2
012E 880A LDD R0,Y+18
012F 1420 CP R2,R0
0130 F408 BCC 0x0132
0131 8A2A STD Y+18,R2
(0063) if (y2 > glcd_Clip.Y2) {y2 = glcd_Clip.Y2;}
0132 90200072 LDS R2,_glcd_Clip+3
0134 1624 CP R2,R20
0135 F408 BCC 0x0137
0136 2D42 MOV R20,R2
(0064)
(0065) if ((x1 <= x2) & (y1 <= y2))
0137 880A LDD R0,Y+18
0138 850E LDD R16,Y+14
0139 1600 CP R0,R16
013A F018 BCS 0x013E
013B E061 LDI R22,1
013C E070 LDI R23,0
013D C002 RJMP 0x0140
013E 2766 CLR R22
013F 2777 CLR R23
0140 8808 LDD R0,Y+16
0141 1540 CP R20,R0
0142 F020 BCS 0x0147
0143 E081 LDI R24,1
0144 E090 LDI R25,0
0145 015C MOVW R10,R24
0146 C002 RJMP 0x0149
0147 24AA CLR R10
0148 24BB CLR R11
0149 011B MOVW R2,R22
014A 202A AND R2,R10
014B 203B AND R3,R11
014C 2022 TST R2
014D F411 BNE 0x0150
014E 2033 TST R3
014F F119 BEQ 0x0173
(0066) {
(0067) glcdn_SetPageArea(x1,x2,y1,y2);
0150 2E24 MOV R2,R20
0151 2433 CLR R3
0152 823B STD Y+3,R3
0153 822A STD Y+2,R2
0154 8828 LDD R2,Y+16
0155 2433 CLR R3
0156 8239 STD Y+1,R3
0157 8228 STD Y+0,R2
0158 892A LDD R18,Y+18
0159 2733 CLR R19
015A 850E LDD R16,Y+14
015B 2711 CLR R17
015C D9BB RCALL _glcdn_SetPageArea
(0068) glcdn_WriteCommand(MEMWRITE);
015D E50C LDI R16,0x5C
015E E010 LDI R17,0
015F DA26 RCALL _glcdn_WriteCommand
(0069) for (y = y1; y <= y2; y++) {
0160 88A8 LDD R10,Y+16
0161 C00F RJMP 0x0171
(0070) for (x = x1; x <= x2; x++) {
0162 84EE LDD R14,Y+14
0163 C009 RJMP 0x016D
(0071) glcdn_WriteData(Color1);
0164 91000060 LDS R16,0x60
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -