M port/sysfile.c => port/sysfile.c +5 -2
@@ 165,6 165,11 @@ fdclose(int fd, int flag)
lock(f);
c = f->fd[fd];
+ if(c == 0){
+ /* can happen for users with shared fd tables */
+ unlock(f);
+ return;
+ }
if(flag){
if(c==0 || !(c->flag&flag)){
unlock(f);
@@ 177,8 182,6 @@ fdclose(int fd, int flag)
f->maxfd = i;
unlock(f);
- if(c == 0)
- panic("fdclose");
close(c);
}
M ss/main.c => ss/main.c +2 -0
@@ 141,6 141,8 @@ init0(void)
print("frame buffer id %lux %s\n", conf.monitor, fbstr);
print("NKLUDGE %d\n", NKLUDGE);
+mapdump();
+
u->slash = (*devtab[0].attach)(0);
u->dot = clone(u->slash, 0);
M ss/screen.c => ss/screen.c +24 -15
@@ 27,13 27,13 @@ void (*kprofp)(ulong);
typedef struct DAC DAC;
struct DAC
{
- uchar addr; /* DAC address register */
+ uchar addr; /* address register */
uchar pad0[3];
- uchar color; /* DAC color palette */
+ uchar color; /* color palette */
uchar pad1[3];
- uchar cntrl; /* DAC control register */
+ uchar cntrl; /* control register */
uchar pad2[3];
- uchar ovrl; /* DAC overlay palette */
+ uchar ovrl; /* overlay palette */
uchar pad3[3];
}*dac;
@@ 90,6 90,14 @@ screeninit(char *str)
out.bwid = defont0.info[' '].width;
dac = (DAC*)(kmappa(FRAMEBUF+s->dacaddr, PTENOCACHE|PTEIO)->va);
if(gscreen.ldepth == 3){
+ dac->addr = 4;
+ dac->cntrl = 0xFF; /* enable all planes */
+ dac->addr = 5;
+ dac->cntrl = 0x00; /* no blinking */
+ dac->addr = 6;
+ dac->cntrl = 0x43; /* enable palette ram and display */
+ dac->addr = 7;
+ dac->cntrl = 0x00; /* no tests */
havecol = 0;
if(havecol) {
/*
@@ 108,17 116,6 @@ screeninit(char *str)
setcolor(85, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA);
setcolor(170, 0x55555555, 0x55555555, 0x55555555);
} else {
-/*
- dac->addr = 4;
- dac->cntrl = 0xFF;
- dac->addr = 5;
- dac->cntrl = 0x00;
- dac->addr = 6;
- dac->cntrl = 0x40;
- dac->addr = 7;
- dac->cntrl = 0x00;
-*/
-
dac->addr = 0;
for(i=255; i>=0; i--){
dac->color = i;
@@ 129,6 126,18 @@ screeninit(char *str)
}
}
+mapdump(void)
+{
+ dac->addr = 4;
+ print("cntrl4 %.2ux\n", dac->cntrl);
+ dac->addr = 5;
+ print("cntrl5 %.2ux\n", dac->cntrl);
+ dac->addr = 6;
+ print("cntrl6 %.2ux\n", dac->cntrl);
+ dac->addr = 7;
+ print("cntrl7 %.2ux\n", dac->cntrl);
+}
+
void
screenputnl(void)
{