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 + -
显示快捷键?