--- xf86-video-sis-0.9.1/src/sis_driver.c.orig	2010-01-18 13:17:56.000000000 -0500
+++ xf86-video-sis-0.9.1/src/sis_driver.c	2010-01-25 16:35:40.000000000 -0500
@@ -11677,7 +11677,64 @@ SISPMEvent(int scrnIndex, pmEvent event,
   return 1;/*TRUE*/
 }
 
+void
+sis_print_registers(SISPtr pSiS)
+{
+#define print(...)	xf86ErrorFVerb(1, __VA_ARGS__)
+    auto void print_range(char *name, int base, int first, int last) {
+	int		i, j;
+	unsigned char	c;
+	char		buffer[9];
+	print("%s:\n", name);
+	buffer[8] = 0;
+	for (i = first; i <= last; i++) {
+	    inSISIDXREG(base, i, c);
+	    for (j = 0; j < 8; j++)
+		buffer[7 - j] = c & (1 << j) ? '1' : '0';
+	    print("\t%02x: %02x:%s\n", i, c, buffer);
+	}
+    }
 
+    auto void print_range_int(char *name, int base, int first, int last) {
+	int		i, j;
+	unsigned int	l;
+	char		buffer[33];
+	print("%s:\n", name);
+	buffer[32] = 0;
+	for (i = first; i <= last; i += 4) {
+	    l = inSISREGL(base + i);
+	    for (j = 0; j < 32; j++)
+		buffer[31 - j] = l & (1 << j) ? '1' : '0';
+	    print("\t%02x: %08x:%s\n", i, l, buffer);
+	}
+    }
 
-
-
+    print_range_int	("PCI: CNF00 - CNF1B", pSiS->RelIO, 0x00, 0x1b);
+    print_range_int	("PCI: CNF2C - CNF47", pSiS->RelIO, 0x2C, 0x47);
+    print_range_int	("AGP: CNF50 - CNF5B", pSiS->RelIO, 0x50, 0x5B);
+    print_range		("CRT1: SR05 - SR12", SISSR, 0x05, 0x12);
+    print_range		("CRT1: SR13 - SR16 (reserved)", SISSR, 0x13, 0x16);
+    print		("CRT1: SR19 - SR1A (reserved)\n");
+    print_range		("CRT1: SR1B - SR3A", SISSR, 0x1b, 0x3a);
+    print		("CRT1: SR3B (reserved)\n");
+    print_range		("CRT1: SR3C - SR3F", SISSR, 0x3c, 0x3f);
+    print_range		("CRT1: CR19 - CR1A", SISCR, 0x19, 0x1a);
+    print		("CRT1: CR1B - CR27 (undocumented?)\n");
+    print_range		("CRT1: CR28 - CR2E", SISCR, 0x28, 0x2e);
+    print		("CRT1: CR2F (reserved)\n");
+    print_range		("VGA BIOS: CR30 - CR3F", SISCR, 0x30, 0x3f);
+    print_range		("CRT1: CR40 - CR43", SISCR, 0x40, 0x43);
+    print		("CRT1: CR44 - CR45 (reserved)\n");
+    print_range		("CRT1: CR46 - CR67", SISCR, 0x46, 0x67);
+    print		("CRT1: CR68 - CR6F (DRAM registers reserved for backward compatibility with 760)\n");
+    print		("CRT1: CR70 - CR77 (undocumented?)\n");
+    print_range		("SMA BIOS: CR78 - CR7F", SISCR, 0x78, 0x7f);
+    print_range_int	("CRT1: CR80 - CR9B", SISCR, 0x80, 0xb3);
+    print_range_int	("CRT1: CRC0 - CRF3", SISCR, 0xc0, 0xf3);
+    print_range		("CRT2: SIGNAL REGISTERS, PART1 00 - 45", SISPART1, 0x00, 0x45);
+    print_range		("CRT2: TV SIGNAL REGISTERS, PART2 00 - 4d", SISPART2, 0x00, 0x4d);
+    print_range		("CRT2: TV COPY PROTECTION, PART3 00 - 40", SISPART3, 0x00, 0x40);
+    print_range		("CRT2: SIGNAL REGISTERS, PART4 00 - 3A", SISPART4, 0x00, 0x3a);
+    print_range		("CRT2: PALETTE SIGNAL REGISTERS, PART5 00 - 00 (?)", SISPART5, 0x00, 0x00);
+#undef print
+}
--- xf86-video-sis-0.9.1/src/sis_video.c.orig	2010-01-18 13:17:56.000000000 -0500
+++ xf86-video-sis-0.9.1/src/sis_video.c	2010-01-26 13:38:13.000000000 -0500
@@ -129,6 +129,8 @@
 
 #include "sis_video.h"
 
+extern void sis_print_registers(SISPtr pSiS);
+
 void SiSInitMC(ScreenPtr pScreen);
 
 /*********************************
@@ -712,6 +714,8 @@ SISResetVideo(ScrnInfoPtr pScrn)
 #ifdef SISMERGED
     pPriv->mustresettap2 = TRUE;
 #endif
+
+    sis_print_registers(pSiS);
 }
 
 
