#include "u.h" #include "lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "io.h" enum { GRX= 0x3CE, /* index to graphics registers */ GR= 0x3CF, /* graphics registers */ Grot= 0x03, /* data rotate register */ Gmode= 0x05, /* mode register */ Gmisc= 0x06, /* miscillaneous register */ Grms= 0x04, /* read map select register */ SRX= 0x3C4, /* index to sequence registers */ SR= 0x3C5, /* sequence registers */ Sclock= 0x01, /* clocking register */ Smode= 0x04, /* mode register */ Smmask= 0x02, /* map mask */ CRX= 0x3D4, /* index to crt registers */ CR= 0x3D5, /* crt registers */ Cmode= 0x17, /* mode register */ Cmsl= 0x09, /* max scan line */ ARX= 0x3C0, /* index to attribute registers */ AR= 0x3C1, /* attribute registers */ Amode= 0x10, /* mode register */ Acpe= 0x12, /* color plane enable */ }; /* * screen dimensions */ #define MAXX 640 #define MAXY 480 /* * routines for setting vga registers */ void srout(int reg, int val) { outb(SRX, reg); outb(SR, val); } void grout(int reg, int val) { outb(GRX, reg); outb(GR, val); } void arout(int reg, int val) { inb(0x3DA); outb(ARX, reg | 0x20); outb(AR, val); } void crout(int reg, int val) { outb(CRX, reg); outb(CR, val); } /* * m is a bit mask of planes to be affected by CPU writes */ vgawrmask(int m) { srout(Smmask, m&0xf); } /* * p is the plane that will respond to CPU reads */ vgardplane(int p) { grout(Grms, p&3); } /* * partial screen munching squares */ #define DELTA 1 #define DADDR ((long *) 0) #define SIDE 256 void munch(void) { ulong x,y,i,d; uchar *screen, tab[8], *p; screen = (uchar *)(0xA0000 | KZERO); d=0; tab[0] = 0x80; tab[1] = 0x40; tab[2] = 0x20; tab[3] = 0x10; tab[4] = 0x08; tab[5] = 0x04; tab[6] = 0x02; tab[7] = 0x01; for(i=0; i