📄 sdrv_putchar_latin1.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 22/Sep/107 19:36:33 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = large #
# Source file = d:\case_i_d913f\drv\ui_ssd1332\sdrv\sdrv_putchar_latin1.c#
# List file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_x\list\sdrv_putchar_latin1.lst#
# Object file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_x\obj\sdrv_putchar_latin1.r01#
# ASM file = d:\case_i_d913f\drv\ui_ssd1332\ui_ssd13_x\list\sdrv_putchar_latin1.s01#
# Command line = -v0 -ml -uu #
# -OD:\case_i_d913f\drv\Ui_SSD1332\UI_SSD13_X\Obj\ #
# -e -K -w -gA -s9 -RCODE -r0 -DIC3951 -DNAPDEBUG #
# -LD:\case_i_d913f\drv\Ui_SSD1332\UI_SSD13_X\List\ #
# -q -t8 #
# -AD:\case_i_d913f\drv\Ui_SSD1332\UI_SSD13_X\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_putchar_latin1.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME sdrv_putchar_latin1(16)
\ 0000 RSEG BBC_PUTS(0)
\ 0000 EXTERN BlackCharToColor
\ 0000 EXTERN CharPointBuffer
\ 0000 EXTERN CheckCharMode
\ 0000 EXTERN CheckDisplaySpace
\ 0000 EXTERN DisplayBuffer
\ 0000 EXTERN Hdrv_BuffDataTrans
\ 0000 EXTERN Hdrv_SetDrawMode
\ 0000 EXTERN Hdrv_SetWindow
\ 0000 EXTERN PutCharErrFlag
\ 0000 EXTERN Sdrv_GetFontPoint
\ 0000 PUBLIC Sdrv_PutChar
\ 0000 EXTERN region
\ 0000 EXTERN ?CLZ80L_4_04_L00
\ 0000 RSEG BBC_PUTS
\ 0000 Sdrv_PutChar:
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 : PutChar.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 //non_banked char CheckCharMode(int code);
28 //bool CheckDisplaySpace(char codemod);
29 ////*******************************************************************************/
30 ///*
31 //** FUNCTION: PutChar
32 //**
33 //** Description: 在屏幕上打出一个字符,并打完后当前指针自动跳到下一个汉字的左上角
34 //**
35 //** input
36 //** code: 字符的码值
37 //**
38 //** output
39 //** none
40 //********************************************************************************/
41
42 non_banked bool Sdrv_PutChar(int code)
43 {
\ 0000 C5 PUSH BC
\ 0001 DDE5 PUSH IX
\ 0003 F5 PUSH AF
\ 0004 D5 PUSH DE
\ 0005 DDE1 POP IX
44 char charmode;
45 bool putchar_result;
46 PutCharErrFlag = RESULT_PUTCHAR_OK; //默认为OK
\ 0007 AF XOR A
\ 0008 320000 LD (PutCharErrFlag),A
47 Hdrv_SetDrawMode(DrawModeV_def); //把显示模式设置成竖向显示模式(与旧字库兼容)
\ 000B 110100 LD DE,1
\ 000E CD0000 CALL Hdrv_SetDrawMode
48 Sdrv_GetFontPoint(code, CharPointBuffer);//取点阵
\ 0011 010000 LD BC,CharPointBuffer
\ 0014 DDE5 PUSH IX
\ 0016 D1 POP DE
\ 0017 CD0000 CALL Sdrv_GetFontPoint
49
50 //charmode = CharMode0608;
51 charmode = CheckCharMode(code);
\ 001A DDE5 PUSH IX
\ 001C D1 POP DE
\ 001D CD0000 CALL CheckCharMode
\ 0020 210100 LD HL,1
\ 0023 39 ADD HL,SP
\ 0024 77 LD (HL),A
52 putchar_result = CheckDisplaySpace(charmode);
\ 0025 5F LD E,A
\ 0026 CD0000 CALL CheckDisplaySpace
\ 0029 210000 LD HL,0
\ 002C 39 ADD HL,SP
\ 002D 77 LD (HL),A
53 if (!putchar_result)
\ 002E AF XOR A
\ 002F B6 OR (HL)
\ 0030 200D JR NZ,?0001
\ 0032 ?0000:
54 {
55 Hdrv_SetDrawMode(DrawModeH_def); //把显示模式设置成横向显示模式
\ 0032 5F LD E,A
\ 0033 57 LD D,A
\ 0034 CD0000 CALL Hdrv_SetDrawMode
56 return putchar_result;//如显示范围不对,则不做显示动作而直接退出
\ 0037 210000 LD HL,0
\ 003A 39 ADD HL,SP
\ 003B 7E LD A,(HL)
57 }
\ 003C C3CA00 JP ?0006
\ 003F ?0001:
58 switch(charmode)
\ 003F 23 INC HL
\ 0040 7E LD A,(HL)
\ 0041 FE00 CP 0
\ 0043 2029 JR NZ,?0004
\ 0045 ?0003:
59 {
60 case CharMode0608://06*08点阵模式(ascii小字体)
61 //设置字模输出的大小
62 region.width = ASCII_SMALL_WIDTH_DEF;
\ 0045 3E06 LD A,6
\ 0047 320200 LD (region+2),A
63 region.height = ASCII_SMALL_HEIGHT_DEF;
\ 004A 3E08 LD A,8
\ 004C 320300 LD (region+3),A
64
65 Hdrv_SetWindow(®ion);
\ 004F 110000 LD DE,region
\ 0052 CD0000 CALL Hdrv_SetWindow
66
67 //把黑白字模转为彩色字模放在Buff中
68 BlackCharToColor(ASCII_SMALL_WIDTH_DEF, CharPointBuffer);
\ 0055 010000 LD BC,CharPointBuffer
\ 0058 110600 LD DE,6
\ 005B CD0000 CALL BlackCharToColor
69 //把暂时显存区的数据送到LCM
70 Hdrv_BuffDataTrans(DisplayBuffer, ASCII_SMALL_HEIGHT_DEF*ASCII_SMALL_WIDTH_DEF*2);
\ 005E 016000 LD BC,96
\ 0061 110000 LD DE,DisplayBuffer
\ 0064 CD0000 CALL Hdrv_BuffDataTrans
71 region.x += ASCII_SMALL_WIDTH_DEF;//坐标移到下一个字的左上角
\ 0067 3A0000 LD A,(region)
\ 006A C606 ADD A,6
\ 006C 1851 JR ?0008
72 break;
\ 006E ?0004:
\ 006E FE01 CP 1
\ 0070 2050 JR NZ,?0002
73
74 case CharMode0816://08*16点阵模式(ascii大字体)
75 //设置字模输出的大小//上半个字
76 region.width = ASCII_LARGE_WIDTH_DEF;
\ 0072 3E08 LD A,8
\ 0074 320200 LD (region+2),A
77 region.height = ASCII_LARGE_HEIGHT_DEF/2;
\ 0077 320300 LD (region+3),A
78 region.y += ASCII_LARGE_HEIGHT_DEF/2;//Y坐标加8准备输出下区(下半个字)
\ 007A 3A0100 LD A,(region+1)
\ 007D C608 ADD A,8
\ 007F 320100 LD (region+1),A
79
80 Hdrv_SetWindow(®ion);
\ 0082 110000 LD DE,region
\ 0085 CD0000 CALL Hdrv_SetWindow
81
82 //把黑白字模转为彩色字模放在Buff中(上区)
83 //BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer);
84 BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer + ASCII_LARGE_WIDTH_DEF); //change by ybfu
\ 0088 010800 LD BC,CharPointBuffer+8
\ 008B 110800 LD DE,8
\ 008E CD0000 CALL BlackCharToColor
85 //把暂时显存区的数据送到LCM
86 Hdrv_BuffDataTrans(DisplayBuffer, ASCII_LARGE_WIDTH_DEF*(ASCII_LARGE_HEIGHT_DEF/2)*2);
\ 0091 018000 LD BC,128
\ 0094 110000 LD DE,DisplayBuffer
\ 0097 CD0000 CALL Hdrv_BuffDataTrans
87
88 region.y -= ASCII_LARGE_HEIGHT_DEF/2;//Y坐标加8准备输出下区(下半个字)
\ 009A 3A0100 LD A,(region+1)
\ 009D C6F8 ADD A,248
\ 009F 320100 LD (region+1),A
89
90 Hdrv_SetWindow(®ion);
\ 00A2 110000 LD DE,region
\ 00A5 CD0000 CALL Hdrv_SetWindow
91
92 //BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer + ASCII_LARGE_WIDTH_DEF);
93 BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer);
\ 00A8 010000 LD BC,CharPointBuffer
\ 00AB 110800 LD DE,8
\ 00AE CD0000 CALL BlackCharToColor
94 //把暂时显存区的数据送到LCM
95 Hdrv_BuffDataTrans(DisplayBuffer, ASCII_LARGE_WIDTH_DEF*(ASCII_LARGE_HEIGHT_DEF/2)*2);
\ 00B1 018000 LD BC,128
\ 00B4 110000 LD DE,DisplayBuffer
\ 00B7 CD0000 CALL Hdrv_BuffDataTrans
96 //坐标移到下一个字的左上角
97 region.x += ASCII_LARGE_WIDTH_DEF;
\ 00BA 3A0000 LD A,(region)
\ 00BD C608 ADD A,8
\ 00BF ?0008:
\ 00BF 320000 LD (region),A
98 //region.y -= ASCII_LARGE_HEIGHT_DEF/2;
99 break;
\ 00C2 ?0005:
100
101 default:
102 break;
\ 00C2 ?0002:
103 }
104 Hdrv_SetDrawMode(DrawModeH_def); //把显示模式设置成横向显示模式
\ 00C2 110000 LD DE,0
\ 00C5 CD0000 CALL Hdrv_SetDrawMode
105 return TRUE;
\ 00C8 3E01 LD A,1
106 }
\ 00CA ?0006:
\ 00CA E1 POP HL
\ 00CB DDE1 POP IX
\ 00CD C1 POP BC
\ 00CE C9 RET
\ 00CF END
Errors: none
Warnings: none
Code size: 207
Constant size: 0
Static variable size: Data(0) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -