Anyone using a 15/16 bit rasops console without issues?  I think there is
a byte order error in rasops15.c .

This patch worked for me, wondering if anyone else can confirm the error
and/or verify this fix.

Thanks

Summary of changes:  (A/? = New, R/D = Removed, M = Modified)
=============================================================
M rasops15.c

Apply patch with "cd .../src/sys/dev/rasops ; patch -s -p0 < .../patchfile"

Index: rasops15.c
===================================================================
RCS file: /cvsroot/src/sys/dev/rasops/rasops15.c,v
retrieving revision 1.20
diff -b -u -r1.20 rasops15.c
--- rasops15.c  17 Apr 2012 12:06:25 -0000      1.20
+++ rasops15.c  14 Sep 2016 20:31:52 -0000
@@ -217,17 +217,26 @@
        bg = ri->ri_devcmap[((u_int)attr >> 16) & 0xf] & 0xffff;
        stamp_attr = attr;
 
+       /*
+        * XXX - someone should sanity check but think this was doing
+        *   stamp[i] = 8|16, stamp[i+1] = 2|4 (little endian)
+        *   stamp[i] = 4|2, stamp[i+1] = 16|8 (big endian)
+        * where should be
+        *   stamp[i] = 2|4, stamp[i+1] = 8|16 (little endian)
+        *   stamp[i] = 16|8, stamp[i+1] = 4|2 (big endian)
+        */
        for (i = 0; i < 32; i += 2) {
 #if BYTE_ORDER == LITTLE_ENDIAN
-               stamp[i] = (i & 16 ? fg : bg);
-               stamp[i] |= ((i & 8 ? fg : bg) << 16);
-               stamp[i + 1] = (i & 4 ? fg : bg);
-               stamp[i + 1] |= ((i & 2 ? fg : bg) << 16);
+            stamp[i] = (i & 4 ? fg : bg);
+            stamp[i] |= ((i & 2 ? fg : bg) << 16);
+            stamp[i + 1] = (i & 16 ? fg : bg);
+            stamp[i + 1] |= ((i & 8 ? fg : bg) << 16);
+
 #else
-               stamp[i] = (i & 2 ? fg : bg);
-               stamp[i] |= ((i & 4 ? fg : bg) << 16);
-               stamp[i + 1] = (i & 8 ? fg : bg);
-               stamp[i + 1] |= ((i & 16 ? fg : bg) << 16);
+            stamp[i] = (i & 8 ? fg : bg);
+            stamp[i] |= ((i & 16 ? fg : bg) << 16);
+            stamp[i + 1] = (i & 2 ? fg : bg);
+            stamp[i + 1] |= ((i & 4 ? fg : bg) << 16);
 #endif
        }
 }

Reply via email to