sdrv_puts.lst
来自「一种彩屏驱动以及画点,填充图片和填充数据的一些程序」· LST 代码 · 共 325 行 · 第 1/2 页
LST
325 行
\ 0040 FE0A CP 10
\ 0042 201A JR NZ,?0009
\ 0044 ?0005:
87 {
88 str++;
89 //region.x = 0;
90 region.x = rowNum_sav;
\ 0044 2B DEC HL
\ 0045 2B DEC HL
\ 0046 7E LD A,(HL)
\ 0047 320000 LD (region),A
91 region.y += StrHeight;
\ 004A 3A0000 LD A,(StrHeight)
\ 004D 47 LD B,A
\ 004E 3A0100 LD A,(region+1)
\ 0051 80 ADD A,B
\ 0052 320100 LD (region+1),A
92 lineNum_sav = region.y;//保存当前行顶的y轴坐标
\ 0055 2B DEC HL
\ 0056 77 LD (HL),A
93 if (AsciiSelect == FONT_TYPE_SMALL)
\ 0057 ?0007:
94 {
95 StrHeight = CHINESE_HEIGHT_DEF;//一行字符的高度
96 }
97 else
\ 0057 ?0008:
98 {
99 StrHeight = CHINESE_HEIGHT_DEF;//一行字符的高度
\ 0057 3E10 LD A,16
\ 0059 320000 LD (StrHeight),A
\ 005C DD23 INC IX
\ 005E ?0009:
\ 005E ?0006:
100 }
101
102 }
103
104 //汉字和ASCII的不同处理
105 if (*str >= FirstSectionCode)
\ 005E DD7E00 LD A,(IX+0)
\ 0061 FEA1 CP 161
\ 0063 380D JR C,?0011
\ 0065 ?0010:
106 {//汉字
107 code = *(int *)str;
\ 0065 DD6E00 LD L,(IX+0)
\ 0068 DD6601 LD H,(IX+1)
\ 006B E5 PUSH HL
\ 006C FDE1 POP IY
108 str++;//汉字指针要比ASCII多加一,
109 StrHeight = 16;//CHINESE_HEIGHT_DEF1;//把当前行的高度设为汉字的高度
\ 006E DD23 INC IX
\ 0070 1808 JR ?0023
110 }
111 else
\ 0072 ?0011:
112 {//ASCII
113 code = *str;
\ 0072 DD4E00 LD C,(IX+0)
\ 0075 0600 LD B,0
\ 0077 C5 PUSH BC
\ 0078 FDE1 POP IY
114 //这里保证ascii码与汉字下对齐
115 /*
116 if (AsciiSelect == FONT_TYPE_SMALL)
117 {
118 region.y += (StrHeight-ASCII_SMALL_HEIGHT_DEF);
119 }
120 else
121 {
122 region.y += (StrHeight-ASCII_LARGE_HEIGHT_DEF);
123 }
124 */
125 StrHeight =16;// CHINESE_HEIGHT_DEF1;//把当前行的高度设为汉字的高度
\ 007A ?0023:
\ 007A 3E10 LD A,16
\ 007C 320000 LD (StrHeight),A
\ 007F ?0012:
126 }
127 str++;
128 result = Sdrv_PutChar(code);
\ 007F FDE5 PUSH IY
\ 0081 D1 POP DE
\ 0082 CD0000 CALL Sdrv_PutChar
\ 0085 210400 LD HL,4
\ 0088 39 ADD HL,SP
\ 0089 77 LD (HL),A
129 if (!result) //输出字符
\ 008A AF XOR A
\ 008B B6 OR (HL)
\ 008C DD23 INC IX
\ 008E 2008 JR NZ,?0014
\ 0090 ?0013:
130 {
131 //当输出区域超出范围时退出
132 return lastcharpt;//返回上一个字符的指针,因为当前指针已加一了
\ 0090 2B DEC HL
\ 0091 2B DEC HL
\ 0092 46 LD B,(HL)
\ 0093 23 INC HL
\ 0094 66 LD H,(HL)
\ 0095 68 LD L,B
133 }
\ 0096 1822 JR ?0019
\ 0098 ?0014:
134 (unsigned char)strlen--;//不理负号直接减(因为0xff时表示显示全部)
\ 0098 23 INC HL
\ 0099 23 INC HL
\ 009A 35 DEC (HL)
135 region.y = lineNum_sav;//恢复当前行顶y的轴坐标
\ 009B 210000 LD HL,0
\ 009E 39 ADD HL,SP
\ 009F 7E LD A,(HL)
\ 00A0 320100 LD (region+1),A
136 //暂时不让某些地方显示过长
137 if ( ((unsigned char)strlen > 200) && (region.x > 188) )
\ 00A3 210600 LD HL,6
\ 00A6 39 ADD HL,SP
\ 00A7 3EC8 LD A,200
\ 00A9 BE CP (HL)
\ 00AA D21D00 JP NC,?0001
\ 00AD 3A0000 LD A,(region)
\ 00B0 47 LD B,A
\ 00B1 3EBC LD A,188
\ 00B3 B8 CP B
\ 00B4 D21D00 JP NC,?0001
\ 00B7 ?0018:
\ 00B7 ?0017:
\ 00B7 ?0015:
138 {
139 break;
\ 00B7 ?0016:
\ 00B7 ?0000:
140 }
141 }
142 return str;
\ 00B7 DDE5 PUSH IX
\ 00B9 E1 POP HL
143 }
\ 00BA ?0019:
\ 00BA F1 POP AF
\ 00BB F1 POP AF
\ 00BC F1 POP AF
\ 00BD F1 POP AF
\ 00BE DDE1 POP IX
\ 00C0 FDE1 POP IY
\ 00C2 C9 RET
\ 0000 RSEG IDATA0
\ 0000 StrHeight:
\ 0001 DEFS 1
\ 0000 RSEG CDATA0
\ 0000 08 DEFB 8
\ 0001 END
Errors: none
Warnings: none
Code size: 195
Constant size: 1
Static variable size: Data(1) Iram(0)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?