VirtualBox

Changeset 40721 in vbox for trunk/src/VBox/Devices/PC


Ignore:
Timestamp:
Mar 30, 2012 10:02:19 AM (13 years ago)
Author:
vboxsync
Message:

BIOS-new: Enable interrupts when polling for keyboard input.

Location:
trunk/src/VBox/Devices/PC/BIOS-new
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/BIOS-new/biosint.h

    r39589 r40721  
    111111        } r16;
    112112        struct {
    113             uint16_t    flagsl;
    114             uint16_t    flagsh;
     113            uint8_t     flagsl;
     114            uint8_t     flagsh;
    115115        } r8;
    116116    } u;
     
    132132typedef struct {
    133133    pusha_regs_t    gr;
    134     flags_t         fl;
     134    uint16_t        es;
     135    uint16_t        ds;
     136    iret_addr_t     ra;
    135137} kbd_regs_t;
    136138
     
    189191#define CLEAR_ZF()   FLAGS &= 0xffbf
    190192#define GET_ZF()     (FLAGS & 0x0040)
     193
     194#define SET_IF()     FLAGS |= 0x0200
    191195
    192196typedef unsigned short  bx_bool;
  • trunk/src/VBox/Devices/PC/BIOS-new/keyboard.c

    r40236 r40721  
    573573#define BP      r.gr.u.r16.bp
    574574#define SP      r.gr.u.r16.sp
    575 #define FLAGS   r.fl.u.r16.flags
     575#define FLAGS   r.ra.flags.u.r16.flags
    576576
    577577/* Interrupt 16h service implementation. */
     
    615615   
    616616    case 0x01: /* check keyboard status */
     617        SET_IF();   /* Enable interrupts. Some callers depend on that! */
    617618        if ( !dequeue_key(&scan_code, &ascii_code, 0) ) {
    618619            SET_ZF();
     
    691692   
    692693    case 0x11: /* check MF-II keyboard status */
     694        SET_IF();
    693695        if ( !dequeue_key(&scan_code, &ascii_code, 0) ) {
    694696            SET_ZF();
  • trunk/src/VBox/Devices/PC/BIOS-new/notes.txt

    r40150 r40721  
    88- OS/2 (WSeB/MCP/ACP) and Windows 98 SE are some of the very few operating
    99  systems which use the El Torito floppy emulation.
     10
     11- Keystroke check (INT 16h, fn 01h/10h) always enables interrupts on return.
     12  DOS POWER.EXE depends on that in some situations.
    1013
    1114- MS-DOS 6.2/V is a rare user of the INT 15h keyboard intercept routines.
  • trunk/src/VBox/Devices/PC/BIOS-new/orgs.asm

    r39913 r40721  
    767767                push    es
    768768                push    ds
    769                 ;; TODO: the caller already pushed flags (INT instruction)??
    770                 pushf
    771769                pusha
    772770
     
    780778                call    _int16_function
    781779                popa
    782                 popf
    783780                pop     ds
    784781                pop     es
    785                 jz      int16_zero_set
    786 
    787                 ;; TODO: Could use SP directly here (386+)
    788 int16_zero_clear:
    789                 push    bp
    790                 mov     bp, sp
    791                 and     byte ptr [bp+6], 0BFh
    792                 pop     bp
    793                 iret
    794 
    795 int16_zero_set:
    796                 push    bp
    797                 mov     bp, sp
    798                 or      byte ptr [bp+6], 040h
    799                 pop     bp
    800782                iret
    801783
     
    823805                call    _int16_function
    824806                popa
    825                 popf
    826807                pop     ds
    827808                pop     es
    828 ; TODO: review/enable?
     809; TODO: review/enable? If so, flags should be restored here?
    829810if 0
    830811                push    ax
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette