void setpalette(int p, int r, int g, int b) { vgao(PaddrW, p); vgao(Pdata, r); vgao(Pdata, g); vgao(Pdata, b); }
void tvp3026xo(uint8_t index, uint8_t data) { uint8_t crt55; crt55 = tvp3026io(Index, index); vgaxo(Crtx, 0x55, crt55|((Data>>2) & 0x03)); vgao(dacxreg[Data & 0x03], data); vgaxo(Crtx, 0x55, crt55); }
void tvp3026xo(uchar index, uchar data) { uchar crt55; crt55 = tvp3026io(Index, index); vgaxo(Crtx, 0x55, crt55|((Data>>2) & 0x03)); vgao(dacxreg[Data & 0x03], data); vgaxo(Crtx, 0x55, crt55); }
static uchar tvp3026io(uchar reg, uchar data) { uchar crt55; crt55 = vgaxi(Crtx, 0x55) & 0xFC; vgaxo(Crtx, 0x55, crt55|((reg>>2) & 0x03)); vgao(dacxreg[reg & 0x03], data); return crt55; }
static uint8_t tvp3026io(uint8_t reg, uint8_t data) { uint8_t crt55; crt55 = vgaxi(Crtx, 0x55) & 0xFC; vgaxo(Crtx, 0x55, crt55|((reg>>2) & 0x03)); vgao(dacxreg[reg & 0x03], data); return crt55; }
int setpalette(uint32_t p, uint32_t r, uint32_t g, uint32_t b) { VGAscr *scr; int d; scr = &vgascreen[0]; d = scr->palettedepth; lock(&cursor.l); scr->colormap[p][0] = r; scr->colormap[p][1] = g; scr->colormap[p][2] = b; vgao(PaddrW, p); vgao(Pdata, r>>(32-d)); vgao(Pdata, g>>(32-d)); vgao(Pdata, b>>(32-d)); unlock(&cursor.l); return ~0; }
static void load(Vga* vga, Ctlr* ctlr) { int i; /* * Reset the sequencer and leave it off. * Load the generic VGA registers: * misc; * sequencer (but not seq01, display enable); * take the sequencer out of reset; * take off write-protect on crt[0x00-0x07]; * crt; * graphics; * attribute; * palette. vgaxo(Seqx, 0x00, 0x00); */ vgao(MiscW, vga->misc); for(i = 2; i < NSeqx; i++) vgaxo(Seqx, i, vga->sequencer[i]); /*vgaxo(Seqx, 0x00, 0x03);*/ vgaxo(Crtx, 0x11, vga->crt[0x11] & ~0x80); for(i = 0; i < NCrtx; i++) vgaxo(Crtx, i, vga->crt[i]); for(i = 0; i < NGrx; i++) vgaxo(Grx, i, vga->graphics[i]); for(i = 0; i < NAttrx; i++) vgaxo(Attrx, i, vga->attribute[i]); if(dflag) palette.load(vga, ctlr); ctlr->flag |= Fload; }
static void load(Vga* vga, Ctlr* ctlr) { uchar x; /* * General Control: * output sync polarity * It's important to set this properly and to turn off the * VGA controller H and V syncs. Can't be set in VGA mode. */ x = 0x00; if((vga->misc & 0x40) == 0) x |= 0x01; if((vga->misc & 0x80) == 0) x |= 0x02; tvp3026xo(0x1D, x); vga->misc |= 0xC0; vgao(MiscW, vga->misc); ctlr->flag |= Fload; }