ibm8514.c 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <bio.h>
  4. #include "pci.h"
  5. #include "vga.h"
  6. /*
  7. * IBM 8514/A Graphics Coprocessor.
  8. */
  9. enum {
  10. Subsys = 0x42E8, /* Subsystem Status (R), Control (W) */
  11. Advfunc = 0x4AE8, /* Advanced Function Control */
  12. CurY = 0x82E8, /* Current Y Position */
  13. CurX = 0x86E8, /* Current X Position */
  14. DestyAxstp = 0x8AE8, /* Destination Y Position/Axial Step Constant */
  15. DestxDiastp = 0x8EE8, /* Destination X Position/Diagonal Step Constant */
  16. ErrTerm = 0x92E8, /* Error Term */
  17. MajAxisPcnt = 0x96E8, /* Major Axis Pixel Count */
  18. GPstat = 0x9AE8, /* Graphics Processor Status (R) */
  19. Cmd = 0x9AE8, /* Drawing Command (W) */
  20. ShortStroke = 0x9EE8, /* Short Stroke Vector (W) */
  21. BkgdColor = 0xA2E8, /* Background Colour */
  22. FrgdColor = 0xA6E8, /* Foreground Colour */
  23. WrtMask = 0xAAE8, /* Bitplane Write Mask */
  24. RdMask = 0xAEE8, /* Bitplane Read Mask */
  25. ColorCmp = 0xB2E8, /* Colour Compare */
  26. BkgdMix = 0xB6E8, /* Background Mix */
  27. FrgdMix = 0xBAE8, /* Foreground Mix */
  28. Multifunc = 0xBEE8, /* Multifunction Control */
  29. PixTrans = 0xE2E8, /* Pixel Data Transfer */
  30. };
  31. enum { /* Multifunc Index */
  32. MinAxisPcnt = 0x0000, /* Minor Axis Pixel Count */
  33. ScissorsT = 0x1000, /* Top Scissors */
  34. ScissorsL = 0x2000, /* Left Scissors */
  35. ScissorsB = 0x3000, /* Bottom Scissors */
  36. ScissorsR = 0x4000, /* Right Scissors */
  37. MemCntl = 0x5000, /* Memory Control */
  38. PixCntl = 0xA000, /* Pixel Control */
  39. MultMisc = 0xE000, /* Miscellaneous Multifunction Control (S3) */
  40. ReadSel = 0xF000, /* Read Register Select (S3) */
  41. };
  42. static void
  43. load(Vga* vga, Ctlr*)
  44. {
  45. outportw(Pixmask, 0x00);
  46. outportw(Subsys, 0x8000|0x1000);
  47. outportw(Subsys, 0x4000|0x1000);
  48. outportw(Pixmask, 0xFF);
  49. outportw(FrgdMix, 0x47);
  50. outportw(BkgdMix, 0x07);
  51. outportw(Multifunc, ScissorsT|0x000);
  52. outportw(Multifunc, ScissorsL|0x000);
  53. outportw(Multifunc, ScissorsB|(vga->vmz/vga->mode->x-1));
  54. outportw(Multifunc, ScissorsR|(vga->mode->x-1));
  55. outportw(WrtMask, 0xFFFF);
  56. outportw(Multifunc, PixCntl|0x0000);
  57. }
  58. static void
  59. dump(Vga*, Ctlr* ctlr)
  60. {
  61. printitem(ctlr->name, "Advfunc");
  62. Bprint(&stdout, "%9.4uX\n", inportw(Advfunc));
  63. printitem(ctlr->name, "Subsys");
  64. Bprint(&stdout, "%9.4uX\n", inportw(Subsys));
  65. }
  66. Ctlr ibm8514 = {
  67. "ibm8514", /* name */
  68. 0, /* snarf */
  69. 0, /* options */
  70. 0, /* init */
  71. load, /* load */
  72. dump, /* dump */
  73. };