sdrv_charoutrect.lst
来自「一种彩屏驱动以及画点,填充图片和填充数据的一些程序」· LST 代码 · 共 440 行 · 第 1/2 页
LST
440 行
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 18/May/107 10:54:34 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = large #
# Source file = d:\case_i_d913f\drv\ui_ssd1332\sdrv\sdrv_charoutrect.c#
# List file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_jp\list\sdrv_charoutrect.lst#
# Object file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_jp\obj\sdrv_charoutrect.r01#
# ASM file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_jp\list\sdrv_charoutrect.s01#
# Command line = -v0 -ml -uu #
# -OD:\case_i_d913f\drv\Ui_SSD1332\UI_SSD13_JP\Obj\ #
# -e -K -w -gA -s9 -RCODE -r0 -DIC3951 -DNAPDEBUG #
# -LD:\case_i_d913f\drv\Ui_SSD1332\UI_SSD13_JP\List\ #
# -q -t8 #
# -AD:\case_i_d913f\drv\Ui_SSD1332\UI_SSD13_JP\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\sdrv_charoutrect.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME sdrv_charoutrect(16)
\ 0000 RSEG BBC_PUTS(0)
\ 0000 EXTERN BlackCharToColor
\ 0000 EXTERN CharPointBuffer
\ 0000 EXTERN CheckCharMode
\ 0000 EXTERN DisplayBuffer
\ 0000 EXTERN Hdrv_BuffDataTrans
\ 0000 EXTERN Hdrv_SetDrawMode
\ 0000 EXTERN Hdrv_SetWindow
\ 0000 EXTERN PutCharErrFlag
\ 0000 PUBLIC Sdrv_CharOutRect
\ 0000 EXTERN Sdrv_GetFontPoint
\ 0000 EXTERN region
\ 0000 EXTERN ?CLZ80L_4_04_L00
\ 0000 RSEG BBC_PUTS
\ 0000 Sdrv_CharOutRect:
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_charOutrect.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 codeseg(UI_RCODE)
18
19 #pragma memory=constseg(BBS_PUTS)
20 #pragma memory=default
21
22 #pragma memory=dataseg(BBD_PUTS)
23 #pragma memory=default
24
25 #pragma codeseg(BBC_PUTS)
26
27
28
29 ////*******************************************************************************/
30 ///*
31 //** FUNCTION: Sdrv_CharOutRect
32 //**
33 //** Description: 在指定的区域上打出一个字符,超出区域部分不显示,没有超出屏幕的部分将正常显示。
34 //**
35 //** input
36 //** code: 字符的码值
37 //** CRregion: 要求输出的区域
38 //** colcnt: 要求从汉字的哪一列开始输出
39 //** output
40 //** bool: 当指定列数超出该字的总列数时返回FALSE,否则返回TRUE
41 //********************************************************************************/
42
43 non_banked bool Sdrv_CharOutRect(int code, region_t *CRregion, BYTE colcnt)
44 {
\ 0000 FDE5 PUSH IY
\ 0002 DDE5 PUSH IX
\ 0004 DD210000 LD IX,0
\ 0008 DD39 ADD IX,SP
\ 000A D5 PUSH DE
\ 000B F5 PUSH AF
\ 000C C5 PUSH BC
\ 000D FDE1 POP IY
45 char charmode;
46 bool putchar_result;
47 char tmpwidth;
48
49 if (CRregion->width == NULL)
\ 000F 03 INC BC
\ 0010 03 INC BC
\ 0011 0A LD A,(BC)
\ 0012 B7 OR A
\ 0013 CAEB00 JP Z,?0031
\ 0016 ?0000:
50 {
51 return FALSE;
52 }
\ 0016 ?0001:
53 PutCharErrFlag = RESULT_PUTCHAR_OK; //默认为OK
\ 0016 AF XOR A
\ 0017 320000 LD (PutCharErrFlag),A
54 Hdrv_SetDrawMode(DrawModeV_def); //把显示模式设置成竖向显示模式(与旧字库兼容)
\ 001A 110100 LD DE,1
\ 001D CD0000 CALL Hdrv_SetDrawMode
55 Sdrv_GetFontPoint(code, CharPointBuffer);//取点阵
\ 0020 010000 LD BC,CharPointBuffer
\ 0023 DD5EFE LD E,(IX-2)
\ 0026 DD56FF LD D,(IX-1)
\ 0029 CD0000 CALL Sdrv_GetFontPoint
56
57 charmode = CheckCharMode(code);
\ 002C DD5EFE LD E,(IX-2)
\ 002F DD56FF LD D,(IX-1)
\ 0032 CD0000 CALL CheckCharMode
58 switch(charmode)
\ 0035 FE00 CP 0
\ 0037 2055 JR NZ,?0009
\ 0039 ?0003:
59 {
60 case CharMode0608://06*08点阵模式(ascii小字体)
61
62 if (colcnt >= 6)
\ 0039 DD7E06 LD A,(IX+6)
\ 003C FE06 CP 6
\ 003E D2E500 JP NC,?0032
\ 0041 ?0004:
63 {//计数值超出
64 Hdrv_SetDrawMode(DrawModeH_def); //把显示模式设置成横向显示模
65 return FALSE;
66 }
\ 0041 ?0005:
67 //确定输出区域
68 region.x = CRregion->x;
\ 0041 FD7E00 LD A,(IY+0)
\ 0044 320000 LD (region),A
69 region.y = CRregion->y;
\ 0047 FD7E01 LD A,(IY+1)
\ 004A 320100 LD (region+1),A
70 region.width = CRregion->width;
\ 004D FD7E02 LD A,(IY+2)
\ 0050 320200 LD (region+2),A
71 region.height = ASCII_SMALL_HEIGHT_DEF;
\ 0053 3E08 LD A,8
\ 0055 320300 LD (region+3),A
72 Hdrv_SetWindow(®ion);
\ 0058 CD8201 CALL ?0035
73
74 //取最小的值.
75 tmpwidth = (CRregion->width < (6-colcnt))? (CRregion->width):(6-colcnt);
\ 005B DD4E06 LD C,(IX+6)
\ 005E 0600 LD B,0
\ 0060 210600 LD HL,6
\ 0063 A7 AND A
\ 0064 ED42 SBC HL,BC
\ 0066 4D LD C,L
\ 0067 44 LD B,H
\ 0068 FD6E02 LD L,(IY+2)
\ 006B 2600 LD H,0
\ 006D F680 OR 128
\ 006F ED42 SBC HL,BC
\ 0071 E27500 JP PO,?0023
\ 0074 AC XOR H
\ 0075 ?0023:
\ 0075 F27D00 JP P,?0007
\ 0078 FD7E02 LD A,(IY+2)
\ 007B 1805 JR ?0008
\ 007D ?0007:
\ 007D 3E06 LD A,6
\ 007F DD9606 SUB (IX+6)
\ 0082 ?0008:
\ 0082 DD77FC LD (IX-4),A
76
77 //把黑白字模转为彩色字模放在Buff中
78 BlackCharToColor(ASCII_SMALL_WIDTH_DEF, CharPointBuffer);
\ 0085 010000 LD BC,CharPointBuffer
\ 0088 110600 LD DE,6
\ 008B C33501 JP ?0033
79 //把暂时显存区的数据送到LCM
80 Hdrv_BuffDataTrans(DisplayBuffer+colcnt*ASCII_SMALL_HEIGHT_DEF*2,
81 ASCII_SMALL_HEIGHT_DEF*tmpwidth*2);
82
83 //region.x += ASCII_SMALL_WIDTH_DEF;//坐标移到下一个字的左上角
84 break;
\ 008E ?0009:
\ 008E FE01 CP 1
\ 0090 2048 JR NZ,?0015
85
86 case CharMode0816://08*16点阵模式(ascii大字体)
87 //设置字模输出的大小//上半个字
88 //region.width = ASCII_LARGE_WIDTH_DEF;
89 if (colcnt >= 8)
\ 0092 DD7E06 LD A,(IX+6)
\ 0095 FE08 CP 8
\ 0097 304C JR NC,?0032
\ 0099 ?0010:
90 {//计数值超出
91 Hdrv_SetDrawMode(DrawModeH_def); //把显示模式设置成横向显示模
92 return FALSE;
93 }
\ 0099 ?0011:
94 //确定输出区域
95 region.x = CRregion->x;
96 region.y = CRregion->y;
97 region.width = CRregion->width;
98 region.height = ASCII_LARGE_HEIGHT_DEF/2;
99 region.y += ASCII_LARGE_HEIGHT_DEF/2;//Y坐标加8准备输出下区(下半个字)
100 Hdrv_SetWindow(®ion);
\ 0099 CD6301 CALL ?0036
101
102 //取最小的值.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?