From 6dc810c2171ecfbd5b52dbb0d7704cbc66f4ab88 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 14 Aug 1992 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1992-08-14 --- boot/boot.c | 2 +- port/devcons.c | 38 +++++++++++++++++++++++++++----------- port/devkprof.c | 25 +++++++++++++++---------- port/devproc.c | 11 ++++++++++- ss/io.h | 6 +++--- ss/screen.c | 35 +++++++++++++++++++---------------- 6 files changed, 75 insertions(+), 42 deletions(-) diff --git a/boot/boot.c b/boot/boot.c index 4b932a59ddbb0898423f0c61fa189f9865739c25..562b189cf5957d9691e49d4ed0bcef135ffa285b 100644 --- a/boot/boot.c +++ b/boot/boot.c @@ -39,7 +39,7 @@ boot(int argc, char *argv[]) open("#c/cons", OREAD); open("#c/cons", OWRITE); open("#c/cons", OWRITE); -/**/ print("argc=%d\n", argc); +/* print("argc=%d\n", argc); for(fd = 0; fd < argc; fd++) print("%s ", argv[fd]); print("\n");/**/ diff --git a/port/devcons.c b/port/devcons.c index bb560a394970c5b9845ef4c969b49cdd2b2784ce..2b5269331f6aea73d23c3bd4d496682a14ea90b5 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -484,12 +484,12 @@ consclose(Chan *c) long consread(Chan *c, void *buf, long n, ulong offset) { - int ch, i, j, k, id; + int ch, i, k, id; ulong l; char *cbuf = buf; - char *chal; + char *chal, *b, *bp; Block *cb; - char tmp[6*NUMSIZE], xbuf[512]; + char tmp[128]; /* must be >= 6*NUMSIZE */ Mach *mp; if(n <= 0) @@ -648,24 +648,40 @@ consread(Chan *c, void *buf, long n, ulong offset) return readnum(offset, buf, n, HZ, NUMSIZE); case Qsysstat: - j = 0; - xbuf[0] = 0; + b = smalloc(conf.nmach*(NUMSIZE*8+1) + 1); /* +1 for NUL */ + bp = b; for(id = 0; id < 32; id++) { if(active.machs & (1<cs, mp->intr, mp->syscall, mp->pfault, - mp->tlbfault, mp->tlbpurge, mp->load); + readnum(0, bp, NUMSIZE, id, NUMSIZE); + bp += NUMSIZE; + readnum(0, bp, NUMSIZE, mp->cs, NUMSIZE); + bp += NUMSIZE; + readnum(0, bp, NUMSIZE, mp->intr, NUMSIZE); + bp += NUMSIZE; + readnum(0, bp, NUMSIZE, mp->syscall, NUMSIZE); + bp += NUMSIZE; + readnum(0, bp, NUMSIZE, mp->pfault, NUMSIZE); + bp += NUMSIZE; + readnum(0, bp, NUMSIZE, mp->tlbfault, NUMSIZE); + bp += NUMSIZE; + readnum(0, bp, NUMSIZE, mp->tlbpurge, NUMSIZE); + bp += NUMSIZE; + readnum(0, bp, NUMSIZE, mp->load, NUMSIZE); + bp += NUMSIZE; + *bp++ = '\n'; } } - return readstr(offset, buf, n, xbuf); + n = readstr(offset, buf, n, b); + free(b); + return n; case Qswap: - sprint(xbuf, "%d/%d memory %d/%d swap\n", + sprint(tmp, "%d/%d memory %d/%d swap\n", palloc.user-palloc.freecount, palloc.user, conf.nswap-swapalloc.free, conf.nswap); - return readstr(offset, buf, n, xbuf); + return readstr(offset, buf, n, tmp); case Qsysname: return readstr(offset, buf, n, sysname); diff --git a/port/devkprof.c b/port/devkprof.c index 584a7eb4578295709a5e32b946cd7374678da42d..fe6a7741a8a5952131ad84c817a0638f28af5638 100644 --- a/port/devkprof.c +++ b/port/devkprof.c @@ -36,26 +36,31 @@ void kproftimer(ulong); void kprofreset(void) { - ulong n; - - kprof.minpc = KTZERO; - kprof.maxpc = (ulong)etext; - kprof.nbuf = (kprof.maxpc-kprof.minpc) >> LRES; - n = kprof.nbuf*SZ; - kprof.buf = xalloc(n); - kproftab[0].length = n; - if(SZ != sizeof kprof.buf[0]) - panic("kprof size"); } void kprofinit(void) { + if(SZ != sizeof kprof.buf[0]) + panic("kprof size"); } Chan * kprofattach(char *spec) { + ulong n; + + /* allocate when first used */ + kprof.minpc = KTZERO; + kprof.maxpc = (ulong)etext; + kprof.nbuf = (kprof.maxpc-kprof.minpc) >> LRES; + n = kprof.nbuf*SZ; + if(kprof.buf == 0) { + kprof.buf = xalloc(n); + if(kprof.buf == 0) + error(Enomem); + } + kproftab[0].length = n; return devattach('T', spec); } Chan * diff --git a/port/devproc.c b/port/devproc.c index f57abff85a1a09910b1658a225b191b5276d2781..d227f547cbb4a68bd3ce78429313d4f45d6a2209 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -20,7 +20,7 @@ enum{ Qtext, }; -#define STATSIZE (2*NAMELEN+12+6*12) +#define STATSIZE (2*NAMELEN+12+7*12) Dirtab procdir[]={ "ctl", {Qctl}, 0, 0000, "mem", {Qmem}, 0, 0000, @@ -233,6 +233,7 @@ procread(Chan *c, void *va, long n, ulong offset) Proc *p; Page *pg; KMap *k; + Segment *s; int i, j; long l; User *up; @@ -345,6 +346,14 @@ if((p->state < Dead) || (p->state > Rendezvous)) l = TK2MS(l); readnum(0, statbuf+j+NUMSIZE*i, NUMSIZE, l, NUMSIZE); } + /* ignore stack, which is mostly non-existent */ + l = 0; + for(i=1; iseg[i]; + if(s) + l += s->top - s->base; + } + readnum(0, statbuf+j+NUMSIZE*6, NUMSIZE, l>>10, NUMSIZE); memmove(a, statbuf+offset, n); return n; diff --git a/ss/io.h b/ss/io.h index 3040de98c4d3a97453cf20feed9d53cbbbbae361..69e0766c1b2c9fa0122afc261bfc969a209d8d0d 100644 --- a/ss/io.h +++ b/ss/io.h @@ -1,6 +1,6 @@ #define FRAMEBUF 0xFE000000 -#define FRAMEBUFID 0xFE000000 -#define DISPLAYRAM 0xFE800000 +#define FRAMEBUFID (FRAMEBUF+0x000000) +#define DISPLAYRAM (FRAMEBUF+0x800000) #define EPROM 0xF6000000 #define CLOCK 0xF3000000 #define CLOCKFREQ 1000000 /* one microsecond increments */ @@ -36,7 +36,7 @@ struct SCCdev #define NVWRITE (2048-8-32) /* minus RTC, minus ID prom */ /* - * real-time clock (every 4th location) + * real-time clock */ typedef struct RTCdev RTCdev; struct RTCdev diff --git a/ss/screen.c b/ss/screen.c index f7d6530c120315cffb91f0e01b171112c5078da3..020b75bea546cfad388f88f115a89da39328d374 100644 --- a/ss/screen.c +++ b/ss/screen.c @@ -27,11 +27,10 @@ void (*kprofp)(ulong); typedef struct DAC DAC; struct DAC { - uchar pad[16]; - ulong dacaddr; /* DAC address register */ - ulong daccolor; /* DAC color palette */ - ulong daccntrl; /* DAC control register */ - ulong dacovrl; /* DAC overlay palette */ +uchar pad[3]; uchar dacaddr; /* DAC address register */ +uchar pad[3]; uchar daccolor; /* DAC color palette */ +uchar pad[3]; uchar daccntrl; /* DAC control register */ +uchar pad[3]; uchar dacovrl; /* DAC overlay palette */ }*dac; GBitmap gscreen; @@ -45,7 +44,7 @@ struct screens ulong dacaddr; }screens[] = { { "bwtwo", 1152, 900, 0, 0x400000 }, - { "cgsix", 1152, 900, 3, 0x400000 }, + { "cgsix", 1152, 900, 3, 0x200000 }, { "cgthree", 1152, 900, 3, 0x200000 }, 0 }; @@ -85,7 +84,7 @@ screeninit(char *str) out.pos.x = MINX; out.pos.y = 0; out.bwid = defont0.info[' '].width; - dac = (DAC*)kmappa(FRAMEBUF+s->dacaddr, PTENOCACHE|PTEIO); + dac = (DAC*)kmappa(FRAMEBUF+s->dacaddr, PTENOCACHE|PTEMAINMEM); if(gscreen.ldepth == 3){ havecol = 0; if(havecol) { @@ -114,13 +113,12 @@ dac->daccntrl = 0x40; dac->dacaddr = 7; dac->daccntrl = 0x00; - dac->dacaddr = 0; - for(i=0; i<252; i+=4) { - dac->daccolor = ~rep(i,8); - dac->daccolor = ~rep(i,8); - dac->daccolor = ~rep(i,8); + for(i=0; i<255; i++) { + dac->dacaddr = i; + dac->daccolor = i; + dac->daccolor = i; + dac->daccolor = i; } - /* for(i = 0; i<256; i++) setcolor(i, ~rep(i,8), ~rep(i,8), ~rep(i,8)); @@ -133,9 +131,14 @@ void mapdump(void) { int i; - dac->dacaddr = 0; - for(i=0; i<100; i++) - print("%lux ", dac->daccolor); + for(i=0; i<100; i++) { + dac->dacaddr = i; + dac->daccolor = i; + dac->daccolor = i; + dac->daccolor = i; + dac->dacaddr = i; + print("%ux.%ux.%ux ", dac->daccolor, dac->daccolor, dac->daccolor); + } } void