From 7fe60435bce6595a9c58a9bfd8244d74b5320e96 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Tue, 15 Jan 2013 08:46:13 +0100 Subject: Import DirectFB141_2k11R3_beta5 --- Source/DirectFB/gfxdrivers/cyber5k/cyber5k_alpha.c | 260 +++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100755 Source/DirectFB/gfxdrivers/cyber5k/cyber5k_alpha.c (limited to 'Source/DirectFB/gfxdrivers/cyber5k/cyber5k_alpha.c') diff --git a/Source/DirectFB/gfxdrivers/cyber5k/cyber5k_alpha.c b/Source/DirectFB/gfxdrivers/cyber5k/cyber5k_alpha.c new file mode 100755 index 0000000..4862293 --- /dev/null +++ b/Source/DirectFB/gfxdrivers/cyber5k/cyber5k_alpha.c @@ -0,0 +1,260 @@ +/* + (c) Copyright 2001-2009 The world wide DirectFB Open Source Community (directfb.org) + (c) Copyright 2000-2004 Convergence (integrated media) GmbH + + All rights reserved. + + Written by Denis Oliver Kropp , + Andreas Hundt , + Sven Neumann , + Ville Syrjälä and + Claudio Ciccani . + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#include "cyber5k.h" +#include "cyber5k_alpha.h" +#include "regs.h" + +void cyber_cleanup_alpha(void) +{ + int i; + + cyber_grphw(0xfa, 0); + for (i=0; i<16; i++) { + if (i == 0x0A) {/*Don't clean up SyncLock video path if there is one*/ + cyber_out8(cyber_mmio, SEQINDEX, 0x40 + i); + cyber_out8(cyber_mmio, SEQDATA, cyber_in8(cyber_mmio, SEQDATA) & 0x08); + } + else { + cyber_out8(cyber_mmio, SEQINDEX, 0x40 + i); + cyber_out8(cyber_mmio, SEQDATA, 0x00); + } + } + + cyber_grphw(0xfa, 8); + for (i=0; i<16; i++) { + if(i==0x0F) {/*Just in case there is a SyncLock video*/ + cyber_out8(cyber_mmio, SEQINDEX, 0x40 + i); + cyber_out8(cyber_mmio, SEQDATA, 0x00); + cyber_out8(cyber_mmio, SEQDATA, cyber_in8(cyber_mmio, SEQDATA) | 0xC0); + } + else { + cyber_out8(cyber_mmio, SEQINDEX, 0x40 + i); + cyber_out8(cyber_mmio, SEQDATA, 0x00); + } + } + + cyber_grphw(0xfa, 0x10); + for (i=0; i<16; i++) { + cyber_out8(cyber_mmio, SEQINDEX, 0x40 + i); + cyber_out8(cyber_mmio, SEQDATA, 0x00); + } + + cyber_grphw(0xfa, 0x18); + for (i=0; i<16; i++) { + cyber_out8(cyber_mmio, SEQINDEX, 0x40 + i); + cyber_out8(cyber_mmio, SEQDATA, 0x00); + } + + cyber_grphw(0xfa, 0x20); + for (i=0; i<16; i++) { + cyber_out8(cyber_mmio, SEQINDEX, 0x40 + i); + cyber_out8(cyber_mmio, SEQDATA, 0x00); + } + + cyber_out8(cyber_mmio, SEQINDEX, 0xA6); + /*for video capture*/ + cyber_out8(cyber_mmio, SEQDATA, cyber_in8(cyber_mmio, SEQDATA) & 0xF0); + +#if 0 + /*for 8-bit Index mode*/ + if(bEnabled8Bit) /*if we are in 8-bit alpha-blending mode, remember to disable it*/ + EnablePaletteMode(0); +#endif + + cyber_out8(cyber_mmio, GRAINDEX, 0xfa); + cyber_out8(cyber_mmio, GRADATA, 0x80); + cyber_out8(cyber_mmio, GRAINDEX, 0xe0); + cyber_out8(cyber_mmio, GRADATA, cyber_in8(cyber_mmio, 0x03cf) | 0x04); + cyber_out8(cyber_mmio, GRAINDEX, 0xfa); + cyber_out8(cyber_mmio, GRADATA, 0x00); +} + +void cyber_enable_alpha(int enable) +{ + cyber_grphw(0xfa, 0); + + cyber_out8(cyber_mmio, SEQINDEX, 0x4b); + if (enable) + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) | 0x80)); + else + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) & 0x7F)); +} + +void cyber_enable_fullscreen_alpha(int enable) +{ + cyber_grphw(0xfa, 0); + + cyber_out8(cyber_mmio, SEQINDEX, 0x4b); + if (enable) + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) | 0x40)); + else + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) & 0xBF)); +} + +void cyber_select_blend_src1(int src) +{ + cyber_grphw(0xfa, 0); + + cyber_out8(cyber_mmio, SEQINDEX, 0x49); + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) & ~0x03) | src); +} + +void cyber_select_blend_src2(int src) +{ + cyber_grphw(0xfa, 0); + + cyber_out8(cyber_mmio, SEQINDEX, 0x4d); + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) & ~0x30) | (src << 4)); + if(src == SRC2_OVERLAY1) { /*if source is Overlay one only, disable Overlay 2*/ + cyber_out8(cyber_mmio, GRAINDEX, 0xfa); + cyber_out8(cyber_mmio, GRADATA, 0x08); + cyber_out8(cyber_mmio, SEQINDEX, 0x4f); + cyber_out8(cyber_mmio, SEQDATA, cyber_in8(cyber_mmio, SEQDATA) | 0x08); + cyber_out8(cyber_mmio, GRADATA, 0x00); + } +} + +void cyber_select_alpha_src(int src) +{ + cyber_grphw(0xfa, 0); + + cyber_out8(cyber_mmio, SEQINDEX, 0x49); + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) & ~0x60) | (src << 5)); + /*if alpha source comes form Overlay2, we need to disable Overlay2 color key function*/ + if(src == ALPHA_OVERLAY2) { + /*Disable Overlay 2 in Source B path*/ + cyber_out8(cyber_mmio, GRAINDEX, 0xfa); + cyber_out8(cyber_mmio, GRADATA, 0x08); + cyber_out8(cyber_mmio, SEQINDEX, 0x4f); + cyber_out8(cyber_mmio, SEQDATA, cyber_in8(cyber_mmio, SEQDATA) | 0x08); + /*Disable V2 generally */ + cyber_out8(cyber_mmio, GRADATA, 0x20); + cyber_out8(cyber_mmio, SEQINDEX, 0x47); + cyber_out8(cyber_mmio, SEQDATA, cyber_in8(cyber_mmio, SEQDATA) | 0x02); + cyber_out8(cyber_mmio, GRADATA, 0x00); + } +} + +void cyber_set_alpha_reg(unsigned char r, unsigned char g, unsigned char b) +{ + cyber_grphw(0xfa, 0); + + cyber_seqw(0x46, r); + cyber_seqw(0x47, g); + cyber_seqw(0x48, b); +} + + +void cyber_set_magic_match_reg( unsigned char bR, unsigned char bG, unsigned char bB ) +{ + cyber_out8(cyber_mmio, GRAINDEX, 0xfa); + cyber_out8(cyber_mmio, GRADATA, 8); + /*Disable range feature first*/ + cyber_out8(cyber_mmio, SEQINDEX, 0x46); + cyber_out8(cyber_mmio, SEQDATA, cyber_in8(cyber_mmio, SEQDATA) & 0x7F); + + cyber_out8(cyber_mmio, SEQINDEX, 0x40); + cyber_out8(cyber_mmio, SEQDATA, bR); + cyber_out8(cyber_mmio, SEQINDEX, 0x41); + cyber_out8(cyber_mmio, SEQDATA, bG); + cyber_out8(cyber_mmio, SEQINDEX, 0x42); + cyber_out8(cyber_mmio, SEQDATA, bB); +} + +void cyber_set_alpha_RAM_reg( unsigned char bIndex, unsigned char bR, unsigned char bG, unsigned char bB) +{ + unsigned char bData; + + cyber_out8(cyber_mmio, GRAINDEX, 0xfa); + cyber_out8(cyber_mmio, GRADATA, 0); + + cyber_out8(cyber_mmio, SEQINDEX, 0x49); + bData = cyber_in8(cyber_mmio, SEQDATA); + cyber_out8(cyber_mmio, SEQDATA, 0x18); /*select CPU to write*/ + + cyber_out8(cyber_mmio, SEQINDEX, 0x4e); /*enable index of alpha RAM R*/ + cyber_out8(cyber_mmio, SEQDATA, 0x20+bIndex); + + cyber_out8(cyber_mmio, SEQINDEX, 0x4f); /*RAM data port*/ + cyber_out8(cyber_mmio, SEQDATA, bR); + + cyber_out8(cyber_mmio, SEQINDEX, 0x4e); /*enable index of alpha RAM G*/ + cyber_out8(cyber_mmio, SEQDATA, 0x40+bIndex); + + cyber_out8(cyber_mmio, SEQINDEX, 0x4f); /*RAM data port*/ + cyber_out8(cyber_mmio, SEQDATA, bG); + + cyber_out8(cyber_mmio, SEQINDEX, 0x4e); /*enable index of alpha RAM B*/ + cyber_out8(cyber_mmio, SEQDATA, 0x80+bIndex); + + cyber_out8(cyber_mmio, SEQINDEX, 0x4f); /*RAM data port*/ + cyber_out8(cyber_mmio, SEQDATA, bB); + + cyber_out8(cyber_mmio, SEQINDEX, 0x49); + cyber_out8(cyber_mmio, SEQDATA, bData); + + cyber_out8(cyber_mmio, SEQINDEX, 0x4e); /*Set index of alpha RAM */ + cyber_out8(cyber_mmio, SEQDATA, bIndex); +} + +void cyber_select_RAM_addr( unsigned char bRAMAddrSel ) +{ + cyber_out8(cyber_mmio, GRAINDEX, 0xfa); + cyber_out8(cyber_mmio, GRADATA, 0); + + cyber_out8(cyber_mmio, SEQINDEX, 0x49); + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) & ~0x18) | (bRAMAddrSel << 3)); +} + +void cyber_enable_magic_alpha_blend( unsigned char enable ) +{ + cyber_out8(cyber_mmio, GRAINDEX, 0xfa); + cyber_out8(cyber_mmio, GRADATA, 8); + + cyber_out8(cyber_mmio, SEQINDEX, 0x46); + if (enable) + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) | 0x01)); + else + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) & 0xFE)); + + cyber_out8(cyber_mmio, GRAINDEX, 0xfa); + cyber_out8(cyber_mmio, GRADATA, 0x20); + cyber_out8(cyber_mmio, SEQINDEX, 0x47); + cyber_out8(cyber_mmio, SEQDATA, cyber_in8(cyber_mmio, SEQDATA) & 0x7F); + cyber_out8(cyber_mmio, GRADATA, 0x00); +} + +void cyber_select_magic_alpha_src( unsigned char bAlphaSrc ) +{ + cyber_out8(cyber_mmio, GRAINDEX, 0xfa); + cyber_out8(cyber_mmio, GRADATA, 8); + + cyber_out8(cyber_mmio, SEQINDEX, 0x46); + cyber_out8(cyber_mmio, SEQDATA, (cyber_in8(cyber_mmio, SEQDATA) & ~0x0C) | (bAlphaSrc << 2)); +} -- cgit