sdrv_puts_thai.lst
来自「一种彩屏驱动以及画点,填充图片和填充数据的一些程序」· LST 代码 · 共 273 行
LST
273 行
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 18/May/107 10:53:28 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = large #
# Source file = d:\case_i_d913f\drv\ui_ssd1332\sdrv_thai\sdrv_puts_thai.c#
# List file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_th\list\sdrv_puts_thai.lst#
# Object file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_th\obj\sdrv_puts_thai.r01#
# ASM file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_th\list\sdrv_puts_thai.s01#
# Command line = -v0 -ml -uu #
# -OD:\case_i_d913f\drv\Ui_SSD1332\ui_ssd13_th\Obj\ #
# -e -K -w -gA -s9 -RCODE -r0 -DIC3951 -DNAPDEBUG #
# -LD:\case_i_d913f\drv\Ui_SSD1332\ui_ssd13_th\List\ #
# -q -t8 #
# -AD:\case_i_d913f\drv\Ui_SSD1332\ui_ssd13_th\List\ #
# -Id:\sdk_i_913f\inc\ -Id:\case_i_d913f\inc\ #
# -Id:\case_i_d913f\drv\ui_ssd1332\inc\ #
# D:\CASE_I_D913F\DRV\UI_SSD1332\SDRV_THAI\sdrv_puts_thai.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME sdrv_puts_thai(16)
\ 0000 RSEG BBC_PUTS(0)
\ 0000 RSEG IDATA0(0)
\ 0000 RSEG CDATA0(0)
\ 0000 EXTERN AsciiSelect
\ 0000 EXTERN CheckSymbol
\ 0000 EXTERN NextSFlag
\ 0000 EXTERN Sdrv_PutChar
\ 0000 PUBLIC Sdrv_PutS
\ 0000 PUBLIC StrHeight
\ 0000 EXTERN region
\ 0000 EXTERN ?CLZ80L_4_04_L00
\ 0000 RSEG BBC_PUTS
\ 0000 Sdrv_PutS:
1 /*
2 ********************************************************************************
3 * ACTOS
4 * ui dirver show picture
5 *
6 * (c) Copyright 2002-2003, Actions Co,Ld.
7 * All Right Reserved
8 *
9 * File : Sdrv_PutS.c
10 * By : Rcmai
11 * Version: 1> v1.00 first version 10/17/2003 10:46PM
12 ********************************************************************************
13 */
14 #include "display.h"
15 #include "Drv_S6B33B0A.h"
16
17 #pragma memory=constseg(BBS_PUTS)
18 #pragma memory=default
19
20 #pragma memory=dataseg(BBD_PUTS)
21 #pragma memory=default
22
23 #pragma codeseg(BBC_PUTS)
24
25 //BYTE lineNum_sav;//行号记录
26
27 //如果一行都是small ascii则高度为8(默认),如有一行中有一个是汉字或是 large 模式 ascii
28 // 则高度都为 16
29 BYTE StrHeight = ASCII_SMALL_HEIGHT_DEF;//一行字的高度
30
31 ////*******************************************************************************/
32 ///*
33 //** FUNCTION: Sdrv_PutS
34 //**
35 //** Description: 在屏幕上输出一个字符串,如串的长度超过屏幕,则多出部分不显示
36 //** 指针停在最后一个能显示的字的下一个字符左上角,碰到回车或
37 //** 串尾时退出,碰到换行时从下一行开始显示
38 //** input
39 //** str: 字符串首址 ;
40 //** strlen: 字符串的长度
41 //**
42 //** output
43 //** none
44 //********************************************************************************/
45 non_banked char *Sdrv_PutS(const char *str, signed char strlen)
46 {
\ 0000 FDE5 PUSH IY
\ 0002 DDE5 PUSH IX
\ 0004 DD210000 LD IX,0
\ 0008 DD39 ADD IX,SP
\ 000A C5 PUSH BC
\ 000B F5 PUSH AF
\ 000C F5 PUSH AF
\ 000D F5 PUSH AF
\ 000E F5 PUSH AF
\ 000F D5 PUSH DE
\ 0010 FDE1 POP IY
47 int code;
48 //char nextcode;
49 char result;
50 char *lastcharpt;//记录上一个字符的指针
51 BYTE lineNum_sav,rowNum_sav;//行号记录
52
53 lineNum_sav = region.y;
\ 0012 3A0100 LD A,(region+1)
\ 0015 DD77F6 LD (IX-10),A
54 rowNum_sav = region.x;
\ 0018 3A0000 LD A,(region)
\ 001B DD77F7 LD (IX-9),A
55
56 //判断要输出的行的高度
57 //if (AsciiSelect == FONT_TYPE_SMALL)
58 //{
59 // StrHeight = ASCII_SMALL_HEIGHT_DEF;//一行字符的高度
60 //}
61 //else
62 //{
63 // StrHeight = ASCII_LARGE_HEIGHT_DEF;//一行字符的高度
64 //}
65
66 StrHeight = ASCII_LARGE_HEIGHT_DEF;//一行字符的高度
\ 001E 3E10 LD A,16
\ 0020 320000 LD (StrHeight),A
\ 0023 ?0001:
67
68 while ( (*str != '\r') //碰到回车时退出
69 && (*str != '\0') //碰到结束符时退出
70 && (strlen != NULL) ) //碰到字符长度为0时退出
\ 0023 FD7E00 LD A,(IY+0)
\ 0026 FE0D CP 13
\ 0028 287D JR Z,?0000
\ 002A AF XOR A
\ 002B FDB600 OR (IY+0)
\ 002E 2877 JR Z,?0000
\ 0030 AF XOR A
\ 0031 DDB6FE OR (IX-2)
\ 0034 2871 JR Z,?0000
\ 0036 ?0004:
\ 0036 ?0003:
\ 0036 ?0002:
71 {
72 lastcharpt = str;
\ 0036 FDE5 PUSH IY
\ 0038 E1 POP HL
\ 0039 DD75F8 LD (IX-8),L
\ 003C DD74F9 LD (IX-7),H
73 //下面是碰到换行符时要作换行处理
74 if (*str == '\n')
\ 003F FD7E00 LD A,(IY+0)
\ 0042 FE0A CP 10
\ 0044 201B JR NZ,?0009
\ 0046 ?0005:
75 {
76 str++;
77 //region.x = 0;
78 region.x = rowNum_sav;
\ 0046 DD7EF7 LD A,(IX-9)
\ 0049 320000 LD (region),A
79 region.y += StrHeight;
\ 004C 3A0000 LD A,(StrHeight)
\ 004F 47 LD B,A
\ 0050 3A0100 LD A,(region+1)
\ 0053 80 ADD A,B
\ 0054 320100 LD (region+1),A
80 lineNum_sav = region.y;//保存当前行顶的y轴坐标
\ 0057 DD77F6 LD (IX-10),A
81 if (AsciiSelect == FONT_TYPE_SMALL)
\ 005A ?0007:
82 {
83 StrHeight = CHINESE_HEIGHT_DEF;//一行字符的高度
84 }
85 else
\ 005A ?0008:
86 {
87 StrHeight = CHINESE_HEIGHT_DEF;//一行字符的高度
\ 005A 3E10 LD A,16
\ 005C 320000 LD (StrHeight),A
\ 005F FD23 INC IY
\ 0061 ?0009:
\ 0061 ?0006:
88 }
89
90 }
91
92 //汉字和ASCII的不同处理
93 if (*str >= 0xa0)
\ 0061 FD7E00 LD A,(IY+0)
\ 0064 FEA0 CP 160
\ 0066 380B JR C,?0011
\ 0068 ?0010:
94 {//汉字
95 //nextcode = *(str+1);
96 //if((nextcode == 0xd1)||((nextcode >= 0xd4)&&(nextcode <= 0xda))||
97 // ((nextcode >= 0xe7)&&(nextcode <= 0xee)))NextSFlag = 1;
98 //else NextSFlag = 0;
99 //NextSFlag = CheckSymbol(nextcode);
100 NextSFlag = CheckSymbol(*(str+1));
\ 0068 FD5E01 LD E,(IY+1)
\ 006B 1600 LD D,0
\ 006D CD0000 CALL CheckSymbol
\ 0070 320000 LD (NextSFlag),A
\ 0073 ?0011:
101 }
102 //else
103 //{//ASCII
104 code = *str;
\ 0073 FD5E00 LD E,(IY+0)
\ 0076 1600 LD D,0
105 StrHeight = 16;//CHINESE_HEIGHT_DEF+2;//把当前行的高度设为汉字的高度
\ 0078 3E10 LD A,16
\ 007A 320000 LD (StrHeight),A
106 //}
107 str++;
108 result = Sdrv_PutChar(code);
\ 007D CD0000 CALL Sdrv_PutChar
109 if (!result) //输出字符
\ 0080 B7 OR A
\ 0081 FD23 INC IY
\ 0083 2008 JR NZ,?0013
\ 0085 ?0012:
110 {
111 //当输出区域超出范围时退出
112 return lastcharpt;//返回上一个字符的指针,因为当前指针已加一了
\ 0085 DD6EF8 LD L,(IX-8)
\ 0088 DD66F9 LD H,(IX-7)
113 }
\ 008B 181D JR ?0018
\ 008D ?0013:
114 (unsigned char)strlen--;//不理负号直接减(因为0xff时表示显示全部)
\ 008D DD35FE DEC (IX-2)
115 region.y = lineNum_sav;//恢复当前行顶y的轴坐标
\ 0090 DD7EF6 LD A,(IX-10)
\ 0093 320100 LD (region+1),A
116 if ( ((unsigned char)strlen > 200) && (region.x > 188) )
\ 0096 3EC8 LD A,200
\ 0098 DDBEFE CP (IX-2)
\ 009B 3086 JR NC,?0001
\ 009D 3A0000 LD A,(region)
\ 00A0 47 LD B,A
\ 00A1 3EBC LD A,188
\ 00A3 B8 CP B
\ 00A4 D22300 JP NC,?0001
\ 00A7 ?0017:
\ 00A7 ?0016:
\ 00A7 ?0014:
117 {
118 break;
\ 00A7 ?0015:
\ 00A7 ?0000:
119 }
120 }
121 return str;
\ 00A7 FDE5 PUSH IY
\ 00A9 E1 POP HL
122 }
\ 00AA ?0018:
\ 00AA DDF9 LD SP,IX
\ 00AC DDE1 POP IX
\ 00AE FDE1 POP IY
\ 00B0 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: 177
Constant size: 1
Static variable size: Data(1) Iram(0)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?