📄 nvidia.c
字号:
nv->pgraph[0x0170/4] = 0x10010100; nv->pgraph[0x0710/4] = 0xFFFFFFFF; nv->pgraph[0x0720/4] = 0x00000001; nv->pgraph[0x0810/4] = 0x00000000; nv->pgraph[0x0608/4] = 0xFFFFFFFF; } else { nv->pgraph[0x0080/4] = 0xFFFFFFFF; nv->pgraph[0x0080/4] = 0x00000000; nv->pgraph[0x0140/4] = 0x00000000; nv->pgraph[0x0100/4] = 0xFFFFFFFF; nv->pgraph[0x0144/4] = 0x10010100; nv->pgraph[0x0714/4] = 0xFFFFFFFF; nv->pgraph[0x0720/4] = 0x00000001; nv->pgraph[0x0710/4] &= 0x0007ff00; nv->pgraph[0x0710/4] |= 0x00020100; if (nv->arch == 10) { nv->pgraph[0x0084/4] = 0x00118700; nv->pgraph[0x0088/4] = 0x24E00810; nv->pgraph[0x008C/4] = 0x55DE0030; for(i = 0; i < 32; i++) nv->pgraph[(0x0B00/4) + i] = nv->pfb[(0x0240/4) + i]; nv->pgraph[0x640/4] = 0; nv->pgraph[0x644/4] = 0; nv->pgraph[0x684/4] = vga->vmz - 1; nv->pgraph[0x688/4] = vga->vmz - 1; nv->pgraph[0x0810/4] = 0x00000000; nv->pgraph[0x0608/4] = 0xFFFFFFFF; } else { if (nv->arch >= 40) { nv->pgraph[0x0084/4] = 0x401287c0; nv->pgraph[0x008C/4] = 0x60de8051; nv->pgraph[0x0090/4] = 0x00008000; nv->pgraph[0x0610/4] = 0x00be3c5f; tmp = nv->pgraph[0x1540] & 0xff; for(i = 0; tmp && !(tmp & 1); tmp >>= 1, i++) ; nv->pgraph[0x5000] = i; if ((nv->did & 0xfff0) == 0x0040) { nv->pgraph[0x09b0/4] = 0x83280fff; nv->pgraph[0x09b4/4] = 0x000000a0; } else { nv->pgraph[0x0820/4] = 0x83280eff; nv->pgraph[0x0824/4] = 0x000000a0; } switch(nv->did & 0xfff0) { case 0x0040: nv->pgraph[0x09b8/4] = 0x0078e366; nv->pgraph[0x09bc/4] = 0x0000014c; nv->pfb[0x033C/4] &= 0xffff7fff; break; case 0x00C0: case 0x0120: nv->pgraph[0x0828/4] = 0x007596ff; nv->pgraph[0x082C/4] = 0x00000108; break; case 0x0160: case 0x01D0: case 0x0240: nv->pmc[0x1700/4] = nv->pfb[0x020C/4]; nv->pmc[0x1704/4] = 0; nv->pmc[0x1708/4] = 0; nv->pmc[0x170C/4] = nv->pfb[0x020C/4]; nv->pgraph[0x0860/4] = 0; nv->pgraph[0x0864/4] = 0; nv->pramdac[0x0608/4] |= 0x00100000; break; case 0x0140: nv->pgraph[0x0828/4] = 0x0072cb77; nv->pgraph[0x082C/4] = 0x00000108; break; case 0x0220: nv->pgraph[0x0860/4] = 0; nv->pgraph[0x0864/4] = 0; nv->pramdac[0x0608/4] |= 0x00100000; break; case 0x0090: case 0x0290: case 0x0390: nv->pgraph[0x0608/4] |= 0x00100000; nv->pgraph[0x0828/4] = 0x07830610; nv->pgraph[0x082C/4] = 0x0000016A; break; default: break; } nv->pgraph[0x0b38/4] = 0x2ffff800; nv->pgraph[0x0b3c/4] = 0x00006000; nv->pgraph[0x032C/4] = 0x01000000; nv->pgraph[0x0220/4] = 0x00001200; } else if (nv->arch == 30) { nv->pgraph[0x0084/4] = 0x40108700; nv->pgraph[0x0890/4] = 0x00140000; nv->pgraph[0x008C/4] = 0xf00e0431; nv->pgraph[0x0090/4] = 0x00008000; nv->pgraph[0x0610/4] = 0xf04b1f36; nv->pgraph[0x0B80/4] = 0x1002d888; nv->pgraph[0x0B88/4] = 0x62ff007f; } else { nv->pgraph[0x0084/4] = 0x00118700; nv->pgraph[0x008C/4] = 0xF20E0431; nv->pgraph[0x0090/4] = 0x00000000; nv->pgraph[0x009C/4] = 0x00000040; if((nv->did & 0x0ff0) >= 0x0250) { nv->pgraph[0x0890/4] = 0x00080000; nv->pgraph[0x0610/4] = 0x304B1FB6; nv->pgraph[0x0B80/4] = 0x18B82880; nv->pgraph[0x0B84/4] = 0x44000000; nv->pgraph[0x0098/4] = 0x40000080; nv->pgraph[0x0B88/4] = 0x000000ff; } else { nv->pgraph[0x0880/4] = 0x00080000; nv->pgraph[0x0094/4] = 0x00000005; nv->pgraph[0x0B80/4] = 0x45CAA208; nv->pgraph[0x0B84/4] = 0x24000000; nv->pgraph[0x0098/4] = 0x00000040; nv->pgraph[0x0750/4] = 0x00E00038; nv->pgraph[0x0754/4] = 0x00000030; nv->pgraph[0x0750/4] = 0x00E10038; nv->pgraph[0x0754/4] = 0x00000030; } } if((nv->arch < 40) || ((nv->did & 0xfff0) == 0x0040)){ for(i = 0; i < 32; i++) { nv->pgraph[(0x0900/4) + i] = nv->pfb[(0x0240/4) + i]; nv->pgraph[(0x6900/4) + i] = nv->pfb[(0x0240/4) + i]; } } else{ if(((nv->did & 0xfff0) == 0x0090) || ((nv->did & 0xfff0) == 0x01D0) || ((nv->did & 0xfff0) == 0x0290) || ((nv->did & 0xfff0) == 0x0390)){ for(i = 0; i < 60; i++) { nv->pgraph[(0x0D00/4) + i] = nv->pfb[(0x0600/4) + i]; nv->pgraph[(0x6900/4) + i] = nv->pfb[(0x0600/4) + i]; } } else{ for(i = 0; i < 48; i++) { nv->pgraph[(0x0900/4) + i] = nv->pfb[(0x0600/4) + i]; if(((nv->did & 0xfff0) != 0x0160) && ((nv->did & 0xfff0) != 0x0220) && ((nv->did & 0xfff0) != 0x0240)) nv->pgraph[(0x6900/4) + i] = nv->pfb[(0x0600/4) + i]; } } } if(nv->arch >= 40) { if((nv->did & 0xfff0) == 0x0040) { nv->pgraph[0x09A4/4] = nv->pfb[0x0200/4]; nv->pgraph[0x09A8/4] = nv->pfb[0x0204/4]; nv->pgraph[0x69A4/4] = nv->pfb[0x0200/4]; nv->pgraph[0x69A8/4] = nv->pfb[0x0204/4]; nv->pgraph[0x0820/4] = 0; nv->pgraph[0x0824/4] = 0; nv->pgraph[0x0864/4] = vga->vmz - 1; nv->pgraph[0x0868/4] = vga->vmz - 1; } else { nv->pgraph[0x09F0/4] = nv->pfb[0x0200/4]; nv->pgraph[0x09F4/4] = nv->pfb[0x0204/4]; nv->pgraph[0x69F0/4] = nv->pfb[0x0200/4]; nv->pgraph[0x69F4/4] = nv->pfb[0x0204/4]; nv->pgraph[0x0840/4] = 0; nv->pgraph[0x0844/4] = 0; nv->pgraph[0x08a0/4] = vga->vmz - 1; nv->pgraph[0x08a4/4] = vga->vmz - 1; } } else { nv->pgraph[0x09A4/4] = nv->pfb[0x0200/4]; nv->pgraph[0x09A8/4] = nv->pfb[0x0204/4]; nv->pgraph[0x0750/4] = 0x00EA0000; nv->pgraph[0x0754/4] = nv->pfb[0x0200/4]; nv->pgraph[0x0750/4] = 0x00EA0004; nv->pgraph[0x0754/4] = nv->pfb[0x0204/4]; nv->pgraph[0x0820/4] = 0; nv->pgraph[0x0824/4] = 0; nv->pgraph[0x0864/4] = vga->vmz - 1; nv->pgraph[0x0868/4] = vga->vmz - 1; } nv->pgraph[0x0B20/4] = 0x00000000; nv->pgraph[0x0B04/4] = 0xFFFFFFFF; } } nv->pgraph[0x053C/4] = 0; nv->pgraph[0x0540/4] = 0; nv->pgraph[0x0544/4] = 0x00007FFF; nv->pgraph[0x0548/4] = 0x00007FFF; nv->pfifo[0x0140] = 0x00000000; nv->pfifo[0x0141] = 0x00000001; nv->pfifo[0x0480] = 0x00000000; nv->pfifo[0x0494] = 0x00000000; if (nv->arch >= 40) nv->pfifo[0x0481] = 0x00010000; else nv->pfifo[0x0481] = 0x00000100; nv->pfifo[0x0490] = 0x00000000; nv->pfifo[0x0491] = 0x00000000; if (nv->arch >= 40) nv->pfifo[0x048B] = 0x00001213; else nv->pfifo[0x048B] = 0x00001209; nv->pfifo[0x0400] = 0x00000000; nv->pfifo[0x0414] = 0x00000000; nv->pfifo[0x0084] = 0x03000100; nv->pfifo[0x0085] = 0x00000110; nv->pfifo[0x0086] = 0x00000112; nv->pfifo[0x0143] = 0x0000FFFF; nv->pfifo[0x0496] = 0x0000FFFF; nv->pfifo[0x0050] = 0x00000000; nv->pfifo[0x0040] = 0xFFFFFFFF; nv->pfifo[0x0415] = 0x00000001; nv->pfifo[0x048C] = 0x00000000; nv->pfifo[0x04A0] = 0x00000000; nv->pfifo[0x0489] = 0x000F0078; nv->pfifo[0x0488] = 0x00000001; nv->pfifo[0x0480] = 0x00000001; nv->pfifo[0x0494] = 0x00000001; nv->pfifo[0x0495] = 0x00000001; nv->pfifo[0x0140] = 0x00000001; if (nv->arch >= 10) { if (nv->twoheads) { nv->pcrtc[0x0860/4] = nv->head; nv->pcrtc[0x2860/4] = nv->head2; } nv->pramdac[0x0404/4] |= (1 << 25); nv->pmc[0x8704/4] = 1; nv->pmc[0x8140/4] = 0; nv->pmc[0x8920/4] = 0; nv->pmc[0x8924/4] = 0; nv->pmc[0x8908/4] = vga->vmz - 1; nv->pmc[0x890C/4] = vga->vmz - 1; nv->pmc[0x1588/4] = 0; nv->pcrtc[0x0810/4] = nv->cursorconfig; nv->pcrtc[0x0830/4] = nv->displayV - 3; nv->pcrtc[0x0834/4] = nv->displayV - 1; if (nv->islcd) { if((nv->did & 0x0ff0) == 0x0110) nv->pramdac[0x0528/4] = nv->dither; else if (nv->twoheads) nv->pramdac[0x083C/4] = nv->dither; vgaxo(Crtx, 0x53, nv->timingH); vgaxo(Crtx, 0x54, nv->timingV); vgaxo(Crtx, 0x21, 0xFA); } vgaxo(Crtx, 0x41, nv->extra); } vgaxo(Crtx, 0x19, nv->repaint0); vgaxo(Crtx, 0x1A, nv->repaint1); vgaxo(Crtx, 0x25, nv->screen); vgaxo(Crtx, 0x28, nv->pixel); vgaxo(Crtx, 0x2D, nv->horiz); vgaxo(Crtx, 0x30, nv->cursor0); vgaxo(Crtx, 0x31, nv->cursor1); vgaxo(Crtx, 0x2F, nv->cursor2); vgaxo(Crtx, 0x39, nv->interlace); if (nv->islcd) { nv->pramdac[0x00000848/4] = nv->scale; nv->pramdac[0x00000828/4] = nv->crtcsync; } else { nv->pramdac[0x0000050C/4] = nv->pllsel; nv->pramdac[0x00000508/4] = nv->vpll; if (nv->twoheads) nv->pramdac[0x00000520/4] = nv->vpll2; if (nv->twostagepll) { nv->pramdac[0x00000578/4] = nv->vpllB; nv->pramdac[0x0000057C/4] = nv->vpll2B; } } nv->pramdac[0x00000600/4] = nv->general; nv->pcrtc[0x0140/4] = 0; nv->pcrtc[0x0100/4] = 1; ctlr->flag |= Fload;}static voiddump(Vga* vga, Ctlr* ctlr){ Nvidia *nv; int m, n, p, f; double trouble; if((nv = vga->private) == 0) return; p = (nv->vpll >> 16); n = (nv->vpll >> 8) & 0xFF; m = nv->vpll & 0xFF; trouble = nv->crystalfreq; trouble = trouble * n / (m<<p); f = trouble+0.5; printitem(ctlr->name, "dclk m n p"); Bprint(&stdout, " %d %d - %d %d\n", f, m, n, p); printitem(ctlr->name, "CrystalFreq"); Bprint(&stdout, " %d Hz\n", nv->crystalfreq); printitem(ctlr->name, "arch"); Bprint(&stdout, " %d\n", nv->arch); printitem(ctlr->name, "did"); Bprint(&stdout, " %.4ux\n", nv->did); printitem(ctlr->name, "repaint0"); Bprint(&stdout, " %ux\n", nv->repaint0); printitem(ctlr->name, "repaint1"); Bprint(&stdout, " %ux\n", nv->repaint1); printitem(ctlr->name, "screen"); Bprint(&stdout, " %ux\n", nv->screen); printitem(ctlr->name, "pixel"); Bprint(&stdout, " %ux\n", nv->pixel); printitem(ctlr->name, "horiz"); Bprint(&stdout, " %ux\n", nv->horiz); printitem(ctlr->name, "cursor0"); Bprint(&stdout, " %ux\n", nv->cursor0); printitem(ctlr->name, "cursor1"); Bprint(&stdout, " %ux\n", nv->cursor1); printitem(ctlr->name, "cursor2"); Bprint(&stdout, " %ux\n", nv->cursor2); printitem(ctlr->name, "interlace"); Bprint(&stdout, " %ux\n", nv->interlace); printitem(ctlr->name, "extra"); Bprint(&stdout, " %ux\n", nv->extra); printitem(ctlr->name, "crtcowner"); Bprint(&stdout, " %ux\n", nv->crtcowner); printitem(ctlr->name, "timingH"); Bprint(&stdout, " %ux\n", nv->timingH); printitem(ctlr->name, "timingV"); Bprint(&stdout, " %ux\n", nv->timingV); printitem(ctlr->name, "vpll"); Bprint(&stdout, " %lux\n", nv->vpll); printitem(ctlr->name, "vpllB"); Bprint(&stdout, " %lux\n", nv->vpllB); printitem(ctlr->name, "vpll2"); Bprint(&stdout, " %lux\n", nv->vpll2); printitem(ctlr->name, "vpll2B"); Bprint(&stdout, " %lux\n", nv->vpll2B); printitem(ctlr->name, "pllsel"); Bprint(&stdout, " %lux\n", nv->pllsel); printitem(ctlr->name, "general"); Bprint(&stdout, " %lux\n", nv->general); printitem(ctlr->name, "scale"); Bprint(&stdout, " %lux\n", nv->scale); printitem(ctlr->name, "config"); Bprint(&stdout, " %lux\n", nv->config); printitem(ctlr->name, "head"); Bprint(&stdout, " %lux\n", nv->head); printitem(ctlr->name, "head2"); Bprint(&stdout, " %lux\n", nv->head2); printitem(ctlr->name, "cursorconfig"); Bprint(&stdout, " %lux\n", nv->cursorconfig); printitem(ctlr->name, "dither"); Bprint(&stdout, " %lux\n", nv->dither); printitem(ctlr->name, "crtcsync"); Bprint(&stdout, " %lux\n", nv->crtcsync); printitem(ctlr->name, "islcd"); Bprint(&stdout, " %d\n", nv->islcd); printitem(ctlr->name, "twoheads"); Bprint(&stdout, " %d\n", nv->twoheads); printitem(ctlr->name, "twostagepll"); Bprint(&stdout, " %d\n", nv->twostagepll); printitem(ctlr->name, "crtcnumber"); Bprint(&stdout, " %d\n", nv->crtcnumber); printitem(ctlr->name, "fpwidth"); Bprint(&stdout, " %d\n", nv->fpwidth); printitem(ctlr->name, "fpheight"); Bprint(&stdout, " %d\n", nv->fpheight);}Ctlr nvidia = { "nvidia", /* name */ snarf, /* snarf */ options, /* options */ init, /* init */ load, /* load */ dump, /* dump */};Ctlr nvidiahwgc = { "nvidiahwgc", /* name */ 0, /* snarf */ 0, /* options */ 0, /* init */ 0, /* load */ 0, /* dump */};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -