From c77a83d6dd23d7039207e58c4ce2ccefe5f81c1a Mon Sep 17 00:00:00 2001
From: Joshua Wise <joshua@rebirth.joshuawise.com>
Date: Tue, 25 Nov 2008 04:03:02 -0500
Subject: [PATCH] Ass.

---
 aseg-paging/smi.c | 35 ++++++++++++++++++++++++++++++++++-
 video/fb.c        |  2 +-
 video/tnt2.c      |  7 ++++---
 3 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/aseg-paging/smi.c b/aseg-paging/smi.c
index 1152723..bc0960f 100644
--- a/aseg-paging/smi.c
+++ b/aseg-paging/smi.c
@@ -5,6 +5,8 @@
 #include <smi.h>
 #include <pci-bother.h>
 #include <serial.h>
+#include <fb.h>
+#include <output.h>
 #include "../net/net.h"
 #include "vga-overlay.h"
 
@@ -19,12 +21,43 @@ void smi_entry(void)
 	pcisave = inl(0xCF8);
 	vgasave = inb(0x3D4);
 	pci_unbother_all();
+	
+	serial_init();
+	
+	if (fb)
+        	fb->getvmode(fb->priv);
 
 	counter++;
 	sprintf(statstr, "NetWatch! %08x %08x", smi_status(), counter);
 	strblit(statstr, 0, 0, 0);
 	
-	serial_init();
+	/* wee! */
+	if (fb && !fb->curmode.text)
+	{
+		output("not text! nope nope nope");
+		int ass[][2] = {
+			      {1,0},       {4,0},{5,0},{6,0}, {8,0},{9,0},{10,0},
+			{0,1},      {2,1}, {4,1},             {8,1},
+			{0,2},{1,2},{2,2}, {4,2},{5,2},{6,2}, {8,2},{9,2},{10,2},
+			{0,3},      {2,3},             {6,3},             {10,3},
+			{0,4},      {2,4}, {4,4},{5,4},{6,4}, {8,4},{9,4},{10,4},
+			{-1,-1}
+		};
+		int p;
+		for (p = 0; ass[p][0] != -1; p++)
+		{
+			int x, y;
+			for (y = 0; y < 8; y++)
+				for (x = 0; x < 8; x++)
+				{
+					unsigned long a =
+						(unsigned long) fb->fbaddr +
+						((y+ass[p][1]*8) * fb->curmode.xres + ass[p][0]*8 + x) * 4;
+					*(unsigned long *)p2v(a) = 0xFF0000FF;
+				}
+		}
+	}
+	
 	eth_poll();
 	
 	if (inl(0x840) & 0x1000)
diff --git a/video/fb.c b/video/fb.c
index ed404e1..416b3b2 100644
--- a/video/fb.c
+++ b/video/fb.c
@@ -1,3 +1,3 @@
 #include <fb.h>
 
-struct fbdevice *fb;
+struct fbdevice *fb = 0;
diff --git a/video/tnt2.c b/video/tnt2.c
index 73a3d0b..5ab5f02 100644
--- a/video/tnt2.c
+++ b/video/tnt2.c
@@ -12,7 +12,7 @@ static struct fbdevice tnt2_fb = {
 
 static unsigned int vgard(unsigned char a)
 {
-	outb(a, 0x3D4);
+	outb(0x3D4, a);
 	return (unsigned int)inb(0x3D5);
 }
 
@@ -22,7 +22,7 @@ static void tnt2_getvmode(void *priv)
 	tnt2_fb.curmode.yres = (vgard(0x12) | (vgard(0x7) & 2) << 7 | (vgard(0x7) & 0x40) << 3) + 1;
 	switch (vgard(0x28))
 	{
-	case 4:
+	case 3:
 		tnt2_fb.curmode.format = FB_RGB888;
 		tnt2_fb.curmode.bytestride = 4;
 		tnt2_fb.curmode.text = 0;
@@ -31,7 +31,8 @@ static void tnt2_getvmode(void *priv)
 		tnt2_fb.curmode.text = 1;
 		break;
 	default:
-		outputf("Unknown TNT2 format %d", vgard(0x28));
+		tnt2_fb.curmode.text = 1;
+		outputf("Unknown TNT2 format %x", vgard(0x28));
 		break;
 	}
 }
-- 
2.43.0