⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vgabios.diff

📁 xen虚拟机源代码安装包
💻 DIFF
📖 第 1 页 / 共 2 页
字号:
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	14 Jun 2006 00:51:06 -0000@@ -22,7 +22,7 @@ cirrus-bios: vgabios-cirrus.bin vgabios-cirrus.debug.bin  clean:-	/bin/rm -f  biossums *.o *.s *.ld86 \+	/bin/rm -f  biossums vbetables-gen vbetables.h *.o *.s *.ld86 \           temp.awk.* vgabios*.orig _vgabios_* _vgabios-debug_* core vgabios*.bin vgabios*.txt $(RELEASE).bin *.bak  dist-clean: clean@@ -79,3 +79,9 @@  biossums: biossums.c 	$(CC) -o biossums biossums.c++vbetables-gen: vbetables-gen.c+	$(CC) -o vbetables-gen vbetables-gen.c++vbetables.h: vbetables-gen+	./vbetables-gen > $@Index: clext.c===================================================================RCS file: /sources/vgabios/vgabios/clext.c,vretrieving revision 1.10diff -u -w -r1.10 clext.c--- clext.c	25 Mar 2006 10:19:15 -0000	1.10+++ clext.c	14 Jun 2006 00:51:06 -0000@@ -544,6 +544,13 @@ cirrus_set_video_mode_extended:   call cirrus_switch_mode   pop ax ;; mode+  test al, #0x80+  jnz cirrus_set_video_mode_extended_1+  push ax+  mov ax, #0xffff ; set to 0xff to keep win 2K happy+  call cirrus_clear_vram+  pop ax+cirrus_set_video_mode_extended_1:   and al, #0x7f    push ds@@ -1011,6 +1018,13 @@   jnz cirrus_vesa_02h_3   call cirrus_enable_16k_granularity cirrus_vesa_02h_3:+  test bx, #0x8000 ;; no clear+  jnz cirrus_vesa_02h_4+  push ax+  xor ax,ax+  call cirrus_clear_vram+  pop ax+cirrus_vesa_02h_4:   pop ax   push ds #ifdef CIRRUS_VESA3_PMINFO@@ -1479,6 +1493,38 @@   pop  bx   ret +cirrus_clear_vram:+  pusha+  push es+  mov si, ax++  call cirrus_enable_16k_granularity+  call cirrus_extbios_85h+  shl al, #2+  mov bl, al+  xor ah,ah+cirrus_clear_vram_1:+  mov al, #0x09+  mov dx, #0x3ce+  out dx, ax+  push ax+  mov cx, #0xa000+  mov es, cx+  xor di, di+  mov ax, si+  mov cx, #8192+  cld+  rep +      stosw+  pop ax+  inc ah+  cmp ah, bl+  jne cirrus_clear_vram_1++  pop es+  popa+  ret+ cirrus_extbios_handlers:   ;; 80h   dw cirrus_extbios_80hIndex: vbe.c===================================================================RCS file: /sources/vgabios/vgabios/vbe.c,vretrieving revision 1.48diff -u -w -r1.48 vbe.c--- vbe.c	26 Dec 2005 19:50:26 -0000	1.48+++ vbe.c	14 Jun 2006 00:51:07 -0000@@ -118,21 +118,114 @@ .word VBE_VESA_MODE_END_OF_LIST #endif +  .align 2 vesa_pm_start:   dw vesa_pm_set_window - vesa_pm_start-  dw vesa_pm_set_display_strt - vesa_pm_start+  dw vesa_pm_set_display_start - vesa_pm_start   dw vesa_pm_unimplemented - vesa_pm_start-  dw 0+  dw vesa_pm_io_ports_table - vesa_pm_start+vesa_pm_io_ports_table:+  dw VBE_DISPI_IOPORT_INDEX+  dw VBE_DISPI_IOPORT_INDEX + 1+  dw VBE_DISPI_IOPORT_DATA+  dw VBE_DISPI_IOPORT_DATA + 1+  dw 0xffff+  dw 0xffff    USE32 vesa_pm_set_window:-  mov ax, #0x4f05-  int #0x10+  cmp  bx, #0x00+  je  vesa_pm_set_display_window1+  mov  ax, #0x0100+  ret+vesa_pm_set_display_window1:+  mov  ax, dx+  push dx+  push ax+  mov  dx, # VBE_DISPI_IOPORT_INDEX+  mov  ax, # VBE_DISPI_INDEX_BANK+  out  dx, ax+  pop  ax+  mov  dx, # VBE_DISPI_IOPORT_DATA+  out  dx, ax+  pop  dx+  mov  ax, #0x004f   ret  vesa_pm_set_display_start:-  mov ax, #0x4f07-  int #0x10+  cmp  bl, #0x80+  je   vesa_pm_set_display_start1+  cmp  bl, #0x00+  je   vesa_pm_set_display_start1+  mov  ax, #0x0100+  ret+vesa_pm_set_display_start1:+; convert offset to (X, Y) coordinate +; (would be simpler to change Bochs VBE API...)+  push eax+  push ecx+  push edx+  push esi+  push edi+  shl edx, #16+  and ecx, #0xffff+  or ecx, edx+  shl ecx, #2+  mov eax, ecx++  push eax+  mov  dx, # VBE_DISPI_IOPORT_INDEX+  mov  ax, # VBE_DISPI_INDEX_VIRT_WIDTH+  out  dx, ax+  mov  dx, # VBE_DISPI_IOPORT_DATA+  in   ax, dx+  movzx ecx, ax++  mov  dx, # VBE_DISPI_IOPORT_INDEX+  mov  ax, # VBE_DISPI_INDEX_BPP+  out  dx, ax+  mov  dx, # VBE_DISPI_IOPORT_DATA+  in   ax, dx+  movzx esi, ax+  pop  eax++  add esi, #7+  shr esi, #3+  imul ecx, esi+  xor edx, edx+  div ecx+  mov edi, eax+  mov eax, edx+  xor edx, edx+  div esi++  push dx+  push ax+  mov  dx, # VBE_DISPI_IOPORT_INDEX+  mov  ax, # VBE_DISPI_INDEX_X_OFFSET+  out  dx, ax+  pop  ax+  mov  dx, # VBE_DISPI_IOPORT_DATA+  out  dx, ax+  pop  dx++  mov  ax, di+  push dx+  push ax+  mov  dx, # VBE_DISPI_IOPORT_INDEX+  mov  ax, # VBE_DISPI_INDEX_Y_OFFSET+  out  dx, ax+  pop  ax+  mov  dx, # VBE_DISPI_IOPORT_DATA+  out  dx, ax+  pop  dx++  pop edi+  pop esi+  pop edx+  pop ecx+  pop eax+  mov  ax, #0x004f   ret  vesa_pm_unimplemented:@@ -835,6 +928,64 @@ ASM_END  +Bit16u vbe_biosfn_read_video_state_size()+{+    return 9 * 2;+}++void vbe_biosfn_save_video_state(ES, BX)+     Bit16u ES; Bit16u BX;+{+    Bit16u enable, i;++    outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);+    enable = inw(VBE_DISPI_IOPORT_DATA);+    write_word(ES, BX, enable);+    BX += 2;+    if (!(enable & VBE_DISPI_ENABLED)) +        return;+    for(i = VBE_DISPI_INDEX_XRES; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {+        if (i != VBE_DISPI_INDEX_ENABLE) {+            outw(VBE_DISPI_IOPORT_INDEX, i);+            write_word(ES, BX, inw(VBE_DISPI_IOPORT_DATA));+            BX += 2;+        }+    }+}+++void vbe_biosfn_restore_video_state(ES, BX)+     Bit16u ES; Bit16u BX;+{+    Bit16u enable, i;++    enable = read_word(ES, BX);+    BX += 2;+    +    if (!(enable & VBE_DISPI_ENABLED)) {+        outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);+        outw(VBE_DISPI_IOPORT_DATA, enable);+    } else {+        outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_XRES);+        outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));+        BX += 2;+        outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_YRES);+        outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));+        BX += 2;+        outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_BPP);+        outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));+        BX += 2;+        outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);+        outw(VBE_DISPI_IOPORT_DATA, enable);++        for(i = VBE_DISPI_INDEX_BANK; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {+            outw(VBE_DISPI_IOPORT_INDEX, i);+            outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));+            BX += 2;+        }+    }+}+ /** Function 04h - Save/Restore State  *   * Input:@@ -849,10 +1000,48 @@  *              BX      = Number of 64-byte blocks to hold the state buffer (if DL=00h)  *   */-void vbe_biosfn_save_restore_state(AX, DL, CX, ES, BX)+void vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX)+Bit16u *AX; Bit16u CX; Bit16u DX; Bit16u ES; Bit16u *BX; {-}+    Bit16u ss=get_SS();+    Bit16u result, val; +    result = 0x4f;+    switch(GET_DL()) {+    case 0x00:+        val = biosfn_read_video_state_size2(CX);+#ifdef DEBUG+        printf("VGA state size=%x\n", val);+#endif+        if (CX & 8)+            val += vbe_biosfn_read_video_state_size();+        write_word(ss, BX, val);+        break;+    case 0x01:+        val = read_word(ss, BX);+        val = biosfn_save_video_state(CX, ES, val);+#ifdef DEBUG+        printf("VGA save_state offset=%x\n", val);+#endif+        if (CX & 8)+            vbe_biosfn_save_video_state(ES, val);+        break;+    case 0x02:+        val = read_word(ss, BX);+        val = biosfn_restore_video_state(CX, ES, val);+#ifdef DEBUG+        printf("VGA restore_state offset=%x\n", val);+#endif+        if (CX & 8)+            vbe_biosfn_restore_video_state(ES, val);+        break;+    default:+        // function failed+        result = 0x100;+        break;+    }+    write_word(ss, AX, result);+}  /** Function 05h - Display Window Control  * @@ -1090,7 +1279,7 @@  */ ASM_START vbe_biosfn_return_protected_mode_interface:-  test bx, bx+  test bl, bl   jnz _fail   mov di, #0xc000   mov es, diIndex: vbe.h===================================================================RCS file: /sources/vgabios/vgabios/vbe.h,vretrieving revision 1.24diff -u -w -r1.24 vbe.h--- vbe.h	9 May 2004 20:31:31 -0000	1.24+++ vbe.h	14 Jun 2006 00:51:07 -0000@@ -14,7 +14,7 @@ void vbe_biosfn_return_controller_information(AX, ES, DI); void vbe_biosfn_return_mode_information(AX, CX, ES, DI); void vbe_biosfn_set_mode(AX, BX, ES, DI);-void vbe_biosfn_save_restore_state(AX, DL, CX, ES, BX); +void vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX); void vbe_biosfn_set_get_palette_data(AX); void vbe_biosfn_return_protected_mode_interface(AX); @@ -151,6 +151,12 @@    Bit8u  Reserved[189]; } ModeInfoBlock; +typedef struct ModeInfoListItem+{+        Bit16u                  mode;+        ModeInfoBlockCompact    info;+} ModeInfoListItem;+ // VBE Return Status Info // AL #define VBE_RETURN_STATUS_SUPPORTED                      0x4F@@ -193,6 +199,10 @@ #define VBE_VESA_MODE_1280X1024X1555                     0x119 #define VBE_VESA_MODE_1280X1024X565                      0x11A #define VBE_VESA_MODE_1280X1024X888                      0x11B+#define VBE_VESA_MODE_1600X1200X8                        0x11C+#define VBE_VESA_MODE_1600X1200X1555                     0x11D+#define VBE_VESA_MODE_1600X1200X565                      0x11E+#define VBE_VESA_MODE_1600X1200X888                      0x11F  // BOCHS/PLEX86 'own' mode numbers #define VBE_OWN_MODE_320X200X8888                        0x140@@ -202,6 +212,12 @@ #define VBE_OWN_MODE_1024X768X8888                       0x144 #define VBE_OWN_MODE_1280X1024X8888                      0x145 #define VBE_OWN_MODE_320X200X8                           0x146+#define VBE_OWN_MODE_1600X1200X8888                      0x147+#define VBE_OWN_MODE_1152X864X8                          0x148+#define VBE_OWN_MODE_1152X864X1555                       0x149+#define VBE_OWN_MODE_1152X864X565                        0x14a+#define VBE_OWN_MODE_1152X864X888                        0x14b+#define VBE_OWN_MODE_1152X864X8888                       0x14c  #define VBE_VESA_MODE_END_OF_LIST                        0xFFFF @@ -259,7 +275,7 @@ //        like 0xE0000000  -  #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 4+  #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8    #define VBE_DISPI_BANK_ADDRESS          0xA0000   #define VBE_DISPI_BANK_SIZE_KB          64Index: vgabios.c===================================================================RCS file: /sources/vgabios/vgabios/vgabios.c,vretrieving revision 1.64diff -u -w -r1.64 vgabios.c--- vgabios.c	25 Mar 2006 10:19:16 -0000	1.64+++ vgabios.c	14 Jun 2006 00:51:07 -0000@@ -109,8 +109,8 @@ static void biosfn_write_string(); static void biosfn_read_state_info(); static void biosfn_read_video_state_size();-static void biosfn_save_video_state();-static void biosfn_restore_video_state();+static Bit16u biosfn_save_video_state();+static Bit16u biosfn_restore_video_state(); extern Bit8u video_save_pointer_table[];  // This is for compiling with gcc2 and gcc3@@ -748,12 +748,7 @@           vbe_biosfn_set_mode(&AX,BX,ES,DI);           break;          case 0x04:-          //FIXME-#ifdef DEBUG-          unimplemented();-#endif-          // function failed-          AX=0x100;+          vbe_biosfn_save_restore_state(&AX, CX, DX, ES, &BX);           break;          case 0x09:           //FIXME@@ -3138,23 +3133,215 @@ }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -