Index: rombios.c =================================================================== 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 @@ -2254,6 +2254,7 @@ type = read_byte(get_SS(),buffer+1) & 0x1f; removable = (read_byte(get_SS(),buffer+0) & 0x80) ? 1 : 0; mode = read_byte(get_SS(),buffer+96) ? ATA_MODE_PIO32 : ATA_MODE_PIO16; + blksize = 2048; write_byte(ebda_seg,&EbdaData->ata.devices[device].device, type); write_byte(ebda_seg,&EbdaData->ata.devices[device].removable, removable); @@ -3378,6 +3379,8 @@ and al,#0x10 mov ah, al + or ecx, ecx + je int1586_tick_end int1586_tick: in al, #0x61 and al,#0x10 @@ -3386,6 +3389,7 @@ mov ah, al dec ecx jnz int1586_tick +int1586_tick_end: ASM_END break; @@ -3781,7 +3785,17 @@ write_word(ebda_seg, 0x0022, mouse_driver_offset); write_word(ebda_seg, 0x0024, mouse_driver_seg); mouse_flags_2 = read_byte(ebda_seg, 0x0027); + if (mouse_driver_offset == 0 && + mouse_driver_seg == 0) { + /* remove handler */ + if ( (mouse_flags_2 & 0x80) != 0 ) { + mouse_flags_2 &= ~0x80; + inhibit_mouse_int_and_events(); // disable IRQ12 and packets + } + } else { + /* install handler */ mouse_flags_2 |= 0x80; + } write_byte(ebda_seg, 0x0027, mouse_flags_2); CLEAR_CF(); regs.u.r8.ah = 0; @@ -4409,7 +4423,8 @@ mouse_flags_2 = read_byte(ebda_seg, 0x0027); if ( (mouse_flags_2 & 0x80) != 0x80 ) { - BX_PANIC("int74_function:\n"); + // BX_PANIC("int74_function:\n"); + return; } package_count = mouse_flags_2 & 0x07; @@ -8401,57 +8416,69 @@ cmp al, #0x08 jne pci_pro_f09 call pci_pro_select_reg + push edx mov dx, di and dx, #0x03 add dx, #0x0cfc in al, dx + pop edx mov cl, al jmp pci_pro_ok pci_pro_f09: ;; read configuration word cmp al, #0x09 jne pci_pro_f0a call pci_pro_select_reg + push edx mov dx, di and dx, #0x02 add dx, #0x0cfc in ax, dx + pop edx mov cx, ax jmp pci_pro_ok pci_pro_f0a: ;; read configuration dword cmp al, #0x0a jne pci_pro_f0b call pci_pro_select_reg + push edx mov dx, #0x0cfc in eax, dx + pop edx mov ecx, eax jmp pci_pro_ok pci_pro_f0b: ;; write configuration byte cmp al, #0x0b jne pci_pro_f0c call pci_pro_select_reg + push edx mov dx, di and dx, #0x03 add dx, #0x0cfc mov al, cl out dx, al + pop edx jmp pci_pro_ok pci_pro_f0c: ;; write configuration word cmp al, #0x0c jne pci_pro_f0d call pci_pro_select_reg + push edx mov dx, di and dx, #0x02 add dx, #0x0cfc mov ax, cx out dx, ax + pop edx jmp pci_pro_ok pci_pro_f0d: ;; write configuration dword cmp al, #0x0d jne pci_pro_unknown call pci_pro_select_reg + push edx mov dx, #0x0cfc mov eax, ecx out dx, eax + pop edx jmp pci_pro_ok pci_pro_unknown: mov ah, #0x81 @@ -8468,6 +8495,7 @@ retf pci_pro_select_reg: + push edx mov eax, #0x800000 mov ax, bx shl eax, #8 @@ -8476,6 +8504,7 @@ and al, #0xfc mov dx, #0x0cf8 out dx, eax + pop edx ret use16 386 @@ -8536,57 +8565,69 @@ cmp al, #0x08 jne pci_real_f09 call pci_real_select_reg + push dx mov dx, di and dx, #0x03 add dx, #0x0cfc in al, dx + pop dx mov cl, al jmp pci_real_ok pci_real_f09: ;; read configuration word cmp al, #0x09 jne pci_real_f0a call pci_real_select_reg + push dx mov dx, di and dx, #0x02 add dx, #0x0cfc in ax, dx + pop dx mov cx, ax jmp pci_real_ok pci_real_f0a: ;; read configuration dword cmp al, #0x0a jne pci_real_f0b call pci_real_select_reg + push dx mov dx, #0x0cfc in eax, dx + pop dx mov ecx, eax jmp pci_real_ok pci_real_f0b: ;; write configuration byte cmp al, #0x0b jne pci_real_f0c call pci_real_select_reg + push dx mov dx, di and dx, #0x03 add dx, #0x0cfc mov al, cl out dx, al + pop dx jmp pci_real_ok pci_real_f0c: ;; write configuration word cmp al, #0x0c jne pci_real_f0d call pci_real_select_reg + push dx mov dx, di and dx, #0x02 add dx, #0x0cfc mov ax, cx out dx, ax + pop dx jmp pci_real_ok pci_real_f0d: ;; write configuration dword cmp al, #0x0d jne pci_real_unknown call pci_real_select_reg + push dx mov dx, #0x0cfc mov eax, ecx out dx, eax + pop dx jmp pci_real_ok pci_real_unknown: mov ah, #0x81 @@ -8599,6 +8640,7 @@ ret pci_real_select_reg: + push dx mov eax, #0x800000 mov ax, bx shl eax, #8 @@ -8607,6 +8649,7 @@ and al, #0xfc mov dx, #0x0cf8 out dx, eax + pop dx ret .align 16