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

📄 sdl_ataric2p.s

📁 Simple DirectMedia Layer - Simple DirectMedia Layer 是一个跨平台的多媒体库设计用来提供快速图形framebuffer和音频驱动。应用MPEG为软件
💻 S
字号:
/*    SDL - Simple DirectMedia Layer    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library General Public    License as published by the Free Software Foundation; either    version 2 of the License, or (at your option) any later version.    This library is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    Library General Public License for more details.    You should have received a copy of the GNU Library General Public    License along with this library; if not, write to the Free    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA    Sam Lantinga    slouken@libsdl.org*/#ifdef SAVE_RCSIDstatic char rcsid = "@(#) $Id: SDL_ataric2p.S,v 1.2 2002/03/06 11:23:03 slouken Exp $";#endif/* *	Chunky to planar conversion routine *	1 byte/pixel -> 4 or 8 bit planes * *	Patrice Mandin *	Xavier Joubert *//* ------------	Function pointers ------------ */	.globl	_Atari_C2pInit	.globl	_Atari_C2pConvert	.data	.even	.comm	_Atari_C2pInit,4	.comm	_Atari_C2pConvert,4/* ------------	Conversion Table C2P ------------ */	.globl	_Atari_table_c2p	.data	.comm	_Atari_table_c2p,2048/* ------------	Init table C2P, 8 bits ------------ */	.globl	_Atari_C2pInit8	.text_Atari_C2pInit8:	movel	d2,sp@-	lea	_Atari_table_c2p,a0	movew	#255,d0c2p_initbcl:#if defined (__M68020__)	lea	a0@(0,d0:w:8),a1#else	movew	d0,d2	lslw	#3,d2	lea	a0@(0,d2:w),a1#endif	moveq	#7,d1c2p_initbyte:	btst	d1,d0	sne	d2	negw	d2	moveb	d2,a1@(0,d1:w)	dbra	d1,c2p_initbyte	dbra	d0,c2p_initbcl	movel	sp@+,d2	rts/* ------------	Conversion C2P, 8 bits ------------ */	.globl	_Atari_C2pConvert8	.text_Atari_C2pConvert8:	movel	sp@(4),c2p_source	movel	sp@(8),c2p_dest	movel	sp@(12),c2p_width	movel	sp@(16),c2p_height	movel	sp@(20),c2p_dblligne	movel	sp@(24),c2p_srcpitch	movel	sp@(28),c2p_dstpitch	moveml	d2-d7/a2-a6,sp@-	movel	c2p_source,a0	movel	c2p_dest,a1	lea	_Atari_table_c2p,a2	movel	#0x000f0001,d3#if defined(__M68020__)	moveq	#0,d0#endif		movel	c2p_height,d7	subql	#1,d7c2p8_bcly:	movel	a0,a4	| Save start address of source	movel	a1,a5	| Save start address of dest	| Conversion                 	movel	c2p_width,d6	lsrw	#4,d6	subql	#1,d6c2p8_bclx:	| Octets 0-7		moveq	#0,d1	moveq	#0,d2	moveq	#7,d5c2p8_bcl07:#if defined(__M68020__)	moveb	a0@+,d0	lea	a2@(0,d0:w:8),a3#else	moveq	#0,d0	moveb	a0@+,d0	lslw	#3,d0	lea	a2@(0,d0:w),a3#endif	lsll	#1,d1	lsll	#1,d2	orl	a3@+,d1	orl	a3@,d2	dbra	d5,c2p8_bcl07	movepl	d1,a1@(0)	movepl	d2,a1@(8)	addw	d3,a1	swap	d3		| Octets 8-15	moveq	#0,d1	moveq	#0,d2	moveq	#7,d5c2p8_bcl815:#if defined(__M68020__)	moveb	a0@+,d0	lea	a2@(0,d0:w:8),a3#else	moveq	#0,d0	moveb	a0@+,d0	lslw	#3,d0	lea	a2@(0,d0:w),a3#endif	lsll	#1,d1	lsll	#1,d2	orl	a3@+,d1	orl	a3@,d2	dbra	d5,c2p8_bcl815	movepl	d1,a1@(0)	movepl	d2,a1@(8)	addw	d3,a1	swap	d3	dbra	d6,c2p8_bclx	| Double line ?	tstl	c2p_dblligne	beq	c2p8_nodblligne	movel	a5,a6			| src line	movel	a5,a1			| dest line	addl	c2p_dstpitch,a1	movel	c2p_width,d6	lsrw	#2,d6	subql	#1,d6c2p8_copydbl:	movel	a6@+,a1@+	dbra	d6,c2p8_copydbl	addl	c2p_dstpitch,a5c2p8_nodblligne:	| Next line	movel	a4,a0			addl	c2p_srcpitch,a0	movel	a5,a1	addl	c2p_dstpitch,a1	dbra	d7,c2p8_bcly	moveml	sp@+,d2-d7/a2-a6	rts/* ------------	Init table C2P, 4 bits ------------ */	.globl	_Atari_C2pInit4	.text_Atari_C2pInit4:	/* Nothing to do */	/* work is done in convert_c2p_pal */	rts/* ------------	Conversion C2P, 4 bits ------------ */	.globl	_Atari_C2pConvert4	.text_Atari_C2pConvert4:	movel	sp@(4),c2p_source	movel	sp@(8),c2p_dest	movel	sp@(12),c2p_width	movel	sp@(16),c2p_height	movel	sp@(20),c2p_dblligne	movel	sp@(24),c2p_srcpitch	movel	sp@(28),c2p_dstpitch	moveml	d2-d7/a2-a6,sp@-	movel	c2p_source,a0	movel	c2p_dest,a1	lea	_Atari_table_c2p,a2	movel	#0x00070001,d3#if defined(__M68020__)	moveq	#0,d0#endif		movel	c2p_height,d7	subql	#1,d7c2p4_bcly:	movel	a0,a4	| Save start address of source	movel	a1,a5	| Save start address of dest	| Conversion                 				movel	c2p_width,d6	lsrw	#4,d6	subql	#1,d6c2p4_bclx:	| Octets 0-7		moveq	#0,d1	moveq	#7,d5c2p4_bcl07:#if defined(__M68020__)	moveb	a0@+,d0	lea	a2@(0,d0:w:4),a3#else	moveq	#0,d0	moveb	a0@+,d0	lslw	#2,d0	lea	a2@(0,d0:w),a3#endif	lsll	#1,d1	orl	a3@,d1	dbra	d5,c2p4_bcl07	movepl	d1,a1@(0)	addw	d3,a1	swap	d3		| Octets 8-15	moveq	#0,d1	moveq	#7,d5c2p4_bcl815:#if defined(__M68020__)	moveb	a0@+,d0	lea	a2@(0,d0:w:4),a3#else	moveq	#0,d0	moveb	a0@+,d0	lslw	#2,d0	lea	a2@(0,d0:w),a3#endif	lsll	#1,d1	orl	a3@,d1	dbra	d5,c2p4_bcl815	movepl	d1,a1@(0)	addw	d3,a1	swap	d3	dbra	d6,c2p4_bclx	| Double line ?	tstl	c2p_dblligne	beq	c2p4_nodblligne	movel	a5,a6			| src line	movel	a5,a1			| dest line	addl	c2p_dstpitch,a1	movel	c2p_width,d6	lsrw	#3,d6	subql	#1,d6c2p4_copydbl:	movel	a6@+,a1@+	dbra	d6,c2p4_copydbl	addl	c2p_dstpitch,a5c2p4_nodblligne:	| Next line	movel	a4,a0			addl	c2p_srcpitch,a0	movel	a5,a1	addl	c2p_dstpitch,a1	dbra	d7,c2p4_bcly	moveml	sp@+,d2-d7/a2-a6	rts* ------------	Conversion of a light palette in 4 bits ------------ */	.globl	_Atari_C2pConvert4_pal	.text_Atari_C2pConvert4_pal:	/* a0 is a 256-word light palette */	movel	sp@(4),a0	moveml	d2-d3,sp@-	lea	_Atari_table_c2p,a1	movew	#255,d3c2p_pal_initbcl:	movew	a0@+,d0	lsrw	#4,d0	and	#15,d0	moveq	#3,d1c2p_pal_initbyte:	btst	d1,d0	sne	d2	negw	d2	moveb	d2,a1@(0,d1:w)	dbra	d1,c2p_pal_initbyte	addql	#4,a1	dbra	d3,c2p_pal_initbcl	moveml	sp@+,d2-d3	rts/* ------------	Buffers ------------ */	.data	.even	.comm	c2p_source,4	.comm	c2p_dest,4	.comm	c2p_width,4	.comm	c2p_height,4	.comm	c2p_dblligne,4	.comm	c2p_srcpitch,4	.comm	c2p_dstpitch,4

⌨️ 快捷键说明

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