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

📄 vgainit.c

📁 cpc-1631的BSP包for VxWorks操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
/* vgaInit.c - a VGA 3+ mode initialization source module */

/* Copyright 1984-2000 Wind River Systems, Inc. */
#include "copyright_wrs.h"

/*
modification history
--------------------
01a,26mar00,ms  written.
*/

/*
DESCRIPTION

.I USAGE
This library provides initialization routines to configure VGA in 3+
alphanumeric mode.

The functions addressed here include:

.IP "   -"
Initialization of the VGA specific register set.

.LP

.I USER INTERFACE

.CS
STATUS vgaInit
    (
    VOID
    )
.CE

This routine will initialize the VGA specific register set to bring a VGA
card in VGA 3+ mode and loads the font in plane 2.

REFERENCES
.I Programmer's Guide to the EGA, VGA, and Super VGA Cards - Ferraro.
.I Programmer's Guide to PC & PS/2 Video Systems - Richard Wilton.

INCLUDE FILES: NONE.
*/

/* includes */
#include "vxWorks.h"
#include "sysLib.h"
#include "drv/pci/pciConfigLib.h"
#include "intLib.h"

/* include font */
#include "vgaFont.c"

/* defines */
#define VGA_FEATURE_CTRL  	0xfe000000+0x3DA  /* Feature Control Register */
#define VGA_MVGA_SR_PORT        0xfe000000+0x3C2  /* Miscellaneous Output Port */
#define VGA_DAC_PEL_MASK	0xfe000000+0x3C6  /* Color Palette Pixel Mask Register */
#define VGA_DAC_READ_INDEX	0xfe000000+0x3C7  /* Color Palette Read-Mode Index Reg */
#define VGA_DAC_STATE		0xfe000000+0x3C7  /* Color Palette State Register */
#define VGA_DAC_WRITE_INDEX	0xfe000000+0x3C8  /* Color Palette Index Register */
#define VGA_DAC_DATA_REG        0xfe000000+0x3C9  /* Color Palette Data Register */
#define VGA_AR_PORT             0xfe000000+0x3C0  /* Attribute Controller Index Port */
#define VGA_CR_PORT             0xfe000000+0x3D4  /* CRT Controller Index Port */
#define VGA_GR_PORT             0xfe000000+0x3CE  /* Graphics Controller Index Port */
#define VGA_SR_PORT             0xfe000000+0x3C4  /* Sequencer Index Port */
#define VGA_SR_DATA_PORT        0xfe000000+0x3C5  /* Sequencer Data Port */

/* forward declarations */
LOCAL VOID    vgaRegSet (int ioPort, short value);
LOCAL STATUS  vgaDnldFont (char * font, int len);
STATUS        vgaInit (void);

/*******************************************************************************
*
* vgaRegSet - sets the given vga register with given value.
*
* This routine sets the given vga register with given value.
*
* RETURNS: N/A
*/

LOCAL VOID vgaRegSet
    (
    int ioPort,
    short value
    )
    {
    sysOutByte (ioPort, (char) (value & 0xFF)); 
    sysOutByte (ioPort + 1, (char) (value >> 8));
    }

/*******************************************************************************
*
* vgaDnldFont - writes given font in plane 2. 
*
* This routine downloads the user specified font in bit plane 2 of VGA planes.
*
* RETURNS: OK/ERROR
*/

STATUS vgaDnldFont
    (
    char * font,
    int len
    )
    {
    int i, j, bytesPerChar;
    int intKey;
    unsigned char * vidPtr = (unsigned char *) 0xA0000;
    
    
    if ((bytesPerChar = len/CHARPERFONT) > MAXBYTESPERCH)
        return ERROR;

    intKey = intLock();
    
    /* sequencer is put to reset */
    vgaRegSet (VGA_SR_PORT, 0x0100); 
    /* write only to plane 2 */
    vgaRegSet (VGA_SR_PORT, 0x0402);
    /* sequential addressing */
    vgaRegSet (VGA_SR_PORT, 0x0704);
    /* out of reset */
    vgaRegSet (VGA_SR_PORT, 0x0300);
    
    /* read plane 2 only */
    vgaRegSet (VGA_GR_PORT, 0x0204);
    /* disable even-odd */
    vgaRegSet (VGA_GR_PORT, 0x0005);
    /* 0xA0000 */
    vgaRegSet (VGA_GR_PORT, 0x0006);

    intUnlock (intKey);
    
    /* Downloading a font into bit plane # 2 */
    i = 0;
    j = 0;
    while(i < FONTDATAMAX) {
    if (j < bytesPerChar)
        {
        *vidPtr++ = vgaFont[i];
        i++;
        j++;
        }
    else
        {
        vidPtr += (MAXBYTESPERCH - bytesPerChar);
        j = 0;
        }
    }
    /* Downloading over */

    intKey = intLock();
    
    /* sequencer is put to reset */
    vgaRegSet (VGA_SR_PORT, 0x0100);
    /* write only to plane 0 & 1 */
    vgaRegSet (VGA_SR_PORT, 0x0302);
    /* font 0 */
    vgaRegSet (VGA_SR_PORT, 0x0003);
    /* odd-even addressing */
    vgaRegSet (VGA_SR_PORT, 0x0304);
    /* out of reset */
    vgaRegSet (VGA_SR_PORT, 0x0300);
    
    /* read plane 0 only */
    vgaRegSet (VGA_GR_PORT, 0x0004);
    /* even-odd */
    vgaRegSet (VGA_GR_PORT, 0x1005);
    /* 0xB8000 */
    vgaRegSet (VGA_GR_PORT, 0x0E06);

    intUnlock (intKey);
    
    return OK;
    }


/*******************************************************************************
*
* vgaInit - initializes the VGA chip and loads font in memory.
*
* This routine will initialize the VGA specific register set to bring a VGA
* card in VGA 3+ mode and loads the font in plane 2.
*
* RETURNS: OK/ERROR
*/

STATUS vgaInit
    (
    void
    )
    {
    int intKey;
	
    intKey = intLock ();
    
    /* Sequencer Registers */
    vgaRegSet (VGA_SR_PORT, 0x0100); 
    vgaRegSet (VGA_SR_PORT, 0x0001);
    /* write only to plane 0 & 1 */
    vgaRegSet (VGA_SR_PORT, 0x0302);
    vgaRegSet (VGA_SR_PORT, 0x0003);
    /* enable odd/even addressing + extended */
    vgaRegSet (VGA_SR_PORT, 0x0204);
    vgaRegSet (VGA_SR_PORT, 0x0007);
    
    /* MSR: Select DCLK0, Enable RAM access and move I/O to 3Dx */
    sysOutByte (VGA_MVGA_SR_PORT, 0x67);
    
    vgaRegSet (VGA_SR_PORT, 0x0300);

    intUnlock (intKey);
    
    /* CRT Controller Registers */
    vgaRegSet (VGA_CR_PORT, 0x0E11);
    
    vgaRegSet (VGA_CR_PORT, 0x5F00);
    vgaRegSet (VGA_CR_PORT, 0x4F01);
    vgaRegSet (VGA_CR_PORT, 0x5002);
    vgaRegSet (VGA_CR_PORT, 0x8203);
    vgaRegSet (VGA_CR_PORT, 0x5504);
    vgaRegSet (VGA_CR_PORT, 0x8105);
    vgaRegSet (VGA_CR_PORT, 0xBF06);
    vgaRegSet (VGA_CR_PORT, 0x1F07);
    vgaRegSet (VGA_CR_PORT, 0x0008);
    vgaRegSet (VGA_CR_PORT, 0x4F09);
    vgaRegSet (VGA_CR_PORT, 0x0D0A);
    vgaRegSet (VGA_CR_PORT, 0x0E0B);
    vgaRegSet (VGA_CR_PORT, 0x000C);
    vgaRegSet (VGA_CR_PORT, 0x000D);
    vgaRegSet (VGA_CR_PORT, 0x070E);
    vgaRegSet (VGA_CR_PORT, 0x800F);
    vgaRegSet (VGA_CR_PORT, 0x9C10);
    
    /* Protect Registers CR0-7 */
    vgaRegSet (VGA_CR_PORT, 0x8E11);
    
    vgaRegSet (VGA_CR_PORT, 0x8F12);
    vgaRegSet (VGA_CR_PORT, 0x2813);    
    vgaRegSet (VGA_CR_PORT, 0x1F14);    
    vgaRegSet (VGA_CR_PORT, 0x9615);
    vgaRegSet (VGA_CR_PORT, 0xB916);
    vgaRegSet (VGA_CR_PORT, 0xA317);    
    vgaRegSet (VGA_CR_PORT, 0xFF18);
    
    vgaRegSet (VGA_CR_PORT, 0x4F70);
    
    /* Attribute Controller Registers */
    sysInByte (VGA_FEATURE_CTRL);
    sysOutByte (VGA_AR_PORT, 0x00);   
    sysOutByte (VGA_AR_PORT, 0x00);   
    sysOutByte (VGA_AR_PORT, 0x01);   
    sysOutByte (VGA_AR_PORT, 0x01);    
    sysOutByte (VGA_AR_PORT, 0x02);   
    sysOutByte (VGA_AR_PORT, 0x02);    
    sysOutByte (VGA_AR_PORT, 0x03);   
    sysOutByte (VGA_AR_PORT, 0x03);    
    sysOutByte (VGA_AR_PORT, 0x04);   
    sysOutByte (VGA_AR_PORT, 0x04);    
    sysOutByte (VGA_AR_PORT, 0x05);   
    sysOutByte (VGA_AR_PORT, 0x05);    
    sysOutByte (VGA_AR_PORT, 0x06);   
    sysOutByte (VGA_AR_PORT, 0x14);    
    sysOutByte (VGA_AR_PORT, 0x07);   
    sysOutByte (VGA_AR_PORT, 0x07);    
    sysOutByte (VGA_AR_PORT, 0x08);   
    sysOutByte (VGA_AR_PORT, 0x38);    
    sysOutByte (VGA_AR_PORT, 0x09);   
    sysOutByte (VGA_AR_PORT, 0x39);    
    sysOutByte (VGA_AR_PORT, 0x0A);   
    sysOutByte (VGA_AR_PORT, 0x3A);    
    sysOutByte (VGA_AR_PORT, 0x0B);   
    sysOutByte (VGA_AR_PORT, 0x3B);    
    sysOutByte (VGA_AR_PORT, 0x0C);   
    sysOutByte (VGA_AR_PORT, 0x3C);    
    sysOutByte (VGA_AR_PORT, 0x0D);   
    sysOutByte (VGA_AR_PORT, 0x3D);    
    sysOutByte (VGA_AR_PORT, 0x0E);   
    sysOutByte (VGA_AR_PORT, 0x3E);    
    sysOutByte (VGA_AR_PORT, 0x0F);   
    sysOutByte (VGA_AR_PORT, 0x3F);    
    sysOutByte (VGA_AR_PORT, 0x10);   
    sysOutByte (VGA_AR_PORT, 0x0C);    
    sysOutByte (VGA_AR_PORT, 0x11);   
    sysOutByte (VGA_AR_PORT, 0x00);    
    sysOutByte (VGA_AR_PORT, 0x12);   
    sysOutByte (VGA_AR_PORT, 0x0F);    
    sysOutByte (VGA_AR_PORT, 0x13);   
    sysOutByte (VGA_AR_PORT, 0x08);    
    sysOutByte (VGA_AR_PORT, 0x14);   
    sysOutByte (VGA_AR_PORT, 0x00);
    /* Enable Video */
    sysOutByte (VGA_AR_PORT, 0x20);
    
    /* Graphics Controller Registers */
    vgaRegSet (VGA_GR_PORT, 0x0000);
    vgaRegSet (VGA_GR_PORT, 0x0001);
    vgaRegSet (VGA_GR_PORT, 0x0002);
    vgaRegSet (VGA_GR_PORT, 0x0003);
    vgaRegSet (VGA_GR_PORT, 0x0004);
    vgaRegSet (VGA_GR_PORT, 0x1005);
    /* B8000-BFFFF */
    vgaRegSet (VGA_GR_PORT, 0x0006/*0x0E06*/);
    vgaRegSet (VGA_GR_PORT, 0x0007);
    vgaRegSet (VGA_GR_PORT, 0xFF08);
    
    /* Palette Registers */
    sysOutByte (VGA_DAC_PEL_MASK, 0xFF);
    sysOutByte (VGA_DAC_WRITE_INDEX, 0x00);
    
    sysOutByte (VGA_DAC_DATA_REG, 0x00);         /* 0x00 - 0x0F */
    sysOutByte (VGA_DAC_DATA_REG, 0x00);
    sysOutByte (VGA_DAC_DATA_REG, 0x00);
    
    sysOutByte (VGA_DAC_DATA_REG, 0x00);
    sysOutByte (VGA_DAC_DATA_REG, 0x00);
    sysOutByte (VGA_DAC_DATA_REG, 0x2A);
    
    sysOutByte (VGA_DAC_DATA_REG, 0x00);
    sysOutByte (VGA_DAC_DATA_REG, 0x2A);
    sysOutByte (VGA_DAC_DATA_REG, 0x00);
    
    sysOutByte (VGA_DAC_DATA_REG, 0x00);
    sysOutByte (VGA_DAC_DATA_REG, 0x2A);
    sysOutByte (VGA_DAC_DATA_REG, 0x2A);

⌨️ 快捷键说明

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