home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Examples / DriverKit / CirrusLogicGD542X / CirrusLogicGD542X_psdrvr.tproj / SVGACustom.c < prev   
Text File  |  1993-08-06  |  2KB  |  75 lines

  1. /*****************************************************************************
  2.  
  3.     SVGACustom.c for CirrusLogicGD542X
  4.  
  5. ******************************************************************************/
  6.  
  7. #import "SVGAConstants.h"
  8. #import <driverkit/svgaPSExtension.h>
  9. #import <driverkit/i386/displayRegisters.h>
  10.  
  11.  
  12. void SetReadSegment(unsigned char num)
  13. // Description:    Select which 64K segment we intend to read from.
  14. {
  15.     outb(0x03ce,0x09);
  16.     outb(0x03cf,(num << 4));
  17. }
  18.  
  19.  
  20. void SetWriteSegment(unsigned char num)
  21. // Description:    Select which 64K segment we intend to write to.
  22. {
  23.     outb(0x03ce,0x09);
  24.     outb(0x03cf,(num << 4));
  25. }
  26.  
  27.  
  28. void SetReadPlane(unsigned char num)
  29. // Description:    Select which of 4 bit planes to read from in planar
  30. //        modes - only one plane can be active at a time.
  31. {
  32.     char tmp;
  33.  
  34.     //
  35.     // Select plane we are reading from
  36.     //
  37.     tmp = IOReadRegister(EIDR_GCR_ADDR, GCR_AT_READ_MAPS);
  38.     tmp &= ~GCR_AT_RMS;
  39.     tmp |= (num & GCR_AT_RMS);
  40.     IOWriteRegister(EIDR_GCR_ADDR, GCR_AT_READ_MAPS, tmp);
  41. }
  42.  
  43.  
  44. void SetWritePlane(unsigned char num)
  45. // Description:    Select one of 4 bit planes to write to in planar modes.
  46. //        Although more than one plane can be active at a time,
  47. //        this routine only allows access to 1 plane at a time.
  48. {
  49.     char tmp, plane = 0x01;
  50.     
  51.     //
  52.     // Convert plane num to bit enable.
  53.     //
  54.     plane = plane << (num & 0x03);
  55.  
  56.     //
  57.     // Select plane we are writing to
  58.     //
  59.     tmp = IOReadRegister(EIDR_SEQ_ADDR, SEQ_AT_MPK);
  60.     tmp &= ~(SEQ_AT_EM3 | SEQ_AT_EM2 | SEQ_AT_EM1 | SEQ_AT_EM0);
  61.     tmp |= plane;
  62.     IOWriteRegister(EIDR_SEQ_ADDR, SEQ_AT_MPK, tmp);
  63. }
  64.  
  65.  
  66. int IOSetSVGAFunctions(IOSVGAFunctions *functs)
  67. {
  68.     functs->setReadSegment = SetReadSegment;
  69.     functs->setWriteSegment = SetWriteSegment;
  70.     functs->setReadPlane = SetReadPlane;
  71.     functs->setWritePlane = SetWritePlane;
  72.     
  73.     return 0;
  74. }
  75.