.global HwSetup
.text
.code32
.include "hwhelp.s"
HwSetup:
mov $0b00010001, %al
out %al, $0x20
out %al, $0xa0
mov $0x20, %al
out %al, $0x21
mov $0x28, %al
out %al, $0xa1
mov $0b00000100, %al
out %al, $0x21
mov $0b00000010, %al
out %al, $0xa1
mov $0x00000001, %al
out %al, $0x21
out %al, $0xa1
mov $0b11111011, %al # disable all interrupts
out %al, $0x21
mov $0b11111111, %al
out %al, $0xa1
call InBuffEmpty
mov $0x0FA, %al
out %al, $0x60
call OutBuffFull
in $0x60, %al
call InBuffEmpty
mov $0xF0, %al
out %al, $0x60
call OutBuffFull
in $0x60, %al
call InBuffEmpty
mov $0x2, %al
out %al, $0x60
call OutBuffFull
in $0x60, %al
call InBuffEmpty
mov $0x60, %al
out %al, $0x64
call InBuffEmpty
mov $0x45, %al
out %al, $0x60
in $0x60, %al # Clear any pending Kbd interrupt
mov $0b11111010, %al # enable timer interrupt
out %al, $0x21
mov $0b10111111, %al
out %al, $0xa1
mov $0x9C, %al
out %al, $0x40
mov $0x2e, %al
out %al, $0x40
HD_PORT=0x1F0
.again1:
mov $HD_PORT+7, %dx
in %dx, %al
test $0x80, %al
jnz .again1
mov $HD_PORT+6, %dx
mov $0, %al
out %al, %dx
mov $HD_PORT+7, %dx
mov $0x10, %al
out %al, %dx
ret