17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <bio.h>
47dd7cddfSDavid du Colombier
57dd7cddfSDavid du Colombier #include "pci.h"
69a747e4fSDavid du Colombier #include "vga.h"
77dd7cddfSDavid du Colombier
87dd7cddfSDavid du Colombier typedef struct {
97dd7cddfSDavid du Colombier Pcidev* pci;
107dd7cddfSDavid du Colombier
117dd7cddfSDavid du Colombier int x;
127dd7cddfSDavid du Colombier int y;
137dd7cddfSDavid du Colombier } Neomagic;
147dd7cddfSDavid du Colombier
157dd7cddfSDavid du Colombier enum {
167dd7cddfSDavid du Colombier ExtCrtx = 0x19,
177dd7cddfSDavid du Colombier MaxCRT=0x85,
187dd7cddfSDavid du Colombier MaxGR=0xc7,
197dd7cddfSDavid du Colombier };
207dd7cddfSDavid du Colombier
217dd7cddfSDavid du Colombier enum {
227dd7cddfSDavid du Colombier GeneralLockReg = 0x0A,
237dd7cddfSDavid du Colombier ExtCRTDispAddr = 0x0E,
247dd7cddfSDavid du Colombier ExtCRTOffset = 0x0F,
257dd7cddfSDavid du Colombier SysIfaceCntl1 = 0x10,
267dd7cddfSDavid du Colombier SysIfaceCntl2 = 0x11,
277dd7cddfSDavid du Colombier SingleAddrPage = 0x15, /* not changed? */
287dd7cddfSDavid du Colombier DualAddrPage = 0x16, /* not changed? */
297dd7cddfSDavid du Colombier PanelDispCntlReg1 = 0x20,
307dd7cddfSDavid du Colombier PanelDispCntlReg2 = 0x25,
317dd7cddfSDavid du Colombier PanelDispCntlReg3 = 0x30,
327dd7cddfSDavid du Colombier PanelVertCenterReg1 = 0x28,
337dd7cddfSDavid du Colombier PanelVertCenterReg2 = 0x29,
347dd7cddfSDavid du Colombier PanelVertCenterReg3 = 0x2A,
357dd7cddfSDavid du Colombier PanelVertCenterReg4 = 0x32, /* not 2070 */
367dd7cddfSDavid du Colombier PanelHorizCenterReg1 = 0x33,
377dd7cddfSDavid du Colombier PanelHorizCenterReg2 = 0x34,
387dd7cddfSDavid du Colombier PanelHorizCenterReg3 = 0x35,
3914414594SDavid du Colombier PanelHorizCenterReg4 = 0x36, /* 2160, 2200, 2360 */
4014414594SDavid du Colombier PanelVertCenterReg5 = 0x37, /* 2200, 2360 */
4114414594SDavid du Colombier PanelHorizCenterReg5 = 0x38, /* 2200, 2360 */
427dd7cddfSDavid du Colombier
437dd7cddfSDavid du Colombier ExtColorModeSelect = 0x90,
447dd7cddfSDavid du Colombier
457dd7cddfSDavid du Colombier VerticalExt = 0x70, /* 2200; iobase+4 */
467dd7cddfSDavid du Colombier };
477dd7cddfSDavid du Colombier
487dd7cddfSDavid du Colombier static int crts[] = {
497dd7cddfSDavid du Colombier 0x1D, 0x1F, 0x21, 0x23, 0x25, 0x2F,
507dd7cddfSDavid du Colombier /* also 40-59, 60-69, 70-MaxCRT */
517dd7cddfSDavid du Colombier -1
527dd7cddfSDavid du Colombier };
537dd7cddfSDavid du Colombier
547dd7cddfSDavid du Colombier /*
557dd7cddfSDavid du Colombier * Neomagic driver (fake)
567dd7cddfSDavid du Colombier */
577dd7cddfSDavid du Colombier static void
snarf(Vga * vga,Ctlr * ctlr)587dd7cddfSDavid du Colombier snarf(Vga* vga, Ctlr* ctlr)
597dd7cddfSDavid du Colombier {
607dd7cddfSDavid du Colombier int i;
617dd7cddfSDavid du Colombier Pcidev *p;
627dd7cddfSDavid du Colombier Neomagic *nm;
637dd7cddfSDavid du Colombier
647dd7cddfSDavid du Colombier generic.snarf(vga, ctlr);
657dd7cddfSDavid du Colombier
667dd7cddfSDavid du Colombier outportw(Grx, 0x2609); /* unlock neo registers */
677dd7cddfSDavid du Colombier outportw(Grx, 0x0015); /* reset bank */
687dd7cddfSDavid du Colombier
697dd7cddfSDavid du Colombier for(i=0; crts[i] >= 0; i++)
707dd7cddfSDavid du Colombier vga->crt[crts[i]] = vgaxi(Crtx, crts[i]);
717dd7cddfSDavid du Colombier for(i=0x40; i <= MaxCRT; i++)
727dd7cddfSDavid du Colombier vga->crt[i] = vgaxi(Crtx, i);
737dd7cddfSDavid du Colombier
747dd7cddfSDavid du Colombier for(i=0x08; i<=0x3F; i++)
757dd7cddfSDavid du Colombier vga->graphics[i] = vgaxi(Grx, i);
767dd7cddfSDavid du Colombier for(i=0x70; i<=MaxGR; i++)
777dd7cddfSDavid du Colombier vga->graphics[i] = vgaxi(Grx, i);
787dd7cddfSDavid du Colombier
797dd7cddfSDavid du Colombier if(vga->private == nil){
807dd7cddfSDavid du Colombier vga->private = alloc(sizeof(Neomagic));
817dd7cddfSDavid du Colombier nm = vga->private;
827dd7cddfSDavid du Colombier if((p = pcimatch(0, 0x10C8, 0)) == nil)
837dd7cddfSDavid du Colombier error("%s: not found\n", ctlr->name);
847dd7cddfSDavid du Colombier switch(p->did){
859d1c31b1SDavid du Colombier case 0x0003: /* MagicGraph 128 ZV */
869d1c31b1SDavid du Colombier vga->f[1] = 80000000;
879d1c31b1SDavid du Colombier vga->vmz = 2048*1024;
889d1c31b1SDavid du Colombier vga->apz = 4*1024*1024;
899d1c31b1SDavid du Colombier break;
90afb30c3eSDavid du Colombier case 0x0083: /* MagicGraph 128 ZV+ */
91afb30c3eSDavid du Colombier vga->f[1] = 80000000;
92afb30c3eSDavid du Colombier vga->vmz = 2048*1024;
93afb30c3eSDavid du Colombier vga->apz = 4*1024*1024;
94afb30c3eSDavid du Colombier break;
957dd7cddfSDavid du Colombier case 0x0004: /* MagicGraph 128 XD */
967dd7cddfSDavid du Colombier vga->f[1] = 90000000;
977dd7cddfSDavid du Colombier vga->vmz = 2048*1024;
987dd7cddfSDavid du Colombier vga->apz = 16*1024*1024;
997dd7cddfSDavid du Colombier break;
1007dd7cddfSDavid du Colombier case 0x0005: /* MagicMedia 256 AV */
1017dd7cddfSDavid du Colombier vga->f[1] = 110000000;
1027dd7cddfSDavid du Colombier vga->vmz = 2560*1024;
1037dd7cddfSDavid du Colombier vga->apz = 16*1024*1024;
1047dd7cddfSDavid du Colombier break;
10514414594SDavid du Colombier case 0x0006: /* MagicMedia 256 ZX */
10614414594SDavid du Colombier vga->f[1] = 110000000;
10714414594SDavid du Colombier vga->vmz = 4096*1024;
10814414594SDavid du Colombier vga->apz = 16*1024*1024;
10914414594SDavid du Colombier break;
110*5b7f163eSDavid du Colombier case 0x0016: /* MagicMedia 256 XL+ */
111*5b7f163eSDavid du Colombier vga->f[1] = 110000000;
112*5b7f163eSDavid du Colombier /* Vaio VESA BIOS says 6080, but then hwgc doesn't work */
113*5b7f163eSDavid du Colombier vga->vmz = 4096*1024;
114*5b7f163eSDavid du Colombier vga->apz = 32*1024*1024;
115*5b7f163eSDavid du Colombier break;
1167dd7cddfSDavid du Colombier case 0x0001: /* MagicGraph 128 */
1177dd7cddfSDavid du Colombier case 0x0002: /* MagicGraph 128 V */
1187dd7cddfSDavid du Colombier default:
1197dd7cddfSDavid du Colombier error("%s: DID %4.4uX unsupported\n",
1207dd7cddfSDavid du Colombier ctlr->name, p->did);
1217dd7cddfSDavid du Colombier }
1227dd7cddfSDavid du Colombier nm->pci = p;
1237dd7cddfSDavid du Colombier }
1247dd7cddfSDavid du Colombier
1257dd7cddfSDavid du Colombier ctlr->flag |= Fsnarf;
1267dd7cddfSDavid du Colombier }
1277dd7cddfSDavid du Colombier
1287dd7cddfSDavid du Colombier static void
options(Vga *,Ctlr * ctlr)1297dd7cddfSDavid du Colombier options(Vga*, Ctlr* ctlr)
1307dd7cddfSDavid du Colombier {
1317dd7cddfSDavid du Colombier ctlr->flag |= Ulinear|Hlinear|Foptions;
1327dd7cddfSDavid du Colombier }
1337dd7cddfSDavid du Colombier
1347dd7cddfSDavid du Colombier static void
init(Vga * vga,Ctlr * ctlr)1357dd7cddfSDavid du Colombier init(Vga* vga, Ctlr* ctlr)
1367dd7cddfSDavid du Colombier {
1377dd7cddfSDavid du Colombier Neomagic *nm;
1387dd7cddfSDavid du Colombier int i, h, v, t;
1397dd7cddfSDavid du Colombier
1407dd7cddfSDavid du Colombier generic.init(vga, ctlr);
1417dd7cddfSDavid du Colombier
1427dd7cddfSDavid du Colombier nm = vga->private;
1437dd7cddfSDavid du Colombier switch((vga->graphics[0x20]>>3)&3){
1447dd7cddfSDavid du Colombier case 0:
1457dd7cddfSDavid du Colombier nm->x = 640;
1467dd7cddfSDavid du Colombier nm->y = 480;
1477dd7cddfSDavid du Colombier break;
1487dd7cddfSDavid du Colombier case 1:
1497dd7cddfSDavid du Colombier nm->x = 800;
1507dd7cddfSDavid du Colombier nm->y = 600;
1517dd7cddfSDavid du Colombier break;
1527dd7cddfSDavid du Colombier case 2:
1537dd7cddfSDavid du Colombier nm->x = 1024;
1547dd7cddfSDavid du Colombier nm->y = 768;
1557dd7cddfSDavid du Colombier case 3:
1567dd7cddfSDavid du Colombier nm->x = 1280;
1577dd7cddfSDavid du Colombier nm->y = 1024;
1587dd7cddfSDavid du Colombier break;
1597dd7cddfSDavid du Colombier }
1607dd7cddfSDavid du Colombier
1617dd7cddfSDavid du Colombier vga->crt[0x0C] = 0; /* vga starting address (offset) */
1627dd7cddfSDavid du Colombier vga->crt[0x0D] = 0;
1637dd7cddfSDavid du Colombier vga->graphics[GeneralLockReg] = 0x01; /* (internal or simultaneous) */
1647dd7cddfSDavid du Colombier vga->attribute[0x10] &= ~0x40; /* 2x4 mode not right for neomagic */
1657dd7cddfSDavid du Colombier
1667dd7cddfSDavid du Colombier t = 2; /* LCD only (0x01 for external) */
1677dd7cddfSDavid du Colombier switch(vga->mode->x){
1687dd7cddfSDavid du Colombier case 1280:
1697dd7cddfSDavid du Colombier t |= 0x60;
1707dd7cddfSDavid du Colombier break;
1717dd7cddfSDavid du Colombier case 1024:
1727dd7cddfSDavid du Colombier t |= 0x40;
1737dd7cddfSDavid du Colombier break;
1747dd7cddfSDavid du Colombier case 800:
1757dd7cddfSDavid du Colombier t |= 0x20;
1767dd7cddfSDavid du Colombier break;
1777dd7cddfSDavid du Colombier }
17814414594SDavid du Colombier if(0 && (nm->pci->did == 0x0005) || (nm->pci->did == 0x0006)){
1797dd7cddfSDavid du Colombier vga->graphics[PanelDispCntlReg1] &= 0x98;
1807dd7cddfSDavid du Colombier vga->graphics[PanelDispCntlReg1] |= (t & ~0x98);
1817dd7cddfSDavid du Colombier }
1827dd7cddfSDavid du Colombier else{
1837dd7cddfSDavid du Colombier vga->graphics[PanelDispCntlReg1] &= 0xDC; /* save bits 7:6, 4:2 */
1847dd7cddfSDavid du Colombier vga->graphics[PanelDispCntlReg1] |= (t & ~0xDC);
1857dd7cddfSDavid du Colombier }
1867dd7cddfSDavid du Colombier
1877dd7cddfSDavid du Colombier vga->graphics[PanelDispCntlReg2] &= 0x38;
1887dd7cddfSDavid du Colombier vga->graphics[PanelDispCntlReg3] &= 0xEF;
1897dd7cddfSDavid du Colombier vga->graphics[PanelVertCenterReg1] = 0x00;
1907dd7cddfSDavid du Colombier vga->graphics[PanelVertCenterReg2] = 0x00;
1917dd7cddfSDavid du Colombier vga->graphics[PanelVertCenterReg3] = 0x00;
1927dd7cddfSDavid du Colombier vga->graphics[PanelVertCenterReg4] = 0x00;
1937dd7cddfSDavid du Colombier vga->graphics[PanelVertCenterReg5] = 0x00;
1947dd7cddfSDavid du Colombier vga->graphics[PanelHorizCenterReg1] = 0x00;
1957dd7cddfSDavid du Colombier vga->graphics[PanelHorizCenterReg2] = 0x00;
1967dd7cddfSDavid du Colombier vga->graphics[PanelHorizCenterReg3] = 0x00;
1977dd7cddfSDavid du Colombier vga->graphics[PanelHorizCenterReg4] = 0x00;
1987dd7cddfSDavid du Colombier vga->graphics[PanelHorizCenterReg5] = 0x00;
1997dd7cddfSDavid du Colombier if(vga->mode->x < nm->x){
2007dd7cddfSDavid du Colombier vga->graphics[PanelDispCntlReg2] |= 0x01;
2017dd7cddfSDavid du Colombier vga->graphics[PanelDispCntlReg3] |= 0x10;
2027dd7cddfSDavid du Colombier h = ((nm->x - vga->mode->x) >> 4) - 1;
2037dd7cddfSDavid du Colombier v = ((nm->y - vga->mode->y) >> 1) - 2;
2047dd7cddfSDavid du Colombier switch(vga->mode->x){
2057dd7cddfSDavid du Colombier case 640:
2067dd7cddfSDavid du Colombier vga->graphics[PanelHorizCenterReg1] = h;
2077dd7cddfSDavid du Colombier vga->graphics[PanelVertCenterReg3] = v;
2087dd7cddfSDavid du Colombier break;
2097dd7cddfSDavid du Colombier case 800:
2107dd7cddfSDavid du Colombier vga->graphics[PanelHorizCenterReg2] = h;
2117dd7cddfSDavid du Colombier vga->graphics[PanelVertCenterReg4] = v;
2127dd7cddfSDavid du Colombier break;
2137dd7cddfSDavid du Colombier case 1024:
2147dd7cddfSDavid du Colombier vga->graphics[PanelHorizCenterReg5] = h;
2157dd7cddfSDavid du Colombier vga->graphics[PanelVertCenterReg5] = v;
2167dd7cddfSDavid du Colombier break;
2177dd7cddfSDavid du Colombier }
2187dd7cddfSDavid du Colombier }
2197dd7cddfSDavid du Colombier
2207dd7cddfSDavid du Colombier vga->graphics[ExtCRTDispAddr] = 0x10;
2217dd7cddfSDavid du Colombier vga->graphics[SysIfaceCntl1] &= 0x0F;
2227dd7cddfSDavid du Colombier vga->graphics[SysIfaceCntl1] |= 0x30;
2237dd7cddfSDavid du Colombier vga->graphics[SysIfaceCntl2] = 0x40; /* make sure MMIO is enabled */
2247dd7cddfSDavid du Colombier vga->graphics[SingleAddrPage] = 0x00;
2257dd7cddfSDavid du Colombier vga->graphics[DualAddrPage] = 0x00;
2267dd7cddfSDavid du Colombier vga->graphics[ExtCRTOffset] = 0x00;
2277dd7cddfSDavid du Colombier t = vga->graphics[ExtColorModeSelect] & 0x70; /* colour mode extension */
2287dd7cddfSDavid du Colombier if(vga->mode->z == 8){
2297dd7cddfSDavid du Colombier t |= 0x11;
2307dd7cddfSDavid du Colombier vga->crt[0x13] = vga->mode->x/8;
2317dd7cddfSDavid du Colombier vga->graphics[ExtCRTOffset] = vga->mode->x>>11;
2327dd7cddfSDavid du Colombier vga->graphics[0x05] = 0x00; /* linear addressing? */
2337dd7cddfSDavid du Colombier vga->crt[0x14] = 0x40; /* double word mode but don't count by 4 */
2347dd7cddfSDavid du Colombier }
2357dd7cddfSDavid du Colombier else if(vga->mode->z == 16){
2367dd7cddfSDavid du Colombier t |= 0x13;
2377dd7cddfSDavid du Colombier vga->crt[0x13] = vga->mode->x/4;
2387dd7cddfSDavid du Colombier vga->graphics[0x05] = 0x00; /* linear addressing? */
2397dd7cddfSDavid du Colombier vga->crt[0x14] = 0x40; /* double word mode but don't count by 4 */
2407dd7cddfSDavid du Colombier vga->graphics[ExtCRTOffset] = vga->mode->x>>10;
2417dd7cddfSDavid du Colombier for(i = 0; i < Pcolours; i++){
2427dd7cddfSDavid du Colombier vga->palette[i][Red] = i<<1;
2437dd7cddfSDavid du Colombier vga->palette[i][Green] = i;
2447dd7cddfSDavid du Colombier vga->palette[i][Blue] = i<<1;
2457dd7cddfSDavid du Colombier }
2467dd7cddfSDavid du Colombier }
2477dd7cddfSDavid du Colombier else if(vga->mode->z == 24){
2487dd7cddfSDavid du Colombier t |= 0x14;
2497dd7cddfSDavid du Colombier vga->crt[0x13] = (vga->mode->x*3)/8;
2507dd7cddfSDavid du Colombier // vga->graphics[0x05] = 0x00; /* linear addressing? */
2517dd7cddfSDavid du Colombier vga->crt[0x14] = 0x40; /* double word mode but don't count by 4 */
2527dd7cddfSDavid du Colombier vga->graphics[ExtCRTOffset] = (vga->mode->x*3)>>11;
2537dd7cddfSDavid du Colombier for(i = 0; i < Pcolours; i++){
2547dd7cddfSDavid du Colombier vga->palette[i][Red] = i;
2557dd7cddfSDavid du Colombier vga->palette[i][Green] = i;
2567dd7cddfSDavid du Colombier vga->palette[i][Blue] = i;
2577dd7cddfSDavid du Colombier }
2587dd7cddfSDavid du Colombier }
2597dd7cddfSDavid du Colombier else
2607dd7cddfSDavid du Colombier error("depth %d not supported\n", vga->mode->z);
2617dd7cddfSDavid du Colombier vga->graphics[ExtColorModeSelect] = t;
2627dd7cddfSDavid du Colombier
2637dd7cddfSDavid du Colombier vga->misc |= 0x0C;
2647dd7cddfSDavid du Colombier
2657dd7cddfSDavid du Colombier ctlr->flag |= Finit;
2667dd7cddfSDavid du Colombier }
2677dd7cddfSDavid du Colombier
2687dd7cddfSDavid du Colombier static void
load(Vga * vga,Ctlr * ctlr)2697dd7cddfSDavid du Colombier load(Vga* vga, Ctlr* ctlr)
2707dd7cddfSDavid du Colombier {
2717dd7cddfSDavid du Colombier vgaxo(Grx, GeneralLockReg, vga->graphics[GeneralLockReg]);
2727dd7cddfSDavid du Colombier vgaxo(Grx, ExtColorModeSelect, vga->graphics[ExtColorModeSelect]);
2737dd7cddfSDavid du Colombier vgaxo(Grx, PanelDispCntlReg2, vga->graphics[PanelDispCntlReg2] & 0x39);
2747dd7cddfSDavid du Colombier sleep(200);
2757dd7cddfSDavid du Colombier
2767dd7cddfSDavid du Colombier generic.load(vga, ctlr);
2777dd7cddfSDavid du Colombier
2787dd7cddfSDavid du Colombier vgaxo(Grx, ExtCRTDispAddr, vga->graphics[ExtCRTDispAddr]);
2797dd7cddfSDavid du Colombier vgaxo(Grx, ExtCRTOffset, vga->graphics[ExtCRTOffset] & 0x39);
2807dd7cddfSDavid du Colombier vgaxo(Grx, SysIfaceCntl1, vga->graphics[SysIfaceCntl1]);
2817dd7cddfSDavid du Colombier if(ctlr->flag & Ulinear)
2827dd7cddfSDavid du Colombier vga->graphics[SysIfaceCntl2] |= 0x80;
2837dd7cddfSDavid du Colombier vgaxo(Grx, SysIfaceCntl2, vga->graphics[SysIfaceCntl2]);
2847dd7cddfSDavid du Colombier vgaxo(Grx, SingleAddrPage, vga->graphics[SingleAddrPage]);
2857dd7cddfSDavid du Colombier vgaxo(Grx, DualAddrPage, vga->graphics[DualAddrPage]);
2867dd7cddfSDavid du Colombier vgaxo(Grx, PanelDispCntlReg1, vga->graphics[PanelDispCntlReg1]);
2877dd7cddfSDavid du Colombier vgaxo(Grx, PanelDispCntlReg2, vga->graphics[PanelDispCntlReg2]);
2887dd7cddfSDavid du Colombier vgaxo(Grx, PanelDispCntlReg3, vga->graphics[PanelDispCntlReg3]);
2897dd7cddfSDavid du Colombier vgaxo(Grx, PanelVertCenterReg1, vga->graphics[PanelVertCenterReg1]);
2907dd7cddfSDavid du Colombier vgaxo(Grx, PanelVertCenterReg2, vga->graphics[PanelVertCenterReg2]);
2917dd7cddfSDavid du Colombier vgaxo(Grx, PanelVertCenterReg3, vga->graphics[PanelVertCenterReg3]);
2927dd7cddfSDavid du Colombier vgaxo(Grx, PanelVertCenterReg4, vga->graphics[PanelVertCenterReg4]);
2937dd7cddfSDavid du Colombier vgaxo(Grx, PanelHorizCenterReg1, vga->graphics[PanelHorizCenterReg1]);
2947dd7cddfSDavid du Colombier vgaxo(Grx, PanelHorizCenterReg2, vga->graphics[PanelHorizCenterReg2]);
2957dd7cddfSDavid du Colombier vgaxo(Grx, PanelHorizCenterReg3, vga->graphics[PanelHorizCenterReg3]);
2967dd7cddfSDavid du Colombier vgaxo(Grx, PanelHorizCenterReg4, vga->graphics[PanelHorizCenterReg4]);
2977dd7cddfSDavid du Colombier vgaxo(Grx, PanelVertCenterReg5, vga->graphics[PanelVertCenterReg5]);
2987dd7cddfSDavid du Colombier vgaxo(Grx, PanelHorizCenterReg5, vga->graphics[PanelHorizCenterReg5]);
2997dd7cddfSDavid du Colombier
3007dd7cddfSDavid du Colombier if(vga->mode->z != 8)
3017dd7cddfSDavid du Colombier palette.load(vga, ctlr);
3027dd7cddfSDavid du Colombier }
3037dd7cddfSDavid du Colombier
3047dd7cddfSDavid du Colombier static void
dump(Vga * vga,Ctlr * ctlr)3057dd7cddfSDavid du Colombier dump(Vga* vga, Ctlr* ctlr)
3067dd7cddfSDavid du Colombier {
3077dd7cddfSDavid du Colombier int i;
3087dd7cddfSDavid du Colombier char buf[100];
3097dd7cddfSDavid du Colombier
3107dd7cddfSDavid du Colombier generic.dump(vga, ctlr);
3117dd7cddfSDavid du Colombier
3127dd7cddfSDavid du Colombier for(i = 0; crts[i] >= 0; i++){
3137dd7cddfSDavid du Colombier sprint(buf, "Crt%2.2uX", crts[i]);
3147dd7cddfSDavid du Colombier printitem(ctlr->name, buf);
3157dd7cddfSDavid du Colombier printreg(vga->crt[crts[i]]);
3167dd7cddfSDavid du Colombier }
3177dd7cddfSDavid du Colombier printitem(ctlr->name, "Crt40");
3187dd7cddfSDavid du Colombier for(i=0x40; i<=0x59; i++)
3197dd7cddfSDavid du Colombier printreg(vga->crt[i]);
3207dd7cddfSDavid du Colombier printitem(ctlr->name, "Crt60");
3217dd7cddfSDavid du Colombier for(i=0x60; i<=0x69; i++)
3227dd7cddfSDavid du Colombier printreg(vga->crt[i]);
3237dd7cddfSDavid du Colombier printitem(ctlr->name, "Crt70");
3247dd7cddfSDavid du Colombier for (i = 0x70; i <= MaxCRT; i++)
3257dd7cddfSDavid du Colombier printreg(vga->crt[i]);
3267dd7cddfSDavid du Colombier
3277dd7cddfSDavid du Colombier printitem(ctlr->name, "Gr08");
3287dd7cddfSDavid du Colombier for(i=0x08; i<=0x3F; i++)
3297dd7cddfSDavid du Colombier printreg(vga->graphics[i]);
3307dd7cddfSDavid du Colombier printitem(ctlr->name, "Gr70");
3317dd7cddfSDavid du Colombier for(i=0x70; i<=MaxGR; i++)
3327dd7cddfSDavid du Colombier printreg(vga->graphics[i]);
3337dd7cddfSDavid du Colombier }
3347dd7cddfSDavid du Colombier
3357dd7cddfSDavid du Colombier Ctlr neomagic = {
3367dd7cddfSDavid du Colombier "neomagic", /* name */
3377dd7cddfSDavid du Colombier snarf, /* snarf */
3387dd7cddfSDavid du Colombier options, /* options */
3397dd7cddfSDavid du Colombier init, /* init */
3407dd7cddfSDavid du Colombier load, /* load */
3417dd7cddfSDavid du Colombier dump, /* dump */
3427dd7cddfSDavid du Colombier };
3437dd7cddfSDavid du Colombier
3447dd7cddfSDavid du Colombier Ctlr neomagichwgc = {
3457dd7cddfSDavid du Colombier "neomagichwgc", /* name */
3467dd7cddfSDavid du Colombier 0, /* snarf */
3477dd7cddfSDavid du Colombier 0, /* options */
3487dd7cddfSDavid du Colombier 0, /* init */
3497dd7cddfSDavid du Colombier 0, /* load */
3507dd7cddfSDavid du Colombier 0, /* dump */
3517dd7cddfSDavid du Colombier };
352