## diffname pc/vga.c 1991/0723 ## diff -e /dev/null /n/bootesdump/1991/0723/sys/src/9/safari/vga.c 0a #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 0-8 */ }; /* * look at VGA registers */ void vgainit(void) { int i; uchar x; for(i = 0; i < 9; i++){ outb(GRX, i); x = inb(GR); print("GR%d == %ux\n", i, x); } panic("for the hell of it"); } . ## diffname pc/vga.c 1991/0724 ## diff -e /n/bootesdump/1991/0723/sys/src/9/safari/vga.c /n/bootesdump/1991/0724/sys/src/9/safari/vga.c 23,28c srout(2, 0x0f); /* enable all 4 color planes */ srout(4, 0x08); /* quad mode */ grout(5, 0x40); /* pixel bits are sequential */ grout(6, 0x01); /* graphics mode - display starts at 0xA0000 */ for(;;); display = (uchar*)(0xA0000 | KZERO); for(i = 0; i < 128*1024; i++) display[i] = 0x00; for(i = 0; i < 4*640; i++) display[i] = 0xff; . 21d 19a uchar *display; . 13a void srout(int reg, int val) { outb(SRX, reg); outb(SR, val); } void grout(int reg, int val) { outb(GRX, reg); outb(GR, val); } . 11a SRX= 0x3C4, /* index to sequence registers */ SR= 0x3C5, /* sequence registers 0-7 */ . ## diffname pc/vga.c 1991/0727 ## diff -e /n/bootesdump/1991/0724/sys/src/9/safari/vga.c /n/bootesdump/1991/0727/sys/src/9/safari/vga.c 51a . 44,50c /* * zero out display */ srout(Smmask, 0x0f); /* enable all 4 color planes for writing */ for(i=0; i gscreen.r.max.y-defont0.height) out.pos.y = gscreen.r.min.y; gbitblt(&gscreen, Pt(0, out.pos.y), &gscreen, Rect(0, out.pos.y, gscreen.r.max.x, out.pos.y+2*defont0.height), 0); }else if(c == '\t'){ out.pos.x += (8-((out.pos.x-MINX)/out.bwid&7))*out.bwid; if(out.pos.x >= gscreen.r.max.x) screenputc('\n'); }else if(c == '\b'){ if(out.pos.x >= out.bwid+MINX){ out.pos.x -= out.bwid; screenputc(' '); out.pos.x -= out.bwid; } }else{ if(out.pos.x >= gscreen.r.max.x-out.bwid) screenputc('\n'); buf[0] = c&0x7F; buf[1] = 0; out.pos = gstring(&gscreen, out.pos, defont, buf, S); } } void screenputs(char *s, int n) { while(n-- > 0) screenputc(*s++); } int screenbits(void) { return 1; /* bits per pixel */ } void getcolor(ulong p, ulong *pr, ulong *pg, ulong *pb) { ulong ans; /* * The magnum monochrome says 0 is black (zero intensity) */ if(p == 0) ans = 0; else ans = ~0; *pr = *pg = *pb = ans; } int setcolor(ulong p, ulong r, ulong g, ulong b) { return 0; /* can't change mono screen colormap */ } int hwcursset(uchar *s, uchar *c, int ox, int oy) { return 0; } int hwcursmove(int x, int y) { return 0; } void mouseclock(void) /* called splhi */ { mouseupdate(1); } . 143,147c defont = &defont0; /* save space; let bitblt do the conversion work */ gbitblt(&gscreen, Pt(0, 0), &gscreen, gscreen.r, 0); /**/ /* * stick print at the top */ out.pos.x = MINX; out.pos.y = 0; out.bwid = defont0.info[' '].width; /* * swizzle the damn font longs. * we do it here since the font is in a machine independent (i.e. * made for the 68020) format. */ l = defont->bits->base; for(i = defont->bits->width*Dy(defont->bits->r); i > 0; i--, l++) *l = (*l<<24) | ((*l>>8)&0x0000ff00) | ((*l<<8)&0x00ff0000) | (*l>>24); . 138a srout(Smmask, 0x0f); /* enable all 4 color planes for writing */ . 129c display = (uchar *)SCREENMEM; . 127a ulong *l; . 123c screeninit(void) . 94c screen = (uchar *)SCREENMEM; . 32,37d 7a #include #include #include "screen.h" #define MINX 8 extern GFont defont0; GFont *defont; struct{ Point pos; int bwid; }out; /* * screen dimensions */ #define MAXX 640 #define MAXY 480 #define SCREENMEM (0xA0000 | KZERO) GBitmap gscreen = { (ulong*)SCREENMEM, 0, 640/32, 0, 0, 0, MAXX, MAXY, 0 }; . ## diffname pc/vga.c 1991/0731 ## diff -e /n/bootesdump/1991/0730/sys/src/9/safari/vga.c /n/bootesdump/1991/0731/sys/src/9/safari/vga.c 243c * The safari monochrome says 0 is black (zero intensity) . ## diffname pc/vga.c 1991/0801 ## diff -e /n/bootesdump/1991/0731/sys/src/9/safari/vga.c /n/bootesdump/1991/0801/sys/src/9/safari/vga.c 220c out.pos = gstring(&gscreen, out.pos, defont, buf, flipD[S]); . 204c Rect(0, out.pos.y, gscreen.r.max.x, out.pos.y+2*defont0.height), flipD[0]); . 181,189d 176c * start printing at the top of screen . 172,173c gbitblt(&gscreen, Pt(0, 0), &gscreen, gscreen.r, flipD[0]); . 169a * swizzle the font longs. * we do it here since the font is initialized with big endian longs. */ defont = &defont0; l = defont->bits->base; for(i = defont->bits->width*Dy(defont->bits->r); i > 0; i--, l++) *l = (*l<<24) | ((*l>>8)&0x0000ff00) | ((*l<<8)&0x00ff0000) | (*l>>24); /* . ## diffname pc/vga.c 1991/0904 ## diff -e /n/bootesdump/1991/0801/sys/src/9/safari/vga.c /n/bootesdump/1991/0904/sys/src/9/safari/vga.c 271c mouseclock(void) . 156,157d 151d ## diffname pc/vga.c 1991/0921 ## diff -e /n/bootesdump/1991/0904/sys/src/9/safari/vga.c /n/bootesdump/1991/0921/sys/src/9/safari/vga.c 168c * we do it here since the font is initialized with big * endian longs. . ## diffname pc/vga.c 1991/0927 ## diff -e /n/bootesdump/1991/0921/sys/src/9/safari/vga.c /n/bootesdump/1991/0927/sys/src/9/safari/vga.c 271a } vgaset(char *cmd) { int set; int reg; int val; set = *cmd++; cmd++; reg = strtoul(cmd, &cmd, 0); cmd++; val = strtoul(cmd, &cmd, 0); switch(set){ case 'a': arout(reg, val); break; case 'g': grout(reg, val); break; case 'c': crout(reg, val); break; case 's': srout(reg, val); break; } . 109,145d ## diffname pc/vga.c 1991/0928 ## diff -e /n/bootesdump/1991/0927/sys/src/9/safari/vga.c /n/bootesdump/1991/0928/sys/src/9/safari/vga.c 118,128c vga1(); . 108a * 2 bit deep display. the bits are adjacent. maybe this * will work * 4 color * 640x480 */ vga2(void) { int i; arout(Acpe, 0x00); /* disable planes for output */ gscreen.ldepth = 1; arout(Amode, 0x01); /* color graphics mode */ grout(Gmisc, 0x01); /* graphics mode */ grout(Gmode, 0x30); /* 2 bits deep, even bytes are * planes 0 and 2, odd are planes * 1 and 3 */ grout(Grot, 0x00); /* CPU writes bytes to video * mem without modifications */ crout(Cmode, 0xe3); /* turn off address wrap & * word mode */ crout(Cmsl, 0x40); /* 1 pixel per scan line */ crout(Cvertend, MAXY); /* 480 lne display */ srout(Smode, 0x06); /* extended memory, odd/even */ srout(Sclock, 0x01); /* 8 bits/char */ srout(Smmask, 0x0f); /* enable 2 planes for writing */ arout(Acpe, 0x0f); /* enable 2 planes for output */ for(i = 0; i < 128*1024;){ ((uchar*)SCREENMEM)[i++] = 0x1b; ((uchar*)SCREENMEM)[i++] = 0xe4; } for(;;); } /* * set up like vga mode 0x11 * 2 color * 640x480 */ vga1(void) { arout(Acpe, 0x00); /* disable planes for output */ gscreen.ldepth = 0; arout(Amode, 0x01); /* color graphics mode */ grout(Gmisc, 0x01); /* graphics mode */ grout(Gmode, 0x00); /* 1 bit deep */ grout(Grot, 0x00); /* CPU writes bytes to video * mem without modifications */ crout(Cmode, 0xe3); /* turn off address wrap & * word mode */ crout(Cmsl, 0x40); /* 1 pixel per scan line */ crout(Cvertend, MAXY); /* 480 lne display */ srout(Smode, 0x06); /* extended memory, * odd/even off */ srout(Sclock, 0x01); /* 8 bits/char */ srout(Smmask, 0x0f); /* enable 4 planes for writing */ arout(Acpe, 0x0f); /* enable 4 planes for output */ } /* . 54a Cvertend= 0x12, /* vertical display end */ . ## diffname pc/vga.c 1991/0929 ## diff -e /n/bootesdump/1991/0928/sys/src/9/safari/vga.c /n/bootesdump/1991/0929/sys/src/9/safari/vga.c 196,199d 192,194d 181a . 171,173d ## diffname pc/vga.c 1991/1002 ## diff -e /n/bootesdump/1991/0929/sys/src/9/safari/vga.c /n/bootesdump/1991/1002/sys/src/9/safari/vga.c 162c crout(Cvertend, MAXY-1); /* 480 lne display */ . ## diffname pc/vga.c 1991/1107 ## diff -e /n/bootesdump/1991/1002/sys/src/9/safari/vga.c /n/bootesdump/1991/1107/sys/src/9/safari/vga.c 91a crdump(void) { uchar x; int i; for(i = 0; i < 0x16; i++){ outb(CRX, i); x = inb(CR); print("cr[0x%lux] = %ux\n", i, x); } } . ## diffname pc/vga.c 1991/1109 ## diff -e /n/bootesdump/1991/1107/sys/src/9/safari/vga.c /n/bootesdump/1991/1109/sys/src/9/safari/vga.c 189c vga12(); . 172,173c /* last scan line displayed (first is 0) */ crout(Cvde, MAXY-1); overflow |= ((MAXY-1)&0x200) ? 0x40 : 0; overflow |= ((MAXY-1)&0x100) ? 0x2 : 0; /* total scan lines (including retrace) - 2 */ crout(Cvt, (YPERIOD-2)); overflow |= ((YPERIOD-2)&0x200) ? 0x20 : 0; overflow |= ((YPERIOD-2)&0x100) ? 0x1 : 0; /* scan lines at which vertcal retrace starts & ends */ crout(Cvrs, (MAXY+10)); overflow |= ((MAXY+10)&0x200) ? 0x80 : 0; overflow |= ((MAXY+10)&0x100) ? 0x4 : 0; crout(Cvre, ((YPERIOD-1)&0xf)|0xa0); /* also disable vertical interrupts */ /* scan lines at which vertical blanking starts & ends */ crout(Cvbs, (MAXY+YBORDER)); msl |= ((MAXY+YBORDER)&0x200) ? 0x20 : 0; overflow |= ((MAXY+YBORDER)&0x100) ? 0x8 : 0; crout(Cvbe, (YPERIOD-YBORDER)&0x7f); /* pixels per scan line (always 0 for graphics) */ crout(Cmsl, 0x40|msl); /* also 10th bit of line compare */ /* the overflow bits from the other registers */ crout(Cvover, 0x10|overflow); /* also 9th bit of line compare */ . 169a msl = overflow = 0; . 131,161d 128,129c int overflow; int msl; . 126c vga12(void) . 124a * * we assume the BIOS left the registers in a * CGA-like mode. Thus we don't set all the registers. . 121,123c * set up like vga mode 0x12 * 16 color (though we only use values 0x0 and 0xf) . 97,103d 92,95d 57a Cvrs= 0x10, /* vertical retrace start */ Cvre= 0x11, /* vertical retrace end */ Cvde= 0x12, /* vertical display end */ Cvbs= 0x15, /* vertical blank start */ Cvbe= 0x16, /* vertical blank end */ Cmode= 0x17, /* mode register */ . 55,56c Cvt= 0x06, /* vertical total */ Cvover= 0x07, /* bits that didn't fit elsewhere */ . 26a #define XPERIOD 800 /* Hsync freq == 31.47 KHZ */ #define YPERIOD 525 /* Vsync freq == 59.9 HZ */ #define YBORDER 2 . ## diffname pc/vga.c 1991/1112 ## diff -e /n/bootesdump/1991/1109/sys/src/9/safari/vga.c /n/bootesdump/1991/1112/sys/src/9/safari/vga.c 164a /* pixels per scan line (always 0 for graphics) */ crout(Cmsl, 0x40|msl); /* also 10th bit of line compare */ . 157,162c crout(Cvbs, (MAXY+yborder)); msl |= ((MAXY+yborder)&0x100) ? 0x20 : 0; overflow |= ((MAXY+yborder)&0x100) ? 0x8 : 0; crout(Cvbe, (yperiod-yborder)&0x7f); . 152,155c crout(Cvrs, (MAXY+0x0a)); /**/ overflow |= ((MAXY+0x0a)&0x200) ? 0x80 : 0; overflow |= ((MAXY+0x0a)&0x100) ? 0x4 : 0; crout(Cvre, ((yperiod-1)&0xf)|0xa0); /* also disable vertical interrupts */ . 148,150c crout(Cvt, (yperiod-2)); overflow |= ((yperiod-2)&0x200) ? 0x20 : 0; overflow |= ((yperiod-2)&0x100) ? 0x1 : 0; . 141,142c /* turn off address wrap & word mode */ crout(Cmode, 0xe3); . 117a vgadump(void) { print("misc is 0x%ux fc is 0x%ux\n", inb(EMISCR), inb(EFCR)); outb(EMISCW, 0xc7);/**/ } vgaclock(void) { outb(EMISCW, 0xc7);/**/ } . 44a EMISCR= 0x3CC, /* control sync polarity */ EMISCW= 0x3C2, EFCW= 0x3DA, /* feature control */ EFCR= 0x3CA, . 27,29c int xperiod = 800; /* Hsync freq == 31.47 KHZ */ int yperiod = 525; /* Vsync freq == 59.9 HZ */ int yborder = 7; /* top/bottom border of screen */ . ## diffname pc/vga.c 1991/1113 ## diff -e /n/bootesdump/1991/1112/sys/src/9/safari/vga.c /n/bootesdump/1991/1113/sys/src/9/safari/vga.c 323a } /* * a fatter than usual cursor for the safari */ Cursor fatarrow = { { -1, -1 }, { 0xff, 0xff, 0x80, 0x01, 0x80, 0x02, 0x80, 0x0c, 0x80, 0x10, 0x80, 0x10, 0x80, 0x08, 0x80, 0x04, 0x80, 0x02, 0x80, 0x01, 0x80, 0x02, 0x8c, 0x04, 0x92, 0x08, 0x91, 0x10, 0xa0, 0xa0, 0xc0, 0x40, }, { 0x00, 0x00, 0x7f, 0xfe, 0x7f, 0xfc, 0x7f, 0xf0, 0x7f, 0xe0, 0x7f, 0xe0, 0x7f, 0xf0, 0x7f, 0xf8, 0x7f, 0xfc, 0x7f, 0xfe, 0x7f, 0xfc, 0x73, 0xf8, 0x61, 0xf0, 0x60, 0xe0, 0x40, 0x40, 0x00, 0x00, }, }; void bigcursor(void) { extern Cursor arrow; memmove(&arrow, &fatarrow, sizeof(fatarrow)); . 196c setmode(&mode12); bigcursor(); . 181,186c for(i = 0; i < sizeof(v->attribute); i++) arout(i, v->attribute[i]); . 155,179c for(i = 0; i < sizeof(v->graphics); i++) grout(i, v->graphics[i]); . 148,153c crout(Cvre, 0); /* allow writes to CRT registers 0-7 */ for(i = 0; i < sizeof(v->crt); i++) crout(i, v->crt[i]); . 146c for(i = 0; i < sizeof(v->sequencer); i++) srout(i, v->sequencer[i]); . 133,144c for(i = 0; i < sizeof(v->general); i++) genout(i, v->general[i]); . 130,131c int i; . 128c void setmode(VGAmode *v) . 125d 80a genout(int reg, int val) { if(reg == 0) outb(EMISCW, val); else if (reg == 1) outb(EFCW, val); } void . 79a VGAmode mode12 = { /* general */ 0xe3, 0x00, 0x70, 0x04, /* sequence */ 0x03, 0x01, 0x0f, 0x00, 0x06, /* crt */ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xea, 0x0c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3, 0xff, /* graphics */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* attribute */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x01, 0x00, 0x0f, 0x00, 0x00, }; . 78c * 640x480 display, 16 bit color . 76a typedef struct VGAmode VGAmode; struct VGAmode { uchar general[4]; uchar sequencer[5]; uchar crt[0x19]; uchar graphics[9]; uchar attribute[0x15]; }; . 73,74d 67,70d 62,65d 57,58d 51,53d 27,29d ## diffname pc/vga.c 1991/1211 ## diff -e /n/bootesdump/1991/1113/sys/src/9/safari/vga.c /n/bootesdump/1991/1211/sys/src/9/safari/vga.c 116,117c outb(ARW, reg | 0x20); outb(ARW, val); . 55,56c ARW= 0x3C0, /* attribute registers (writing) */ ARR= 0x3C1, /* attribute registers (reading) */ . ## diffname pc/vga.c 1991/1228 ## diff -e /n/bootesdump/1991/1211/sys/src/9/safari/vga.c /n/bootesdump/1991/1228/sys/src/9/safari/vga.c 230,231c Rune r; int i; char buf[4]; lock(&printq); while(n > 0){ i = chartorune(&r, s); if(i == 0){ s++; --n; continue; } memmove(buf, s, i); buf[i] = 0; n -= i; s += i; if(r == '\n') screenputnl(); else if(r == '\t'){ out.pos.x += (8-((out.pos.x-MINX)/out.bwid&7))*out.bwid; if(out.pos.x >= gscreen.r.max.x) screenputnl(); }else if(r == '\b'){ if(out.pos.x >= out.bwid+MINX){ out.pos.x -= out.bwid; gstring(&gscreen, out.pos, defont, " ", flipD[S]); } }else{ if(out.pos.x >= gscreen.r.max.x-out.bwid) screenputnl(); out.pos = gstring(&gscreen, out.pos, defont, buf, flipD[S]); } } unlock(&printq); . 198,224c out.pos.x = MINX; out.pos.y += defont0.height; if(out.pos.y > gscreen.r.max.y-defont0.height) out.pos.y = gscreen.r.min.y; gbitblt(&gscreen, Pt(0, out.pos.y), &gscreen, Rect(0, out.pos.y, gscreen.r.max.x, out.pos.y+2*defont0.height), flipD[0]); . 196c screenputnl(void) . ## diffname pc/vga.c 1992/0208 ## diff -e /n/bootesdump/1991/1228/sys/src/9/safari/vga.c /n/bootesdump/1992/0208/sys/src/9/safari/vga.c 239c out.pos = gsubfstring(&gscreen, out.pos, defont, buf, flipD[S]); . 234c gsubfstring(&gscreen, out.pos, defont, " ", flipD[S]); . 14,15c extern GSubfont defont0; GSubfont *defont; . ## diffname pc/vga.c 1992/0321 ## diff -e /n/bootesdump/1992/0208/sys/src/9/safari/vga.c /n/bootesdump/1992/0321/sys/src/9/safari/vga.c 2c #include "../port/lib.h" . ## diffname pc/vga.c 1992/0401 ## diff -e /n/bootesdump/1992/0321/sys/src/9/safari/vga.c /n/bootesdump/1992/0401/sys/src/9/safari/vga.c 189a delay(2000); gbitblt(&gscreen, Pt(0, 0), &gscreen, gscreen.r, flipD[F]); delay(2000); gbitblt(&gscreen, Pt(0, 0), &gscreen, gscreen.r, flipD[0]); . ## diffname pc/vga.c 1992/0402 ## diff -e /n/bootesdump/1992/0401/sys/src/9/safari/vga.c /n/bootesdump/1992/0402/sys/src/9/safari/vga.c 246c unlock(&screenlock); . 217c lock(&screenlock); . 209a Lock screenlock; . 190,193d ## diffname pc/vga.c 1992/0409 ## diff -e /n/bootesdump/1992/0402/sys/src/9/safari/vga.c /n/bootesdump/1992/0409/sys/src/9/safari/vga.c 177d ## diffname pc/vga.c 1992/0414 ## diff -e /n/bootesdump/1992/0409/sys/src/9/safari/vga.c /n/bootesdump/1992/0414/sys/src/9/safari/vga.c 121a delay(1000); /* needed for 16bit VGA path on Ultra SVGA */ . 114a /* * if this print is missing, we are left with a blank white screen. */ print("arout %d %2x\n", reg, val); . 102a /* * needed or the screen goes blank on an ultra VGA card */ delay(1000); . 94a delay(1000); . 90a #else /* * 640x480 display, 16 bit color - attempt at SVGA version...ches */ VGAmode mode12 = { /* general */ 0xe7, 0x00, 0x70, 0x04, /* sequence */ 0x03, 0x01, 0x0f, 0x00, 0x06, /* crt */ 0x65, 0x4f, 0x50, 0x88, 0x55, 0x9a, 0x09, 0x3e, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x8b, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3, 0xff, /* graphics */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* attribute */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x01, 0x00, 0x0f, 0x00, 0x00, }; #endif . 68a #ifdef ORIGINALSAFARI . ## diffname pc/vga.c 1992/0417 ## diff -e /n/bootesdump/1992/0414/sys/src/9/safari/vga.c /n/bootesdump/1992/0417/sys/src/9/safari/vga.c 113c 0x01, 0x07, 0x0f, 0x00, 0x00, . ## diffname pc/vga.c 1992/0418 ## diff -e /n/bootesdump/1992/0417/sys/src/9/safari/vga.c /n/bootesdump/1992/0418/sys/src/9/safari/vga.c 226a print("PEL Mask Register = %02x\n", inb(0x3c6)&0xff); . 156c delay(TESTDELAY); /* needed for 16bit VGA path on Ultra SVGA */ . 132c delay(TESTDELAY); . 120c delay(TESTDELAY); . 116a #define TESTDELAY 1 . 111,113c 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0d, 0x0f, 0x01, 0x10, 0x0f, 0x00, 0x00, . ## diffname pc/vga.c 1992/0423 ## diff -e /n/bootesdump/1992/0418/sys/src/9/safari/vga.c /n/bootesdump/1992/0423/sys/src/9/safari/vga.c 229d 206a dumpmodes(VGAmode *v) { int i; print("general registers: %02x %02x %02x %02x\n", inb(0x3cc), inb(0x3ca), inb(0x3c2), inb(0x3da)); print("sequence registers: "); for(i = 0; i < sizeof(v->sequencer); i++) { outb(SRX, i); print(" %02x", inb(SR)); } print("\nCRT registers: "); for(i = 0; i < sizeof(v->crt); i++) { outb(CRX, i); print(" %02x", inb(CR)); } print("\nGraphics registers: "); for(i = 0; i < sizeof(v->graphics); i++) { outb(GRX, i); print(" %02x", inb(GR)); } print("\nAttribute registers: "); for(i = 0; i < sizeof(v->attribute); i++) { inb(0x3DA); outb(ARW, i | 0x20); print(" %02x", inb(ARR)); } print("\nPEL Mask Register = %02x\n\n", inb(0x3c6)&0xff); } #endif void . 205a #ifdef VGATROUBLE . 158d 154a . 152,153c if (reg <= 0xf) { outb(ARW, reg | 0x0); outb(ARW, val); inb(0x3DA); outb(ARW, reg | 0x20); } else { outb(ARW, reg | 0x20); outb(ARW, val); } . 150d 134d 122d 112c 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x3f, . 99c 0xe7, 0x00, /* 0x70, 0x04, these are read-only */ . 76c 0xe3, 0x00, /* 0x70, 0x04, these are read-only */ . 62c uchar general[2]; . ## diffname pc/vga.c 1992/0424 ## diff -e /n/bootesdump/1992/0423/sys/src/9/safari/vga.c /n/bootesdump/1992/0424/sys/src/9/safari/vga.c 115,117d 71,93d 69d ## diffname pc/vga.c 1992/0430 ## diff -e /n/bootesdump/1992/0424/sys/src/9/safari/vga.c /n/bootesdump/1992/0430/sys/src/9/safari/vga.c 228c setmode(&mode41); . 91a /* * 800x600 display, 16 bit color */ VGAmode mode41 = { /* general */ 0xe7, 0x00, /* 0x70, 0x04, these are read-only */ /* sequence */ 0x03, 0x01, 0x0f, 0x00, 0x06, /* crt */ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f, 0x00, 0x40, 0x0d, 0x0e, 0x00, 0x00, 0x07, 0x80, 0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3, 0xff, /* graphics */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* attribute */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x3f, 0x01, 0x10, 0x0f, 0x00, 0x00, }; . 70c * 640x480 display, 16 bit color. . 25,26c #define MAXX 800 #define MAXY 600 . ## diffname pc/vga.c 1992/0501 ## diff -e /n/bootesdump/1992/0430/sys/src/9/safari/vga.c /n/bootesdump/1992/0501/sys/src/9/safari/vga.c 251c setmode(&mode12); . 102,105c 0x7f, 0x63, 0x64, 0x9d, 0x67, 0x92, 0x77, 0xf0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x8f, 0x57, 0x32, 0x00, 0x5b, 0x74, 0xc3, 0xff, . 98c 0x2f, 0x00, /* 0x70, 0x04, these are read-only */ . 95c VGAmode mode6a = . 93c * VESA standard (?) 800x600 display, 16 bit color . ## diffname pc/vga.c 1992/0502 ## diff -e /n/bootesdump/1992/0501/sys/src/9/safari/vga.c /n/bootesdump/1992/0502/sys/src/9/safari/vga.c 249a VGAmode v; . 239,240d 211a void printmode(VGAmode *v) { int i; print("general registers: %02x %02x\n", v->general[0], v->general[1]); print("sequence registers: "); for(i = 0; i < sizeof(v->sequencer); i++) { print(" %02x", v->sequencer[i]); } print("\nCRT registers: "); for(i = 0; i < sizeof(v->crt); i++) { print(" %02x", v->crt[i]); } print("\nGraphics registers: "); for(i = 0; i < sizeof(v->graphics); i++) { print(" %02x", v->graphics[i]); } print("\nAttribute registers: "); for(i = 0; i < sizeof(v->attribute); i++) { print(" %02x", v->attribute[i]); } print("\n"); } void dumpmodes(void) { VGAmode *v; int i; . 210a v->general[0] = inb(0x3cc); v->general[1] = inb(0x3ca); for(i = 0; i < sizeof(v->sequencer); i++) { outb(SRX, i); v->sequencer[i] = inb(SR); } for(i = 0; i < sizeof(v->crt); i++) { outb(CRX, i); v->crt[i] = inb(CR); } for(i = 0; i < sizeof(v->graphics); i++) { outb(GRX, i); v->graphics[i] = inb(GR); } for(i = 0; i < sizeof(v->attribute); i++) { inb(0x3DA); outb(ARW, i | 0x20); v->attribute[i] = inb(ARR); } } . 208,209c getmode(VGAmode *v) { . 102,103c 0x7f, 0x63, 0x64, 0x02, 0x6a, 0x1d, 0x77, 0xf0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, . 98c 0xe3, 0x00, /* 0x70, 0x04, these are read-only */ . 93c * VESA standard (?) 800x600 display, 16 bit color. . 75c 0xe7, 0x00, . 26a */ #define MAXX 640 #define MAXY 480 . 24a /* . ## diffname pc/vga.c 1992/0519 ## diff -e /n/bootesdump/1992/0502/sys/src/9/safari/vga.c /n/bootesdump/1992/0519/sys/src/9/safari/vga.c 322a delay(50000); setmode(&mode12); printmode(&testmode); . 307c setmode(&mode6a); getmode(&testmode); . 305c VGAmode testmode; . 259c print(" %2.2x", v->attribute[i]); . 257c print("\na "); . 254c print(" %2.2x", v->graphics[i]); . 252c print("\ng "); . 249c print(" %2.2x", v->crt[i]); . 247c print("\nc "); . 244c print(" %2.2x", v->sequencer[i]); . 242c print("s "); . 239c print("g %2.2x %2x\n", . 211d 107,110c 0x7a, 0x63, 0x65, 0x9d, 0x67, 0x92, 0x39, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x82, 0x2b, 0x32, 0x0f, 0x33, 0x36, 0xe7, 0xff, . 103c 0x2f, 0x00, /* 0x70, 0x04, these are read-only */ . ## diffname pc/vga.c 1992/0520 ## diff -e /n/bootesdump/1992/0519/sys/src/9/safari/vga.c /n/bootesdump/1992/0520/sys/src/9/safari/vga.c 324a printmode(&testmode); getmode(&testmode); . 117a #endif . 106a 0x7a, 0x63, 0x65, 0x9d, 0x68, 0x99, 0x38, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x8e, 0x2b, 0x32, 0x0f, 0x32, 0x34, 0xe7, 0xff, /* graphics */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* attribute */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x3f, 0x01, 0x10, 0x0f, 0x00, 0x00, #ifdef almost /* general */ 0xe7, 0x00, /* 0x70, 0x04, these are read-only */ /* sequence */ 0x03, 0x01, 0x0f, 0x00, 0x06, /* crt */ . 103c 0x67, 0x00, /* 0x70, 0x04, these are read-only */ . 31a */ #define MAXX 800 #define MAXY 600 . 27,29d ## diffname pc/vga.c 1992/0527 ## diff -e /n/bootesdump/1992/0520/sys/src/9/safari/vga.c /n/bootesdump/1992/0527/sys/src/9/safari/vga.c 341,345d 324,325c setmode(&mode12); . 164,166d 118,135d 107,109c 0x5f, 0x4f, 0x50, 0x02, 0x54, 0x80, 0x0b, 0x3e, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3, . 103c 0xe3, 0x00, /* 0x70, 0x04, these are read-only */ . 100c VGAmode mode25 = . 98c * cardinal (tseng labs) 800x600 display, 16 bit color. . 31a */ . 29c /* . 26d ## diffname pc/vga.c 1992/0528 ## diff -e /n/bootesdump/1992/0527/sys/src/9/safari/vga.c /n/bootesdump/1992/0528/sys/src/9/safari/vga.c 131,133d 45,63d 10a #include "vga.h" . ## diffname pc/vga.c 1992/0603 ## diff -e /n/bootesdump/1992/0528/sys/src/9/safari/vga.c /n/bootesdump/1992/0603/sys/src/9/safari/vga.c 397,424d 293,297c setscreen(MAXX, MAXY, 1); . 274a setscreen(int maxx, int maxy, int bpp) { gbitblt(&gscreen, Pt(0, 0), &gscreen, gscreen.r, flipD[S]); gscreen.width = maxx/32; gscreen.r.max = Pt(maxx, maxy); gbitblt(&gscreen, Pt(0, 0), &gscreen, gscreen.r, flipD[0]); out.pos.x = MINX; out.pos.y = 0; out.bwid = defont0.info[' '].width; } void . 144,164d 79,100d 29,32d ## diffname pc/vga.c 1992/0604 ## diff -e /n/bootesdump/1992/0603/sys/src/9/safari/vga.c /n/bootesdump/1992/0604/sys/src/9/safari/vga.c 231a gscreen.clipr.max = gscreen.r.max; . 38c { 0, 0, MAXX, MAXY, }, { 0, 0, MAXX, MAXY, }, . 30,31d ## diffname pc/vga.c 1992/0711 ## diff -e /n/bootesdump/1992/0604/sys/src/9/safari/vga.c /n/bootesdump/1992/0711/sys/src/9/safari/vga.c 348a USED(x, y); . 342a USED(s, c, ox, oy); . 336a USED(p, r, g, b); . 244d 241,242c int i; . 227c setscreen(int maxx, int maxy, int bpp) { USED(bpp); . ## diffname pc/vga.c 1992/0914 ## diff -e /n/bootesdump/1992/0808/sys/src/9/safari/vga.c /n/bootesdump/1992/0914/sys/src/9/pc/vga.c 309d 280d ## diffname pc/vga.c 1992/1013 ## diff -e /n/bootesdump/1992/0914/sys/src/9/pc/vga.c /n/bootesdump/1992/1013/sys/src/9/pc/vga.c 71c 0x01, 0x00, 0x0f, 0x00, 0x00, . 63c 0xea, 0x2c, 0xdf, 0x28, 0x00, 0xea, 0xeb, 0xe3, . 61c 0x63, 0x4f, 0x58, 0x81, 0x59, 0x81, 0x0b, 0x3e, . 57c 0xe3, 0x00, . 52c * 640x480 display, 16 bit color. . ## diffname pc/vga.c 1992/1015 ## diff -e /n/bootesdump/1992/1013/sys/src/9/pc/vga.c /n/bootesdump/1992/1015/sys/src/9/pc/vga.c 71c 0x01, 0x10, 0x0f, 0x00, 0x00, . 63c 0xe8, 0x8b, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3, . 61c 0x65, 0x4f, 0x50, 0x88, 0x55, 0x9a, 0x09, 0x3e, . 57c 0xe7, 0x00, . 52c * 640x480 display, 16 bit color. . ## diffname pc/vga.c 1992/1030 ## diff -e /n/bootesdump/1992/1015/sys/src/9/pc/vga.c /n/bootesdump/1992/1030/sys/src/9/pc/vga.c 383a void screenupdate(Rectangle r) { USED(r); } . ## diffname pc/vga.c 1992/1104 ## diff -e /n/bootesdump/1992/1030/sys/src/9/pc/vga.c /n/bootesdump/1992/1104/sys/src/9/pc/vga.c 384,389d ## diffname pc/vga.c 1992/1105 ## diff -e /n/bootesdump/1992/1104/sys/src/9/pc/vga.c /n/bootesdump/1992/1105/sys/src/9/pc/vga.c 383a /* * collect changes to the 'soft' screen */ static Rectangle mbb; void mbbrect(Rectangle r) { if(!islcd) return; if (r.min.x < mbb.min.x) mbb.min.x = r.min.x; if (r.min.y < mbb.min.y) mbb.min.y = r.min.y; if (r.max.x > mbb.max.x) mbb.max.x = r.max.x; if (r.max.y > mbb.max.y) mbb.max.y = r.max.y; } void mbbpt(Point p) { if(!islcd) return; if (p.x < mbb.min.x) mbb.min.x = p.x; if (p.y < mbb.min.y) mbb.min.y = p.y; if (p.x >= mbb.max.x) mbb.max.x = p.x+1; if (p.y >= mbb.max.y) mbb.max.y = p.y+1; } void screenupdate(void) { } void mousescreenupdate(void) { } . ## diffname pc/vga.c 1992/1106 ## diff -e /n/bootesdump/1992/1105/sys/src/9/pc/vga.c /n/bootesdump/1992/1106/sys/src/9/pc/vga.c 384,429d 382a bitreverse(arrow.set, 2*16); bitreverse(arrow.clr, 2*16); . 380,381d 376a . 316a screenupdate(void) { uchar *sp, *hp, *se; int y, len, inc; Rectangle r=mbb; if(Dy(r) < 0) return; sp = (uchar*)gaddr(&gscreen, r.min); hp = (uchar*)gaddr(&vgascreen, r.min); len = (r.max.x * (1< mbb.max.x) mbb.max.x = r.max.x; if (r.max.y > mbb.max.y) mbb.max.y = r.max.y; screenupdate(); } void mbbpt(Point p) { if (p.x < mbb.min.x) mbb.min.x = p.x; if (p.y < mbb.min.y) mbb.min.y = p.y; if (p.x >= mbb.max.x) mbb.max.x = p.x+1; if (p.y >= mbb.max.y) mbb.max.y = p.y+1; screenupdate(); } void . 259a /* * collect changes to the 'soft' screen */ . 257c bitreverse((uchar*)defont->bits->base, defont->bits->width*BY2WD*Dy(defont->bits->r)); /* * set up 'soft' and hard screens */ if(conf.maxx == 0) conf.maxx = MAXX; if(conf.maxy == 0) conf.maxy = MAXY; setscreen(conf.maxx, conf.maxy, conf.ldepth); . 252a bitreverse(arrow.set, 2*16); bitreverse(arrow.clr, 2*16); /* * swizzle the font longs. we do both byte and bit swizzling * since the font is initialized with big endian longs. */ . 249,251c * arrow is defined as a big endian . 234c len = gscreen.width * 4 * maxy; gscreen.base = malloc(len); memset((void*)gscreen.base, 0xff, len); /* * set string pointer to upper left */ . 229,231c int len; mbb = NULLMBB; /* * zero hard screen */ memset((void*)SCREENMEM, 0xff, 64*1024); vgascreen.ldepth = 0; vgascreen.base = (void*)SCREENMEM; vgascreen.width = (maxx*(1< gscreen.r.max.x) r.max.x = gscreen.r.max.x; if(r.max.y > gscreen.r.max.y) r.max.y = gscreen.r.max.y; . 407a r = mbb; mbb = NULLMBB; . 406c Rectangle r; . 328d 253,254c gscreen.base = ((ulong*)malloc(len+2*1024))+256; memset((char*)gscreen.base, 0xff, len); . ## diffname pc/vga.c 1992/1108 ## diff -e /n/bootesdump/1992/1107/sys/src/9/pc/vga.c /n/bootesdump/1992/1108/sys/src/9/pc/vga.c 514a /* * Table for separating and reversing bits in a ldepth 1 bitmap. * This aids in coverting a little endian ldepth 1 bitmap into the * 2 big-endian ldepth 0 bitmaps used for the VGA bit planes. * * if the bits in uchar x are labeled * 76543210 * then l1revsep[x] yields a ushort with bits * ____0246____1357 * where _ represents a bit whose value is 0. * * This table is used by l1update() in l.s. l1update is implemented * in assembler for speed (yech). * */ ushort l1revsep[] = { 0x0000, 0x0800, 0x0008, 0x0808, 0x0400, 0x0c00, 0x0408, 0x0c08, 0x0004, 0x0804, 0x000c, 0x080c, 0x0404, 0x0c04, 0x040c, 0x0c0c, 0x0200, 0x0a00, 0x0208, 0x0a08, 0x0600, 0x0e00, 0x0608, 0x0e08, 0x0204, 0x0a04, 0x020c, 0x0a0c, 0x0604, 0x0e04, 0x060c, 0x0e0c, 0x0002, 0x0802, 0x000a, 0x080a, 0x0402, 0x0c02, 0x040a, 0x0c0a, 0x0006, 0x0806, 0x000e, 0x080e, 0x0406, 0x0c06, 0x040e, 0x0c0e, 0x0202, 0x0a02, 0x020a, 0x0a0a, 0x0602, 0x0e02, 0x060a, 0x0e0a, 0x0206, 0x0a06, 0x020e, 0x0a0e, 0x0606, 0x0e06, 0x060e, 0x0e0e, 0x0100, 0x0900, 0x0108, 0x0908, 0x0500, 0x0d00, 0x0508, 0x0d08, 0x0104, 0x0904, 0x010c, 0x090c, 0x0504, 0x0d04, 0x050c, 0x0d0c, 0x0300, 0x0b00, 0x0308, 0x0b08, 0x0700, 0x0f00, 0x0708, 0x0f08, 0x0304, 0x0b04, 0x030c, 0x0b0c, 0x0704, 0x0f04, 0x070c, 0x0f0c, 0x0102, 0x0902, 0x010a, 0x090a, 0x0502, 0x0d02, 0x050a, 0x0d0a, 0x0106, 0x0906, 0x010e, 0x090e, 0x0506, 0x0d06, 0x050e, 0x0d0e, 0x0302, 0x0b02, 0x030a, 0x0b0a, 0x0702, 0x0f02, 0x070a, 0x0f0a, 0x0306, 0x0b06, 0x030e, 0x0b0e, 0x0706, 0x0f06, 0x070e, 0x0f0e, 0x0001, 0x0801, 0x0009, 0x0809, 0x0401, 0x0c01, 0x0409, 0x0c09, 0x0005, 0x0805, 0x000d, 0x080d, 0x0405, 0x0c05, 0x040d, 0x0c0d, 0x0201, 0x0a01, 0x0209, 0x0a09, 0x0601, 0x0e01, 0x0609, 0x0e09, 0x0205, 0x0a05, 0x020d, 0x0a0d, 0x0605, 0x0e05, 0x060d, 0x0e0d, 0x0003, 0x0803, 0x000b, 0x080b, 0x0403, 0x0c03, 0x040b, 0x0c0b, 0x0007, 0x0807, 0x000f, 0x080f, 0x0407, 0x0c07, 0x040f, 0x0c0f, 0x0203, 0x0a03, 0x020b, 0x0a0b, 0x0603, 0x0e03, 0x060b, 0x0e0b, 0x0207, 0x0a07, 0x020f, 0x0a0f, 0x0607, 0x0e07, 0x060f, 0x0e0f, 0x0101, 0x0901, 0x0109, 0x0909, 0x0501, 0x0d01, 0x0509, 0x0d09, 0x0105, 0x0905, 0x010d, 0x090d, 0x0505, 0x0d05, 0x050d, 0x0d0d, 0x0301, 0x0b01, 0x0309, 0x0b09, 0x0701, 0x0f01, 0x0709, 0x0f09, 0x0305, 0x0b05, 0x030d, 0x0b0d, 0x0705, 0x0f05, 0x070d, 0x0f0d, 0x0103, 0x0903, 0x010b, 0x090b, 0x0503, 0x0d03, 0x050b, 0x0d0b, 0x0107, 0x0907, 0x010f, 0x090f, 0x0507, 0x0d07, 0x050f, 0x0d0f, 0x0303, 0x0b03, 0x030b, 0x0b0b, 0x0703, 0x0f03, 0x070b, 0x0f0b, 0x0307, 0x0b07, 0x030f, 0x0b0f, 0x0707, 0x0f07, 0x070f, 0x0f0f, }; . 401,440d 397,399d 330a screenupdate(void) { uchar *sp, *hp; int y, len, incs, inch; Rectangle r; r = mbb; mbb = NULLMBB; if(Dy(r) < 0) return; if(r.min.x < 0) r.min.x = 0; if(r.min.y < 0) r.min.y = 0; if(r.max.x > gscreen.r.max.x) r.max.x = gscreen.r.max.x; if(r.max.y > gscreen.r.max.y) r.max.y = gscreen.r.max.y; sp = (uchar*)gaddr(&gscreen, r.min); hp = (uchar*)gaddr(&vgascreen, r.min); len = (r.max.x + 31)/32 - r.min.x/32; len *= BY2WD; if(len <= 0) return; incs = gscreen.width * BY2WD; inch = vgascreen.width * BY2WD; switch(gscreen.ldepth){ case 0: for (y = r.min.y; y < r.max.y; y++){ l0update(sp, hp, len); sp += incs; hp += inch; } break; case 1: for (y = r.min.y; y < r.max.y; y++){ l1update(sp, hp, len); sp += incs; hp += inch; } break; } } void . 329a /* * copy litte endian soft screen to big endian hard screen */ . ## diffname pc/vga.c 1992/1109 ## diff -e /n/bootesdump/1992/1108/sys/src/9/pc/vga.c /n/bootesdump/1992/1109/sys/src/9/pc/vga.c 373a /* reverse the bits and split into 2 bitmaps */ . 366a case 3: /* reverse the bits */ . 357c len = (r.max.x*bits + 31)/32 - (r.min.x*bits)/32; . 354a bits = 1<>(3-vgascreen.ldepth); hp = (uchar*)(vgascreen.base+(r.min.y*vgascreen.width)) + off; off <<= gscreen.ldepth - vgascreen.ldepth; sp = (uchar*)(gscreen.base+(r.min.y*gscreen.width)) + off; len = (r.max.x*bits + 7)/8 - (r.min.x*bits)/8; . 344c int y, len, incs, inch, bits, off; . 304a /* * set up default grey scale color map */ outb(CMWX, 0); for(i = 0; i < 16; i++){ x = (i*63)/15; outb(CM, x); outb(CM, x); outb(CM, x); } . 303d 274c int i, x; . 255c len = gscreen.width * BY2WD * maxy; . 244c vgascreen.width = (maxx*(1<>3; hp = (uchar*)(vgascreen.base+(r.min.y*vgascreen.width)) + off; sp = (uchar*)(gscreen.base+(r.min.y*gscreen.width)) + 4*off; len = (r.max.x + 7)/8 - r.min.x/8; if(len < 1) len = 1; /* reverse the bits and split into 2 bit planes */ for (y = r.min.y; y < r.max.y; y++){ l2update(sp, hp, len); sp += incs; hp += inch; } break; case 3: y2pg = (64*1024/BY2WD)/gscreen.width; off = (r.min.y % y2pg) * gscreen.width * BY2WD + r.min.x; hp = (uchar*)(vgascreen.base) + off; sp = (uchar*)(gscreen.base) + off; len = r.max.x - r.min.x; if(len < 1) return; y = r.min.y; for(page = y/y2pg; y < r.max.y; page++){ unlocktseng(); outb(0x3cd, (page<<4)|page); ey = (page+1)*y2pg; if(ey > r.max.y) ey = r.max.y; for (; y < ey; y++){ memmove(sp, hp, len); sp += incs; hp += inch; } hp = (uchar*)(vgascreen.base) + r.min.x; } break; . 395c r.min.x &= ~15; /* 16 bit allignment for l1update() */ off = r.min.x>>3; hp = (uchar*)(vgascreen.base+(r.min.y*vgascreen.width)) + off; sp = (uchar*)(gscreen.base+(r.min.y*gscreen.width)) + 2*off; len = (r.max.x + 15)/8 - r.min.x/8; if(len < 2) len = 2; /* reverse the bits and split into 2 bit planes */ . 386c off = r.min.x>>3; hp = (uchar*)(vgascreen.base+(r.min.y*vgascreen.width)) + off; sp = (uchar*)(gscreen.base+(r.min.y*gscreen.width)) + off; len = (r.max.x + 7)/8 - r.min.x/8; if(len < 1) return; . 372,380d 354c int y, len, incs, inch, off, page, y2pg, ey; . 346a void unlocktseng(void) { outb(0x3bf, 0x03); outb(0x3d8, 0xa0); } . 314a outb(CMWX, 5); outb(CM, 21); outb(CM, 21); outb(CM, 21); outb(CMWX, 0xa); outb(CM, 42); outb(CM, 42); outb(CM, 42); . 310,313c outb(CM, colourxpnd(i<<1)); outb(CM, colourxpnd(i>>2)); outb(CM, colourxpnd(i&~1)); . 306c * set up color map . 270a int colourxpnd(int x) { x &= 3; return (x<<4)|(x<<2)|x; } . 258,260c p = smalloc(len+2*1024)); gscreen.base = ((ulong*)p) + 256; } else { p = malloc(len+2*1024)); gscreen.base = ((ulong*)p) + 256; } pad1 = p; pad2 = p + len + 1024; memset(pad1, 0, 1024); memset(pad2, 0, 1024); . 231a uchar *p; . 227a uchar *pad1, *pad2; . ## diffname pc/vga.c 1992/1112 ## diff -e /n/bootesdump/1992/1111/sys/src/9/pc/vga.c /n/bootesdump/1992/1112/sys/src/9/pc/vga.c 570,571c p &= (1<<(1<>(32-6)); outb(CM, g>>(32-6)); outb(CM, b>>(32-6)); unlock(&colorlock); return ~0; . 566d 554,563c p &= (1<<(1< 32 || Dx(mbb) > 32) mousescreenupdate(); . 318,330d 291,292d 288c int i; . 282a /* * default color map */ switch(ldepth){ case 3: for(i = 0; i < 256; i++) setcolor(i, x3to32(i>>5), x3to32(i>>2), x3to32(i<<1)); break; case 2: case 1: case 0: gscreen.ldepth = 3; for(i = 0; i < 16; i++){ x = x6to32((i*63)/15); setcolor(i, x, x, x); } gscreen.ldepth = ldepth; break; } . 258,270c gscreen.base = (ulong*)p; memset(gscreen.base, 0xff, len); . 254c gscreen.width = width; . 252a if(gscreen.base) xfree(gscreen.base); . 248a memset(vgascreen.base, 0xff, vgascreen.width * BY2WD * vgamaxy); . 247c vgascreen.r.max = Pt(maxx, vgamaxy); . 245a vgamaxy = maxy % ((64*1024)/vgascreen.width); vgascreen.base = (void*)SCREENMEM; . 244d 234a if(ldepth == 3) setmode(&mode13); else setmode(&mode12); /* allocate a new soft bitmap area */ width = (maxx*(1< gscreen.r.max.y-defont0.height){ vgaupdate(); . 523c memmove(hp, sp, len); . 519c ey = (page+1)*vgascreen.r.max.y; . 516c for(page = y/vgascreen.r.max.y; y < r.max.y; page++){ . 506,507c off = (r.min.y % vgascreen.r.max.y) * vgascreen.width * BY2WD + r.min.x; . 436c int y, len, incs, inch, off, page, ey; . 312a v = (uchar*)vgascreen.base; for(x = 0; x < vgamaxy; x++) for(i = 0; i < vgascreen.width*BY2WD; i+=8) *v = 0; } . 311a if(ldepth == 3){ uchar *v; . 306c if(maxy > (64*1024)/(vgascreen.width*BY2WD)) vgamaxy = (64*1024)/(vgascreen.width*BY2WD); else vgamaxy = maxy; . 220,255d 88,90c 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x9c, 0x8e, 0x8f, 0x28, 0x40, 0x96, 0xb9, 0xa3, . 84c 0x63, 0x00, . 79c * 320x200 display, 8 bit color. . ## diffname pc/vga.c 1992/1115 ## diff -e /n/bootesdump/1992/1114/sys/src/9/pc/vga.c /n/bootesdump/1992/1115/sys/src/9/pc/vga.c 733,766c ulong l2revsep[] = { 0x0000000, 0x0000002, 0x0000200, 0x0000202, 0x0020000, 0x0020002, 0x0020200, 0x0020202, 0x2000000, 0x2000002, 0x2000200, 0x2000202, 0x2020000, 0x2020002, 0x2020200, 0x2020202, 0x0000001, 0x0000003, 0x0000201, 0x0000203, 0x0020001, 0x0020003, 0x0020201, 0x0020203, 0x2000001, 0x2000003, 0x2000201, 0x2000203, 0x2020001, 0x2020003, 0x2020201, 0x2020203, 0x0000100, 0x0000102, 0x0000300, 0x0000302, 0x0020100, 0x0020102, 0x0020300, 0x0020302, 0x2000100, 0x2000102, 0x2000300, 0x2000302, 0x2020100, 0x2020102, 0x2020300, 0x2020302, 0x0000101, 0x0000103, 0x0000301, 0x0000303, 0x0020101, 0x0020103, 0x0020301, 0x0020303, 0x2000101, 0x2000103, 0x2000301, 0x2000303, 0x2020101, 0x2020103, 0x2020301, 0x2020303, 0x0010000, 0x0010002, 0x0010200, 0x0010202, 0x0030000, 0x0030002, 0x0030200, 0x0030202, 0x2010000, 0x2010002, 0x2010200, 0x2010202, 0x2030000, 0x2030002, 0x2030200, 0x2030202, 0x0010001, 0x0010003, 0x0010201, 0x0010203, 0x0030001, 0x0030003, 0x0030201, 0x0030203, 0x2010001, 0x2010003, 0x2010201, 0x2010203, 0x2030001, 0x2030003, 0x2030201, 0x2030203, 0x0010100, 0x0010102, 0x0010300, 0x0010302, 0x0030100, 0x0030102, 0x0030300, 0x0030302, 0x2010100, 0x2010102, 0x2010300, 0x2010302, 0x2030100, 0x2030102, 0x2030300, 0x2030302, 0x0010101, 0x0010103, 0x0010301, 0x0010303, 0x0030101, 0x0030103, 0x0030301, 0x0030303, 0x2010101, 0x2010103, 0x2010301, 0x2010303, 0x2030101, 0x2030103, 0x2030301, 0x2030303, 0x1000000, 0x1000002, 0x1000200, 0x1000202, 0x1020000, 0x1020002, 0x1020200, 0x1020202, 0x3000000, 0x3000002, 0x3000200, 0x3000202, 0x3020000, 0x3020002, 0x3020200, 0x3020202, 0x1000001, 0x1000003, 0x1000201, 0x1000203, 0x1020001, 0x1020003, 0x1020201, 0x1020203, 0x3000001, 0x3000003, 0x3000201, 0x3000203, 0x3020001, 0x3020003, 0x3020201, 0x3020203, 0x1000100, 0x1000102, 0x1000300, 0x1000302, 0x1020100, 0x1020102, 0x1020300, 0x1020302, 0x3000100, 0x3000102, 0x3000300, 0x3000302, 0x3020100, 0x3020102, 0x3020300, 0x3020302, 0x1000101, 0x1000103, 0x1000301, 0x1000303, 0x1020101, 0x1020103, 0x1020301, 0x1020303, 0x3000101, 0x3000103, 0x3000301, 0x3000303, 0x3020101, 0x3020103, 0x3020301, 0x3020303, 0x1010000, 0x1010002, 0x1010200, 0x1010202, 0x1030000, 0x1030002, 0x1030200, 0x1030202, 0x3010000, 0x3010002, 0x3010200, 0x3010202, 0x3030000, 0x3030002, 0x3030200, 0x3030202, 0x1010001, 0x1010003, 0x1010201, 0x1010203, 0x1030001, 0x1030003, 0x1030201, 0x1030203, 0x3010001, 0x3010003, 0x3010201, 0x3010203, 0x3030001, 0x3030003, 0x3030201, 0x3030203, 0x1010100, 0x1010102, 0x1010300, 0x1010302, 0x1030100, 0x1030102, 0x1030300, 0x1030302, 0x3010100, 0x3010102, 0x3010300, 0x3010302, 0x3030100, 0x3030102, 0x3030300, 0x3030302, 0x1010101, 0x1010103, 0x1010301, 0x1010303, 0x1030101, 0x1030103, 0x1030301, 0x1030303, 0x3010101, 0x3010103, 0x3010301, 0x3010303, 0x3030101, 0x3030103, 0x3030301, 0x3030303, . 726c * ______37______26______15______04 . 682,715c ulong l1revsep[] = { 0x00000, 0x00008, 0x80000, 0x80008, 0x00004, 0x0000c, 0x80004, 0x8000c, 0x40000, 0x40008, 0xc0000, 0xc0008, 0x40004, 0x4000c, 0xc0004, 0xc000c, 0x00002, 0x0000a, 0x80002, 0x8000a, 0x00006, 0x0000e, 0x80006, 0x8000e, 0x40002, 0x4000a, 0xc0002, 0xc000a, 0x40006, 0x4000e, 0xc0006, 0xc000e, 0x20000, 0x20008, 0xa0000, 0xa0008, 0x20004, 0x2000c, 0xa0004, 0xa000c, 0x60000, 0x60008, 0xe0000, 0xe0008, 0x60004, 0x6000c, 0xe0004, 0xe000c, 0x20002, 0x2000a, 0xa0002, 0xa000a, 0x20006, 0x2000e, 0xa0006, 0xa000e, 0x60002, 0x6000a, 0xe0002, 0xe000a, 0x60006, 0x6000e, 0xe0006, 0xe000e, 0x00001, 0x00009, 0x80001, 0x80009, 0x00005, 0x0000d, 0x80005, 0x8000d, 0x40001, 0x40009, 0xc0001, 0xc0009, 0x40005, 0x4000d, 0xc0005, 0xc000d, 0x00003, 0x0000b, 0x80003, 0x8000b, 0x00007, 0x0000f, 0x80007, 0x8000f, 0x40003, 0x4000b, 0xc0003, 0xc000b, 0x40007, 0x4000f, 0xc0007, 0xc000f, 0x20001, 0x20009, 0xa0001, 0xa0009, 0x20005, 0x2000d, 0xa0005, 0xa000d, 0x60001, 0x60009, 0xe0001, 0xe0009, 0x60005, 0x6000d, 0xe0005, 0xe000d, 0x20003, 0x2000b, 0xa0003, 0xa000b, 0x20007, 0x2000f, 0xa0007, 0xa000f, 0x60003, 0x6000b, 0xe0003, 0xe000b, 0x60007, 0x6000f, 0xe0007, 0xe000f, 0x10000, 0x10008, 0x90000, 0x90008, 0x10004, 0x1000c, 0x90004, 0x9000c, 0x50000, 0x50008, 0xd0000, 0xd0008, 0x50004, 0x5000c, 0xd0004, 0xd000c, 0x10002, 0x1000a, 0x90002, 0x9000a, 0x10006, 0x1000e, 0x90006, 0x9000e, 0x50002, 0x5000a, 0xd0002, 0xd000a, 0x50006, 0x5000e, 0xd0006, 0xd000e, 0x30000, 0x30008, 0xb0000, 0xb0008, 0x30004, 0x3000c, 0xb0004, 0xb000c, 0x70000, 0x70008, 0xf0000, 0xf0008, 0x70004, 0x7000c, 0xf0004, 0xf000c, 0x30002, 0x3000a, 0xb0002, 0xb000a, 0x30006, 0x3000e, 0xb0006, 0xb000e, 0x70002, 0x7000a, 0xf0002, 0xf000a, 0x70006, 0x7000e, 0xf0006, 0xf000e, 0x10001, 0x10009, 0x90001, 0x90009, 0x10005, 0x1000d, 0x90005, 0x9000d, 0x50001, 0x50009, 0xd0001, 0xd0009, 0x50005, 0x5000d, 0xd0005, 0xd000d, 0x10003, 0x1000b, 0x90003, 0x9000b, 0x10007, 0x1000f, 0x90007, 0x9000f, 0x50003, 0x5000b, 0xd0003, 0xd000b, 0x50007, 0x5000f, 0xd0007, 0xd000f, 0x30001, 0x30009, 0xb0001, 0xb0009, 0x30005, 0x3000d, 0xb0005, 0xb000d, 0x70001, 0x70009, 0xf0001, 0xf0009, 0x70005, 0x7000d, 0xf0005, 0xf000d, 0x30003, 0x3000b, 0xb0003, 0xb000b, 0x30007, 0x3000f, 0xb0007, 0xb000f, 0x70003, 0x7000b, 0xf0003, 0xf000b, 0x70007, 0x7000f, 0xf0007, 0xf000f, . 675c * ________1357________0246 . 663,664c pixreverse(arrow.set, 2*16, 0); pixreverse(arrow.clr, 2*16, 0); . 609,610d 602,603d 576c mbbrect(rect); . 574a rect.min = Pt(out.pos.x, out.pos.y); rect.max = Pt(out.pos.x+out.bwid, out.pos.y+defont0.height); . 571c rect.min = Pt(out.pos.x, out.pos.y); rect.max = Pt(out.pos.x+out.bwid, out.pos.y+defont0.height); mbbrect(rect); . 548d 546a Rectangle rect; . 354,355c pixreverse((uchar*)defont->bits->base, defont->bits->width*BY2WD*Dy(defont->bits->r), 0); . 343,344c pixreverse(arrow.set, 2*16, 0); pixreverse(arrow.clr, 2*16, 0); . 282,287d 279,280d 165a /* turn screen on */ srout(1, v->sequencer[1]); . 155c if(i == 1) srout(i, v->sequencer[i]|0x20); /* avoid enabling screen */ else srout(i, v->sequencer[i]); . 150a /* turn screen off (to avoid damage) */ srout(1, 0x21); . ## diffname pc/vga.c 1992/1117 ## diff -e /n/bootesdump/1992/1115/sys/src/9/pc/vga.c /n/bootesdump/1992/1117/sys/src/9/pc/vga.c 548a if(cga) { cgascreenputs(s, n); return; } . 525a cgascreenputs(char *s, int n) { while(n-- > 0) cgascreenputc(*s++); } void . 524a static void cgascreenputc(int c) { int i; static int color; static int pos; if(c == '\n'){ pos = pos/CGAWIDTH; pos = (pos+1)*CGAWIDTH; } else if(c == '\t'){ i = 8 - ((pos/2)&7); while(i-->0) cgascreenputc(' '); } else if(c == '\b'){ if(pos >= 2) pos -= 2; cgascreenputc(' '); pos -= 2; } else { CGASCREEN[pos++] = c; CGASCREEN[pos++] = 2; /* green on black */ } if(pos >= CGAWIDTH*CGAHEIGHT){ memmove(CGASCREEN, &CGASCREEN[CGAWIDTH], CGAWIDTH*(CGAHEIGHT-1)); memset(&CGASCREEN[CGAWIDTH*(CGAHEIGHT-1)], 0, CGAWIDTH); pos = CGAWIDTH*(CGAHEIGHT-1); } } . 504d 502c sp += incs; hp += inch - 64*1024; . 490,500c edisp = ((uchar*)vgascreen.base) + 64*1024; outb(0x3cd, (page<<4)|page); for(y = r.min.y; y < r.max.y; y++){ if(hp + inch < edisp){ f(hp, sp, len); sp += incs; hp += inch; } else { off = edisp - hp; if(off <= len){ f(hp, sp, off); page++; outb(0x3cd, (page<<4)|page); f(vgascreen.base, sp+off, len - off); } else { f(hp, sp, len); page++; outb(0x3cd, (page<<4)|page); . 487,488c break; } if(len < 1) return; . 482,485c f = memmove; . 471,479d 467,469c f = l2update; . 456,464d 451,454c f = l1update; . 440,448d 436,438c f = l0update; . 433a off = r.min.y * vgascreen.width * BY2WD + (r.min.x>>(3 - vgascreen.ldepth)); page = off>>16; off &= (1<<16)-1; hp = ((uchar*)vgascreen.base) + off; off = r.min.y * gscreen.width * BY2WD + (r.min.x>>(3 - gscreen.ldepth)); sp = ((uchar*)gscreen.base) + off; . 430a outb(0x3bf, 0x03); outb(0x3d8, 0xa0); . 414c void* (*f)(void*, void*, long); . 411,412c uchar *sp, *hp, *edisp; int y, len, incs, inch, off, page; . 399,404d 358,365c cga = 1; crout(0x0a, 0xff); /* turn off cursor */ memset(CGASCREEN, 0, CGAWIDTH*CGAHEIGHT); . 340a unlocktseng(); . 269a cga = 0; . 104a unlocktseng(void) { outb(0x3bf, 0x03); outb(0x3d8, 0xa0); } void . 33a static int cga = 1; /* true if in cga mode */ . ## diffname pc/vga.c 1992/1118 ## diff -e /n/bootesdump/1992/1117/sys/src/9/pc/vga.c /n/bootesdump/1992/1118/sys/src/9/pc/vga.c 477c if(len - off > 0) f(vgascreen.base, sp+off, len - off); . 474c if(off > 0) f(hp, sp, off); . 459a default: return; . 430,432d 349,350d 340a cga = 0; . 277d 106,111d ## diffname pc/vga.c 1997/1101 ## diff -e /n/bootesdump/1992/1118/sys/src/9/pc/vga.c /n/emeliedump/1997/1101/sys/src/brazil/pc/vga.c 649,782d 643,647c screenputs = vgascreenputs; . 636,641c window.min = Pt(48, 48); window.max = addpt(window.min, Pt(10+w*80, 10+h*50)); if(window.max.y >= scr->gscreen->r.max.y) window.max.y = scr->gscreen->r.max.y-1; if(window.max.x >= scr->gscreen->r.max.x) window.max.x = scr->gscreen->r.max.x-1; window.max.y = window.min.y+((window.max.y-window.min.y)/h)*h; curpos = window.min; . 620,634c h = scr->memdefont->height; w = scr->memdefont->info[' '].width; . 612,618c int h, w; . 610c vgascreenwin(VGAscr* scr) . 603,606c unlock(&vgascreenlock); . 600,601c flushmemscreen(flushr); . 577,598c vgascreenputc(scr, buf, &flushr); . 565a flushr = Rect(10000, 10000, -10000, -10000); . 564a else lock(&vgascreenlock); . 561,563c scr = &vgascreen[0]; if(!islo()){ /* * Don't deadlock trying to * print in an interrupt. */ if(!canlock(&vgascreenlock)) return; . 559c VGAscr *scr; Rectangle flushr; . 557d 503,555d 500c vgascreenputs(char* s, int n) . 482,495c *xp++ = curpos.x; r = Rect(curpos.x, curpos.y, curpos.x+w, curpos.y+h); memimagedraw(scr->gscreen, r, back, back->r.min, memones, back->r.min); memimagestring(scr->gscreen, curpos, &conscol, scr->memdefont, buf); bbox(flushr, r); curpos.x += w; . 455,480c if(curpos.x >= window.max.x-w) vgascreenputc(scr, "\n", flushr); . 450,453c p = memsubfontwidth(scr->memdefont, buf); w = p.x; . 437,448c . 432,435c case '\b': if(xp <= xbuf) break; xp--; r = Rect(*xp, curpos.y, curpos.x, curpos.y+h); memimagedraw(scr->gscreen, r, back, back->r.min, memones, back->r.min); bbox(flushr, r); curpos.x = *xp; . 425,430c case '\t': p = memsubfontwidth(scr->memdefont, " "); w = p.x; *xp++ = curpos.x; pos = (curpos.x-window.min.x)/w; pos = 4-(pos%4); r = Rect(curpos.x, curpos.y, curpos.x+pos*w, curpos.y+h); memimagedraw(scr->gscreen, r, back, back->r.min, memones, back->r.min); bbox(flushr, r); curpos.x += pos*w; break; . 422,423c case '\r': xp = xbuf; curpos.x = window.min.x; break; . 413,420c case '\n': if(curpos.y+h >= window.max.y){ vgascroll(scr); *flushr = window; } curpos.y += h; vgascreenputc(scr, "\r", flushr); break; . 410,411c h = scr->memdefont->height; switch(buf[0]){ . 407,408c if(xp < xbuf || xp >= &xbuf[sizeof(xbuf)]) xp = xbuf; . 405d 402,403c Point p; int h, w, pos; . 400c vgascreenputc(VGAscr* scr, char* buf, Rectangle *flushr) . 337,398d 303,334c curpos.y -= o; . 140,301c h = scr->memdefont->height; o = 8*h; r = Rpt(window.min, Pt(window.max.x, window.max.y-o)); p = Pt(window.min.x, window.min.y+o); memimagedraw(scr->gscreen, r, scr->gscreen, p, memones, p); r = Rpt(Pt(window.min.x, window.max.y-o), window.max); memimagedraw(scr->gscreen, r, back, ZP, memones, ZP); . 108,138c int h, o; Point p; Rectangle r; . 105,106c static void vgascroll(VGAscr* scr) . 102,103c static Point curpos; static Rectangle window; static int *xp; static int xbuf[256]; static Lock vgascreenlock; . 100a static Memimage conscol = { { 0, 0, 1, 1 }, { -100000, -100000, 100000, 100000 }, 3, 1, &consdata, 0, 1 }; . 79,99c static ulong consbits = 0; static Memdata consdata = { nil, &consbits . 77a static Memimage* back = &xback; . 55,76c static Memimage xback = { { 0, 0, 1, 1 }, { -100000, -100000, 100000, 100000 }, 3, 1, &backdata, 0, 1 . 13,53c static ulong backbits = (Backgnd<<24)|(Backgnd<<16)|(Backgnd<<8)|Backgnd; static Memdata backdata = { nil, &backbits . 8,11c #define Image IMAGE #include #include #include "screen.h" . 1,6c #include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "../port/error.h" . ## diffname pc/vga.c 1999/0119 ## diff -e /n/emeliedump/1997/1101/sys/src/brazil/pc/vga.c /n/emeliedump/1999/0119/sys/src/brazil/pc/vga.c 10a #include . ## diffname pc/vga.c 1999/1005 ## diff -e /n/emeliedump/1999/0119/sys/src/brazil/pc/vga.c /n/emeliedump/1999/1005/sys/src/brazil/pc/vga.c 194a . 131a // drawdebug = 0; . 127,128c memimagedraw(scr->gscreen, r, back, back->r.min, nil, back->r.min); memimagestring(scr->gscreen, curpos, conscol, scr->memdefont, buf); . 113c memimagedraw(scr->gscreen, r, back, back->r.min, nil, ZP); . 103c memimagedraw(scr->gscreen, r, back, back->r.min, nil, ZP); . 75a // drawdebug = 1; . 64c memimagedraw(scr->gscreen, r, back, ZP, nil, ZP); . 62c memimagedraw(scr->gscreen, r, scr->gscreen, p, nil, p); . 50a void vgaimageinit(ulong chan) { if(back == nil){ back = allocmemimage(Rect(0,0,1,1), chan); /* RSC BUG */ if(back == nil) panic("back alloc"); /* RSC BUG */ back->flags |= Frepl; back->clipr = Rect(-0x3FFFFFF, -0x3FFFFFF, 0x3FFFFFF, 0x3FFFFFF); memfillcolor(back, DBlack); } if(conscol == nil){ conscol = allocmemimage(Rect(0,0,1,1), chan); /* RSC BUG */ if(conscol == nil) panic("conscol alloc"); /* RSC BUG */ conscol->flags |= Frepl; conscol->clipr = Rect(-0x3FFFFFF, -0x3FFFFFF, 0x3FFFFFF, 0x3FFFFFF); memfillcolor(conscol, DWhite); } } . 49a int drawdebug; . 30,44d 14,28c static Memimage* back; static Memimage *conscol; . ## diffname pc/vga.c 1999/1106 ## diff -e /n/emeliedump/1999/1005/sys/src/brazil/pc/vga.c /n/emeliedump/1999/1106/sys/src/9/pc/vga.c 125c combinerect(flushr, r); . 110c combinerect(flushr, r); . 100c combinerect(flushr, r); . ## diffname pc/vga.c 2000/0104 ## diff -e /n/emeliedump/1999/1106/sys/src/9/pc/vga.c /n/emeliedump/2000/0104/sys/src/9/pc/vga.c 124c memimagestring(scr->gscreen, curpos, conscol, ZP, scr->memdefont, buf); . ## diffname pc/vga.c 2000/0330 ## diff -e /n/emeliedump/2000/0104/sys/src/9/pc/vga.c /n/emeliedump/2000/0330/sys/src/9/pc/vga.c 192a /* * Supposedly this is the way to turn DPMS * monitors off using just the VGA registers. * Unfortunately, it seems to mess up the video mode * on the cards I've tried. */ void vgablank(VGAscr*, int blank) { uchar seq1, crtc17; if(blank) { seq1 = 0x00; crtc17 = 0x80; } else { seq1 = 0x20; crtc17 = 0x00; } outs(Seqx, 0x0100); /* synchronous reset */ seq1 |= vgaxi(Seqx, 1) & ~0x20; vgaxo(Seqx, 1, seq1); crtc17 |= vgaxi(Crtx, 0x17) & ~0x80; delay(10); vgaxo(Crtx, 0x17, crtc17); outs(Crtx, 0x0300); /* end synchronous reset */ } . ## diffname pc/vga.c 2000/1102 ## diff -e /n/emeliedump/2000/0330/sys/src/9/pc/vga.c /n/emeliedump/2000/1102/sys/src/9/pc/vga.c 111a break; case '\0': . 98,100c *xp++ = curpos.x; r = Rect(curpos.x, curpos.y, curpos.x+pos*w, curpos.y + h); memimagedraw(scr->gscreen, r, back, back->r.min, nil, back->r.min); . 95c if(curpos.x >= window.max.x-4*w) vgascreenputc(scr, "\n", flushr); . ## diffname pc/vga.c 2001/0104 ## diff -e /n/emeliedump/2000/1102/sys/src/9/pc/vga.c /n/emeliedump/2001/0104/sys/src/9/pc/vga.c 186,191c window = insetrect(scr->gscreen->r, 48); window.max.x = window.min.x+((window.max.x-window.min.x)/w)*w; . ## diffname pc/vga.c 2001/0410 ## diff -e /n/emeliedump/2001/0104/sys/src/9/pc/vga.c /n/emeliedump/2001/0410/sys/src/9/pc/vga.c 220a void addvgaseg(char *name, ulong pa, ulong size) { Physseg seg; memset(&seg, 0, sizeof seg); seg.attr = SG_PHYSICAL; /* can we just seg.name = name; ? */ seg.name = smalloc(NAMELEN); snprint(seg.name, NAMELEN, name); seg.pa = pa; seg.size = size; addphysseg(&seg); } . ## diffname pc/vga.c 2001/0527 ## diff -e /n/emeliedump/2001/0410/sys/src/9/pc/vga.c /n/emeliedump/2001/0527/sys/src/9/pc/vga.c 221,236d ## diffname pc/vga.c 2001/0822 ## diff -e /n/emeliedump/2001/0527/sys/src/9/pc/vga.c /n/emeliedump/2001/0822/sys/src/9/pc/vga.c 191a . ## diffname pc/vga.c 2001/0908 ## diff -e /n/emeliedump/2001/0822/sys/src/9/pc/vga.c /n/emeliedump/2001/0908/sys/src/9/pc/vga.c 221a void addvgaseg(char *name, ulong pa, ulong size) { Physseg seg; memset(&seg, 0, sizeof seg); seg.attr = SG_PHYSICAL; seg.name = name; seg.pa = pa; seg.size = size; addphysseg(&seg); } . 192d ## diffname pc/vga.c 2002/0920 ## diff -e /n/emeliedump/2001/0908/sys/src/9/pc/vga.c /n/emeliedump/2002/0920/sys/src/9/pc/vga.c 234a void cornerstring(char *s) { int h, w; VGAscr *scr; Rectangle r; Point p; scr = &vgascreen[0]; if(scr->aperture == 0 || screenputs != vgascreenputs) return; p = memsubfontwidth(scr->memdefont, s); w = p.x; h = scr->memdefont->height; r = Rect(0, 0, w, h); memimagedraw(scr->gscreen, r, back, back->r.min, nil, back->r.min); memimagestring(scr->gscreen, r.min, conscol, ZP, scr->memdefont, s); // flushmemscreen(r); } . ## diffname pc/vga.c 2002/1205 ## diff -e /n/emeliedump/2002/0920/sys/src/9/pc/vga.c /n/emeliedump/2002/1205/sys/src/9/pc/vga.c 251c memimagedraw(scr->gscreen, r, back, back->r.min, nil, back->r.min, S); . 128c memimagedraw(scr->gscreen, r, back, back->r.min, nil, back->r.min, S); . 111c memimagedraw(scr->gscreen, r, back, back->r.min, nil, ZP, S); . 102c memimagedraw(scr->gscreen, r, back, back->r.min, nil, back->r.min, S); . 59c memimagedraw(scr->gscreen, r, back, ZP, nil, ZP, S); . 57c memimagedraw(scr->gscreen, r, scr->gscreen, p, nil, p, S); .