📄 vgabios.diff
字号:
Index: Makefile===================================================================RCS file: /sources/vgabios/vgabios/Makefile,vretrieving revision 1.17diff -u -w -r1.17 Makefile--- Makefile 6 Mar 2005 13:06:47 -0000 1.17+++ Makefile 25 Mar 2006 01:19:02 -0000@@ -17,9 +17,9 @@ all: bios cirrus-bios -bios: biossums vgabios.bin vgabios.debug.bin +bios: biossums vgabios.bin #vgabios.debug.bin -cirrus-bios: vgabios-cirrus.bin vgabios-cirrus.debug.bin+cirrus-bios: vgabios-cirrus.bin #vgabios-cirrus.debug.bin clean: /bin/rm -f biossums *.o *.s *.ld86 \Index: clext.c===================================================================RCS file: /sources/vgabios/vgabios/clext.c,vretrieving revision 1.9diff -u -w -r1.9 clext.c--- clext.c 4 Dec 2004 15:26:17 -0000 1.9+++ clext.c 25 Mar 2006 01:19:03 -0000@@ -238,6 +238,21 @@ 0xffff }; +/* 1600x1200x8 */+unsigned short cseq_1600x1200x8[] = {+0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,+0x760b,0x760c,0x760d,0x760e,+0x0412,0x0013,0x2017,+0x341b,0x341c,0x341d,0x341e,+0xffff+};+unsigned short ccrtc_1600x1200x8[] = {+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[] = {@@ -291,6 +306,10 @@ cseq_1280x1024x16,cgraph_svgacolor,ccrtc_1280x1024x16,16, 6,5,11,6,5,5,0,0,0}, + {0x7b,1600,1200,8,0x00,+ cseq_1600x1200x8,cgraph_svgacolor,ccrtc_1600x1200x8,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,Index: vgabios.c===================================================================RCS file: /sources/vgabios/vgabios/vgabios.c,vretrieving revision 1.63diff -u -w -r1.63 vgabios.c--- vgabios.c 26 Dec 2005 19:50:26 -0000 1.63+++ vgabios.c 25 Mar 2006 01:19:03 -0000@@ -111,6 +111,7 @@ static void biosfn_read_video_state_size(); static void biosfn_save_video_state(); static void biosfn_restore_video_state();+extern Bit8u video_save_pointer_table[]; // This is for compiling with gcc2 and gcc3 #define ASM_START #asm@@ -459,6 +460,29 @@ pop ds ret++_video_save_pointer_table:+ .word _video_param_table+ .word 0xc000++ .word 0 /* XXX: fill it */+ .word 0++ .word 0 /* XXX: fill it */+ .word 0++ .word 0 /* XXX: fill it */+ .word 0++ .word 0 /* XXX: fill it */+ .word 0++ .word 0 /* XXX: fill it */+ .word 0++ .word 0 /* XXX: fill it */+ .word 0+ ASM_END // --------------------------------------------------------------------------------------------@@ -780,8 +804,8 @@ // Should we clear the screen ? Bit8u noclearmem=mode&0x80;- Bit8u line,mmask,*palette;- Bit16u i,twidth,theight,cheight;+ Bit8u line,mmask,*palette,vpti;+ Bit16u i,twidth,theightm1,cheight; Bit8u modeset_ctl,video_ctl,vga_switches; Bit16u crtc_addr; @@ -804,9 +828,10 @@ if(line==0xFF) return; - twidth=vga_modes[line].twidth;- theight=vga_modes[line].theight;- cheight=vga_modes[line].cheight;+ vpti=line_to_vpti[line];+ twidth=video_param_table[vpti].twidth;+ theightm1=video_param_table[vpti].theightm1;+ cheight=video_param_table[vpti].cheight; // Read the bios vga control video_ctl=read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL);@@ -866,21 +891,25 @@ inb(VGAREG_ACTL_RESET); // Set Attribute Ctl- for(i=0;i<=ACTL_MAX_REG;i++)+ for(i=0;i<=0x13;i++) {outb(VGAREG_ACTL_ADDRESS,i);- outb(VGAREG_ACTL_WRITE_DATA,actl_regs[vga_modes[line].actlmodel][i]);+ outb(VGAREG_ACTL_WRITE_DATA,video_param_table[vpti].actl_regs[i]); }+ outb(VGAREG_ACTL_ADDRESS,0x14);+ outb(VGAREG_ACTL_WRITE_DATA,0x00); // Set Sequencer Ctl- for(i=0;i<=SEQU_MAX_REG;i++)+ outb(VGAREG_SEQU_ADDRESS,0);+ outb(VGAREG_SEQU_DATA,0x03);+ for(i=1;i<=4;i++) {outb(VGAREG_SEQU_ADDRESS,i);- outb(VGAREG_SEQU_DATA,sequ_regs[vga_modes[line].sequmodel][i]);+ outb(VGAREG_SEQU_DATA,video_param_table[vpti].sequ_regs[i - 1]); } // Set Grafx Ctl- for(i=0;i<=GRDC_MAX_REG;i++)+ for(i=0;i<=8;i++) {outb(VGAREG_GRDC_ADDRESS,i);- outb(VGAREG_GRDC_DATA,grdc_regs[vga_modes[line].grdcmodel][i]);+ outb(VGAREG_GRDC_DATA,video_param_table[vpti].grdc_regs[i]); } // Set CRTC address VGA or MDA @@ -889,13 +918,13 @@ // Disable CRTC write protection outw(crtc_addr,0x0011); // Set CRTC regs- for(i=0;i<=CRTC_MAX_REG;i++)+ for(i=0;i<=0x18;i++) {outb(crtc_addr,i);- outb(crtc_addr+1,crtc_regs[vga_modes[line].crtcmodel][i]);+ outb(crtc_addr+1,video_param_table[vpti].crtc_regs[i]); } // Set the misc register- outb(VGAREG_WRITE_MISC_OUTPUT,vga_modes[line].miscreg);+ outb(VGAREG_WRITE_MISC_OUTPUT,video_param_table[vpti].miscreg); // Enable video outb(VGAREG_ACTL_ADDRESS,0x20);@@ -927,9 +956,9 @@ // Set the BIOS mem write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE,mode); write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS,twidth);- write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE,vga_modes[line].slength);+ write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE,*(Bit16u *)&video_param_table[vpti].slength_l); write_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS,crtc_addr);- write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS,theight-1);+ write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS,theightm1); write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT,cheight); write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL,(0x60|noclearmem)); write_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES,0xF9);@@ -937,8 +966,8 @@ // FIXME We nearly have the good tables. to be reworked write_byte(BIOSMEM_SEG,BIOSMEM_DCC_INDEX,0x08); // 8 is VGA should be ok for now- write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER,0x00);- write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER+2,0x00);+ write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER, video_save_pointer_table);+ write_word(BIOSMEM_SEG,BIOSMEM_VS_POINTER+2, 0xc000); // FIXME write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MSR,0x00); // Unavailable on vanilla vga, but...@@ -1114,7 +1143,7 @@ } else {- address = page*vga_modes[line].slength;+ address = page * (*(Bit16u *)&video_param_table[line_to_vpti[line]].slength_l); } // CRTC regs 0x0c and 0x0d@@ -1271,7 +1300,7 @@ else { // FIXME gfx mode not complete- cheight=vga_modes[line].cheight;+ cheight=video_param_table[line_to_vpti[line]].cheight; switch(vga_modes[line].memmodel) { case PLANAR4:@@ -1581,7 +1610,7 @@ else { // FIXME gfx mode not complete- cheight=vga_modes[line].cheight;+ cheight=video_param_table[line_to_vpti[line]].cheight; bpp=vga_modes[line].pixbits; while((count-->0) && (xcurs<nbcols)) {@@ -1641,7 +1670,7 @@ else { // FIXME gfx mode not complete- cheight=vga_modes[line].cheight;+ cheight=video_param_table[line_to_vpti[line]].cheight; bpp=vga_modes[line].pixbits; while((count-->0) && (xcurs<nbcols)) {@@ -1949,7 +1978,7 @@ else { // FIXME gfx mode not complete- cheight=vga_modes[line].cheight;+ cheight=video_param_table[line_to_vpti[line]].cheight; bpp=vga_modes[line].pixbits; switch(vga_modes[line].memmodel) {Index: vgatables.h===================================================================RCS file: /sources/vgabios/vgabios/vgatables.h,vretrieving revision 1.9diff -u -w -r1.9 vgatables.h--- vgatables.h 21 Sep 2005 18:45:20 -0000 1.9+++ vgatables.h 25 Mar 2006 01:19:04 -0000@@ -77,7 +77,7 @@ * Tables of default values for each mode * */-#define MODE_MAX 0x14+#define MODE_MAX 15 #define TEXT 0x00 #define GRAPH 0x01 @@ -96,126 +96,38 @@ typedef struct {Bit8u svgamode;- Bit16u vesamode; Bit8u class; /* TEXT, GRAPH */ Bit8u memmodel; /* CTEXT,MTEXT,CGA,PL1,PL2,PL4,P8,P15,P16,P24,P32 */- Bit8u nbpages; Bit8u pixbits;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -