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 | 1 | Index: rombios.c |
| 2 | 2 | =================================================================== |
| 3 | 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 | 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 | 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 | + ;; | ... | ... |