⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdrv_invert.s01

📁 一种彩屏驱动以及画点,填充图片和填充数据的一些程序
💻 S01
字号:
	NAME	sdrv_invert(16)
	RSEG	BBC_HFUN(0)
	EXTERN	DisplayBuffer
	EXTERN	Hdrv_GetBuffData
	EXTERN	Hdrv_InvBuffDataTrans
	EXTERN	Hdrv_SetWindow
	PUBLIC	Sdrv_Invert
	EXTERN	region_win
	EXTERN	?CLZ80L_4_04_L00
	EXTERN	?SS_DIV_L02
	EXTERN	?S_MUL_L02
	RSEG	BBC_HFUN
Sdrv_Invert:
; 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_Invert.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_HFUN)
; 18.	#pragma memory=default
; 19.	
; 20.	#pragma memory=dataseg(BBD_HFUN)
; 21.	//SD_RW sdrw;
; 22.	//extern  unsigned char BufPage;
; 23.	#pragma memory=default
; 24.	
; 25.	#pragma codeseg(BBC_HFUN)
; 26.	
; 27.	////*******************************************************************************/
; 28.	///* 把指定区域作反白显示
; 29.	//** FUNCTION:     Sdrv_Invert
; 30.	//**
; 31.	//** Description:  
; 32.	//**
; 33.	//**  input
; 34.	//**        region_t * D3region: 要反白区域的区域大小
; 35.	//**        
; 36.	//**  output
; 37.	//**     none
; 38.	//********************************************************************************/
; 39.	
; 40.	void Sdrv_Invert (region_t * Invregion)
; 41.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	DE
	PUSH	AF
	PUSH	AF
	PUSH	AF
	PUSH	AF
; 42.	
; 43.	    int block_pixel;//每一小块象素的个数
; 44.	    BYTE block_line; //每一小块的行数
; 45.	    int i;
; 46.	
; 47.	    region_t tmpregion;//临时使用
; 48.	    BYTE line_cnt;//行数计数器
; 49.	
; 50.	    tmpregion = *Invregion;
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	LD	BC,4
	LDIR
; 51.	
; 52.	    if ((tmpregion.x + tmpregion.width) > (region_win.x+region_win.width)
; 53.	                || (tmpregion.y + tmpregion.height) > (region_win.y + region_win.height) )
	LD	L,(IX-8)
	LD	E,(IX-10)
	LD	D,B
	LD	H,B
	ADD	HL,DE
	LD	C,L
	LD	B,H
	LD	DE,(region_win+2)
	LD	D,0
	LD	HL,(region_win)
	LD	H,D
	ADD	HL,DE
	OR	128
	SBC	HL,BC
	JP	PO,?0008
	XOR	H
?0008:
	JP	M,?0007
	LD	L,(IX-7)
	LD	H,D
	LD	E,(IX-9)
	ADD	HL,DE
	LD	C,L
	LD	B,H
	LD	DE,(region_win+3)
	LD	D,0
	LD	HL,(region_win+1)
	LD	H,D
	ADD	HL,DE
	OR	128
	SBC	HL,BC
	JP	PO,?0009
	XOR	H
?0009:
	JP	M,?0007
?0002:
?0003:
?0000:
; 54.	    {
; 55.	        return;//超限返回
; 56.	    }
?0001:
; 57.	
; 58.	    //把一个大的矩形分成N个小的矩形块,每个小矩形数据应能用一个page buf 传送完,
; 59.	    block_line = DisplayBufLen/(2*(tmpregion.width));
	LD	L,(IX-8)
	LD	H,D
	ADD	HL,HL
	LD	C,L
	LD	B,H
	LD	DE,512
	CALL	?SS_DIV_L02
	LD	(IX-3),E
; 60.	    block_pixel = block_line * (tmpregion.width);
	LD	C,(IX-8)
	LD	B,0
	LD	D,B
	CALL	?S_MUL_L02
	PUSH	DE
	POP	IY
; 61.	
; 62.	    line_cnt = tmpregion.height;//保存高度值
	LD	B,(IX-7)
	LD	(IX-4),B
; 63.	    tmpregion.height = block_line;
	LD	B,(IX-3)
	LD	(IX-7),B
?0005:
; 64.	
; 65.	    while (line_cnt > block_line)
	LD	A,(IX-3)
	CP	(IX-4)
	JR	NC,?0004
?0006:
; 66.	    {
; 67.	        //把数据读出
; 68.	        Hdrv_SetWindow(&tmpregion);
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	CALL	Hdrv_SetWindow
; 69.	        Hdrv_GetBuffData(DisplayBuffer, block_pixel, NORTransMode_def);
	LD	HL,0
	PUSH	HL
	PUSH	IY
	POP	BC
	LD	DE,DisplayBuffer
	CALL	Hdrv_GetBuffData
	POP	AF
; 70.	        Hdrv_SetWindow(&tmpregion);
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	CALL	Hdrv_SetWindow
; 71.	        Hdrv_InvBuffDataTrans(DisplayBuffer,block_pixel);
	PUSH	IY
	POP	BC
	LD	DE,DisplayBuffer
	CALL	Hdrv_InvBuffDataTrans
; 72.	        line_cnt -= block_line;
	LD	HL,6
	ADD	HL,SP
	LD	A,(HL)
	SUB	(IX-3)
	LD	(HL),A
; 73.	        tmpregion.y += block_line;        
	LD	A,(IX-9)
	ADD	A,(IX-3)
	LD	(IX-9),A
	JR	?0005
?0004:
; 74.	    }
; 75.	        
; 76.	    //反相余下的        
; 77.	    tmpregion.height = line_cnt;
	LD	B,(IX-4)
	LD	(IX-7),B
; 78.	    i = line_cnt * tmpregion.width;
	LD	C,(IX-8)
	LD	B,0
	LD	D,B
	LD	E,(IX-4)
	CALL	?S_MUL_L02
	LD	(IX-6),E
	LD	(IX-5),D
; 79.	    Hdrv_SetWindow(&tmpregion);    
	LD	L,B
	LD	H,B
	ADD	HL,SP
	EX	DE,HL
	CALL	Hdrv_SetWindow
; 80.	    Hdrv_GetBuffData(DisplayBuffer, i, NORTransMode_def);
	LD	L,B
	LD	H,B
	PUSH	HL
	LD	C,(IX-6)
	LD	B,(IX-5)
	LD	DE,DisplayBuffer
	CALL	Hdrv_GetBuffData
	POP	AF
; 81.	    Hdrv_SetWindow(&tmpregion);
	LD	HL,0
	ADD	HL,SP
	EX	DE,HL
	CALL	Hdrv_SetWindow
; 82.	    Hdrv_InvBuffDataTrans(DisplayBuffer, i);       
	LD	C,(IX-6)
	LD	B,(IX-5)
	LD	DE,DisplayBuffer
	CALL	Hdrv_InvBuffDataTrans
; 83.	}
?0007:
	LD	SP,IX
	POP	IX
	POP	IY
	POP	BC
	RET
	END

⌨️ 快捷键说明

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