📄 font.lis
字号:
0112 ; uint8_t store_width;
0112 ; uint8_t *glyph_ptr;
0112 ; uint8_t *width_table_ptr;
0112 ; uint8_t *glyph_table_ptr;
0112 ; uint8_t glyph_beg, glyph_end;
0112 ; uint8_t fixedwidth;
0112 ; uint8_t inprogmem=0;//mine
0112 0024 clr R0
0114 088A std y+16,R0
0116 .dbline 94
0116 ;
0116 ; defaultheight = (fonts[font].glyph_height);//pgm_read_byte ( &(fonts[font].glyph_height) );
0116 8AE0 ldi R24,10
0118 0E8C ldd R0,y+30
011A 809D mul R24,R0
011C F001 movw R30,R0
011E 80E0 ldi R24,<_fonts+1
0120 90E0 ldi R25,>_fonts+1
0122 E80F add R30,R24
0124 F91F adc R31,R25
0126 E491 lpm R30,Z
0128 E98B std y+17,R30
012A .dbline 95
012A ; store_width = (fonts[font].store_width);//pgm_read_byte ( &(fonts[font].store_width) );
012A 8AE0 ldi R24,10
012C 0E8C ldd R0,y+30
012E 809D mul R24,R0
0130 F001 movw R30,R0
0132 80E0 ldi R24,<_fonts
0134 90E0 ldi R25,>_fonts
0136 E80F add R30,R24
0138 F91F adc R31,R25
013A E491 lpm R30,Z
013C EE87 std y+14,R30
013E .dbline 96
013E ; width_table_ptr = (uint8_t*)(fonts[font].width_table);//(uint8_t*) pgm_read_word( &(fonts[font].width_table) );
013E 8AE0 ldi R24,10
0140 0E8C ldd R0,y+30
0142 809D mul R24,R0
0144 F001 movw R30,R0
0146 80E0 ldi R24,<_fonts+5
0148 90E0 ldi R25,>_fonts+5
014A E80F add R30,R24
014C F91F adc R31,R25
014E 0590 lpm R0,Z+
0150 1490 lpm R1,Z
0152 F001 movw R30,R0
0154 FC87 std y+12,R31
0156 EB87 std y+11,R30
0158 .dbline 97
0158 ; glyph_table_ptr = (uint8_t*)(fonts[font].glyph_table);//(uint8_t*)pgm_read_word( &(fonts[font].glyph_table) );
0158 8AE0 ldi R24,10
015A 0E8C ldd R0,y+30
015C 809D mul R24,R0
015E F001 movw R30,R0
0160 80E0 ldi R24,<_fonts+2
0162 90E0 ldi R25,>_fonts+2
0164 E80F add R30,R24
0166 F91F adc R31,R25
0168 0590 lpm R0,Z+
016A 1490 lpm R1,Z
016C F001 movw R30,R0
016E FA87 std y+10,R31
0170 E987 std y+9,R30
0172 .dbline 98
0172 ; glyph_beg = (fonts[font].glyph_beg);//pgm_read_byte( &(fonts[font].glyph_beg) );
0172 8AE0 ldi R24,10
0174 0E8C ldd R0,y+30
0176 809D mul R24,R0
0178 F001 movw R30,R0
017A 80E0 ldi R24,<_fonts+7
017C 90E0 ldi R25,>_fonts+7
017E E80F add R30,R24
0180 F91F adc R31,R25
0182 E491 lpm R30,Z
0184 EF87 std y+15,R30
0186 .dbline 99
0186 ; glyph_end = (fonts[font].glyph_end);//pgm_read_byte( &(fonts[font].glyph_end) );
0186 8AE0 ldi R24,10
0188 0E8C ldd R0,y+30
018A 809D mul R24,R0
018C F001 movw R30,R0
018E 80E0 ldi R24,<_fonts+8
0190 90E0 ldi R25,>_fonts+8
0192 E80F add R30,R24
0194 F91F adc R31,R25
0196 4491 lpm R20,Z
0198 .dbline 100
0198 ; fixedwidth = (fonts[font].fixed_width);//pgm_read_byte( &(fonts[font].fixed_width) );
0198 8AE0 ldi R24,10
019A 0E8C ldd R0,y+30
019C 809D mul R24,R0
019E F001 movw R30,R0
01A0 80E0 ldi R24,<_fonts+4
01A2 90E0 ldi R25,>_fonts+4
01A4 E80F add R30,R24
01A6 F91F adc R31,R25
01A8 C490 lpm R12,Z
01AA .dbline 102
01AA ;
01AA ; if (inprogmem)
01AA 0888 ldd R0,y+16
01AC 0020 tst R0
01AE 31F0 breq L26
01B0 .dbline 103
01B0 ; glyph = pgm_read_byte(str);
01B0 08A1 ldd R16,y+32
01B2 19A1 ldd R17,y+33
01B4 0E940000 xcall _pgm_read_byte
01B8 E02E mov R14,R16
01BA 67C0 xjmp L29
01BC L26:
01BC .dbline 106
01BC ;
01BC ; else
01BC ; glyph = (uint8_t)*str;
01BC E8A1 ldd R30,y+32
01BE F9A1 ldd R31,y+33
01C0 E080 ldd R14,z+0
01C2 63C0 xjmp L29
01C4 L28:
01C4 .dbline 109
01C4 ;
01C4 ; while(glyph != 0x00) // while(*str != 0x00)
01C4 ; { /* check to make sure the symbol is a legal one */
01C4 .dbline 111
01C4 ; /* if not then just replace it with the default character */
01C4 ; if((glyph < glyph_beg) || (glyph > glyph_end))
01C4 0F84 ldd R0,y+15
01C6 E014 cp R14,R0
01C8 10F0 brlo L33
01CA 4E15 cp R20,R14
01CC 48F4 brsh L31
01CE L33:
01CE .dbline 112
01CE ; glyph = (fonts[font].glyph_def);//pgm_read_byte( &(fonts[font].glyph_def) ) ;
01CE 8AE0 ldi R24,10
01D0 0E8C ldd R0,y+30
01D2 809D mul R24,R0
01D4 F001 movw R30,R0
01D6 80E0 ldi R24,<_fonts+9
01D8 90E0 ldi R25,>_fonts+9
01DA E80F add R30,R24
01DC F91F adc R31,R25
01DE E490 lpm R14,Z
01E0 L31:
01E0 .dbline 115
01E0 ;
01E0 ; /* make zero based index into the font data arrays */
01E0 ; glyph -= glyph_beg;
01E0 0F84 ldd R0,y+15
01E2 E018 sub R14,R0
01E4 .dbline 116
01E4 ; if(fixedwidth == 0)
01E4 CC20 tst R12
01E6 51F4 brne L35
01E8 .dbline 118
01E8 ; // width=fonts[font].width_table[glyph]; /* get the variable width instead */
01E8 ; width=pgm_read_byte(width_table_ptr+glyph);
01E8 2B84 ldd R2,y+11
01EA 3C84 ldd R3,y+12
01EC 0E2D mov R16,R14
01EE 1127 clr R17
01F0 020D add R16,R2
01F2 131D adc R17,R3
01F4 0E940000 xcall _pgm_read_byte
01F8 A02E mov R10,R16
01FA 01C0 xjmp L36
01FC L35:
01FC .dbline 120
01FC ; else
01FC ; width = fixedwidth;
01FC AC2C mov R10,R12
01FE L36:
01FE .dbline 122
01FE ;
01FE ; height = defaultheight;
01FE 6989 ldd R22,y+17
0200 .dbline 124
0200 ; //glyph_ptr = fonts[font].glyph_table + ((unsigned int)glyph * (unsigned int)store_width * (unsigned int)height);
0200 ; glyph_ptr = glyph_table_ptr + ((unsigned int)glyph * (unsigned int)store_width * (unsigned int)height) ;
0200 0E84 ldd R0,y+14
0202 E09C mul R14,R0
0204 069E mul R0,R22
0206 1001 movw R2,R0
0208 4984 ldd R4,y+9
020A 5A84 ldd R5,y+10
020C 240C add R2,R4
020E 351C adc R3,R5
0210 3886 std y+8,R3
0212 2F82 std y+7,R2
0214 .dbline 127
0214 ;
0214 ; /* range check / limit things here */
0214 ; if(x > SCRN_RIGHT)
0214 8FE7 ldi R24,127
0216 0D84 ldd R0,y+13
0218 8015 cp R24,R0
021A 08F4 brsh L37
021C .dbline 128
021C ; x = SCRN_RIGHT;
021C 8D87 std y+13,R24
021E L37:
021E .dbline 130
021E ;
021E ; if((x + width) > SCRN_RIGHT+1)
021E 2D84 ldd R2,y+13
0220 2A0C add R2,R10
0222 80E8 ldi R24,128
0224 8215 cp R24,R2
0226 28F4 brsh L39
0228 .dbline 131
0228 ; width = SCRN_RIGHT - x + 1;
0228 8FE7 ldi R24,127
022A 0D84 ldd R0,y+13
022C 8019 sub R24,R0
022E 8F5F subi R24,255 ; addi 1
0230 A82E mov R10,R24
0232 L39:
0232 .dbline 133
0232 ;
0232 ; if(top > SCRN_BOTTOM)
0232 8FE3 ldi R24,63
0234 0C8C ldd R0,y+28
0236 8015 cp R24,R0
0238 08F4 brsh L41
023A .dbline 134
023A ; top = SCRN_BOTTOM;
023A 8C8F std y+28,R24
023C L41:
023C .dbline 136
023C ;
023C ; if((top + height) > SCRN_BOTTOM+1)
023C 2C8C ldd R2,y+28
023E 260E add R2,R22
0240 80E4 ldi R24,64
0242 8215 cp R24,R2
0244 20F4 brsh L43
0246 .dbline 137
0246 ; height = SCRN_BOTTOM - top + 1;
0246 6FE3 ldi R22,63
0248 0C8C ldd R0,y+28
024A 6019 sub R22,R0
024C 6F5F subi R22,255 ; addi 1
024E L43:
024E .dbline 139
024E ;
024E ; lcd_glyph(x,top,width,height,glyph_ptr,store_width); /* plug symbol into buffer */
024E 0E84 ldd R0,y+14
0250 0E82 std y+6,R0
0252 2F80 ldd R2,y+7
0254 3884 ldd R3,y+8
0256 3D82 std y+5,R3
0258 2C82 std y+4,R2
025A 6A83 std y+2,R22
025C A882 std y+0,R10
025E 2C8D ldd R18,y+28
0260 0D85 ldd R16,y+13
0262 CEDE xcall _lcd_glyph
0264 .dbline 141
0264 ;
0264 ; x += width; /* move right for next character */
0264 0D84 ldd R0,y+13
0266 0A0C add R0,R10
0268 0D86 std y+13,R0
026A .dbline 142
026A ; str++; /* point to next character in string */
026A 88A1 ldd R24,y+32
026C 99A1 ldd R25,y+33
026E 0196 adiw R24,1
0270 99A3 std y+33,R25
0272 88A3 std y+32,R24
0274 .dbline 143
0274 ; if (inprogmem)
0274 0888 ldd R0,y+16
0276 0020 tst R0
0278 29F0 breq L45
027A .dbline 144
027A ; glyph = pgm_read_byte(str);
027A 8C01 movw R16,R24
027C 0E940000 xcall _pgm_read_byte
0280 E02E mov R14,R16
0282 03C0 xjmp L46
0284 L45:
0284 .dbline 146
0284 ; else
0284 ; glyph = (uint8_t)*str;
0284 E8A1 ldd R30,y+32
0286 F9A1 ldd R31,y+33
0288 E080 ldd R14,z+0
028A L46:
028A .dbline 148
028A L29:
028A .dbline 108
028A EE20 tst R14
028C 09F0 breq X2
028E 9ACF xjmp L28
0290 X2:
0290 .dbline -2
0290 L19:
0290 6296 adiw R28,18
0292 0E940000 xcall pop_gset5
0296 2296 adiw R28,2
0298 .dbline 0 ; func end
0298 0895 ret
029A .dbsym l width_table_ptr 11 pc
029A .dbsym r glyph_end 20 c
029A .dbsym l glyph_table_ptr 9 pc
029A .dbsym l defaultheight 17 c
029A .dbsym l inprogmem 16 c
029A .dbsym r fixedwidth 12 c
029A .dbsym l glyph_ptr 7 pc
029A .dbsym l glyph_beg 15 c
029A .dbsym l store_width 14 c
029A .dbsym r height 22 c
029A .dbsym r width 10 c
029A .dbsym l x 13 c
029A .dbsym r glyph 14 c
029A .dbsym l str 32 pc
029A .dbsym l font 30 c
029A .dbsym l top 28 c
029A .dbsym r left 20 c
029A .dbend
029A .dbfunc e lcd_text_p _lcd_text_p fV
029A ; width_table_ptr -> y+11
029A ; glyph_end -> R20
029A ; glyph_table_ptr -> y+9
029A ; defaultheight -> y+17
029A ; inprogmem -> y+16
029A ; fixedwidth -> R12
029A ; glyph_ptr -> y+7
029A ; glyph_beg -> y+15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -