| plan 9 kernel history: overview | file list | diff list |
1995/0126/pc/devvga.c (diff list | history)
| 1995/0117/sys/src/9/pc/devvga.c:18,23 – 1995/0126/sys/src/9/pc/devvga.c:18,24 (short | long | prev | next) | ||
| 1994/0412 | ||
| 1992/1119 | /* imported */ | |
| 1994/0413 | extern Subfont defont0; | |
| 1995/0126 | extern Cursor curs; /* barf */ | |
| 1992/1119 | /* exported */ | |
| 1994/0413 | Bitmap gscreen; | |
| 1995/0117/sys/src/9/pc/devvga.c:26,32 – 1995/0126/sys/src/9/pc/devvga.c:27,33 | ||
| 1992/1119 | ||
| 1993/1116 | /* vga screen */ static Lock screenlock; | |
| 1995/0126 | static ulong colormap[Pcolours][3]; | |
| 1992/1119 | ||
| 1993/1116 | /* cga screen */ static int cga = 1; /* true if in cga mode */ | |
| 1995/0117/sys/src/9/pc/devvga.c:48,94 – 1995/0126/sys/src/9/pc/devvga.c:49,68 | ||
| 1993/1116 | #define SCREENMEM (0xA0000 | KZERO) #define CGASCREEN ((uchar*)(0xB8000 | KZERO)) | |
| 1992/0527 | ||
| 1993/1116 |
| |
| 1992/1119 |
| |
| 1993/1116 |
| |
| 1992/1119 |
| |
| 1995/0126 | static void nopage(int); | |
| 1992/1119 | ||
| 1994/1117 |
| |
| 1994/1201 |
| |
| 1994/0803 |
| |
| 1995/0126 | static Vgac vga = { "vga", nopage, | |
| 1993/1116 | ||
| 1993/0106 |
| |
| 1992/1119 |
| |
| 1994/1103 |
| |
| 1994/0630 |
| |
| 1994/0909 |
| |
| 1994/1103 |
| |
| 1994/0630 |
| |
| 1992/1119 |
| |
| 1994/0630 |
| |
| 1992/1119 | ||
| 1994/0624 |
| |
| 1994/1201 |
| |
| 1994/0803 |
| |
| 1994/0624 |
| |
| 1994/1201 |
| |
| 1994/0803 |
| |
| 1994/0624 | 0, }; | |
| 1994/0803 |
| |
| 1994/0624 |
| |
| 1995/0126 | static Vgac *vgactlr = &vga; /* available VGA ctlrs */ static Vgac *vgac; /* current VGA ctlr */ static Hwgc *hwgctlr; /* available HWGC's */ Hwgc *hwgc; /* current HWGC */ | |
| 1994/0930 | static char interlaced[2]; | |
| 1994/0624 | ||
| 1994/0415 | /* | |
| 1995/0117/sys/src/9/pc/devvga.c:203,214 – 1995/0126/sys/src/9/pc/devvga.c:177,193 | ||
| 1992/1119 | char cbuf[64]; | |
| 1993/1116 | ushort *sp; | |
| 1994/0603 | ulong *lp; | |
| 1995/0126 | Vgac *vgacp; | |
| 1992/0528 | ||
| 1992/0527 | switch(c->qid.path&~CHDIR){ case Qdir: return devdirread(c, buf, n, vgadir, Nvga, devgen); | |
| 1994/0624 | case Qvgactl: | |
| 1995/0126 | if(vgac == 0) vgacp = &vga; else vgacp = vgac; port = sprint(cbuf, "type: %s\n", vgacp->name); | |
| 1994/0930 | port += sprint(cbuf+port, "size: %dx%dx%d%s\n", gscreen.r.max.x, gscreen.r.max.y, 1<<gscreen.ldepth, interlaced); | |
| 1995/0117/sys/src/9/pc/devvga.c:253,260 – 1995/0126/sys/src/9/pc/devvga.c:232,241 | ||
| 1994/0624 | static void vgactl(char *arg) { | |
| 1995/0126 | int x, y, z; | |
| 1994/0624 | char *cp, *field[3]; | |
| 1995/0126 | Hwgc *hwgcp; Vgac *vgacp; | |
| 1994/0624 | ||
| 1995/0117 | if(getfields(arg, field, 3, " ") != 2) | |
| 1994/0624 | error(Ebadarg); | |
| 1995/0117/sys/src/9/pc/devvga.c:269,281 – 1995/0126/sys/src/9/pc/devvga.c:250,262 | ||
| 1994/0624 | return; } | |
| 1995/0126 | for(hwgcp = hwgctlr; hwgcp; hwgcp = hwgcp->link){ if(strcmp(field[1], hwgcp->name) == 0){ | |
| 1994/0624 | if(hwgc) (*hwgc->disable)(); else cursoroff(1); | |
| 1995/0126 | hwgc = hwgcp; | |
| 1994/0624 | (*hwgc->enable)(); setcursor(&curs); cursoron(1); | |
| 1995/0117/sys/src/9/pc/devvga.c:284,292 – 1995/0126/sys/src/9/pc/devvga.c:265,273 | ||
| 1994/0624 | } } else if(strcmp(field[0], "type") == 0){ | |
| 1995/0126 | for(vgacp = vgactlr; vgacp; vgacp = vgacp->link){ if(strcmp(field[1], vgacp->name) == 0){ vgac = vgacp; | |
| 1994/0624 | return; } } | |
| 1995/0117/sys/src/9/pc/devvga.c:577,597 – 1995/0126/sys/src/9/pc/devvga.c:558,575 | ||
| 1994/1119 | ||
| 1994/0624 | vgao(MiscW, vga->misc); | |
| 1994/0412 |
| |
| 1994/0624 |
| |
| 1995/0126 | for(i = 2; i < sizeof(vga->sequencer); i++) | |
| 1994/0624 | vgaxo(Seqx, i, vga->sequencer[i]); | |
| 1994/1119 | vgaxo(Seqx, 0x00, seq00); | |
| 1994/0412 | ||
| 1994/0624 | vgaxo(Crtx, 0x11, vga->crt[0x11] & ~0x80); | |
| 1995/0126 | for(i = 0; i < sizeof(vga->crt); i++) | |
| 1994/0624 | vgaxo(Crtx, i, vga->crt[i]); | |
| 1994/0412 | ||
| 1994/0624 |
| |
| 1995/0126 | for(i = 0; i < sizeof(vga->graphics); i++) | |
| 1994/0624 | vgaxo(Grx, i, vga->graphics[i]); | |
| 1994/0412 | ||
| 1994/0624 |
| |
| 1995/0126 | for(i = 0; i < sizeof(vga->attribute); i++) | |
| 1994/0624 | vgaxo(Attrx, i, vga->attribute[i]); | |
| 1994/0412 | ||
| 1994/1119 | vgaxo(Seqx, 0x01, seq01); | |
| 1995/0117/sys/src/9/pc/devvga.c:648,654 – 1995/0126/sys/src/9/pc/devvga.c:626,632 | ||
| 1993/1116 | gscreen.r.max = Pt(maxx, maxy); gscreen.clipr = gscreen.r; | |
| 1994/0412 | for(i = 0; i < gscreen.width*BY2WD*maxy; i += Footprint){ | |
| 1995/0126 | vgac->page(i>>Footshift); | |
| 1994/0415 | memset(gscreen.base, 0xff, Footprint); | |
| 1994/0412 | } | |
| 1993/1116 | ||
| 1995/0117/sys/src/9/pc/devvga.c:685,691 – 1995/0126/sys/src/9/pc/devvga.c:663,669 | ||
| 1994/0416 | /* default color map (has to be outside the lock) */ | |
| 1993/1116 | switch(ldepth){ case 3: | |
| 1995/0126 | for(i = 0; i < Pcolours; i++) | |
| 1994/0528 | setcolor(i, xnto32(i>>5, 3), xnto32(i>>2, 3), xnto32(i, 2)); | |
| 1994/0507 | setcolor(0x55, xnto32(0x15, 6), xnto32(0x15, 6), xnto32(0x15, 6)); setcolor(0xaa, xnto32(0x2a, 6), xnto32(0x2a, 6), xnto32(0x2a, 6)); | |
| 1995/0117/sys/src/9/pc/devvga.c:734,740 – 1995/0126/sys/src/9/pc/devvga.c:712,718 | ||
| 1994/0412 | diff = 0; if(q >= e){ pg = ++*page; | |
| 1995/0126 | vgac->page(pg); | |
| 1994/0412 | q -= Footprint; diff -= Footprint; } | |
| 1995/0117/sys/src/9/pc/devvga.c:755,761 – 1995/0126/sys/src/9/pc/devvga.c:733,739 | ||
| 1994/0412 | diff = 0; if(q >= e){ pg = ++*page; | |
| 1995/0126 | vgac->page(pg); | |
| 1994/0412 | q -= Footprint; diff -= Footprint; } | |
| 1995/0117/sys/src/9/pc/devvga.c:765,771 – 1995/0126/sys/src/9/pc/devvga.c:743,749 | ||
| 1994/0412 | if(rem < len){ memmove(q, data, rem); pg = ++*page; | |
| 1995/0126 | vgac->page(pg); | |
| 1994/0412 | q -= Footprint; diff -= Footprint; memmove(q+rem, data+rem, len-rem); | |
| 1995/0117/sys/src/9/pc/devvga.c:803,809 – 1995/0126/sys/src/9/pc/devvga.c:781,787 | ||
| 1994/0412 | off = q - (uchar*)gscreen.base; page = off>>Footshift; | |
| 1995/0126 | vgac->page(page); | |
| 1994/0412 | q = ((uchar*)gscreen.base) + (off&(Footprint-1)); sw = gscreen.width*sizeof(ulong); | |
| 1995/0117/sys/src/9/pc/devvga.c:890,896 – 1995/0126/sys/src/9/pc/devvga.c:868,874 | ||
| 1994/0412 | diff = 0; if(q >= e){ pg = ++*page; | |
| 1995/0126 | vgac->page(pg); | |
| 1994/0412 | q -= Footprint; diff -= Footprint; } | |
| 1995/0117/sys/src/9/pc/devvga.c:911,917 – 1995/0126/sys/src/9/pc/devvga.c:889,895 | ||
| 1994/0412 | diff = 0; if(q >= e){ pg = ++*page; | |
| 1995/0126 | vgac->page(pg); | |
| 1994/0412 | q -= Footprint; diff -= Footprint; } | |
| 1995/0117/sys/src/9/pc/devvga.c:921,927 – 1995/0126/sys/src/9/pc/devvga.c:899,905 | ||
| 1994/0412 | if(rem < len){ memmove(data, q, rem); pg = ++*page; | |
| 1995/0126 | vgac->page(pg); | |
| 1994/0412 | q -= Footprint; diff -= Footprint; memmove(data+rem, q+rem, len-rem); | |
| 1995/0117/sys/src/9/pc/devvga.c:960,966 – 1995/0126/sys/src/9/pc/devvga.c:938,944 | ||
| 1994/0412 | off = q - (uchar*)gscreen.base; page = off>>Footshift; | |
| 1993/1116 |
| |
| 1995/0126 | vgac->page(page); | |
| 1994/0412 | q = ((uchar*)gscreen.base) + (off&(Footprint-1)); sw = gscreen.width*sizeof(ulong); | |
| 1995/0117/sys/src/9/pc/devvga.c:1074,1082 – 1995/0126/sys/src/9/pc/devvga.c:1052,1057 | ||
| 1993/1116 | } | |
| 1992/1119 | /* | |
| 1994/0507 |
| |
| 1992/1119 |
| |
| 1993/1116 |
| |
| 1992/1119 | * paging routines for different cards */ static void | |
| 1995/0117/sys/src/9/pc/devvga.c:1227,1244 – 1995/0126/sys/src/9/pc/devvga.c:1202,1219 | ||
| 1993/1230 | switch(gscreen.ldepth){ default: | |
| 1995/0126 | x = 0xF; | |
| 1993/1230 | break; case 3: | |
| 1995/0126 | x = 0xFF; | |
| 1993/1230 | break; } p &= x; p ^= x; | |
| 1994/0729 | lock(&palettelock); | |
| 1992/1119 |
| |
| 1995/0126 | *pr = colormap[p][Pred]; *pg = colormap[p][Pgreen]; *pb = colormap[p][Pblue]; | |
| 1994/0729 | unlock(&palettelock); | |
| 1992/1119 | } | |
| 1995/0117/sys/src/9/pc/devvga.c:1249,1270 – 1995/0126/sys/src/9/pc/devvga.c:1224,1245 | ||
| 1993/1230 | switch(gscreen.ldepth){ default: | |
| 1995/0126 | x = 0xF; | |
| 1993/1230 | break; case 3: | |
| 1995/0126 | x = 0xFF; | |
| 1993/1230 | break; } p &= x; p ^= x; | |
| 1994/0729 | lock(&palettelock); | |
| 1992/1119 |
| |
| 1994/0624 |
| |
| 1995/0126 | colormap[p][Pred] = r; colormap[p][Pgreen] = g; colormap[p][Pblue] = b; vgao(PaddrW, p); vgao(Pdata, r>>(32-6)); vgao(Pdata, g>>(32-6)); vgao(Pdata, b>>(32-6)); | |
| 1994/0729 | unlock(&palettelock); | |
| 1992/1119 | return ~0; | |
| 1994/0414 | } | |
| 1995/0117/sys/src/9/pc/devvga.c:1460,1463 – 1995/0126/sys/src/9/pc/devvga.c:1435,1452 | ||
| 1994/0414 | cursoron(0); cursor.frozen = 0; unlock(&cursor); | |
| 1995/0126 | } void addhwgclink(Hwgc *hwgcp) { hwgcp->link = hwgctlr; hwgctlr = hwgcp; } void addvgaclink(Vgac *vgacp) { vgacp->link = vgactlr; vgactlr = vgacp; | |
| 1992/1119 | } | |