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