и возьми с нуля
и добавь этот патч
Код: Выделить всё
diff -urN digi.orig/digi_isa.c digi.new/digi_isa.c
--- digi.orig/digi_isa.c 2004-06-18 21:13:48.000000000 +0300
+++ digi.new/digi_isa.c 2008-06-09 16:15:32.000000000 +0300
@@ -80,7 +80,8 @@
static u_char *
digi_xi_setwin(struct digi_softc *sc, unsigned int addr)
{
- outb(sc->wport, sc->window = FEPMEM);
+ //outb(sc->wport, sc->window = FEPMEM);
+ outb(sc->wport, sc->window = inb(sc->port)|FEPMEM);
return (sc->vmem + addr);
}
@@ -203,6 +204,11 @@
sc->win_size = 0x10000;
sc->win_bits = 16;
sc->wport = sc->port;
+
+ sc->setwin = digi_xi_setwin;
+ sc->hidewin = digi_isa_hidewin;
+ sc->towin = digi_xi_towin;
+
} else {
sc->name = "Digiboard PC/Xe 64/8K (windowed)";
sc->model = PCXEVE;
@@ -210,12 +216,13 @@
sc->win_size = 0x2000;
sc->win_bits = 13;
sc->wport = sc->port + 1;
+
+ sc->setwin = digi_isa_setwin;
+ sc->hidewin = digi_isa_hidewin;
+ sc->towin = digi_isa_towin;
}
sc->module = "Xe";
- sc->setwin = digi_isa_setwin;
- sc->hidewin = digi_isa_hidewin;
- sc->towin = digi_isa_towin;
}
return (sc->name != NULL);
@@ -396,7 +403,7 @@
if (sc->model == PCXI || sc->model == PCXE) {
outb(sc->port, FEPRST | FEPMEM);
- for (i = 0; (inb(sc->port) & FEPMASK) != FEPRST; i++) {
+ for (i = 0; (inb(sc->port) & FEPMASK) != (FEPRST|FEPMEM); i++) {
if (i == hz / 10) {
device_printf(dev,
"memory reservation failed (0x%02x)\n",