1 #include <u.h> 2 #include <libc.h> 3 4 #include "vga.h" 5 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 32 enum { /* Multifunc Index */ 33 MinAxisPcnt = 0x0000, /* Minor Axis Pixel Count */ 34 ScissorsT = 0x1000, /* Top Scissors */ 35 ScissorsL = 0x2000, /* Left Scissors */ 36 ScissorsB = 0x3000, /* Bottom Scissors */ 37 ScissorsR = 0x4000, /* Right Scissors */ 38 MemCntl = 0x5000, /* Memory Control */ 39 PixCntl = 0xA000, /* Pixel Control */ 40 MultMisc = 0xE000, /* Miscellaneous Multifunction Control (S3) */ 41 ReadSel = 0xF000, /* Read Register Select (S3) */ 42 }; 43 44 static void 45 load(Vga *vga, Ctlr *ctlr) 46 { 47 verbose("%s->load\n", ctlr->name); 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->vmb/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 *vga, Ctlr *ctlr) 68 { 69 USED(vga); 70 71 printitem(ctlr->name, "Advfunc"); 72 print("%9.4luX\n", inportw(Advfunc)); 73 printitem(ctlr->name, "Subsys"); 74 print("%9.4luX\n", inportw(Subsys)); 75 } 76 77 Ctlr ibm8514 = { 78 "ibm8514", /* name */ 79 0, /* snarf */ 80 0, /* options */ 81 0, /* init */ 82 load, /* load */ 83 dump, /* dump */ 84 }; 85