ui_scroll.s01

来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 583 行

S01
583
字号
	NAME	ui_scroll(17)
	RSEG	COM_SCROLL(0)
	RSEG	IDATA0(0)
	RSEG	CDATA0(0)
	EXTERN	CharOutRect
	EXTERN	GetOutPutErr
	EXTERN	GetTextPos
	PUBLIC	HoriScroll
	EXTERN	PutS
	PUBLIC	Scroll
	EXTERN	SetAsciiFont
	EXTERN	SetBackgdColor
	EXTERN	SetTextPos
	EXTERN	TextOutRect
	PUBLIC	rTmp
	EXTERN	scroll_cnt
	EXTERN	str_pt
	EXTERN	strhead_pt
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_LEAVE_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?ENT_AUTO_DIRECT_L09
	RSEG	COM_SCROLL
Scroll:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        wma player basal module implementation 
; 5.	*
; 6.	*        (c) Copyright Actions Co,Ld.                             
; 7.	*
; 8.	*  $Id: ui_scroll.c,v 1.3 2004/12/30 09:22:32 ybfu Exp $
; 9.	*******************************************************************************
; 10.	*/
; 11.	/*
; 12.	这个函数的作用是在汇编程序外包一层 C ,这样汇编在C中用BANK方式CALL 
; 13.	*/
; 14.	#pragma codeseg(COM_SCROLL)
; 15.	#include "actos.h"
; 16.	#include "ap_common.h"
; 17.	
; 18.	///-char *str_pt;//字符串当前指针
; 19.	///-char *strhead_pt;//字串首址记录   
; 20.	///-BYTE scroll_cnt;
; 21.	
; 22.	char rTmp=0;
; 23.	
; 24.	//好像有八个点的误差在scroll开头
; 25.	
; 26.	void HoriScroll(signed char step,char language);
; 27.	
; 28.	/* (字符串首址,是否初始化true为要初始化) */
; 29.	void Scroll( char * scrollstr, char language) 
; 30.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65532
; 31.	          region_t tregion;
; 32.	          
; 33.	          tregion.x = scrollregionx_def;
	LD	(IX-4),48
; 34.	    tregion.y = scrollregiony_def;
	LD	(IX-3),45
; 35.	    tregion.width = scrollregionw_def;
	LD	(IX-2),128
; 36.	    tregion.height = scrollregionh_def;
	LD	(IX-1),16
; 37.	          
; 38.	    SetAsciiFont(FONT_TYPE_LARGE);
	LD	E,4
	CALL	LWRD SetAsciiFont
; 39.	    SetBackgdColor(Color_MENU_def);
	LD	BC,0
	LD	DE,65535
	CALL	LWRD SetBackgdColor
; 40.	    
; 41.	    TextOutRect(&tregion ,1);
	LD	C,1
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD TextOutRect
; 42.	    HoriScroll(1,language);
	LD	C,(IX+4)
	LD	E,1
	LD	A,BYTE3 HoriScroll
	LD	HL,LWRD HoriScroll
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 43.	    TextOutRect(&tregion ,0);
	LD	C,0
	LD	L,C
	LD	H,C
	ADD	HL,SP
	EX	DE,HL
	CALL	LWRD TextOutRect
; 44.	    
; 45.	    ///-SetBackgdColor(Color_MENU_def);
; 46.	    SetAsciiFont(FONT_TYPE_DEFAULT);
	LD	E,4
	CALL	LWRD SetAsciiFont
; 47.	}
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
HoriScroll:
; 48.	/*
; 49.	int ReadCode(char *tmpstrpt1,char language)
; 50.	{
; 51.	                                int code;
; 52.	                                
; 53.	        if((language>4)||(language==1))
; 54.	        {//ASCII
; 55.	                code = *tmpstrpt1;
; 56.	        }
; 57.	        else if(language==3)
; 58.	        {//jap
; 59.	            if (*tmpstrpt1 >= 0x81)
; 60.	            {
; 61.	                                code = *(int *)tmpstrpt1;
; 62.	            }    
; 63.	            else
; 64.	            {//ASCII
; 65.	                                code = *tmpstrpt1;
; 66.	            }
; 67.	        }
; 68.	        else if (*tmpstrpt1 >= FirstSectionCode)
; 69.	        {//汉字
; 70.	                code = *(int *)tmpstrpt1;
; 71.	        }
; 72.	        else
; 73.	        {//ASCII
; 74.	                code = *tmpstrpt1;
; 75.	        }
; 76.	        return code;
; 77.	}
; 78.	*/
; 79.	
; 80.	//==========================================================
; 81.	/*
; 82.	滚动屏幕
; 83.	*/
; 84.	void HoriScroll(signed char step,char language)
; 85.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	-8
	PUSH	IY
; 86.	    int code;
; 87.	    char *tmpstrpt,*tmpstrpt1;
; 88.	    region_t kregion;//余下部分区域
; 89.	    
; 90.	    if (*str_pt == '\0')
	LD	HL,(str_pt)
	XOR	A
	OR	(HL)
	JR	NZ,?0003
?0002:
; 91.	    {
; 92.	          scroll_cnt = 0;
	LD	(scroll_cnt),A
; 93.	          rTmp = 0;
	LD	(rTmp),A
; 94.	        str_pt = strhead_pt;
	LD	HL,(strhead_pt)
	LD	(str_pt),HL
?0003:
; 95.	    }
; 96.	    
; 97.	    tmpstrpt = str_pt;
	LD	(IX-4),L
	LD	(IX-3),H
; 98.	                
; 99.	    if((language>4)||(language==1))
	LD	A,4
	CP	C
	JR	C,?0015
	LD	B,C
	DEC	B
	JR	Z,?0015
?0006:
?0007:
?0004:
; 100.	    {//ASCII
; 101.	        ///code = *str_pt;
; 102.	        ///kregion.width = 8 - scroll_cnt;
; 103.	        goto L_ASCII_COMMON;
?0005:
; 104.	    }
; 105.	    else if(language==3)
	LD	A,(IX+4)
	CP	3
	LD	A,(HL)
	JR	NZ,?0010
?0009:
; 106.	    {//jap
; 107.	        if (*str_pt >= 0x81)    
	CP	129
	JR	C,?0015
?0011:
; 108.	        {
; 109.	                        ///code = *(int *)str_pt;
; 110.	                        ///kregion.width = 16 - scroll_cnt;
; 111.	                        ///tmpstrpt++;
; 112.	                        goto L_2BYTE_COMMON;
	JR	?0014
?0012:
; 113.	        }
; 114.	        else
; 115.	        {//ASCII
; 116.	                        ///code = *str_pt;
; 117.	                        ///kregion.width = 8 - scroll_cnt;
; 118.	                        goto L_ASCII_COMMON;
?0010:
; 119.	        }
; 120.	    }
; 121.	    else if (*str_pt >= FirstSectionCode)
	CP	161
	JR	C,?0015
?0014:
?0013:
; 122.	    {//汉字
; 123.	L_2BYTE_COMMON:
; 124.	        code = *(int *)str_pt;
	LD	B,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,B
	PUSH	HL
	POP	IY
; 125.	        kregion.width = 16 - scroll_cnt;
	LD	A,(scroll_cnt)
	LD	B,A
	LD	A,16
	SUB	B
	LD	(IX-6),A
; 126.	        tmpstrpt++;
	INC	(IX-4)
	JR	NZ,?0016
	INC	(IX-3)
; 127.	    }
; 128.	    else
	JR	?0016
?0015:
?0008:
; 129.	    {//ASCII
; 130.	L_ASCII_COMMON:
; 131.	        code = *str_pt;
	LD	C,(HL)
	LD	B,0
	PUSH	BC
	POP	IY
; 132.	        kregion.width = 8 - scroll_cnt; 
	LD	A,(scroll_cnt)
	LD	B,A
	LD	A,8
	SUB	B
	LD	(IX-6),A
?0016:
; 133.	    }
; 134.	    
; 135.	    tmpstrpt++;
	INC	(IX-4)
	JR	NZ,?0056
	INC	(IX-3)
?0056:
; 136.	    
; 137.	    kregion.x = scrollregionx_def;
	LD	(IX-8),48
; 138.	    kregion.y = scrollregiony_def;
	LD	(IX-7),45
; 139.	    kregion.height = scrollregionh_def;    
	LD	(IX-5),16
; 140.	    
; 141.	    if(!CharOutRect(code, *(str_pt+1), &kregion, scroll_cnt))
	LD	C,B
	PUSH	BC
	LD	HL,4
	ADD	HL,SP
	PUSH	HL
	LD	HL,(str_pt)
	CALL	LWRD ?0061
	POP	HL
	POP	HL
	OR	A
	JR	NZ,?0018
?0017:
; 142.	    {
; 143.	          tmpstrpt+=rTmp;
	LD	BC,(rTmp)
	LD	B,A
	LD	HL,6
	ADD	HL,SP
	LD	A,(HL)
	ADD	A,C
	LD	(HL),A
	INC	HL
	LD	A,(HL)
	ADC	A,B
	LD	(HL),A
; 144.	        str_pt = tmpstrpt;
	LD	L,(IX-4)
	LD	H,A
	LD	(str_pt),HL
; 145.	        scroll_cnt = 0;
	XOR	A
	LD	(scroll_cnt),A
; 146.	        rTmp = 0;
	LD	(rTmp),A
; 147.	    }
; 148.	    else
	JR	?0019
?0018:
; 149.	    {
; 150.	          rTmp = 0;
	XOR	A
	LD	(rTmp),A
; 151.	          
; 152.	          if(language == 14)
	LD	A,(IX+4)
	CP	14
	JR	NZ,?0022
?0020:
?0023:
; 153.	          {
; 154.	                while(1)
; 155.	                {
; 156.	                        code = *tmpstrpt;
	LD	L,(IX-4)
	LD	H,(IX-3)
	LD	C,(HL)
	LD	B,0
	PUSH	BC
	POP	IY
; 157.	                        if(code == 0xd1 || (code >=0xd4 && code<0xdb) ||(code >=0xe7 && code<0xef))
	LD	A,209
	XOR	C
	JR	Z,?0032
	LD	BC,32980
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	C,?0030
	LD	BC,32987
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	C,?0032
?0030:
?0029:
	LD	BC,32999
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	C,?0022
	LD	BC,33007
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0022
?0032:
?0031:
?0027:
?0028:
?0025:
; 158.	                        {
; 159.	                                CharOutRect(code, *(tmpstrpt+1), &kregion, scroll_cnt);
	LD	A,(scroll_cnt)
	LD	C,A
	PUSH	BC
	LD	HL,4
	ADD	HL,SP
	PUSH	HL
	LD	L,(IX-4)
	LD	H,(IX-3)
	CALL	LWRD ?0061
	POP	HL
	POP	HL
; 160.	                                tmpstrpt++;
	INC	(IX-4)
	JR	NZ,?0057
	INC	(IX-3)
?0057:
; 161.	                                rTmp++;
	LD	HL,rTmp
	INC	(HL)
; 162.	                        }
; 163.	                        else    break;
	JR	?0020
?0026:
?0033:
; 164.	                }
; 165.	          }
?0022:
?0021:
; 166.	                
; 167.	                scroll_cnt++;
	LD	HL,scroll_cnt
	INC	(HL)
?0019:
; 168.	    }
; 169.	    
; 170.	    SetTextPos(kregion.width+kregion.x, scrollregiony_def);
	LD	C,45
	LD	A,(IX-8)
	ADD	A,(IX-6)
	LD	E,A
	CALL	LWRD SetTextPos
; 171.	    tmpstrpt1 = PutS(tmpstrpt, -1);
	LD	C,255
	LD	E,(IX-4)
	LD	D,(IX-3)
	CALL	LWRD ?0062
; 172.	    
; 173.	    if (GetOutPutErr() == RESULT_PUTCHAR_X_ERR)
	JR	Z,?0037
?0034:
; 174.	    {//x超限
; 175.	
; 176.	                                        goto L_X_ERR_COMMON;
?0035:
; 177.	    }
; 178.	    else
; 179.	    {
; 180.	        GetTextPos(&kregion.x, &kregion.y);
	LD	HL,2
	ADD	HL,SP
	CALL	LWRD ?0063
; 181.	        tmpstrpt1 = PutS(strhead_pt, -1);
	LD	C,255
	LD	DE,(strhead_pt)
	CALL	LWRD ?0062
; 182.	        if (GetOutPutErr() == RESULT_PUTCHAR_X_ERR)
	JR	NZ,?0038
?0037:
?0036:
; 183.	        {//x超限
; 184.	
; 185.	L_X_ERR_COMMON:
; 186.	                                                
; 187.	            GetTextPos(&kregion.x, &kregion.y);
	LD	HL,2
	ADD	HL,SP
	CALL	LWRD ?0063
; 188.	            
; 189.	            kregion.width = scrollregionw_def+scrollregionx_def - kregion.x;
	LD	A,176
	SUB	(IX-8)
	LD	(IX-6),A
; 190.	            kregion.height = scrollregionh_def;
	LD	(IX-5),16
; 191.	            //汉字和ASCII的不同处理
; 192.	                                
; 193.	                                ///code = ReadCode(tmpstrpt1,language);
; 194.	                                //---------------------------------------
; 195.	                                if((language>4)||(language==1))
	LD	A,4
	CP	(IX+4)
	JR	C,?0051
	LD	B,(IX+4)
	DEC	B
	JR	Z,?0051
?0041:
?0042:
?0039:
; 196.	                        {//ASCII
; 197.	                                code = *tmpstrpt1;
?0040:
; 198.	                        }
; 199.	                        else if(language==3)
	LD	A,(IX+4)
	CP	3
	LD	L,(IX-2)
	LD	H,(IX-1)
	LD	A,(HL)
	JR	NZ,?0045
?0044:
; 200.	                        {//jap
; 201.	                            if (*tmpstrpt1 >= 0x81)
	CP	129
	JR	C,?0059
?0046:
; 202.	                            {
; 203.	                                                code = *(int *)tmpstrpt1;
	JR	?0060
; 204.	                            }    
; 205.	                            else
?0047:
; 206.	                            {//ASCII
; 207.	                                                code = *tmpstrpt1;
?0048:
?0045:
; 208.	                            }
; 209.	                        }
; 210.	                        else if (*tmpstrpt1 >= FirstSectionCode)
	CP	161
	JR	C,?0051
?0050:
; 211.	                        {//汉字
; 212.	                                code = *(int *)tmpstrpt1;
?0060:
	LD	B,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,B
	PUSH	HL
	POP	IY
; 213.	                        }
; 214.	                        else
	JR	?0052
?0051:
; 215.	                        {//ASCII
; 216.	                                code = *tmpstrpt1;
	LD	L,(IX-2)
	LD	H,(IX-1)
?0059:
	LD	C,(HL)
	LD	B,0
	PUSH	BC
	POP	IY
?0052:
?0049:
?0043:
; 217.	                        }
; 218.	                                //---------------------------------------
; 219.	                                
; 220.	            //输出最后一个字
; 221.	            CharOutRect(code, *(tmpstrpt1+1), &kregion, 0);
	LD	C,0
	PUSH	BC
	LD	HL,4
	ADD	HL,SP
	PUSH	HL
	LD	L,(IX-2)
	LD	H,(IX-1)
	CALL	LWRD ?0061
	POP	HL
	POP	HL
?0038:
; 222.	            
; 223.	        }
; 224.	    }
; 225.	    
; 226.	}
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0061:
	INC	HL
	LD	C,(HL)
	LD	B,0
	PUSH	IY
	POP	DE
	JP	LWRD CharOutRect
?0062:
	CALL	LWRD PutS
	LD	(IX-2),L
	LD	(IX-1),H
	CALL	LWRD GetOutPutErr
	DEC	A
	RET
?0063:
	LD	BC,1
	ADD	HL,BC
	LD	C,L
	LD	B,H
	DEC	HL
	EX	DE,HL
	JP	LWRD GetTextPos
	RSEG	IDATA0
rTmp:
	DEFS	1
	RSEG	CDATA0
	DEFB	0
	END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?