diff options
Diffstat (limited to 'mubios/arch')
| -rw-r--r-- | mubios/arch/irq.S | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/mubios/arch/irq.S b/mubios/arch/irq.S index 0c192ff..99eb9b3 100644 --- a/mubios/arch/irq.S +++ b/mubios/arch/irq.S @@ -25,6 +25,7 @@ .equ BDA_BASE, 0x0400 .equ BDA_KBD_BUFFER_START, 0x001E .equ BDA_KBD_BUFFER_END, 0x003E + .equ BDA_KBD_BREAK_PREFIX, 0x0497 .equ TIMER_TICKS_PER_DAY_LOW, 0x00B0 .equ TIMER_TICKS_PER_DAY_HIGH, 0x0018 @@ -83,12 +84,25 @@ irq1_entry: in al, 0x60 mov dl, al - test dl, 0x80 - jnz irq1_send_eoi - xor ax, ax mov ds, ax + # Ignore a PS/2 set-2 break prefix and its following release code. + cmp dl, 0xF0 + jne irq1_check_break_prefix + mov byte ptr [BDA_KBD_BREAK_PREFIX], 1 + jmp irq1_send_eoi + +irq1_check_break_prefix: + cmp byte ptr [BDA_KBD_BREAK_PREFIX], 0 + je irq1_check_set1_break + mov byte ptr [BDA_KBD_BREAK_PREFIX], 0 + jmp irq1_send_eoi + +irq1_check_set1_break: + test dl, 0x80 + jnz irq1_send_eoi + mov bx, word ptr [0x041C] mov ax, bx add ax, 2 |
