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

📄 sdrv_putsdimage.s01

📁 一种彩屏驱动以及画点,填充图片和填充数据的一些程序
💻 S01
字号:
	NAME	sdrv_putsdimage(16)
	RSEG	BAC_PSDI(0)
	RSEG	BAD_PSDI(0)
	EXTERN	DisplayBuffer
	EXTERN	Hdrv_BuffDataTrans
	EXTERN	Hdrv_SetDrawMode
	EXTERN	Hdrv_SetWindow
	EXTERN	SD_Read
	PUBLIC	Sdrv_PutSDImage
	PUBLIC	sdrw
	EXTERN	?CLZ80L_4_04_L00
	EXTERN	?L_MUL_L03
	EXTERN	?SL_MOD_L03
	EXTERN	?L_ADDASG_L03
	EXTERN	?L_SUBASG_L03
	RSEG	BAC_PSDI
Sdrv_PutSDImage:
; 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   : UI_PutSDImage.msa
; 10.	* By     : Rcmai
; 11.	* Version: 1> v1.00     first version     10/17/2003 10:46PM
; 12.	********************************************************************************
; 13.	*/
; 14.	#include "display.h" 
; 15.	#include "Intrz80.h"            //用到input8();  
; 16.	#include "Drv_S6B33B0A.h"
; 17.	
; 18.	//SD_RW sdrw;
; 19.	//#pragma codeseg(UI_RCODE)
; 20.	
; 21.	#pragma memory=constseg(BAS_PSDI)
; 22.	#pragma memory=default
; 23.	
; 24.	#pragma memory=dataseg(BAD_PSDI)
; 25.	SD_RW sdrw;
; 26.	//extern  unsigned char BufPage;
; 27.	#pragma memory=default
; 28.	
; 29.	#pragma codeseg(BAC_PSDI)
; 30.	
; 31.	
; 32.	void Sdrv_PutSDImage(region_t *pic,long int imgddr)
; 33.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	PUSH	AF
	PUSH	AF
	PUSH	DE
	POP	IX
; 34.	    unsigned long cnt;
; 35.	    WORD cnt1;
; 36.	
; 37.	
; 38.	    //坐标出了屏幕,则退出
; 39.	    if(pic->x>Displaylength-1 || pic->y >Displayhight-1 )
	LD	A,(DE)
	LD	B,A
	LD	A,159
	CP	B
	JP	C,?0015
	LD	A,127
	CP	(IX+1)
	JP	C,?0015
?0002:
?0003:
?0000:
; 40.	    {
; 41.	        return;
; 42.	    }
?0001:
; 43.	
; 44.	    //显示出屏幕的处理
; 45.	    if ((pic->height + pic->y) > Displayhight)
	LD	L,(IX+1)
	LD	B,0
	LD	D,B
	LD	E,(IX+3)
	LD	H,B
	ADD	HL,DE
	LD	C,L
	LD	B,H
	LD	HL,128
	OR	L
	SBC	HL,BC
	JP	PO,?0018
	XOR	H
?0018:
	JP	M,?0015
?0004:
; 46.	    {
; 47.	        return;
; 48.	    }
?0005:
; 49.	    if (pic->width > Displaylength-pic->x)
	LD	C,(IX+2)
	LD	B,D
	LD	E,(IX+0)
	LD	HL,160
	AND	A
	SBC	HL,DE
	OR	128
	SBC	HL,BC
	JP	PO,?0019
	XOR	H
?0019:
	JP	M,?0015
?0006:
; 50.	    {
; 51.	        return;
; 52.	    }
?0007:
; 53.	
; 54.	    Hdrv_SetDrawMode(DrawModeH_def);
	LD	E,B
	CALL	Hdrv_SetDrawMode
; 55.	
; 56.	    Hdrv_SetWindow(pic);    //设定要填入 的 图片的 行、列起始地址,就从这里开始填数据
	PUSH	IX
	POP	DE
	CALL	Hdrv_SetWindow
; 57.	
; 58.	    cnt = (unsigned long)pic->width * (unsigned long)pic->height * 2;
	LD	L,(IX+2)
	LD	C,B
	LD	H,C
	PUSH	BC
	PUSH	HL
	LD	L,(IX+3)
	LD	H,C
	CALL	?L_MUL_L03
	ADD	HL,HL
	RL	C
	RL	B
	PUSH	HL
	LD	HL,2
	ADD	HL,SP
	POP	DE
	LD	(HL),E
	INC	HL
	LD	(HL),D
	INC	HL
	LD	(HL),C
	INC	HL
	LD	(HL),B
; 59.	    cnt1 = 512 - (imgddr%512);//如不是页的开始,先读前面的不整页部分
	LD	HL,0
	PUSH	HL
	LD	H,2
	PUSH	HL
	LD	HL,16
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	EX	DE,HL
	CALL	?SL_MOD_L03
	EX	DE,HL
	LD	HL,512
	AND	A
	SBC	HL,DE
	PUSH	HL
	POP	IY
; 60.	
; 61.	    sdrw.faddr=imgddr;
	LD	HL,12
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	EX	DE,HL
	LD	(sdrw),HL
	LD	(sdrw+2),BC
; 62.	    sdrw.srampage=input8(0x05)&0x0f;//(byte)BufPage;    //FRAME BUFFER PAGE
	IN	A,(5)
	AND	15
	LD	(sdrw+7),A
; 63.	    sdrw.sramaddr = (WORD)DisplayBuffer;
	LD	HL,DisplayBuffer
	LD	(sdrw+5),HL
; 64.	    if (cnt > (unsigned long)cnt1)
	LD	HL,0
	ADD	HL,SP
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	PUSH	DE
	PUSH	BC
	PUSH	IY
	POP	HL
	LD	DE,0
	AND	A
	POP	BC
	SBC	HL,BC
	EX	DE,HL
	POP	BC
	SBC	HL,BC
	JR	NC,?0009
?0008:
; 65.	    {
; 66.	        SD_Read((int)&sdrw, cnt1);//把图片数据读出  放到 DisplayBuffer 中
	PUSH	IY
	POP	BC
	LD	DE,sdrw
	CALL	SD_Read
; 67.	        Hdrv_BuffDataTrans(DisplayBuffer, cnt1);//把显存中的数据搬到LCM中
	PUSH	IY
	POP	BC
	LD	DE,DisplayBuffer
	CALL	Hdrv_BuffDataTrans
; 68.	        cnt -= cnt1;
	LD	HL,0
	ADD	HL,SP
	PUSH	IY
	POP	DE
	LD	BC,0
	CALL	?L_SUBASG_L03
; 69.	        sdrw.faddr += cnt1;
	LD	HL,sdrw
	PUSH	IY
	POP	DE
	LD	BC,0
	CALL	?L_ADDASG_L03
?0009:
; 70.	    }
; 71.	    if (cnt == 0)
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	INC	HL
	OR	(HL)
	INC	HL
	OR	(HL)
	INC	HL
	OR	(HL)
	JR	Z,?0015
?0010:
; 72.	    {
; 73.	        return;
; 74.	    }
?0011:
?0013:
; 75.	
; 76.	    while (cnt > (unsigned long)DisplayBufLen)// 一个显示暂存区的大小
	LD	HL,0
	ADD	HL,SP
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	PUSH	DE
	PUSH	BC
	AND	A
	LD	HL,512
	POP	BC
	SBC	HL,BC
	LD	HL,0
	POP	BC
	SBC	HL,BC
	JR	NC,?0012
?0014:
; 77.	    {
; 78.	        SD_Read((int)&sdrw, DisplayBufLen);//把图片数据读出
	LD	BC,512
	LD	DE,sdrw
	CALL	SD_Read
; 79.	        Hdrv_BuffDataTrans(DisplayBuffer, DisplayBufLen);//把显存中的数据搬到LCM中
	LD	BC,512
	LD	DE,DisplayBuffer
	CALL	Hdrv_BuffDataTrans
; 80.	        cnt = cnt - (unsigned long)DisplayBufLen;
	LD	HL,0
	ADD	HL,SP
	LD	BC,65535
	LD	DE,65024
	CALL	?L_ADDASG_L03
; 81.	        sdrw.faddr += DisplayBufLen;
	LD	HL,sdrw
	LD	BC,0
	LD	DE,512
	CALL	?L_ADDASG_L03
; 82.	        output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);        
	IN	A,(78)
	SET	3,A
	OUT	(78),A
	JR	?0011
?0012:
; 83.	    }
; 84.	    sdrw.sramaddr = (WORD)DisplayBuffer;
	LD	HL,DisplayBuffer
	LD	(sdrw+5),HL
; 85.	    SD_Read((int)&sdrw, cnt);//把图片数据读出
	LD	HL,0
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	EX	DE,HL
	LD	C,L
	LD	B,H
	LD	DE,sdrw
	CALL	SD_Read
; 86.	    Hdrv_BuffDataTrans(DisplayBuffer, cnt);//把显存中的数据搬到LCM中
	LD	HL,0
	ADD	HL,SP
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	PUSH	DE
	PUSH	BC
	LD	DE,DisplayBuffer
	CALL	Hdrv_BuffDataTrans
	POP	AF
	POP	AF
; 87.	
; 88.	}
?0015:
	POP	HL
	POP	HL
	POP	IX
	POP	IY
	POP	BC
	RET
; 89.	
	RSEG	BAD_PSDI
sdrw:
	DEFS	8
	END

⌨️ 快捷键说明

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