Commit 678f2df60fefdf75a880a606fb66d0238ecefbc2
1 parent
9e57f14d
update
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@943 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
92 additions
and
248 deletions
pc-bios/bios.diff
| 1 | Index: rombios.c | 1 | Index: rombios.c |
| 2 | =================================================================== | 2 | =================================================================== |
| 3 | RCS file: /cvsroot/bochs/bochs/bios/rombios.c,v | 3 | RCS file: /cvsroot/bochs/bochs/bios/rombios.c,v |
| 4 | -retrieving revision 1.108 | ||
| 5 | -diff -u -w -r1.108 rombios.c | ||
| 6 | ---- rombios.c 9 Feb 2004 16:48:50 -0000 1.108 | ||
| 7 | -+++ rombios.c 23 May 2004 15:48:52 -0000 | ||
| 8 | -@@ -2254,6 +2254,7 @@ | ||
| 9 | - type = read_byte(get_SS(),buffer+1) & 0x1f; | ||
| 10 | - removable = (read_byte(get_SS(),buffer+0) & 0x80) ? 1 : 0; | ||
| 11 | - mode = read_byte(get_SS(),buffer+96) ? ATA_MODE_PIO32 : ATA_MODE_PIO16; | ||
| 12 | -+ blksize = 2048; | 4 | +retrieving revision 1.110 |
| 5 | +diff -u -w -r1.110 rombios.c | ||
| 6 | +--- rombios.c 31 May 2004 13:11:27 -0000 1.110 | ||
| 7 | ++++ rombios.c 20 Jun 2004 13:10:07 -0000 | ||
| 8 | +@@ -137,6 +137,7 @@ | ||
| 9 | + #define DEBUG_INT16 0 | ||
| 10 | + #define DEBUG_INT1A 0 | ||
| 11 | + #define DEBUG_INT74 0 | ||
| 12 | ++#define DEBUG_APM 0 | ||
| 13 | 13 | ||
| 14 | - write_byte(ebda_seg,&EbdaData->ata.devices[device].device, type); | ||
| 15 | - write_byte(ebda_seg,&EbdaData->ata.devices[device].removable, removable); | ||
| 16 | -@@ -3378,6 +3379,8 @@ | ||
| 17 | - and al,#0x10 | ||
| 18 | - mov ah, al | 14 | + #define BX_CPU 3 |
| 15 | + #define BX_USE_PS2_MOUSE 1 | ||
| 16 | +@@ -145,6 +146,7 @@ | ||
| 17 | + #define BX_SUPPORT_FLOPPY 1 | ||
| 18 | + #define BX_FLOPPY_ON_CNT 37 // 2 seconds | ||
| 19 | + #define BX_PCIBIOS 1 | ||
| 20 | ++#define BX_APM 1 | ||
| 19 | 21 | ||
| 20 | -+ or ecx, ecx | ||
| 21 | -+ je int1586_tick_end | ||
| 22 | - int1586_tick: | ||
| 23 | - in al, #0x61 | ||
| 24 | - and al,#0x10 | ||
| 25 | -@@ -3386,6 +3389,7 @@ | ||
| 26 | - mov ah, al | ||
| 27 | - dec ecx | ||
| 28 | - jnz int1586_tick | ||
| 29 | -+int1586_tick_end: | ||
| 30 | - ASM_END | ||
| 31 | - | ||
| 32 | - break; | ||
| 33 | -@@ -3781,7 +3785,17 @@ | ||
| 34 | - write_word(ebda_seg, 0x0022, mouse_driver_offset); | ||
| 35 | - write_word(ebda_seg, 0x0024, mouse_driver_seg); | ||
| 36 | - mouse_flags_2 = read_byte(ebda_seg, 0x0027); | ||
| 37 | -+ if (mouse_driver_offset == 0 && | ||
| 38 | -+ mouse_driver_seg == 0) { | ||
| 39 | -+ /* remove handler */ | ||
| 40 | -+ if ( (mouse_flags_2 & 0x80) != 0 ) { | ||
| 41 | -+ mouse_flags_2 &= ~0x80; | ||
| 42 | -+ inhibit_mouse_int_and_events(); // disable IRQ12 and packets | ||
| 43 | -+ } | ||
| 44 | -+ } else { | ||
| 45 | -+ /* install handler */ | ||
| 46 | - mouse_flags_2 |= 0x80; | ||
| 47 | -+ } | ||
| 48 | - write_byte(ebda_seg, 0x0027, mouse_flags_2); | ||
| 49 | - CLEAR_CF(); | ||
| 50 | - regs.u.r8.ah = 0; | ||
| 51 | -@@ -4409,7 +4423,8 @@ | ||
| 52 | - mouse_flags_2 = read_byte(ebda_seg, 0x0027); | 22 | + #define BX_USE_ATADRV 1 |
| 23 | + #define BX_ELTORITO_BOOT 1 | ||
| 24 | +@@ -230,17 +232,6 @@ | ||
| 25 | + out dx,ax | ||
| 26 | + MEND | ||
| 53 | 27 | ||
| 54 | - if ( (mouse_flags_2 & 0x80) != 0x80 ) { | ||
| 55 | -- BX_PANIC("int74_function:\n"); | ||
| 56 | -+ // BX_PANIC("int74_function:\n"); | ||
| 57 | -+ return; | 28 | +-MACRO HALT2 |
| 29 | +- ;; the HALT macro is called with the line number of the HALT call. | ||
| 30 | +- ;; The line number is then sent to the PANIC_PORT, causing Bochs/Plex | ||
| 31 | +- ;; to print a BX_PANIC message. This will normally halt the simulation | ||
| 32 | +- ;; with a message such as "BIOS panic at rombios.c, line 4091". | ||
| 33 | +- ;; However, users can choose to make panics non-fatal and continue. | ||
| 34 | +- mov dx,#PANIC_PORT2 | ||
| 35 | +- mov ax,#?1 | ||
| 36 | +- out dx,ax | ||
| 37 | +-MEND | ||
| 38 | +- | ||
| 39 | + MACRO JMP_AP | ||
| 40 | + db 0xea | ||
| 41 | + dw ?2 | ||
| 42 | +@@ -1543,15 +1534,12 @@ | ||
| 58 | } | 43 | } |
| 59 | 44 | ||
| 60 | - package_count = mouse_flags_2 & 0x07; | ||
| 61 | -@@ -4833,8 +4848,10 @@ | ||
| 62 | - // --------------------------------------------------------------------------- | 45 | + if (action & BIOS_PRINTF_HALT) { |
| 46 | +- // freeze in a busy loop. If I do a HLT instruction, then in versions | ||
| 47 | +- // 1.3.pre1 and earlier, it will panic without ever updating the VGA | ||
| 48 | +- // display, so the panic message will not be visible. By waiting | ||
| 49 | +- // forever, you are certain to see the panic message on screen. | ||
| 50 | +- // After a few more versions have passed, we can turn this back into | ||
| 51 | +- // a halt or something. | ||
| 52 | +- // do {} while (1); | ||
| 53 | ++ // freeze in a busy loop. | ||
| 54 | + ASM_START | ||
| 55 | +- HALT2(__LINE__) | ||
| 56 | ++ cli | ||
| 57 | ++ halt2_loop: | ||
| 58 | ++ hlt | ||
| 59 | ++ jmp halt2_loop | ||
| 60 | + ASM_END | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | +@@ -8344,6 +8332,19 @@ | ||
| 64 | + pop ax | ||
| 65 | + iret | ||
| 63 | 66 | ||
| 64 | - void | ||
| 65 | --int13_cdrom(DI, SI, BP, SP, BX, DX, CX, AX, DS, ES, FLAGS) | ||
| 66 | -- Bit16u DI, SI, BP, SP, BX, DX, CX, AX, DS, ES, FLAGS; | ||
| 67 | -+int13_cdrom(DI, DIH, SI, SIH, BP, BPH, SP, SPH, BX, BXH, DX, DXH, CX, CXH, AX, AXH, | ||
| 68 | -+ DS, ES, FLAGS) | ||
| 69 | -+ Bit16u DI, DIH, SI, SIH, BP, BPH, SP, SPH, BX, BXH, DX, DXH, CX, CXH, AX, AXH, | ||
| 70 | -+ DS, ES, FLAGS; | ||
| 71 | - { | ||
| 72 | - Bit16u ebda_seg=read_word(0x0040,0x000E); | ||
| 73 | - Bit8u device, status, locks; | ||
| 74 | -@@ -7692,9 +7709,12 @@ | 67 | ++ |
| 68 | ++;-------------------- | ||
| 69 | ++#if BX_APM | ||
| 70 | ++use32 386 | ||
| 71 | ++#define APM_PROT32 | ||
| 72 | ++#include "apmbios.S" | ||
| 73 | ++use16 386 | ||
| 74 | ++ | ||
| 75 | ++#define APM_REAL | ||
| 76 | ++#include "apmbios.S" | ||
| 77 | ++ | ||
| 78 | ++#endif | ||
| 79 | ++ | ||
| 80 | + ;-------------------- | ||
| 81 | + #if BX_PCIBIOS | ||
| 82 | + use32 386 | ||
| 83 | +@@ -9560,6 +9561,10 @@ | ||
| 84 | + .org 0xf859 ; INT 15h System Services Entry Point | ||
| 85 | + int15_handler: | ||
| 86 | + pushf | ||
| 87 | ++#if BX_APM | ||
| 88 | ++ cmp ah, #0x53 | ||
| 89 | ++ je apm_call | ||
| 90 | ++#endif | ||
| 75 | push ds | 91 | push ds |
| 76 | - push ss | ||
| 77 | - pop ds | ||
| 78 | -- pusha | ||
| 79 | -+ // ebx is modified: BSD 5.2.1 boot loader problem, so we save all | ||
| 80 | -+ // the 32 bit registers. It should be done in all the bios or no 32 | ||
| 81 | -+ // bit register should be used without saving it first. | ||
| 82 | -+ pushad | ||
| 83 | - call _int13_cdrom | ||
| 84 | -- popa | ||
| 85 | -+ popad | ||
| 86 | - pop ds | ||
| 87 | - pop es | 92 | + push es |
| 93 | + pushad | ||
| 94 | +@@ -9570,6 +9575,10 @@ | ||
| 88 | popf | 95 | popf |
| 89 | -@@ -8401,57 +8421,69 @@ | ||
| 90 | - cmp al, #0x08 | ||
| 91 | - jne pci_pro_f09 | ||
| 92 | - call pci_pro_select_reg | ||
| 93 | -+ push edx | ||
| 94 | - mov dx, di | ||
| 95 | - and dx, #0x03 | ||
| 96 | - add dx, #0x0cfc | ||
| 97 | - in al, dx | ||
| 98 | -+ pop edx | ||
| 99 | - mov cl, al | ||
| 100 | - jmp pci_pro_ok | ||
| 101 | - pci_pro_f09: ;; read configuration word | ||
| 102 | - cmp al, #0x09 | ||
| 103 | - jne pci_pro_f0a | ||
| 104 | - call pci_pro_select_reg | ||
| 105 | -+ push edx | ||
| 106 | - mov dx, di | ||
| 107 | - and dx, #0x02 | ||
| 108 | - add dx, #0x0cfc | ||
| 109 | - in ax, dx | ||
| 110 | -+ pop edx | ||
| 111 | - mov cx, ax | ||
| 112 | - jmp pci_pro_ok | ||
| 113 | - pci_pro_f0a: ;; read configuration dword | ||
| 114 | - cmp al, #0x0a | ||
| 115 | - jne pci_pro_f0b | ||
| 116 | - call pci_pro_select_reg | ||
| 117 | -+ push edx | ||
| 118 | - mov dx, #0x0cfc | ||
| 119 | - in eax, dx | ||
| 120 | -+ pop edx | ||
| 121 | - mov ecx, eax | ||
| 122 | - jmp pci_pro_ok | ||
| 123 | - pci_pro_f0b: ;; write configuration byte | ||
| 124 | - cmp al, #0x0b | ||
| 125 | - jne pci_pro_f0c | ||
| 126 | - call pci_pro_select_reg | ||
| 127 | -+ push edx | ||
| 128 | - mov dx, di | ||
| 129 | - and dx, #0x03 | ||
| 130 | - add dx, #0x0cfc | ||
| 131 | - mov al, cl | ||
| 132 | - out dx, al | ||
| 133 | -+ pop edx | ||
| 134 | - jmp pci_pro_ok | ||
| 135 | - pci_pro_f0c: ;; write configuration word | ||
| 136 | - cmp al, #0x0c | ||
| 137 | - jne pci_pro_f0d | ||
| 138 | - call pci_pro_select_reg | ||
| 139 | -+ push edx | ||
| 140 | - mov dx, di | ||
| 141 | - and dx, #0x02 | ||
| 142 | - add dx, #0x0cfc | ||
| 143 | - mov ax, cx | ||
| 144 | - out dx, ax | ||
| 145 | -+ pop edx | ||
| 146 | - jmp pci_pro_ok | ||
| 147 | - pci_pro_f0d: ;; write configuration dword | ||
| 148 | - cmp al, #0x0d | ||
| 149 | - jne pci_pro_unknown | ||
| 150 | - call pci_pro_select_reg | ||
| 151 | -+ push edx | ||
| 152 | - mov dx, #0x0cfc | ||
| 153 | - mov eax, ecx | ||
| 154 | - out dx, eax | ||
| 155 | -+ pop edx | ||
| 156 | - jmp pci_pro_ok | ||
| 157 | - pci_pro_unknown: | ||
| 158 | - mov ah, #0x81 | ||
| 159 | -@@ -8468,6 +8500,7 @@ | ||
| 160 | - retf | ||
| 161 | - | ||
| 162 | - pci_pro_select_reg: | ||
| 163 | -+ push edx | ||
| 164 | - mov eax, #0x800000 | ||
| 165 | - mov ax, bx | ||
| 166 | - shl eax, #8 | ||
| 167 | -@@ -8476,6 +8509,7 @@ | ||
| 168 | - and al, #0xfc | ||
| 169 | - mov dx, #0x0cf8 | ||
| 170 | - out dx, eax | ||
| 171 | -+ pop edx | ||
| 172 | - ret | ||
| 173 | - | ||
| 174 | - use16 386 | ||
| 175 | -@@ -8536,57 +8570,69 @@ | ||
| 176 | - cmp al, #0x08 | ||
| 177 | - jne pci_real_f09 | ||
| 178 | - call pci_real_select_reg | ||
| 179 | -+ push dx | ||
| 180 | - mov dx, di | ||
| 181 | - and dx, #0x03 | ||
| 182 | - add dx, #0x0cfc | ||
| 183 | - in al, dx | ||
| 184 | -+ pop dx | ||
| 185 | - mov cl, al | ||
| 186 | - jmp pci_real_ok | ||
| 187 | - pci_real_f09: ;; read configuration word | ||
| 188 | - cmp al, #0x09 | ||
| 189 | - jne pci_real_f0a | ||
| 190 | - call pci_real_select_reg | ||
| 191 | -+ push dx | ||
| 192 | - mov dx, di | ||
| 193 | - and dx, #0x02 | ||
| 194 | - add dx, #0x0cfc | ||
| 195 | - in ax, dx | ||
| 196 | -+ pop dx | ||
| 197 | - mov cx, ax | ||
| 198 | - jmp pci_real_ok | ||
| 199 | - pci_real_f0a: ;; read configuration dword | ||
| 200 | - cmp al, #0x0a | ||
| 201 | - jne pci_real_f0b | ||
| 202 | - call pci_real_select_reg | ||
| 203 | -+ push dx | ||
| 204 | - mov dx, #0x0cfc | ||
| 205 | - in eax, dx | ||
| 206 | -+ pop dx | ||
| 207 | - mov ecx, eax | ||
| 208 | - jmp pci_real_ok | ||
| 209 | - pci_real_f0b: ;; write configuration byte | ||
| 210 | - cmp al, #0x0b | ||
| 211 | - jne pci_real_f0c | ||
| 212 | - call pci_real_select_reg | ||
| 213 | -+ push dx | ||
| 214 | - mov dx, di | ||
| 215 | - and dx, #0x03 | ||
| 216 | - add dx, #0x0cfc | ||
| 217 | - mov al, cl | ||
| 218 | - out dx, al | ||
| 219 | -+ pop dx | ||
| 220 | - jmp pci_real_ok | ||
| 221 | - pci_real_f0c: ;; write configuration word | ||
| 222 | - cmp al, #0x0c | ||
| 223 | - jne pci_real_f0d | ||
| 224 | - call pci_real_select_reg | ||
| 225 | -+ push dx | ||
| 226 | - mov dx, di | ||
| 227 | - and dx, #0x02 | ||
| 228 | - add dx, #0x0cfc | ||
| 229 | - mov ax, cx | ||
| 230 | - out dx, ax | ||
| 231 | -+ pop dx | ||
| 232 | - jmp pci_real_ok | ||
| 233 | - pci_real_f0d: ;; write configuration dword | ||
| 234 | - cmp al, #0x0d | ||
| 235 | - jne pci_real_unknown | ||
| 236 | - call pci_real_select_reg | ||
| 237 | -+ push dx | ||
| 238 | - mov dx, #0x0cfc | ||
| 239 | - mov eax, ecx | ||
| 240 | - out dx, eax | ||
| 241 | -+ pop dx | ||
| 242 | - jmp pci_real_ok | ||
| 243 | - pci_real_unknown: | ||
| 244 | - mov ah, #0x81 | ||
| 245 | -@@ -8599,6 +8645,7 @@ | ||
| 246 | - ret | 96 | + //JMPL(iret_modify_cf) |
| 97 | + jmp iret_modify_cf | ||
| 98 | ++#if BX_APM | ||
| 99 | ++apm_call: | ||
| 100 | ++ jmp _apmreal_entry | ||
| 101 | ++#endif | ||
| 247 | 102 | ||
| 248 | - pci_real_select_reg: | ||
| 249 | -+ push dx | ||
| 250 | - mov eax, #0x800000 | ||
| 251 | - mov ax, bx | ||
| 252 | - shl eax, #8 | ||
| 253 | -@@ -8607,6 +8654,7 @@ | ||
| 254 | - and al, #0xfc | ||
| 255 | - mov dx, #0x0cf8 | ||
| 256 | - out dx, eax | ||
| 257 | -+ pop dx | ||
| 258 | - ret | ||
| 259 | - | ||
| 260 | - .align 16 | 103 | + ;; Protected mode IDT descriptor |
| 104 | + ;; |