did some restructuring, got multitasking almost working
This commit is contained in:
85
kernel/drivers/ps2/ps2.S
Normal file
85
kernel/drivers/ps2/ps2.S
Normal file
@@ -0,0 +1,85 @@
|
||||
#include "drivers/ps2/ps2.h"
|
||||
|
||||
.code32
|
||||
|
||||
.global ps2_wait_input_empty
|
||||
.global ps2_wait_output_full
|
||||
.global ps2_write_command
|
||||
.global ps2_read_data
|
||||
.global ps2_write_data
|
||||
.global ps2_flush_output_buffer
|
||||
|
||||
# helpers
|
||||
ps2_wait_input_empty: #(void) -> void
|
||||
push %ebp
|
||||
mov %esp, %ebp
|
||||
1:
|
||||
inb $PS2_STATUS, %al
|
||||
andb $0x02, %al
|
||||
jnz 1b
|
||||
|
||||
leave
|
||||
ret
|
||||
|
||||
ps2_wait_output_full: #(void) -> void
|
||||
push %ebp
|
||||
mov %esp, %ebp
|
||||
1:
|
||||
inb $PS2_STATUS, %al
|
||||
andb $0x01, %al
|
||||
jz 1b
|
||||
|
||||
leave
|
||||
ret
|
||||
|
||||
ps2_write_command: #(uint8_t command) -> void
|
||||
push %ebp
|
||||
mov %esp, %ebp
|
||||
|
||||
call ps2_wait_input_empty
|
||||
|
||||
xor %eax, %eax
|
||||
movb 8(%ebp), %al
|
||||
outb %al, $PS2_COMMAND
|
||||
|
||||
leave
|
||||
ret
|
||||
|
||||
ps2_read_data: #(void) -> uint8_t
|
||||
push %ebp
|
||||
mov %esp, %ebp
|
||||
|
||||
call ps2_wait_output_full
|
||||
|
||||
xor %eax, %eax
|
||||
inb $PS2_DATA, %al
|
||||
|
||||
leave
|
||||
ret
|
||||
|
||||
ps2_write_data: #(uint8_t) -> void
|
||||
push %ebp
|
||||
mov %esp, %ebp
|
||||
|
||||
call ps2_wait_input_empty
|
||||
|
||||
xor %eax, %eax
|
||||
movb 8(%ebp), %al
|
||||
outb %al, $PS2_DATA
|
||||
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
ps2_flush_output_buffer: #(void) -> void
|
||||
push %ebp
|
||||
mov %esp, %ebp
|
||||
1:
|
||||
inb $PS2_STATUS, %al
|
||||
andb $0x01, %al
|
||||
jz 2f
|
||||
inb $PS2_DATA, %al
|
||||
jmp 1b
|
||||
2:
|
||||
leave
|
||||
ret
|
||||
Reference in New Issue
Block a user