diff options
| -rw-r--r-- | src/mesa/drivers/dos/vesa/blit.S | 199 | ||||
| -rw-r--r-- | src/mesa/drivers/dos/vga/vga.c | 226 | ||||
| -rw-r--r-- | src/mesa/drivers/dos/vga/vga.h | 42 | 
3 files changed, 467 insertions, 0 deletions
| diff --git a/src/mesa/drivers/dos/vesa/blit.S b/src/mesa/drivers/dos/vesa/blit.S new file mode 100644 index 0000000000..3598614c9f --- /dev/null +++ b/src/mesa/drivers/dos/vesa/blit.S @@ -0,0 +1,199 @@ +/*
 + * Mesa 3-D graphics library
 + * Version:  4.0
 + * 
 + * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 + * 
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the "Software"),
 + * to deal in the Software without restriction, including without limitation
 + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 + * and/or sell copies of the Software, and to permit persons to whom the
 + * Software is furnished to do so, subject to the following conditions:
 + * 
 + * The above copyright notice and this permission notice shall be included
 + * in all copies or substantial portions of the Software.
 + * 
 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + */
 +
 +/*
 + * DOS/DJGPP device driver v1.3 for Mesa 5.0
 + *
 + *  Copyright (C) 2002 - Borca Daniel
 + *  Email : dborca@yahoo.com
 + *  Web   : http://www.geocities.com/dborca
 + */
 +
 +
 +		.file	"blit.S"
 +
 +/*
 + * extern unsigned int vesa_gran_mask, vesa_gran_shift;
 + * extern int vl_video_selector;
 +
 + * extern void *vl_current_draw_buffer;
 + * extern int vl_current_stride, vl_current_height;
 + * extern int vl_current_offset, vl_current_delta;
 + */
 +
 +		.text
 +
 +/* Desc: VESA bank switching routine (BIOS)
 + *
 + * In  : EBX=0, EDX = bank number
 + * Out : -
 + *
 + * Note: thrashes EAX
 + */
 +		.p2align 5,,31
 +_vesa_swbankBIOS:
 +		movw	$0x4f05, %ax
 +		int	$0x10
 +		ret
 +
 +		.p2align 2,,3
 +		.global	_vesa_swbank
 +_vesa_swbank:	.long	_vesa_swbankBIOS
 +
 +/* Desc: void vesa_b_dump_virtual (void);
 + *
 + * In  : -
 + * Out : -
 + *
 + * Note: uses current draw buffer
 + */
 +		.p2align 5,,31
 +		.global	_vesa_b_dump_virtual
 +_vesa_b_dump_virtual:
 +		cld
 +		pushl	%es
 +		pushl	%ebx
 +		pushl	%esi
 +		pushl	%edi
 +		pushl	%ebp
 +		movl	_vl_video_selector, %es
 +		movl	_vl_current_draw_buffer, %esi
 +		movl	_vl_current_offset, %edi
 +		movl	_vesa_gran_shift, %ecx
 +		movl	_vesa_gran_mask, %ebp
 +		movl	%edi, %edx
 +		xorl	%ebx, %ebx
 +		andl	%ebp, %edi
 +		shrl	%cl, %edx
 +		incl	%ebp
 +		call	*_vesa_swbank
 +		movl	_vl_current_stride, %ecx
 +		movl	_vl_current_height, %eax
 +		movl	_vl_current_delta, %ebx
 +		shrl	$2, %ecx
 +		.balign	4
 +	0:
 +		pushl	%ecx
 +		.balign	4
 +	1:
 +		cmpl	%ebp, %edi
 +		jb	2f
 +		pushl	%eax
 +		pushl	%ebx
 +		incl	%edx
 +		xorl	%ebx, %ebx
 +		call	*_vesa_swbank
 +		popl	%ebx
 +		popl	%eax
 +		subl	%ebp, %edi
 +		.balign	4
 +	2:
 +		movsl
 +		decl	%ecx
 +		jnz	1b
 +		popl	%ecx
 +		addl	%ebx, %edi
 +		decl	%eax
 +		jnz	0b
 +		popl	%ebp
 +		popl	%edi
 +		popl	%esi
 +		popl	%ebx
 +		popl	%es
 +		ret
 +
 +/* Desc: void vesa_l_dump_virtual (void);
 + *
 + * In  : -
 + * Out : -
 + *
 + * Note: uses current draw buffer
 + */
 +		.p2align 5,,31
 +		.global	_vesa_l_dump_virtual
 +_vesa_l_dump_virtual:
 +		cld
 +		pushl	%es
 +		pushl	%esi
 +		pushl	%edi
 +		movl	_vl_video_selector, %es
 +		movl	_vl_current_draw_buffer, %esi
 +		movl	_vl_current_offset, %edi
 +		movl	_vl_current_stride, %ecx
 +		movl	_vl_current_height, %edx
 +		movl	_vl_current_delta, %eax
 +		shrl	$2, %ecx
 +		.balign	4
 +	0:
 +		pushl	%ecx
 +		rep;	movsl
 +		popl	%ecx
 +		addl	%eax, %edi
 +		decl	%edx
 +		jnz	0b
 +		popl	%edi
 +		popl	%esi
 +		popl	%es
 +		ret
 +
 +/* Desc: void vesa_l_dump_virtual_mmx (void);
 + *
 + * In  : -
 + * Out : -
 + *
 + * Note: uses current draw buffer
 + */
 +		.p2align 5,,31
 +		.global	_vesa_l_dump_virtual_mmx
 +_vesa_l_dump_virtual_mmx:
 +#ifdef USE_MMX_ASM
 +		pushl	%esi
 +		pushl	%edi
 +		movl	_vl_video_selector, %fs
 +		movl	_vl_current_draw_buffer, %esi
 +		movl	_vl_current_offset, %edi
 +		movl	_vl_current_stride, %ecx
 +		movl	_vl_current_height, %edx
 +		movl	_vl_current_delta, %eax
 +		shrl	$3, %ecx
 +		.balign	4
 +	0:
 +		pushl	%ecx
 +		.balign	4
 +	1:
 +		movq	(%esi), %mm0
 +		addl	$8, %esi
 +		movq	%mm0, %fs:(%edi)
 +		addl	$8, %edi
 +		decl	%ecx
 +		jnz	1b
 +		popl	%ecx
 +		addl	%eax, %edi
 +		decl	%edx
 +		jnz	0b
 +		popl	%edi
 +		popl	%esi
 +		emms
 +#endif
 +		ret
 diff --git a/src/mesa/drivers/dos/vga/vga.c b/src/mesa/drivers/dos/vga/vga.c new file mode 100644 index 0000000000..1888d98947 --- /dev/null +++ b/src/mesa/drivers/dos/vga/vga.c @@ -0,0 +1,226 @@ +/*
 + * Mesa 3-D graphics library
 + * Version:  4.1
 + * 
 + * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 + * 
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the "Software"),
 + * to deal in the Software without restriction, including without limitation
 + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 + * and/or sell copies of the Software, and to permit persons to whom the
 + * Software is furnished to do so, subject to the following conditions:
 + * 
 + * The above copyright notice and this permission notice shall be included
 + * in all copies or substantial portions of the Software.
 + * 
 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + */
 +
 +/*
 + * DOS/DJGPP device driver v1.3 for Mesa 5.0
 + *
 + *  Copyright (C) 2002 - Borca Daniel
 + *  Email : dborca@yahoo.com
 + *  Web   : http://www.geocities.com/dborca
 + */
 +
 +
 +#include <stdlib.h>
 +
 +#include "vga.h"
 +
 +
 +
 +static vl_mode modes[4] = {
 +       {0x13 | 0x4000, 320, 200, 320, 8, -1, 320*200},
 +       {0xffff, -1, -1, -1, -1, -1, -1}
 +};
 +
 +static word16 vga_ver;
 +static int linear_selector;
 +static int oldmode = -1;
 +
 +#define vga_color_precision 6
 +
 +
 +
 +/* Desc: Attempts to detect VGA, check video modes and create selectors.
 + *
 + * In  : -
 + * Out : mode array
 + *
 + * Note: -
 + */
 +static vl_mode *vga_init (void)
 +{
 + int rv = 0;
 +
 + if (vga_ver) {
 +    return modes;
 + }
 +
 + __asm("\n\
 +		movw	$0x1a00, %%ax	\n\
 +		int	$0x10		\n\
 +		cmpb	$0x1a, %%al	\n\
 +		jne	0f		\n\
 +		cmpb	$0x07, %%bl	\n\
 +		jb	0f		\n\
 +		andl	$0xff, %%ebx	\n\
 +		movl	%%ebx, %0	\n\
 + 0:":"=g"(rv)::"%eax", "%ebx");
 + if (rv == 0) {
 +    return NULL;
 + }
 +
 + if (_create_selector(&linear_selector, 0xa0000, 0x10000)) {
 +    return NULL;
 + }
 +
 + modes[0].sel = linear_selector;
 +
 + vga_ver = rv;
 + return modes;
 +}
 +
 +
 +
 +/* Desc: Frees all resources allocated by VGA init code.
 + *
 + * In  : -
 + * Out : -
 + *
 + * Note: -
 + */
 +static void vga_finit (void)
 +{
 + if (vga_ver) {
 +    _remove_selector(&linear_selector);
 + }
 +}
 +
 +
 +
 +/* Desc: Attempts to enter specified video mode.
 + *
 + * In  : ptr to mode structure, refresh rate
 + * Out : 0 if success
 + *
 + * Note: -
 + */
 +static int vga_entermode (vl_mode *p, int refresh)
 +{
 + if (!(p->mode & 0x4000)) {
 +    return -1;
 + }
 + VGA.blit = vl_can_mmx() ? vesa_l_dump_virtual_mmx : vesa_l_dump_virtual;
 +
 + if (oldmode == -1) {
 +    __asm("\n\
 +		movb	$0x0f, %%ah	\n\
 +		int	$0x10		\n\
 +		andl	$0xff, %%eax	\n\
 +		movl	%%eax, %0	\n\
 +    ":"=g"(oldmode)::"%eax", "%ebx");
 + }
 +
 + __asm("int $0x10"::"a"(p->mode&0xff));
 +
 + return 0;
 +}
 +
 +
 +
 +/* Desc: Restores to the mode prior to first call to vga_entermode.
 + *
 + * In  : -
 + * Out : -
 + *
 + * Note: -
 + */
 +static void vga_restore (void)
 +{
 + if (oldmode != -1) {
 +    __asm("int $0x10"::"a"(oldmode));
 + }
 +}
 +
 +
 +
 +/* Desc: set one palette entry
 + *
 + * In  : color index, R, G, B
 + * Out : -
 + *
 + * Note: uses normalized values
 + */
 +static void vga_setCI_f (int index, float red, float green, float blue)
 +{
 + float max = (1 << vga_color_precision) - 1;
 +
 + int _red = red * max;
 + int _green = green * max;
 + int _blue = blue * max;
 +
 + __asm("\n\
 +		movw $0x1010, %%ax	\n\
 +		movb %1, %%dh		\n\
 +		movb %2, %%ch		\n\
 +		int  $0x10		\n\
 + "::"b"(index), "m"(_red), "m"(_green), "c"(_blue):"%eax", "%edx");
 +}
 +
 +
 +
 +/* Desc: set one palette entry
 + *
 + * In  : color index, R, G, B
 + * Out : -
 + *
 + * Note: uses integer values
 + */
 +static void vga_setCI_i (int index, int red, int green, int blue)
 +{
 + __asm("\n\
 +		movw $0x1010, %%ax	\n\
 +		movb %1, %%dh		\n\
 +		movb %2, %%ch		\n\
 +		int  $0x10		\n\
 +"::"b"(index), "m"(red), "m"(green), "c"(blue):"%eax", "%edx");
 +}
 +
 +
 +
 +/* Desc: retrieve CI precision
 + *
 + * In  : -
 + * Out : precision in bits
 + *
 + * Note: -
 + */
 +static int vga_getCIprec (void)
 +{
 + return vga_color_precision;
 +}
 +
 +
 +
 +/*
 + * the driver
 + */
 +vl_driver VGA = {
 +          vga_init,
 +          vga_entermode,
 +          NULL,
 +          vga_setCI_f,
 +          vga_setCI_i,
 +          vga_getCIprec,
 +          vga_restore,
 +          vga_finit
 +};
 diff --git a/src/mesa/drivers/dos/vga/vga.h b/src/mesa/drivers/dos/vga/vga.h new file mode 100644 index 0000000000..b7ae84c961 --- /dev/null +++ b/src/mesa/drivers/dos/vga/vga.h @@ -0,0 +1,42 @@ +/*
 + * Mesa 3-D graphics library
 + * Version:  4.0
 + * 
 + * Copyright (C) 1999  Brian Paul   All Rights Reserved.
 + * 
 + * Permission is hereby granted, free of charge, to any person obtaining a
 + * copy of this software and associated documentation files (the "Software"),
 + * to deal in the Software without restriction, including without limitation
 + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 + * and/or sell copies of the Software, and to permit persons to whom the
 + * Software is furnished to do so, subject to the following conditions:
 + * 
 + * The above copyright notice and this permission notice shall be included
 + * in all copies or substantial portions of the Software.
 + * 
 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 + */
 +
 +/*
 + * DOS/DJGPP device driver v1.3 for Mesa 5.0
 + *
 + *  Copyright (C) 2002 - Borca Daniel
 + *  Email : dborca@yahoo.com
 + *  Web   : http://www.geocities.com/dborca
 + */
 +
 +
 +#ifndef VGA_H_included
 +#define VGA_H_included
 +
 +#include "../internal.h"
 +#include "../vesa/vesa.h"
 +
 +extern vl_driver VGA;
 +
 +#endif
 | 
