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