summaryrefslogtreecommitdiff
path: root/vgabios
diff options
context:
space:
mode:
authorvruppert <vruppert>2004-07-22 18:37:29 +0000
committervruppert <vruppert>2004-07-22 18:37:29 +0000
commitfe52d8a1468e905fb4d17eec46536aabbab341da (patch)
tree3aed301969859870affeacef1931736abd574112 /vgabios
parent5f75d72a0801b0dea40a2f16f563d24ee30f4985 (diff)
- cirrus extension: tables for mode 1280x1024x8 added
- vbe: dispi_set_xres() and dispi_set_virt_width() now modify vga compatible registers - vbe: mode list entry for mode 800x600x4 fixed
Diffstat (limited to 'vgabios')
-rw-r--r--vgabios/VGABIOS-lgpl-latest.binbin32768 -> 32768 bytes
-rw-r--r--vgabios/VGABIOS-lgpl-latest.cirrus.binbin32768 -> 32768 bytes
-rw-r--r--vgabios/VGABIOS-lgpl-latest.cirrus.debug.binbin32768 -> 32768 bytes
-rw-r--r--vgabios/VGABIOS-lgpl-latest.debug.binbin32768 -> 32768 bytes
-rw-r--r--vgabios/clext.c21
-rw-r--r--vgabios/vbe.c62
-rw-r--r--vgabios/vbetables.h4
7 files changed, 78 insertions, 9 deletions
diff --git a/vgabios/VGABIOS-lgpl-latest.bin b/vgabios/VGABIOS-lgpl-latest.bin
index 097bf3af..2c92a776 100644
--- a/vgabios/VGABIOS-lgpl-latest.bin
+++ b/vgabios/VGABIOS-lgpl-latest.bin
Binary files differ
diff --git a/vgabios/VGABIOS-lgpl-latest.cirrus.bin b/vgabios/VGABIOS-lgpl-latest.cirrus.bin
index 53d51ce1..a411460a 100644
--- a/vgabios/VGABIOS-lgpl-latest.cirrus.bin
+++ b/vgabios/VGABIOS-lgpl-latest.cirrus.bin
Binary files differ
diff --git a/vgabios/VGABIOS-lgpl-latest.cirrus.debug.bin b/vgabios/VGABIOS-lgpl-latest.cirrus.debug.bin
index e87423ed..bc841d09 100644
--- a/vgabios/VGABIOS-lgpl-latest.cirrus.debug.bin
+++ b/vgabios/VGABIOS-lgpl-latest.cirrus.debug.bin
Binary files differ
diff --git a/vgabios/VGABIOS-lgpl-latest.debug.bin b/vgabios/VGABIOS-lgpl-latest.debug.bin
index 6b1bc176..bc384660 100644
--- a/vgabios/VGABIOS-lgpl-latest.debug.bin
+++ b/vgabios/VGABIOS-lgpl-latest.debug.bin
Binary files differ
diff --git a/vgabios/clext.c b/vgabios/clext.c
index e0ff9ac1..050e2e8b 100644
--- a/vgabios/clext.c
+++ b/vgabios/clext.c
@@ -207,6 +207,21 @@ unsigned short ccrtc_1024x768x24[] = {
0x001a,0x321b,0x001d,
0xffff
};
+/* 1280x1024x8 */
+unsigned short cseq_1280x1024x8[] = {
+0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
+0x760b,0x760c,0x760d,0x760e,
+0x0412,0x0013,0x2017,
+0x341b,0x341c,0x341d,0x341e,
+0xffff
+};
+unsigned short ccrtc_1280x1024x8[] = {
+0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707,
+0x6009,0x000c,0x000d,
+0x0310,0xff12,0xa013,0x4014,0xff15,0x2416,0xc317,0xff18,
+0x001a,0x221b,0x001d,
+0xffff
+};
cirrus_mode_t cirrus_modes[] =
@@ -251,6 +266,10 @@ cirrus_mode_t cirrus_modes[] =
cseq_1024x768x24,cgraph_svgacolor,ccrtc_1024x768x24,24,
6,8,16,8,8,8,0,0,0},
+ {0x6d,1280,1024,8,0x00,
+ cseq_1280x1024x8,cgraph_svgacolor,ccrtc_1280x1024x8,8,
+ 4,0,0,0,0,0,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,
@@ -292,6 +311,8 @@ unsigned short cirrus_vesa_modelist[] = {
0x117, 0x74,
// 1024x768x24
//0x118, 0x79,
+// 1280x1024x8
+ 0x107, 0x6d,
// invalid
0xffff,0xffff
};
diff --git a/vgabios/vbe.c b/vgabios/vbe.c
index d257d6cf..ac917546 100644
--- a/vgabios/vbe.c
+++ b/vgabios/vbe.c
@@ -71,7 +71,7 @@ _vbebios_product_name:
.byte 0x00
_vbebios_product_revision:
-.ascii "$Id: vbe.c,v 1.44 2004/05/09 20:31:30 vruppert Exp $"
+.ascii "$Id: vbe.c,v 1.45 2004/07/22 18:37:29 vruppert Exp $"
.byte 0x00
_vbebios_info_string:
@@ -87,7 +87,7 @@ _no_vbebios_info_string:
.byte 0x00
msg_vbe_init:
-.ascii "VBE Bios $Id: vbe.c,v 1.44 2004/05/09 20:31:30 vruppert Exp $"
+.ascii "VBE Bios $Id: vbe.c,v 1.45 2004/07/22 18:37:29 vruppert Exp $"
.byte 0x0a,0x0d, 0x00
@@ -162,8 +162,37 @@ ASM_END
static void dispi_set_xres(xres)
Bit16u xres;
{
- outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_XRES);
- outw(VBE_DISPI_IOPORT_DATA,xres);
+ASM_START
+ push bp
+ mov bp, sp
+ push ax
+ push dx
+
+ mov dx, # VBE_DISPI_IOPORT_INDEX
+ mov ax, # VBE_DISPI_INDEX_XRES
+ out dx, ax
+ mov dx, # VBE_DISPI_IOPORT_DATA
+ mov ax, 4[bp] ; xres
+ out dx, ax
+ push ax
+ mov dx, #0x03d4
+ mov ax, #0x0011
+ out dx, ax
+ mov dx, #0x03d4
+ pop ax
+ push ax
+ shr ax, #3
+ dec ax
+ mov ah, al
+ mov al, #0x01
+ out dx, ax
+ pop ax
+ call vga_set_virt_width
+
+ pop dx
+ pop ax
+ pop bp
+ASM_END
}
static void dispi_set_yres(yres)
@@ -239,9 +268,7 @@ dispi_get_enable:
in ax, dx
pop dx
ret
-ASM_END
-ASM_START
_dispi_set_bank:
push dx
push ax
@@ -339,7 +366,28 @@ dispi_get_y_offset:
pop dx
ret
+vga_set_virt_width:
+ push ax
+ push bx
+ push dx
+ mov bx, ax
+ call dispi_get_bpp
+ cmp al, #0x04
+ ja set_width_svga
+ shr bx, #2
+set_width_svga:
+ shr bx, #2
+ mov dx, #0x03d4
+ mov ah, bl
+ mov al, #0x13
+ out dx, ax
+ pop dx
+ pop bx
+ pop ax
+ ret
+
dispi_set_virt_width:
+ call vga_set_virt_width
push dx
push ax
mov dx, # VBE_DISPI_IOPORT_INDEX
@@ -718,9 +766,9 @@ Bit16u *AX;Bit16u BX; Bit16u ES;Bit16u DI;
biosfn_set_video_mode(0x6a);
}
+ dispi_set_bpp(cur_info->info.BitsPerPixel);
dispi_set_xres(cur_info->info.XResolution);
dispi_set_yres(cur_info->info.YResolution);
- dispi_set_bpp(cur_info->info.BitsPerPixel);
dispi_set_bank(0);
dispi_set_enable(VBE_DISPI_ENABLED | no_clear | lfb_flag);
diff --git a/vgabios/vbetables.h b/vgabios/vbetables.h
index c9a1a796..a742ac74 100644
--- a/vgabios/vbetables.h
+++ b/vgabios/vbetables.h
@@ -185,10 +185,10 @@ static ModeInfoListItem mode_info_list[]=
/*Bit8u YCharSize*/ 16,
/*Bit8u NumberOfPlanes*/ 4,
/*Bit8u BitsPerPixel*/ 4,
- /*Bit8u NumberOfBanks*/ 1,
+ /*Bit8u NumberOfBanks*/ 16,
/*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PLANAR,
/*Bit8u BankSize*/ 0,
- /*Bit8u NumberOfImagePages*/ 0,
+ /*Bit8u NumberOfImagePages*/ 15,
/*Bit8u Reserved_page*/ 0,
// Direct Color fields (required for direct/6 and YUV/7 memory models)
/*Bit8u RedMaskSize*/ 0,