From c861cdf62958e103a42b8e506c2031e35ea5af50 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 30 Dec 1993 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1993-12-30 --- carrera/mem.h | 1 + carrera/screen.c | 43 ++++++++++++++++++++++++++++++++++++------- pc/devvga.c | 30 +++++++++++++++++++++++++----- pc/mem.h | 1 + 4 files changed, 63 insertions(+), 12 deletions(-) diff --git a/carrera/mem.h b/carrera/mem.h index e5edb6455718b221c9b0b5b5fcd662b210e35c7f..b7bc7e976cd6883fa47d80d1be1d52bb7a712120 100644 --- a/carrera/mem.h +++ b/carrera/mem.h @@ -160,6 +160,7 @@ #define KZERO KSEG0 /* base of kernel address space */ #define KTZERO (KZERO+0x20000) /* first address in kernel text */ #define USTKSIZE (4*1024*1024) /* size of user stack */ +#define globalmem(x) (((ulong)x)&KZERO) /* addresses valid in all contexts */ /* * Exception codes */ diff --git a/carrera/screen.c b/carrera/screen.c index 672ef9043dbb4304d988e368ca43d2b6b86a8ef0..8d89ff80df1c763f388e68b15da7a733c291bc01 100644 --- a/carrera/screen.c +++ b/carrera/screen.c @@ -172,14 +172,14 @@ screeninit(void) { int i, x; + gscreen.ldepth = 0; + setmode(&dfltmode); - gscreen.ldepth = 3; for(i = 0; i < 16; i++){ x = x6to32((i*63)/15); setcolor(i, x, x, x); } - gscreen.ldepth = 0; /* allocate a new soft bitmap area */ gscreen.base = xalloc(1024*1024); @@ -303,7 +303,18 @@ screenputs(char *s, int n) void getcolor(ulong p, ulong *pr, ulong *pg, ulong *pb) { - p &= (1<<(1<attribute); i++) arout(i, v->attribute[i]); - EISAOUTB(0x3C6, 0x0F); /* pel mask */ + switch(gscreen.ldepth){ + case 3: + EISAOUTB(0x3C6, 0xFF); /* pel mask */ + break; + default: + EISAOUTB(0x3C6, 0x0F); /* pel mask */ + break; + } EISAOUTB(0x3C8, 0x00); /* pel write address */ EISAOUTB(0x3bf, 0x03); /* hercules compatibility reg */ @@ -522,8 +551,8 @@ screenupdate(void) for(i = 0; i < len; i += 8) { s = (ulong*)(sp+i); h = (ulong*)(hp+i); - in1 = ~s[0]; - in2 = ~s[1]; + in1 = s[0]; + in2 = s[1]; h[0] = swiz(in2); h[1] = swiz(in1); } diff --git a/pc/devvga.c b/pc/devvga.c index 1e2c61c9cdd17db9939a9dd8de20e0e5d3621749..411fe3d32945ddc8d403457ef695c8d550b7f271 100644 --- a/pc/devvga.c +++ b/pc/devvga.c @@ -471,12 +471,10 @@ setscreen(int maxx, int maxy, int ldepth) case 2: case 1: case 0: - gscreen.ldepth = 3; for(i = 0; i < 16; i++){ x = x6to32((i*63)/15); setcolor(i, x, x, x); } - gscreen.ldepth = ldepth; break; } cga = 0; @@ -608,7 +606,7 @@ screenupdate(void) switch(gscreen.ldepth){ case 0: r.min.x &= ~15; /* 16 pixel alignment for l0update() */ - f = l0update; + f = memmove; len = (r.max.x + 7)/8 - r.min.x/8; if(len & 1) len++; /* 16 bit alignment for l0update() */ @@ -1071,7 +1069,18 @@ screenbits(void) void getcolor(ulong p, ulong *pr, ulong *pg, ulong *pb) { - p &= (1<<(1<