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

📄 lcd_dvc.c

📁 nucleus 文件系统,内核和彩色图形系统,在小系统上非常好用
💻 C
📖 第 1 页 / 共 3 页
字号:
void InitBankMgr(grafMap *argGRAFMAP)
{
	DBPstruc *bnkTblPtr;
	int i;

	/* look up device code in Graphics Device Table */
	for (i = 0; i < numDisplays; i++)
	{
		if(displayTable[i].devcName == -1)	/* not found */
		{
			argGRAFMAP->mapPlaneMgr = PlaneStub;
			return;
		}

		if((argGRAFMAP->devMode == displayTable[i].devcName) &&
			(displayTable[i].bnkTblPtr != NULL)) break;
	}

	/* Initialize the passed GrafMap for bank management */
	bnkTblPtr = displayTable[i].bnkTblPtr;
	argGRAFMAP->mapBankMgr = bnkTblPtr->bnkMgr;
	argGRAFMAP->mapPlaneMgr = bnkTblPtr->plnMgr;
	if (bnkTblPtr->wnType >= 0x80)
	{	/* has altMgr */
		argGRAFMAP->mapFlags |= mfAltMgr;
		argGRAFMAP->mapAltMgr = bnkTblPtr->altMgr;
	}

	argGRAFMAP->mapWinType = bnkTblPtr->wnType & 0x0f;
	argGRAFMAP->mapWinScans = bnkTblPtr->wnSize;
	argGRAFMAP->mapWinOffset = bnkTblPtr->wnOff;

	return;
}


/* Function InitDevMgr initializes the passed grafMaps device manager
and map handle fields using internal data associated with the grafMaps
devMode code. */
void InitDevMgr(grafMap *argGRAFMAP)
{
	int i;

	/* look up device code in Graphics Device Table */
	for (i = 0; i < numDisplays; i++)
	{
		if(displayTable[i].devcName == -1)
		{	/* not found */
			argGRAFMAP->mapDevMgr = DevStub;
			return;
		}

		if(argGRAFMAP->devMode == displayTable[i].devcName) break;
	}

	/* install  device manager */
	argGRAFMAP->mapDevMgr = displayTable[i].devTblPtr;

	return;
}


/* Function QueryGraphics determines if the requested device is
available.  The return values are:

  0 = present    (normal device manager ok return )
 -1 = can't tell (normal device manager bad return )
  1	= device detected as not present
  2	= Unknown device, not in table */
int QueryGraphics(int argDEV)
{
#define QRYDEVUNKN	2	/* Unknown device, not in table */
	grafMap testGM;
	int i;

	NU_InitGrafVars();	/* Initialize certain graphics variables */

	/* look up device code in Graphics Device Table */
	for (i = 0; i < numDisplays; i++)
	{
		if(displayTable[i].devcName == -1)  return(QRYDEVUNKN);

		if(argDEV == displayTable[i].devcName) break;
	}

	/* okay, we got a device in our table */
	testGM.mapDevMgr = displayTable[i].devTblPtr;

	/* issue devMgr call to query device there? */
	return(testGM.mapDevMgr(&testGM, DMQRY, argDEV));
}


/* Function LCDDevMgr initializes the passed grafMaps device manager
and map handle fields using internal data associated with the grafMaps
devMode code. */
int LCDDevMgr(grafMap *argGRAFMAP, int dmFunc, int dmParam)
{
	int LCD_Init(void);
	unsigned long LCD_ReadReg(int reg);
	unsigned short LCD_ReadShort(int reg);
	void LCD_WriteReg(int reg, unsigned long n);
	void LCD_WriteShort(int reg, unsigned short n);
	argsPalInfo *dmParamPal;	/* temp pal data */
	palData *palPtr;
	int i, palReg;
	unsigned long regData, b, *memPtr;
	unsigned short palWord;
	void LCD_WriteByte(int reg, unsigned char n);

	if(dmFunc == DMWAKEUP)
	{	/* initialize the LCD registers */
		LCD_WriteReg(LSSA, (unsigned long)dmParam);	/* display data address starts at dmParam */

		/* disable LCD */
		LCD_WriteByte(LCKCON, LCDOFF | DWIDTH | DWSX);	/* switch off LCDC */

		/* set LCD clock */
		LCD_WriteByte(LPXCD, PCDX);	/* Set Pixel Clock Divider */
		LCD_WriteByte(LRRA, RRAX);	/* Set Refresh Rate Adjustment */
		LCD_WriteShort(PWMR, SRCX | CCPEN | PWX);	/* Set Contrast Control */
		LCD_WriteByte(LACDRC, ACDLST | ACDX);		/* Set Rate Control */

		LCD_WriteByte(LPOSR, 0);	/* Set no shifted */

		LCD_WriteByte(LPOLCF, 0);	/* Set LCD to hight priority */

		/* Set up bits per pixel */
		switch (argGRAFMAP->pixBits)
		{
		case 1:
			LCD_WriteByte(LVPW, (argGRAFMAP->pixWidth / 16));	/* virtual page wide */
			LCD_WriteByte(LPICF, PBSIZ|0x00);	/* black and white mode */
			break;
		case 2:
			LCD_WriteByte(LVPW, (argGRAFMAP->pixWidth / 8));	/* virtual page wide */
			LCD_WriteByte(LPICF, PBSIZ|0x01);	/* 4 level gray-scale mode */
			break;
		case 4:
			LCD_WriteByte(LVPW, (argGRAFMAP->pixWidth / 4));	/* virtual page wide */
			LCD_WriteByte(LPICF, PBSIZ|0x02);	/* 16 level gray-scale mode */
			break;
		}


		/* set horizontal control register */
		LCD_WriteShort(LXMAX, (unsigned short)argGRAFMAP->pixWidth); /* LCD pannel X szie */

		/* set vertical control register */
		LCD_WriteShort(LYMAX, (unsigned short)argGRAFMAP->pixHeight); /* LCD pannel Y size */

		/* set gray palette mapping */
		if(argGRAFMAP->pixBits == 2)	/* only 4 level gray-scale */
		{
			LCD_WriteByte(LGPMR, 0x84); /* default setting */
		}
		/* clear display memory */
		memPtr = (unsigned long *)  dmParam;
		b = ((argGRAFMAP->pixBytes * argGRAFMAP->pixHeight) >> 2);
		for (i = 0; i < b; i++) *memPtr++ = 0;

		/* start LCD */
		LCD_WriteByte(LCKCON, LCDON | DWIDTH | DWSX);	/* switch on LCDC */

		return(0);
	}

	if(dmFunc == DMRPAL)
	{
		dmParamPal = (argsPalInfo *) dmParam;
		palPtr = dmParamPal->palDataPtr;
		i = 0;
		if (dmParamPal->palBgn > 15) dmParamPal->palBgn = 0;
		if (dmParamPal->palEnd > 15) dmParamPal->palEnd = 15;
		while (i < dmParamPal->palBgn)
		{
			palPtr++;
			i++;
		}
		for (i = dmParamPal->palBgn; i <= dmParamPal->palEnd; i++)
		{
			palPtr->palRed = (i << 12);
			palPtr->palGreen = palPtr->palRed;
			palPtr->palBlue = palPtr->palRed;
			palPtr++;
		}
		return(0);
	}

	if(dmFunc == DMWPAL)
	{
		return(0);
	}

	if(dmFunc == DMQRY)
	{	/* check if the LCD is enabled */
		regData = LCD_ReadReg(LCKCON) & LCDON;
		if (regData == 0) return(1);	/* not enabled if return */

		return(0);
	}

	if(dmFunc == DMSHUTDOWN)
	{	/* check if the LCD is to be turned off */
		GrafFree(**argGRAFMAP->mapTable[0]);
		return(0);
	}
	return(0);
}

/* Function Get_IMMROffset reads the memory mapping offset */
 unsigned long Get_IMMROffset(void)
{
     return (0x00ff0000);
}


/* Function LCD_ReadReg reads the value of the specified register */
unsigned long LCD_ReadReg(int reg)
{
	unsigned long Get_IMMROffset(void);
	volatile unsigned long *p;

	p = (unsigned long *) (reg | (Get_IMMROffset() & 0xffff0000));

	return *p;
}


/* Function LCD_ReadShort reads the value of the specified register */
unsigned short LCD_ReadShort(int reg)
{
	unsigned long Get_IMMROffset(void);
	volatile unsigned short *p;

	p = (unsigned short *) (reg | (Get_IMMROffset() & 0xffff0000));

	return *p;
}


/* Function LCD_WriteReg writes the value to the specified register */
void LCD_WriteReg(int reg, unsigned long n)
{
	unsigned long Get_IMMROffset(void);
	volatile unsigned long *p;

	p = (unsigned long *) (reg | (Get_IMMROffset() & 0xffff0000));

	*p = n;
}


/* Function LCD_WriteShort writes the value to the specified register */
void LCD_WriteShort(int reg, unsigned short n)
{
	unsigned long Get_IMMROffset(void);
	volatile unsigned short *p;

	p = (unsigned short *) (reg | (Get_IMMROffset() & 0xffff0000));

	*p = n;
}


/* Function LCD_WriteByte writes the value to the specified register */
void LCD_WriteByte(int reg, unsigned char n)
{
	unsigned long Get_IMMROffset(void);
	volatile unsigned char *p;

	p = (unsigned char *) (reg | (Get_IMMROffset() & 0xffff0000));

	*p = n;
}


/* Function PrimErr supplied as primitives if error loading primitives */
void PrimErr(void)
{
	short grafErrValue;

	grafErrValue = c_InitBitm + c_InvDevFunc;
	nuGrafErr(grafErrValue);
	return;
}
int iPrimErr(void)
{
	short grafErrValue;

	grafErrValue = c_InitBitm + c_InvDevFunc;
	nuGrafErr(grafErrValue);
	return(0);
}
long lPrimErr(void)
{
	short grafErrValue;

	grafErrValue = c_InitBitm + c_InvDevFunc;
	nuGrafErr(grafErrValue);
	return(0);
}


void mwFLM4(blitRcd *fillRec)
{
	return;
}


/*	Function stubs */
void nuSegInfo(short *aePtr, short *bePtr, short *dsPtr)
{
	*aePtr = 0;
	*bePtr = 0;
	*dsPtr = 0;
	return;
}

void KBDriverISR(void)
{
	return;
}

void mwTracker(void)
{
	return;
}

void mwMoveCursor(void)
{
	return;
}

void nuMoveCursor(int gblX, int gblY)
{
	return;
}

int BankStub(void)
{
	return(0);
}

void PlaneStub(void)
{
	return;
}

int DevStub(void)
{
	return(0);
}

int nuMapPhysAdr(long *physMem, int blkSize, long *logMem)
{
	*logMem = *physMem;
	return(0);
}

void mwInputCB(void)
{
	return;
}

int CallmwStoreEvent(event *strEvent)
{
	return(0);
}

void CallmwGetVect(short intNmbr, byte *OldVect, byte *OldSeg, byte *OldxVect)
{
	return;
}

void CallmwSetVect(short intNmbr, long NewVect)
{
	return;
}

void CallmwRestVect(short intNmbr, byte *OldVect, byte *OldSeg, byte *OldxVect)
{
	return;
}

void CallmwLockMem(long memPntr, long memLength)
{
	return;
}

short CallmrInputMgr(mouseRcd *cursInput, short tmpIMPOSN)
{
	return(0);
}

⌨️ 快捷键说明

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