Move PIC logic to rust

This commit is contained in:
greg
2015-11-17 04:06:55 -08:00
parent d133c198a4
commit 8106038690
2 changed files with 28 additions and 9 deletions

View File

@@ -1,5 +1,5 @@
#![feature(no_std, lang_items, const_fn)]
#![feature(no_std, lang_items, const_fn, asm)]
#![no_std]
#[cfg(test)]
@@ -14,6 +14,23 @@ extern {
fn call_interrupt();
}
#[no_mangle]
pub extern fn rust_setup_PIC() {
let interrupt_mask1: u8 = 0xfc;
let interrupt_mask2: u8 = 0xff;
unsafe {
out(0x21, interrupt_mask1);
out(0xa1, interrupt_mask2);
asm!("sti");
}
}
unsafe fn out(port: u16, value: u8) {
asm!("outb %%dx, %%al" : : "dx" (port), "al"(value));
}
#[no_mangle]
pub extern fn rust_interrupt_handler() {
checkerboard(vga_buffer::Color::White);

View File

@@ -14,7 +14,8 @@ long_mode_start:
call setup_SSE
call setup_IDT
call setup_PIT
call setup_PIC
extern rust_setup_PIC
call rust_setup_PIC
extern rust_main
call rust_main
; rust main returned, print `OS returned!`
@@ -169,13 +170,14 @@ setup_IDT:
ret
setup_PIC:
mov al, 0xfc ;timer and keyboard, no more
out byte 0x21, al
mov al, 0xff
out byte 0xa1, al
sti
ret
;setup_PIC:
; mov al, 0xfc ;timer and keyboard, no more
; out byte 0x21, al
; mov al, 0xff
; out byte 0xa1, al
; sti
; ret
setup_PIT:
%define PIT_CH0 0x40