Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/sparc/dev Switch initial colormap setup again to be...



details:   https://anonhg.NetBSD.org/src/rev/d7691ce7a51b
branches:  trunk
changeset: 485018:d7691ce7a51b
user:      pk <pk%NetBSD.org@localhost>
date:      Sun Apr 16 22:07:24 2000 +0000

description:
Switch initial colormap setup again to be compatible with the PROM's,
i.e. background at index 0: white, foreground at index 255: black.

Also, allocate a slice for an ANSI colormap, so we can experiment
with coloured text on the bare console.

diffstat:

 sys/arch/sparc/dev/bt_subr.c |  75 +++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 70 insertions(+), 5 deletions(-)

diffs (96 lines):

diff -r 28ae13d85a0f -r d7691ce7a51b sys/arch/sparc/dev/bt_subr.c
--- a/sys/arch/sparc/dev/bt_subr.c      Sun Apr 16 21:49:49 2000 +0000
+++ b/sys/arch/sparc/dev/bt_subr.c      Sun Apr 16 22:07:24 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: bt_subr.c,v 1.10 2000/04/04 21:47:17 pk Exp $ */
+/*     $NetBSD: bt_subr.c,v 1.11 2000/04/16 22:07:24 pk Exp $ */
 
 /*
  * Copyright (c) 1993
@@ -195,8 +195,8 @@
 /*
  * Initialize the color map to the default state:
  *
- *     - 0 is black
- *     - all other entries are full white
+ *     - 0 is white                    (PROM uses entry 0 for background)
+ *     - all other entries are black   (PROM uses entry 255 for foreground)
  */
 void
 bt_initcmap(cm, cmsize)
@@ -207,8 +207,73 @@
        u_char *cp;
 
        cp = &cm->cm_map[0][0];
-       cp[0] = cp[1] = cp[2] = 0;
+       cp[0] = cp[1] = cp[2] = 0xff;
 
        for (i = 1, cp = &cm->cm_map[i][0]; i < cmsize; cp += 3, i++)
-               cp[0] = cp[1] = cp[2] = 0xff;
+               cp[0] = cp[1] = cp[2] = 0;
+
+#ifdef RASTERCONSOLE
+       if (cmsize > 16) {
+               /*
+                * Setup an ANSI map at offset 1, for rasops;
+                * see dev/fb.c for usage (XXX - this should
+                * be replaced by more general colormap handling)
+                */
+               extern u_char rasops_cmap[];
+               bcopy(rasops_cmap, &cm->cm_map[1][0], 3*16);
+       }
+#endif
 }
+
+#if notyet
+static void
+bt_loadcmap_packed256(fb, bt, start, ncolors)
+       struct fbdevice *fb;
+       volatile struct bt_regs *bt;
+       int start, ncolors;
+{
+       u_int v;
+       int count, i;
+       u_char *c[3], **p;
+       struct cmap *cm = &fb->fb_cmap;
+
+       count = BT_D4M3(start + ncolors - 1) - BT_D4M3(start) + 3;
+       bt = &sc->sc_fbc->fbc_dac;
+       bt->bt_addr = BT_D4M4(start);
+
+       /*
+        * Figure out where to start in the RGB arrays
+        * See btreg.h for the way RGB triplets are packed into 4-byte words.
+        */
+       c[0] = &cm->red[(4 * count) / 3)];
+       c[1] = &cm->green[(4 * count) / 3];
+       c[2] = &cm->blue[(4 * count) / 3];
+       p = &c[0];
+       i = (4 * count) % 3;    /* This much of the last triplet is already in
+                                  the last packed word */
+       while (i--) {
+               c[1-i]++;
+               p++;
+       }
+
+
+       while (--count >= 0) {
+               u_int v = 0;
+
+               /*
+                * Retrieve four colormap entries, pack them into
+                * a 32-bit word and write to the hardware register.
+                */
+               for (i = 0; i < 4; i++) {
+                       u_char *cp = *p;
+                       v |= *cp++ << (8 * i);
+                       *p = cp;
+                       if (p++ == &c[2])
+                               /* Wrap around */
+                               p = &c[0];
+               }
+
+               bt->bt_cmap = v;
+       }
+}
+#endif



Home | Main Index | Thread Index | Old Index