📄 font.lis
字号:
029A ; store_width -> y+14
029A ; height -> R22
029A ; width -> R10
029A ; x -> y+13
029A ; glyph -> R14
029A ; str -> y+32
029A ; font -> y+30
029A ; top -> y+28
029A ; left -> R20
.even
029A _lcd_text_p::
029A 3A93 st -y,r19
029C 2A93 st -y,r18
029E 0E940000 xcall push_gset5
02A2 402F mov R20,R16
02A4 6297 sbiw R28,18
02A6 .dbline -1
02A6 .dbline 151
02A6 ;
02A6 ; }
02A6 ; }
02A6 ; void lcd_text_p(uint8_t left, uint8_t top, uint8_t font, const char *str)
02A6 ; { uint8_t x = left;
02A6 .dbline 151
02A6 4D87 std y+13,R20
02A8 .dbline 161
02A8 ; uint8_t glyph;
02A8 ; uint8_t width;
02A8 ; uint8_t height, defaultheight;
02A8 ; uint8_t store_width;
02A8 ; uint8_t *glyph_ptr;
02A8 ; uint8_t *width_table_ptr;
02A8 ; uint8_t *glyph_table_ptr;
02A8 ; uint8_t glyph_beg, glyph_end;
02A8 ; uint8_t fixedwidth;
02A8 ; uint8_t inprogmem=1;//mine
02A8 0024 clr R0
02AA 0394 inc R0
02AC 088A std y+16,R0
02AE .dbline 163
02AE ;
02AE ; defaultheight = (fonts[font].glyph_height);//pgm_read_byte ( &(fonts[font].glyph_height) );
02AE 8AE0 ldi R24,10
02B0 0E8C ldd R0,y+30
02B2 809D mul R24,R0
02B4 F001 movw R30,R0
02B6 80E0 ldi R24,<_fonts+1
02B8 90E0 ldi R25,>_fonts+1
02BA E80F add R30,R24
02BC F91F adc R31,R25
02BE E491 lpm R30,Z
02C0 E98B std y+17,R30
02C2 .dbline 164
02C2 ; store_width = (fonts[font].store_width);//pgm_read_byte ( &(fonts[font].store_width) );
02C2 8AE0 ldi R24,10
02C4 0E8C ldd R0,y+30
02C6 809D mul R24,R0
02C8 F001 movw R30,R0
02CA 80E0 ldi R24,<_fonts
02CC 90E0 ldi R25,>_fonts
02CE E80F add R30,R24
02D0 F91F adc R31,R25
02D2 E491 lpm R30,Z
02D4 EE87 std y+14,R30
02D6 .dbline 165
02D6 ; width_table_ptr = (uint8_t*)(fonts[font].width_table);//(uint8_t*) pgm_read_word( &(fonts[font].width_table) );
02D6 8AE0 ldi R24,10
02D8 0E8C ldd R0,y+30
02DA 809D mul R24,R0
02DC F001 movw R30,R0
02DE 80E0 ldi R24,<_fonts+5
02E0 90E0 ldi R25,>_fonts+5
02E2 E80F add R30,R24
02E4 F91F adc R31,R25
02E6 0590 lpm R0,Z+
02E8 1490 lpm R1,Z
02EA F001 movw R30,R0
02EC FC87 std y+12,R31
02EE EB87 std y+11,R30
02F0 .dbline 166
02F0 ; glyph_table_ptr = (uint8_t*)(fonts[font].glyph_table);//(uint8_t*)pgm_read_word( &(fonts[font].glyph_table) );
02F0 8AE0 ldi R24,10
02F2 0E8C ldd R0,y+30
02F4 809D mul R24,R0
02F6 F001 movw R30,R0
02F8 80E0 ldi R24,<_fonts+2
02FA 90E0 ldi R25,>_fonts+2
02FC E80F add R30,R24
02FE F91F adc R31,R25
0300 0590 lpm R0,Z+
0302 1490 lpm R1,Z
0304 F001 movw R30,R0
0306 FA87 std y+10,R31
0308 E987 std y+9,R30
030A .dbline 167
030A ; glyph_beg = (fonts[font].glyph_beg);//pgm_read_byte( &(fonts[font].glyph_beg) );
030A 8AE0 ldi R24,10
030C 0E8C ldd R0,y+30
030E 809D mul R24,R0
0310 F001 movw R30,R0
0312 80E0 ldi R24,<_fonts+7
0314 90E0 ldi R25,>_fonts+7
0316 E80F add R30,R24
0318 F91F adc R31,R25
031A E491 lpm R30,Z
031C EF87 std y+15,R30
031E .dbline 168
031E ; glyph_end = (fonts[font].glyph_end);//pgm_read_byte( &(fonts[font].glyph_end) );
031E 8AE0 ldi R24,10
0320 0E8C ldd R0,y+30
0322 809D mul R24,R0
0324 F001 movw R30,R0
0326 80E0 ldi R24,<_fonts+8
0328 90E0 ldi R25,>_fonts+8
032A E80F add R30,R24
032C F91F adc R31,R25
032E 4491 lpm R20,Z
0330 .dbline 169
0330 ; fixedwidth = (fonts[font].fixed_width);//pgm_read_byte( &(fonts[font].fixed_width) );
0330 8AE0 ldi R24,10
0332 0E8C ldd R0,y+30
0334 809D mul R24,R0
0336 F001 movw R30,R0
0338 80E0 ldi R24,<_fonts+4
033A 90E0 ldi R25,>_fonts+4
033C E80F add R30,R24
033E F91F adc R31,R25
0340 C490 lpm R12,Z
0342 .dbline 171
0342 ;
0342 ; if (inprogmem)
0342 0888 ldd R0,y+16
0344 0020 tst R0
0346 31F0 breq L54
0348 .dbline 172
0348 ; glyph = pgm_read_byte(str);
0348 08A1 ldd R16,y+32
034A 19A1 ldd R17,y+33
034C 0E940000 xcall _pgm_read_byte
0350 E02E mov R14,R16
0352 67C0 xjmp L57
0354 L54:
0354 .dbline 175
0354 ;
0354 ; else
0354 ; glyph = (uint8_t)*str;
0354 E8A1 ldd R30,y+32
0356 F9A1 ldd R31,y+33
0358 E490 lpm R14,Z
035A 63C0 xjmp L57
035C L56:
035C .dbline 178
035C ;
035C ; while(glyph != 0x00) // while(*str != 0x00)
035C ; { /* check to make sure the symbol is a legal one */
035C .dbline 180
035C ; /* if not then just replace it with the default character */
035C ; if((glyph < glyph_beg) || (glyph > glyph_end))
035C 0F84 ldd R0,y+15
035E E014 cp R14,R0
0360 10F0 brlo L61
0362 4E15 cp R20,R14
0364 48F4 brsh L59
0366 L61:
0366 .dbline 181
0366 ; glyph = (fonts[font].glyph_def);//pgm_read_byte( &(fonts[font].glyph_def) ) ;
0366 8AE0 ldi R24,10
0368 0E8C ldd R0,y+30
036A 809D mul R24,R0
036C F001 movw R30,R0
036E 80E0 ldi R24,<_fonts+9
0370 90E0 ldi R25,>_fonts+9
0372 E80F add R30,R24
0374 F91F adc R31,R25
0376 E490 lpm R14,Z
0378 L59:
0378 .dbline 184
0378 ;
0378 ; /* make zero based index into the font data arrays */
0378 ; glyph -= glyph_beg;
0378 0F84 ldd R0,y+15
037A E018 sub R14,R0
037C .dbline 185
037C ; if(fixedwidth == 0)
037C CC20 tst R12
037E 51F4 brne L63
0380 .dbline 187
0380 ; // width=fonts[font].width_table[glyph]; /* get the variable width instead */
0380 ; width=pgm_read_byte(width_table_ptr+glyph);
0380 2B84 ldd R2,y+11
0382 3C84 ldd R3,y+12
0384 0E2D mov R16,R14
0386 1127 clr R17
0388 020D add R16,R2
038A 131D adc R17,R3
038C 0E940000 xcall _pgm_read_byte
0390 A02E mov R10,R16
0392 01C0 xjmp L64
0394 L63:
0394 .dbline 189
0394 ; else
0394 ; width = fixedwidth;
0394 AC2C mov R10,R12
0396 L64:
0396 .dbline 191
0396 ;
0396 ; height = defaultheight;
0396 6989 ldd R22,y+17
0398 .dbline 193
0398 ; //glyph_ptr = fonts[font].glyph_table + ((unsigned int)glyph * (unsigned int)store_width * (unsigned int)height);
0398 ; glyph_ptr = glyph_table_ptr + ((unsigned int)glyph * (unsigned int)store_width * (unsigned int)height) ;
0398 0E84 ldd R0,y+14
039A E09C mul R14,R0
039C 069E mul R0,R22
039E 1001 movw R2,R0
03A0 4984 ldd R4,y+9
03A2 5A84 ldd R5,y+10
03A4 240C add R2,R4
03A6 351C adc R3,R5
03A8 3886 std y+8,R3
03AA 2F82 std y+7,R2
03AC .dbline 196
03AC ;
03AC ; /* range check / limit things here */
03AC ; if(x > SCRN_RIGHT)
03AC 8FE7 ldi R24,127
03AE 0D84 ldd R0,y+13
03B0 8015 cp R24,R0
03B2 08F4 brsh L65
03B4 .dbline 197
03B4 ; x = SCRN_RIGHT;
03B4 8D87 std y+13,R24
03B6 L65:
03B6 .dbline 199
03B6 ;
03B6 ; if((x + width) > SCRN_RIGHT+1)
03B6 2D84 ldd R2,y+13
03B8 2A0C add R2,R10
03BA 80E8 ldi R24,128
03BC 8215 cp R24,R2
03BE 28F4 brsh L67
03C0 .dbline 200
03C0 ; width = SCRN_RIGHT - x + 1;
03C0 8FE7 ldi R24,127
03C2 0D84 ldd R0,y+13
03C4 8019 sub R24,R0
03C6 8F5F subi R24,255 ; addi 1
03C8 A82E mov R10,R24
03CA L67:
03CA .dbline 202
03CA ;
03CA ; if(top > SCRN_BOTTOM)
03CA 8FE3 ldi R24,63
03CC 0C8C ldd R0,y+28
03CE 8015 cp R24,R0
03D0 08F4 brsh L69
03D2 .dbline 203
03D2 ; top = SCRN_BOTTOM;
03D2 8C8F std y+28,R24
03D4 L69:
03D4 .dbline 205
03D4 ;
03D4 ; if((top + height) > SCRN_BOTTOM+1)
03D4 2C8C ldd R2,y+28
03D6 260E add R2,R22
03D8 80E4 ldi R24,64
03DA 8215 cp R24,R2
03DC 20F4 brsh L71
03DE .dbline 206
03DE ; height = SCRN_BOTTOM - top + 1;
03DE 6FE3 ldi R22,63
03E0 0C8C ldd R0,y+28
03E2 6019 sub R22,R0
03E4 6F5F subi R22,255 ; addi 1
03E6 L71:
03E6 .dbline 208
03E6 ;
03E6 ; lcd_glyph(x,top,width,height,glyph_ptr,store_width); /* plug symbol into buffer */
03E6 0E84 ldd R0,y+14
03E8 0E82 std y+6,R0
03EA 2F80 ldd R2,y+7
03EC 3884 ldd R3,y+8
03EE 3D82 std y+5,R3
03F0 2C82 std y+4,R2
03F2 6A83 std y+2,R22
03F4 A882 std y+0,R10
03F6 2C8D ldd R18,y+28
03F8 0D85 ldd R16,y+13
03FA 02DE xcall _lcd_glyph
03FC .dbline 210
03FC ;
03FC ; x += width; /* move right for next character */
03FC 0D84 ldd R0,y+13
03FE 0A0C add R0,R10
0400 0D86 std y+13,R0
0402 .dbline 211
0402 ; str++; /* point to next character in string */
0402 88A1 ldd R24,y+32
0404 99A1 ldd R25,y+33
0406 0196 adiw R24,1
0408 99A3 std y+33,R25
040A 88A3 std y+32,R24
040C .dbline 212
040C ; if (inprogmem)
040C 0888 ldd R0,y+16
040E 0020 tst R0
0410 29F0 breq L73
0412 .dbline 213
0412 ; glyph = pgm_read_byte(str);
0412 8C01 movw R16,R24
0414 0E940000 xcall _pgm_read_byte
0418 E02E mov R14,R16
041A 03C0 xjmp L74
041C L73:
041C .dbline 215
041C ; else
041C ; glyph = (uint8_t)*str;
041C E8A1 ldd R30,y+32
041E F9A1 ldd R31,y+33
0420 E490 lpm R14,Z
0422 L74:
0422 .dbline 217
0422 L57:
0422 .dbline 177
0422 EE20 tst R14
0424 09F0 breq X3
0426 9ACF xjmp L56
0428 X3:
0428 .dbline -2
0428 L47:
0428 6296 adiw R28,18
042A 0E940000 xcall pop_gset5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -