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

📄 hal_ink.c

📁 epson 13506 driver code
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
**===========================================================================
** HAL_INK.C - Hardware ink layer support.
**---------------------------------------------------------------------------
** Copyright (c) 1998, 2001 Epson Research and Development, Inc.
** All Rights Reserved.
**===========================================================================
*/

#include "hal.h"
#include "assert.h"
#include "nonsefns.h"

/*-------------------------------------------------------------------------*/

static const char Revision[] = "HAL_INK.C=$Revision: 19 $";

/*-------------------------------------------------------------------------*/

DWORD seInitLcdInk(void)
   {
   DWORD addr;
   unsigned regDisplayMode;
   unsigned width, height;

   /*
   ** If in rotate90 mode, get out of rotate90 mode.
   */
   regDisplayMode = seReadRegByte(REG_DISPLAY_MODE);
   seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode & ~0x40);

   seGetLcdResolution(&width, &height);

   addr = _InitLcdInkCursorAddress((DWORD) width * height / 4, INK_LAYER);

#ifdef INTEL_DOS
   if (addr == -1)
      return -1;
#else
   if (addr == 0)
      return 0;
#endif

   /*
   ** Fill ink layer with transparent color.
   */
   seDrawLcdInkRect(0, 0, width-1, height-1, 0xaa, 1);

   seEnableLcdInk(TRUE);

   seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode);

   return addr;
   }

/*-------------------------------------------------------------------------*/

DWORD seInitCrtInk(void)
   {
   DWORD addr;
   unsigned width, height;

   seGetCrtResolution(&width, &height);

   addr = _InitCrtInkCursorAddress((DWORD) width * height / 4, INK_LAYER);

#ifdef INTEL_DOS
   if (addr == -1)
      return -1;
#else
   if (addr == 0)
      return 0;
#endif

   /*
   ** Fill ink layer with transparent color.
   */
   seDrawCrtInkRect(0, 0, width-1, height-1, 0xaa, 1);

   seEnableCrtInk(TRUE);

   return addr;
   }

/*-------------------------------------------------------------------------*/

DWORD seInitTvInk(void)
   {
   DWORD addr;
   unsigned width, height;

   seGetTvResolution(&width, &height);

   addr = _InitTvInkCursorAddress((DWORD) width * height / 4, INK_LAYER);

#ifdef INTEL_DOS
   if (addr == -1)
      return -1;
#else
   if (addr == 0)
      return 0;
#endif

   /*
   ** Fill ink layer with transparent color.
   */
   seDrawTvInkRect(0, 0, width-1, height-1, 0xaa, 1);

   seEnableTvInk(TRUE);

   return addr;
   }

/*-------------------------------------------------------------------------*/

DWORD seInitInk(void)
   {
   DWORD addr;
   unsigned regDisplayMode;
   unsigned width, height;

   /*
   ** If in rotate90 mode, get out of rotate90 mode.
   */
   regDisplayMode = seReadRegByte(REG_DISPLAY_MODE);
   seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode & ~0x40);

   seGetResolution(&width, &height);

   addr = _InitInkCursorAddress((DWORD) width * height / 4, INK_LAYER);

#ifdef INTEL_DOS
   if (addr == -1)
      return -1;
#else
   if (addr == 0)
      return 0;
#endif

   /*
   ** Fill ink layer with transparent color.
   */
   seDrawInkRect(0, 0, width-1, height-1, 0xaa, 1);

   seEnableInk(TRUE);

   seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode);

   return addr;
   }

/*-------------------------------------------------------------------------*/

void seFreeLcdInk(void)
   {
   seFreeLcdCursor();
   }

/*-------------------------------------------------------------------------*/

void seFreeCrtInk(void)
   {
   seFreeCrtCursor();
   }

/*-------------------------------------------------------------------------*/

void seFreeTvInk(void)
   {
   seFreeTvInk();
   }

/*-------------------------------------------------------------------------*/

void seFreeInk(void)
   {
   seFreeCursor();
   }

/*-------------------------------------------------------------------------*/

void seEnableLcdInk(int enable)
{   
   unsigned regLcdInkCursorCtrl;

   if (enable)
      {
      regLcdInkCursorCtrl = seReadRegByte(REG_LCD_INK_CURS_CTRL);
      regLcdInkCursorCtrl &= ~0x03;
      regLcdInkCursorCtrl |= 0x02;
      seWriteRegByte(REG_LCD_INK_CURS_CTRL, regLcdInkCursorCtrl);
      }
   else
      {
      regLcdInkCursorCtrl = seReadRegByte(REG_LCD_INK_CURS_CTRL);
      regLcdInkCursorCtrl &= ~0x03;
      seWriteRegByte(REG_LCD_INK_CURS_CTRL, regLcdInkCursorCtrl);
      }
   }

/*-------------------------------------------------------------------------*/

void seEnableCrtInk(int enable)
{   
   unsigned regCrtTvInkCursorCtrl;

   if (enable)
      {
      regCrtTvInkCursorCtrl = seReadRegByte(REG_CRTTV_INK_CURS_CTRL);
      regCrtTvInkCursorCtrl &= ~0x03;
      regCrtTvInkCursorCtrl |= 0x02;
      seWriteRegByte(REG_CRTTV_INK_CURS_CTRL, regCrtTvInkCursorCtrl);
      }
   else
      {
      regCrtTvInkCursorCtrl = seReadRegByte(REG_CRTTV_INK_CURS_CTRL);
      regCrtTvInkCursorCtrl &= ~0x03;
      seWriteRegByte(REG_CRTTV_INK_CURS_CTRL, regCrtTvInkCursorCtrl);
      }
   }

/*-------------------------------------------------------------------------*/

void seEnableTvInk(int enable)
{
   seEnableCrtInk(enable);
}

/*-------------------------------------------------------------------------*/

void seEnableInk(int enable)
{   
   unsigned regLcdInkCursorCtrl;
   unsigned regCrtTvInkCursorCtrl;

   if (enable)
      {
      if (_ActiveImageSurface->DisplayMode & LCD)
         {
         regLcdInkCursorCtrl = seReadRegByte(REG_LCD_INK_CURS_CTRL);
         regLcdInkCursorCtrl &= ~0x03;
         regLcdInkCursorCtrl |= 0x02;
         seWriteRegByte(REG_LCD_INK_CURS_CTRL, regLcdInkCursorCtrl);
         }

      if (_ActiveImageSurface->DisplayMode & (CRT | TV))
         {
         regCrtTvInkCursorCtrl = seReadRegByte(REG_CRTTV_INK_CURS_CTRL);
         regCrtTvInkCursorCtrl &= ~0x03;
         regCrtTvInkCursorCtrl |= 0x02;
         seWriteRegByte(REG_CRTTV_INK_CURS_CTRL, regCrtTvInkCursorCtrl);
         }
      }
   else
      {
      if (_ActiveImageSurface->DisplayMode & LCD)
         {
         regLcdInkCursorCtrl = seReadRegByte(REG_LCD_INK_CURS_CTRL);
         regLcdInkCursorCtrl &= ~0x03;
         seWriteRegByte(REG_LCD_INK_CURS_CTRL, regLcdInkCursorCtrl);
         }

      if (_ActiveImageSurface->DisplayMode & (CRT | TV))
         {
         regCrtTvInkCursorCtrl = seReadRegByte(REG_CRTTV_INK_CURS_CTRL);
         regCrtTvInkCursorCtrl &= ~0x03;
         seWriteRegByte(REG_CRTTV_INK_CURS_CTRL, regCrtTvInkCursorCtrl);
         }
      }
   }

/*-------------------------------------------------------------------------*/

DWORD seGetLcdInkLinearAddress(void)
   {
   return seGetLcdCursorLinearAddress();
   }   

/*-------------------------------------------------------------------------*/

DWORD seGetCrtInkLinearAddress(void)
   {
   return seGetCrtCursorLinearAddress();
   }   

/*-------------------------------------------------------------------------*/

DWORD seGetTvInkLinearAddress(void)
   {
   return seGetTvCursorLinearAddress();
   }   

/*-------------------------------------------------------------------------*/

DWORD seGetInkLinearAddress(void)
   {
   return seGetCursorLinearAddress();
   }   

/*-------------------------------------------------------------------------*/

DWORD seGetLcdInkOffsetAddress(void)
   {
   return seGetLcdCursorOffsetAddress();
   }   

/*-------------------------------------------------------------------------*/

DWORD seGetCrtInkOffsetAddress(void)
   {
   return seGetCrtCursorOffsetAddress();
   }   

/*-------------------------------------------------------------------------*/

DWORD seGetTvInkOffsetAddress(void)
   {
   return seGetTvCursorOffsetAddress();
   }   

/*-------------------------------------------------------------------------*/

DWORD seGetInkOffsetAddress(void)
   {
   return seGetCursorOffsetAddress();
   }   

/*-------------------------------------------------------------------------*/

void seSetLcdInkColor(int index, DWORD color)
   {
   seSetLcdCursorColor(index, color);
   }

/*-------------------------------------------------------------------------*/

void seSetCrtInkColor(int index, DWORD color)
   {
   seSetCrtCursorColor(index, color);
   }

/*-------------------------------------------------------------------------*/

void seSetTvInkColor(int index, DWORD color)
   {
   seSetTvCursorColor(index, color);
   }

/*-------------------------------------------------------------------------*/

void seSetInkColor(int index, DWORD color)
   {
   seSetCursorColor(index, color);
   }

/*-------------------------------------------------------------------------*/

void seSetLcdInkPixel(long x, long y, DWORD color)
   {
   DWORD StartLinearAddress;
   unsigned regDisplayMode;
   unsigned width;

   StartLinearAddress = seGetLcdInkLinearAddress();

   /*
   ** If in rotate90 mode, get out of rotate90 mode.
   */
   regDisplayMode = seReadRegByte(REG_DISPLAY_MODE);
   seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode & ~0x40);

   width = (seReadRegByte( REG_LCD_HDP ) + 1) * 8;


   /*
   ** Each line in the ink layer has the same number of pixels as the
   ** physical width of the display. Since the ink layer is in 2 bpp
   ** mode, there are width/4 bytes per line.
   */
	_Pixel2bpp( StartLinearAddress, width/4, x, y, color);

   seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode);

⌨️ 快捷键说明

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