📄 lcd_dvc.c
字号:
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 + -