📄 sdrv_puts.lst
字号:
\ 0036 DDE5 PUSH IX
\ 0038 C1 POP BC
\ 0039 71 LD (HL),C
\ 003A 23 INC HL
\ 003B 70 LD (HL),B
85 //下面是碰到换行符时要作换行处理
86 if (*str == '\n')
\ 003C 0A LD A,(BC)
\ 003D FE0A CP 10
\ 003F 201A JR NZ,?0012
\ 0041 ?0008:
87 {
88 str++;
89 //region.x = 0;
90 region.x = rowNum_sav;
\ 0041 2B DEC HL
\ 0042 2B DEC HL
\ 0043 7E LD A,(HL)
\ 0044 320000 LD (region),A
91 region.y += StrHeight;
\ 0047 3A0000 LD A,(StrHeight)
\ 004A 47 LD B,A
\ 004B 3A0100 LD A,(region+1)
\ 004E 80 ADD A,B
\ 004F 320100 LD (region+1),A
92 lineNum_sav = region.y;//保存当前行顶的y轴坐标
\ 0052 2B DEC HL
\ 0053 77 LD (HL),A
93 if (AsciiSelect == FONT_TYPE_SMALL)
\ 0054 ?0010:
94 {
95 StrHeight = CHINESE_HEIGHT_DEF1;//一行字符的高度
96 }
97 else
\ 0054 ?0011:
98 {
99 StrHeight = CHINESE_HEIGHT_DEF1;//一行字符的高度
\ 0054 3E10 LD A,16
\ 0056 320000 LD (StrHeight),A
\ 0059 DD23 INC IX
\ 005B ?0012:
\ 005B ?0009:
100 }
101
102 }
103
104 //汉字和ASCII的不同处理
105 if (*str >= FirstSectionCode)
\ 005B DD7E00 LD A,(IX+0)
\ 005E FEA1 CP 161
\ 0060 380D JR C,?0014
\ 0062 ?0013:
106 {//汉字
107 code = *(int *)str;
\ 0062 DD6E00 LD L,(IX+0)
\ 0065 DD6601 LD H,(IX+1)
\ 0068 E5 PUSH HL
\ 0069 FDE1 POP IY
108 str++;//汉字指针要比ASCII多加一,
109 StrHeight = CHINESE_HEIGHT_DEF1;//把当前行的高度设为汉字的高度
\ 006B DD23 INC IX
\ 006D 1808 JR ?0024
110 }
111 else
\ 006F ?0014:
112 {//ASCII
113 code = *str;
\ 006F DD4E00 LD C,(IX+0)
\ 0072 0600 LD B,0
\ 0074 C5 PUSH BC
\ 0075 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 = CHINESE_HEIGHT_DEF1;//把当前行的高度设为汉字的高度
\ 0077 ?0024:
\ 0077 3E10 LD A,16
\ 0079 320000 LD (StrHeight),A
\ 007C ?0015:
126 }
127 str++;
128 result = Sdrv_PutChar(code);
\ 007C FDE5 PUSH IY
\ 007E D1 POP DE
\ 007F CD0000 CALL Sdrv_PutChar
\ 0082 210400 LD HL,4
\ 0085 39 ADD HL,SP
\ 0086 77 LD (HL),A
129 if (!result) //输出字符
\ 0087 AF XOR A
\ 0088 B6 OR (HL)
\ 0089 DD23 INC IX
\ 008B 2008 JR NZ,?0017
\ 008D ?0016:
130 {
131 //当输出区域超出范围时退出
132 return lastcharpt;//返回上一个字符的指针,因为当前指针已加一了
\ 008D 2B DEC HL
\ 008E 2B DEC HL
\ 008F 46 LD B,(HL)
\ 0090 23 INC HL
\ 0091 66 LD H,(HL)
\ 0092 68 LD L,B
133 }
\ 0093 1811 JR ?0018
\ 0095 ?0017:
134 (unsigned char)strlen--;//不理负号直接减(因为0xff时表示显示全部)
\ 0095 23 INC HL
\ 0096 23 INC HL
\ 0097 35 DEC (HL)
135 region.y = lineNum_sav;//恢复当前行顶y的轴坐标
\ 0098 210000 LD HL,0
\ 009B 39 ADD HL,SP
\ 009C 7E LD A,(HL)
\ 009D 320100 LD (region+1),A
\ 00A0 C31D00 JP ?0002
\ 00A3 ?0003:
136 //暂时不让某些地方显示过长
137 ///if ( ((unsigned char)strlen > 200) && (region.x > 188) )
138 //if ( ((unsigned char)strlen > 128) && (region.x > 120) )
139 //{
140 // break;
141 //}
142 }
143 return str;
\ 00A3 DDE5 PUSH IX
\ 00A5 E1 POP HL
144 }
\ 00A6 ?0018:
\ 00A6 F1 POP AF
\ 00A7 F1 POP AF
\ 00A8 F1 POP AF
\ 00A9 F1 POP AF
\ 00AA DDE1 POP IX
\ 00AC FDE1 POP IY
\ 00AE 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: 175
Constant size: 1
Static variable size: Data(1) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -