diff options
author | bellard | 2004-05-23 18:28:35 +0200 |
---|---|---|
committer | bellard | 2004-05-23 18:28:35 +0200 |
commit | e58a7c24acc72b57ae87101b936924d7d61dfe91 (patch) | |
tree | 6806b82818ed49044bf9c58a5ec48aaba33279a6 /pc-bios/bios.diff | |
parent | fixed 2.88 MB boot (aka FreeBSD 5.2.1 boot fix) (diff) | |
download | qemu-e58a7c24acc72b57ae87101b936924d7d61dfe91.tar.gz qemu-e58a7c24acc72b57ae87101b936924d7d61dfe91.tar.xz qemu-e58a7c24acc72b57ae87101b936924d7d61dfe91.zip |
int13 cdrom 32 bit register update fix (aka FreeBSD CDROM boot)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@850 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'pc-bios/bios.diff')
-rw-r--r-- | pc-bios/bios.diff | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/pc-bios/bios.diff b/pc-bios/bios.diff index dee62e012a..24a22b9bf3 100644 --- a/pc-bios/bios.diff +++ b/pc-bios/bios.diff @@ -4,7 +4,7 @@ RCS file: /cvsroot/bochs/bochs/bios/rombios.c,v retrieving revision 1.108 diff -u -w -r1.108 rombios.c --- rombios.c 9 Feb 2004 16:48:50 -0000 1.108 -+++ rombios.c 22 May 2004 15:47:51 -0000 ++++ rombios.c 23 May 2004 15:48:52 -0000 @@ -2254,6 +2254,7 @@ type = read_byte(get_SS(),buffer+1) & 0x1f; removable = (read_byte(get_SS(),buffer+0) & 0x80) ? 1 : 0; @@ -58,7 +58,35 @@ diff -u -w -r1.108 rombios.c } package_count = mouse_flags_2 & 0x07; -@@ -8401,57 +8416,69 @@ +@@ -4833,8 +4848,10 @@ + // --------------------------------------------------------------------------- + + void +-int13_cdrom(DI, SI, BP, SP, BX, DX, CX, AX, DS, ES, FLAGS) +- Bit16u DI, SI, BP, SP, BX, DX, CX, AX, DS, ES, FLAGS; ++int13_cdrom(DI, DIH, SI, SIH, BP, BPH, SP, SPH, BX, BXH, DX, DXH, CX, CXH, AX, AXH, ++ DS, ES, FLAGS) ++ Bit16u DI, DIH, SI, SIH, BP, BPH, SP, SPH, BX, BXH, DX, DXH, CX, CXH, AX, AXH, ++ DS, ES, FLAGS; + { + Bit16u ebda_seg=read_word(0x0040,0x000E); + Bit8u device, status, locks; +@@ -7692,9 +7709,12 @@ + push ds + push ss + pop ds +- pusha ++ // ebx is modified: BSD 5.2.1 boot loader problem, so we save all ++ // the 32 bit registers. It should be done in all the bios or no 32 ++ // bit register should be used without saving it first. ++ pushad + call _int13_cdrom +- popa ++ popad + pop ds + pop es + popf +@@ -8401,57 +8421,69 @@ cmp al, #0x08 jne pci_pro_f09 call pci_pro_select_reg @@ -128,7 +156,7 @@ diff -u -w -r1.108 rombios.c jmp pci_pro_ok pci_pro_unknown: mov ah, #0x81 -@@ -8468,6 +8495,7 @@ +@@ -8468,6 +8500,7 @@ retf pci_pro_select_reg: @@ -136,7 +164,7 @@ diff -u -w -r1.108 rombios.c mov eax, #0x800000 mov ax, bx shl eax, #8 -@@ -8476,6 +8504,7 @@ +@@ -8476,6 +8509,7 @@ and al, #0xfc mov dx, #0x0cf8 out dx, eax @@ -144,7 +172,7 @@ diff -u -w -r1.108 rombios.c ret use16 386 -@@ -8536,57 +8565,69 @@ +@@ -8536,57 +8570,69 @@ cmp al, #0x08 jne pci_real_f09 call pci_real_select_reg @@ -214,7 +242,7 @@ diff -u -w -r1.108 rombios.c jmp pci_real_ok pci_real_unknown: mov ah, #0x81 -@@ -8599,6 +8640,7 @@ +@@ -8599,6 +8645,7 @@ ret pci_real_select_reg: @@ -222,7 +250,7 @@ diff -u -w -r1.108 rombios.c mov eax, #0x800000 mov ax, bx shl eax, #8 -@@ -8607,6 +8649,7 @@ +@@ -8607,6 +8654,7 @@ and al, #0xfc mov dx, #0x0cf8 out dx, eax |