diff options
Diffstat (limited to 'xorg-server/hw/xfree86/xf4bpp/vgaSolid.c')
-rw-r--r-- | xorg-server/hw/xfree86/xf4bpp/vgaSolid.c | 574 |
1 files changed, 0 insertions, 574 deletions
diff --git a/xorg-server/hw/xfree86/xf4bpp/vgaSolid.c b/xorg-server/hw/xfree86/xf4bpp/vgaSolid.c deleted file mode 100644 index 0ef18cfeb..000000000 --- a/xorg-server/hw/xfree86/xf4bpp/vgaSolid.c +++ /dev/null @@ -1,574 +0,0 @@ -/* - * Copyright IBM Corporation 1987,1988,1989 - * - * All Rights Reserved - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, - * provided that the above copyright notice appear in all copies and that - * both that copyright notice and this permission notice appear in - * supporting documentation, and that the name of IBM not be - * used in advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * - * IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING - * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL - * IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR - * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, - * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - * -*/ - -#ifdef HAVE_XORG_CONFIG_H -#include <xorg-config.h> -#endif - -#include "xf4bpp.h" -#include "OScompiler.h" -#include "vgaReg.h" -#include "vgaVideo.h" - -#include "xf86str.h" /* for pScrn->vtSema */ -extern ScrnInfoPtr *xf86Screens; - -#undef TRUE -#undef FALSE -#define TRUE 1 -#define FALSE 0 - -#ifndef PC98_EGC -#ifdef USE_ASM -extern void fastFill(); -extern void fastFillRMW(); -#else - -static void fastFill -( - register volatile unsigned char *destination, - register const unsigned int bytes_per_line, - register const unsigned int bytewidth, /* MUST BE > 0 !! */ - register unsigned int height /* MUST BE > 0 !! */ -) -{ -int stop_count = bytewidth ; -register int row_jump = bytes_per_line - bytewidth ; -#if !defined(OLDHC) && defined(BSDrt) && !defined(__i386__) -register const unsigned int notZero = ((unsigned char)(~0x0)); -#else -#define notZero ((unsigned char)(~0)) -#endif - -#define SINGLE_STORE \ - ( *( (VgaMemoryPtr) destination ) = notZero ); \ - destination++; stop_count--; - -/* TOP OF FIRST LOOP */ -BranchPoint: - -switch ( bytewidth & 0xF ) { /* Jump into loop at mod 16 remainder */ - LoopTop : - case 0x0 : SINGLE_STORE ; - case 0xF : SINGLE_STORE ; - case 0xE : SINGLE_STORE ; - case 0xD : SINGLE_STORE ; - case 0xC : SINGLE_STORE ; - case 0xB : SINGLE_STORE ; - case 0xA : SINGLE_STORE ; - case 0x9 : SINGLE_STORE ; - case 0x8 : SINGLE_STORE ; - case 0x7 : SINGLE_STORE ; - case 0x6 : SINGLE_STORE ; - case 0x5 : SINGLE_STORE ; - case 0x4 : SINGLE_STORE ; - case 0x3 : SINGLE_STORE ; - case 0x2 : SINGLE_STORE ; - case 0x1 : SINGLE_STORE ; -/* FIRST LOOP */ - if ( stop_count ) - goto LoopTop ; -/* SECOND LOOP */ - if ( --height ) { - destination += row_jump ; - stop_count = bytewidth ; - goto BranchPoint ; - } - else - return ; -#undef SINGLE_STORE -} -/*NOTREACHED*/ -} - -/* For Read-Modify-Write Case */ -static void fastFillRMW -( - register volatile unsigned char *destination, - register const unsigned int bytes_per_line, - register const unsigned int bytewidth, /* MUST BE > 0 !! */ - register unsigned int height /* MUST BE > 0 !! */ -) -{ -int stop_count = bytewidth ; -register int row_jump = bytes_per_line - bytewidth ; -#if !defined(OLDHC) && defined(BSDrt) && !defined(__i386__) -register const unsigned int notZero = ((unsigned char)(~0x0)); -#endif -register int tmp ; - -#define SINGLE_STORE \ - tmp = *( (VgaMemoryPtr) destination ) ; (void)tmp; \ - ( *( (VgaMemoryPtr) destination ) = notZero ) ; \ - destination++; stop_count-- ; - -/* TOP OF FIRST LOOP */ -BranchPoint: - -switch ( bytewidth & 0xF ) { /* Jump into loop at mod 16 remainder */ - LoopTop : - case 0x0 : SINGLE_STORE ; - case 0xF : SINGLE_STORE ; - case 0xE : SINGLE_STORE ; - case 0xD : SINGLE_STORE ; - case 0xC : SINGLE_STORE ; - case 0xB : SINGLE_STORE ; - case 0xA : SINGLE_STORE ; - case 0x9 : SINGLE_STORE ; - case 0x8 : SINGLE_STORE ; - case 0x7 : SINGLE_STORE ; - case 0x6 : SINGLE_STORE ; - case 0x5 : SINGLE_STORE ; - case 0x4 : SINGLE_STORE ; - case 0x3 : SINGLE_STORE ; - case 0x2 : SINGLE_STORE ; - case 0x1 : SINGLE_STORE ; -/* FIRST LOOP */ - if ( stop_count ) - goto LoopTop ; -/* SECOND LOOP */ - if ( --height ) { - destination += row_jump ; - stop_count = bytewidth ; - goto BranchPoint ; - } - else - return ; -} -#undef SINGLE_STORE -/*NOTREACHED*/ -} -#endif - - -void xf4bppFillSolid( pWin, color, alu, planes, x0, y0, lx, ly ) -WindowPtr pWin; /* GJA */ -unsigned long int color ; -const int alu ; -unsigned long int planes ; -register int x0 ; -register const int y0 ; -register int lx ; -register const int ly ; /* MUST BE > 0 !! */ -{ -IOADDRESS REGBASE; -register volatile unsigned char *dst ; -register int tmp ; -register int tmp2 ; -register int tmp3 ; -unsigned int data_rotate_value = VGA_COPY_MODE ; -unsigned int read_write_modify = FALSE ; -unsigned int invert_existing_data = FALSE ; - -{ /* Start GJA */ - if ( !xf86Screens[((DrawablePtr)pWin)->pScreen->myNum]->vtSema ) { - xf4bppOffFillSolid( pWin, color, alu, planes, x0, y0, lx, ly ); - return; - } -} /* End GJA */ - -if ( ( lx == 0 ) || ( ly == 0 ) ) - return; - -switch ( alu ) { - case GXclear: /* 0x0 Zero 0 */ - color = 0 ; - break ; - case GXnor: /* 0x8 NOT src AND NOT dst */ - invert_existing_data = TRUE ; - case GXandInverted: /* 0x4 NOT src AND dst */ - color = ~color ; - case GXand: /* 0x1 src AND dst */ - data_rotate_value = VGA_AND_MODE ; - read_write_modify = TRUE ; - case GXcopy: /* 0x3 src */ - break ; - case GXnoop: /* 0x5 dst */ - return ; - case GXequiv: /* 0x9 NOT src XOR dst */ - color = ~color ; - case GXxor: /* 0x6 src XOR dst */ - data_rotate_value = VGA_XOR_MODE ; - read_write_modify = TRUE ; - planes &= color ; - break ; - case GXandReverse: /* 0x2 src AND NOT dst */ - invert_existing_data = TRUE ; - data_rotate_value = VGA_AND_MODE ; - read_write_modify = TRUE ; - break ; - case GXorReverse: /* 0xb src OR NOT dst */ - invert_existing_data = TRUE ; - data_rotate_value = VGA_OR_MODE ; - read_write_modify = TRUE ; - break ; - case GXnand: /* 0xe NOT src OR NOT dst */ - invert_existing_data = TRUE ; - case GXorInverted: /* 0xd NOT src OR dst */ - color = ~color ; - case GXor: /* 0x7 src OR dst */ - data_rotate_value = VGA_OR_MODE ; - read_write_modify = TRUE ; - break ; - case GXcopyInverted: /* 0xc NOT src */ - color = ~color ; - break ; - case GXinvert: /* 0xa NOT dst */ - data_rotate_value = VGA_XOR_MODE ; - read_write_modify = TRUE ; - case GXset: /* 0xf 1 */ - color = VGA_ALLPLANES ; - default: - break ; -} - -if ( !( planes &= VGA_ALLPLANES ) ) - return ; - -REGBASE = - xf86Screens[((DrawablePtr)pWin)->pScreen->myNum]->domainIOBase + 0x300; - -/* - * Set The Plane-Enable - */ -SetVideoSequencer( Mask_MapIndex, planes ) ; -SetVideoGraphics( Enb_Set_ResetIndex, planes ) ; -/* - * Put Display Into SET/RESET Write Mode - */ -SetVideoGraphics( Graphics_ModeIndex, VGA_WRITE_MODE_3 ) ; -/* - * Set The Color in The Set/Reset Register - */ -SetVideoGraphics( Set_ResetIndex, color & VGA_ALLPLANES ) ; -/* - * Set The Function-Select In The Data Rotate Register - */ -SetVideoGraphics( Data_RotateIndex, data_rotate_value ) ; - -/* Do Left Edge */ -if ((tmp = x0 & 07)) { - tmp2 = SCRRIGHT8( ( (unsigned) 0xFF ), tmp ) ; - /* Catch The Cases Where The Entire Region Is Within One Byte */ - if ( ( lx -= 8 - tmp ) < 0 ) { - tmp2 &= SCRLEFT8( 0xFF, -lx ) ; - lx = 0 ; - } - /* Set The Bit Mask Reg */ - SetVideoGraphics(Bit_MaskIndex, tmp2 ) ; - if ( invert_existing_data == TRUE ) { - SetVideoGraphics( Set_ResetIndex, VGA_ALLPLANES ) ; - SetVideoGraphics( Data_RotateIndex, VGA_XOR_MODE ) ; - dst = SCREENADDRESS( pWin, x0, y0 ); - for ( tmp = ly; - tmp-- ; ) { - tmp3 = *( (VgaMemoryPtr) dst ) ; - (void)tmp3; - *( (VgaMemoryPtr) dst ) = tmp2 ; - dst += BYTES_PER_LINE(pWin); - } - SetVideoGraphics( Set_ResetIndex, color & VGA_ALLPLANES ) ; - SetVideoGraphics( Data_RotateIndex, data_rotate_value ) ; - /* Un-Set XOR */ - } - dst = SCREENADDRESS( pWin, x0, y0 ); - for ( tmp = ly; - tmp-- ; ) { - tmp3 = *( (VgaMemoryPtr) dst ) ; - (void)tmp3; - *( (VgaMemoryPtr) dst ) = tmp2 ; - dst += BYTES_PER_LINE(pWin); - } - if ( !lx ) { /* All Handled In This Byte */ - return ; - } - x0 = ( x0 + 8 ) & ~07 ; -} - -/* Fill The Center Of The Box */ -if ( ROW_OFFSET( lx ) ) { - SetVideoGraphics(Bit_MaskIndex, 0xFF ) ; - if ( invert_existing_data == TRUE ) { - SetVideoGraphics( Set_ResetIndex, VGA_ALLPLANES ) ; - SetVideoGraphics( Data_RotateIndex, VGA_XOR_MODE ) ; - fastFillRMW( SCREENADDRESS( pWin, x0, y0 ), - BYTES_PER_LINE(pWin), - ROW_OFFSET( lx ), ly ) ; - SetVideoGraphics( Set_ResetIndex, color & VGA_ALLPLANES ) ; - SetVideoGraphics( Data_RotateIndex, data_rotate_value ) ; - /* Un-Set XOR */ - /* Point At The Bit Mask Reg */ - } - (* ( ( read_write_modify == FALSE ) ? fastFill : fastFillRMW ) ) - ( SCREENADDRESS( pWin, x0, y0 ), BYTES_PER_LINE(pWin), - ROW_OFFSET( lx ), ly ) ; -} - -/* Do Right Edge */ -if ((tmp = BIT_OFFSET(lx))) { /* x0 Now Is Byte Aligned */ - /* Set The Bit Mask */ - SetVideoGraphics( Bit_MaskIndex, - (tmp2 = SCRLEFT8( 0xFF, ( 8 - tmp ) ) ) ) ; - if ( invert_existing_data == TRUE ) { - SetVideoGraphics( Set_ResetIndex, VGA_ALLPLANES ) ; - SetVideoGraphics( Data_RotateIndex, VGA_XOR_MODE ) ; - dst = SCREENADDRESS( pWin, ( x0 + lx ), y0 ); - for ( tmp = ly; - tmp-- ; ) { - tmp3 = *( (VgaMemoryPtr) dst ) ; - (void)tmp3; - *( (VgaMemoryPtr) dst ) = tmp2 ; - dst += BYTES_PER_LINE(pWin); - } - SetVideoGraphics( Set_ResetIndex, color & VGA_ALLPLANES ) ; - SetVideoGraphics( Data_RotateIndex, data_rotate_value ) ; - /* Un-Set XOR */ - } - dst = SCREENADDRESS( pWin, ( x0 + lx ), y0 ); - for ( tmp = ly; - tmp-- ; ) { - tmp3 = *( (VgaMemoryPtr) dst ) ; - (void)tmp3; - *( (VgaMemoryPtr) dst ) = tmp2 ; - dst += BYTES_PER_LINE(pWin) ; - } -} -/* Disable Set/Reset Register */ -SetVideoGraphics( Enb_Set_ResetIndex, 0 ) ; - - -return ; -} - -#else /* for PC98 EGC */ -static void WordfastFill( destination, bytes_per_line, wordwidth, height ) -register volatile unsigned char *destination ; -register const unsigned int bytes_per_line ; -register const unsigned int wordwidth ; /* MUST BE > 0 !! */ -register unsigned int height ; /* MUST BE > 0 !! */ -{ -int stop_count = wordwidth ; -register int row_jump = bytes_per_line - wordwidth*2 ; -#if !defined(OLDHC) && defined(BSDrt) && !defined(__i386__) && 0 -register const int notZero = ~0x0 ; -#else -#define notZero ( ~0 ) -#endif - -#define SINGLE_STORE \ - ( *( (unsigned short *) destination++ ) = notZero ); \ - destination++; stop_count--; - -/* TOP OF FIRST LOOP */ -BranchPoint: - -switch ( wordwidth & 0xF ) { /* Jump into loop at mod 16 remainder */ - LoopTop : - case 0x0 : SINGLE_STORE ; - case 0xF : SINGLE_STORE ; - case 0xE : SINGLE_STORE ; - case 0xD : SINGLE_STORE ; - case 0xC : SINGLE_STORE ; - case 0xB : SINGLE_STORE ; - case 0xA : SINGLE_STORE ; - case 0x9 : SINGLE_STORE ; - case 0x8 : SINGLE_STORE ; - case 0x7 : SINGLE_STORE ; - case 0x6 : SINGLE_STORE ; - case 0x5 : SINGLE_STORE ; - case 0x4 : SINGLE_STORE ; - case 0x3 : SINGLE_STORE ; - case 0x2 : SINGLE_STORE ; - case 0x1 : SINGLE_STORE ; -/* FIRST LOOP */ - if ( stop_count ) - goto LoopTop ; -/* SECOND LOOP */ - if ( --height ) { - destination += row_jump ; - stop_count = wordwidth ; - goto BranchPoint ; - } - else - return ; -#undef SINGLE_STORE -} -/*NOTREACHED*/ -} - -void xf4bppFillSolid( pWin, color, alu, planes, x0, y0, lx, ly ) -WindowPtr pWin; /* GJA */ -unsigned long int color ; -const int alu ; -unsigned long int planes ; -register int x0 ; -register const int y0 ; -register int lx ; -register const int ly ; /* MUST BE > 0 !! */ -{ -register volatile unsigned char *dst ; -register tmp ; -register tmp2 ; -register unsigned short tmp3 ; -unsigned short ROP_value; -unsigned int data_rotate_value = VGA_COPY_MODE ; -unsigned int read_write_modify = FALSE ; -unsigned int invert_existing_data = FALSE ; - -{ /* Start GJA */ - if ( !xf86Screens[((DrawablePtr)pWin)->pScreen->myNum]->vtSema ) { - xf4bppOffFillSolid( pWin, color, alu, planes, x0, y0, lx, ly ); - return; - } -} /* End GJA */ - -if ( ( lx == 0 ) || ( ly == 0 ) ) - return; - -switch ( alu ) { - case GXclear: /* 0x0 Zero 0 */ - color = 0 ; - break ; - case GXnor: /* 0x8 NOT src AND NOT dst */ - invert_existing_data = TRUE ; - case GXandInverted: /* 0x4 NOT src AND dst */ - color = ~color ; - case GXand: /* 0x1 src AND dst */ - data_rotate_value = VGA_AND_MODE ; - read_write_modify = TRUE ; - case GXcopy: /* 0x3 src */ - break ; - case GXnoop: /* 0x5 dst */ - return ; - case GXequiv: /* 0x9 NOT src XOR dst */ - color = ~color ; - case GXxor: /* 0x6 src XOR dst */ - data_rotate_value = VGA_XOR_MODE ; - read_write_modify = TRUE ; - planes &= color ; - break ; - case GXandReverse: /* 0x2 src AND NOT dst */ - invert_existing_data = TRUE ; - data_rotate_value = VGA_AND_MODE ; - read_write_modify = TRUE ; - break ; - case GXorReverse: /* 0xb src OR NOT dst */ - invert_existing_data = TRUE ; - data_rotate_value = VGA_OR_MODE ; - read_write_modify = TRUE ; - break ; - case GXnand: /* 0xe NOT src OR NOT dst */ - invert_existing_data = TRUE ; - case GXorInverted: /* 0xd NOT src OR dst */ - color = ~color ; - case GXor: /* 0x7 src OR dst */ - data_rotate_value = VGA_OR_MODE ; - read_write_modify = TRUE ; - break ; - case GXcopyInverted: /* 0xc NOT src */ - color = ~color ; - break ; - case GXinvert: /* 0xa NOT dst */ - data_rotate_value = VGA_XOR_MODE ; - read_write_modify = TRUE ; - case GXset: /* 0xf 1 */ - color = VGA_ALLPLANES ; - default: - break ; -} - -if ( !( planes &= VGA_ALLPLANES ) ) - return ; - -/* Set Access Planes */ -outw(EGC_PLANE, ~planes); -switch(data_rotate_value) { -/* EGC MODE.. Cmp Read: Flase, WriteSource=ROP, ReadSource=CPU */ - case VGA_AND_MODE: - if (invert_existing_data) - ROP_value = EGC_AND_INV_MODE; - else - ROP_value = EGC_AND_MODE; - break; - case VGA_OR_MODE: - if (invert_existing_data) - ROP_value = EGC_OR_INV_MODE; - else - ROP_value = EGC_OR_MODE; - break; - case VGA_XOR_MODE: - if (invert_existing_data) - ROP_value = EGC_XOR_INV_MODE; - else - ROP_value = EGC_XOR_MODE; - break; - case VGA_COPY_MODE: - default: - ROP_value = EGC_COPY_MODE; - break; -} -outw(EGC_MODE, ROP_value); -outw(EGC_FGC, color & VGA_ALLPLANES); -/* Do Left Edge */ -if ( tmp = x0 & 0x0f ) { - dst = (unsigned char *)((int)(SCREENADDRESS(pWin,x0,y0)) & ~0x01); - tmp3 = (unsigned)0xffff >>tmp; - /* Catch The Cases Where The Entire Region Is Within One Word */ - if ( ( lx -= 16 - tmp ) < 0 ) { - tmp3 &= (unsigned)0xffff << -lx; - lx = 0 ; - } - tmp3 = (unsigned short)(tmp3 >> 8 | tmp3 << 8); - for ( tmp = ly; - tmp-- ; ) { - *((unsigned short *) dst ) = tmp3 ; - dst += BYTES_PER_LINE(pWin); - } - if ( !lx ) { /* All Handled In This Word */ - return ; - } - x0 = ( x0 + 0x0f ) & ~0x0f ; -} - -/* Fill The Center Of The Box */ -if (lx >> 4) { - WordfastFill( SCREENADDRESS( pWin, x0, y0 ), BYTES_PER_LINE(pWin), - (lx >> 4), ly ) ; -} - -/* Do Right Edge */ -if ( tmp = lx & 0x0f ) { /* x0 Now Is Word Aligned */ - /* Set The Bit Mask */ - tmp3 = (unsigned)0xffff << ( 16 - tmp ); - dst = (unsigned char*)((int)SCREENADDRESS(pWin,(x0+lx),y0) & ~0x01); - tmp3 = (unsigned short)(tmp3 >> 8 | tmp3 << 8); - for ( tmp = ly; - tmp-- ; ) { - *( (unsigned short *) dst ) = tmp3 ; - dst += BYTES_PER_LINE(pWin); - } -} - -return ; -} -#endif |