Patchwork Cirrus_vgabios: New mode 1024x1536

login
register
mail settings
Submitter tlb1144@gmx.net
Date Aug. 3, 2010, 9:50 p.m.
Message ID <20100803215058.157270@gmx.net>
Download mbox | patch
Permalink /patch/60800/
State New
Headers show

Comments

tlb1144@gmx.net - Aug. 3, 2010, 9:50 p.m.
If "[Patch] Cirrus_vga: More than 1024 lines" for hw/cirrus_vga.c is used, CRTC Mode Control (CR17) bit 2 can be set to double the number of scanlines to 2048.

In vgabios-0.6c the 1024x768 modes can simply be transformed into additonal 1024x1536 modes. It is only necessary to set CR17 bit 2. For testing, I added non-standard VESA/video modes 0x1a0..0x1a3/0xa0..0xa3 with 1024x1536 pixels.

patch for vgabios-0.6c:

Patch

diff -r -u a/clext.c b/clext.c
--- a/clext.c	2009-01-24 11:02:00.000000000 +0100
+++ b/clext.c	2010-07-31 22:07:31.000000000 +0200
@@ -254,6 +254,52 @@ 
 0xffff
 };
 
+/* 1024x1536x8 */
+unsigned short cseq_1024x1536x8[] = {
+0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
+0x760b,0x760c,0x760d,0x760e,
+0x0412,0x0013,0x2017,
+0x341b,0x341c,0x341d,0x341e,
+0xffff
+};
+unsigned short ccrtc_1024x1536x8[] = {
+0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
+0x6009,0x000c,0x000d,
+0x0310,0xff12,0x8013,0x4014,0xff15,0x2416,0xc717,0xff18,
+0x001a,0x221b,0x001d,
+0xffff
+};
+/* 1024x1536x16 */
+unsigned short cseq_1024x1536x16[] = {
+0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
+0x760b,0x760c,0x760d,0x760e,
+0x0412,0x0013,0x2017,
+0x341b,0x341c,0x341d,0x341e,
+0xffff
+};
+unsigned short ccrtc_1024x1536x16[] = {
+0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
+0x6009,0x000c,0x000d,
+0x0310,0xff12,0x0013,0x4014,0xff15,0x2416,0xc717,0xff18,
+0x001a,0x321b,0x001d,
+0xffff
+};
+/* 1024x768x24 */
+unsigned short cseq_1024x1536x24[] = {
+0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507,
+0x760b,0x760c,0x760d,0x760e,
+0x0412,0x0013,0x2017,
+0x341b,0x341c,0x341d,0x341e,
+0xffff
+};
+unsigned short ccrtc_1024x1536x24[] = {
+0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
+0x6009,0x000c,0x000d,
+0x0310,0xff12,0x8013,0x4014,0xff15,0x2416,0xc717,0xff18,
+0x001a,0x321b,0x001d,
+0xffff
+};
+
 cirrus_mode_t cirrus_modes[] =
 {
  {0x5f,640,480,8,0x00,
@@ -310,6 +356,19 @@ 
    cseq_1600x1200x8,cgraph_svgacolor,ccrtc_1600x1200x8,8,
    4,0,0,0,0,0,0,0,0},
 
+ {0xA0,1024,1536,8,0x00,
+   cseq_1024x1536x8,cgraph_svgacolor,ccrtc_1024x1536x8,8,
+   4,0,0,0,0,0,0,0,0},
+ {0xA2,1024,1536,16,0xe1,
+   cseq_1024x1536x16,cgraph_svgacolor,ccrtc_1024x1536x16,16,
+   6,5,11,6,5,5,0,0,0},
+ {0xA1,1024,1536,15,0xf0,
+   cseq_1024x1536x16,cgraph_svgacolor,ccrtc_1024x1536x16,16,
+   6,5,10,5,5,5,0,1,15},
+ {0xA3,1024,1536,24,0xe5,
+   cseq_1024x1536x24,cgraph_svgacolor,ccrtc_1024x1536x24,24,
+   6,8,16,8,8,8,0,0,0},
+
  {0xfe,0,0,0,0,cseq_vga,cgraph_vga,ccrtc_vga,0,
    0xff,0,0,0,0,0,0,0,0},
  {0xff,0,0,0,0,0,0,0,0,
@@ -357,6 +416,14 @@ 
   0x119, 0x69,
 // 1280x1024x16
   0x11a, 0x75,
+// 1024x1536x8
+  0x1a0, 0xA0,
+// 1024x1536x15
+  0x1a1, 0xA1,
+// 1024x1536x16
+  0x1a2, 0xA2,
+// 1024x1536x24
+  0x1a3, 0xA3,
 // invalid
   0xffff,0xffff
 };
diff -r -u a/vbetables-gen.c b/vbetables-gen.c
--- a/vbetables-gen.c	2009-01-25 16:46:08.000000000 +0100
+++ b/vbetables-gen.c	2010-07-31 22:02:37.000000000 +0200
@@ -76,6 +76,14 @@ 
 { 2560, 1600, 16                     , 0x18a},
 { 2560, 1600, 24                     , 0x18b},
 { 2560, 1600, 32                     , 0x18c},
+
+      /* Portrait mode for testing > 1024 lines */
+{ 1024, 1536, 8                      , 0x1a0},
+{ 1024, 1536, 15                     , 0x1a1},
+{ 1024, 1536, 16                     , 0x1a2},
+{ 1024, 1536, 24                     , 0x1a3},
+{ 1024, 1536, 32                     , 0x1a4},
+
 { 0, },
 };