cpuio 0.2.0

Bare metal (no_std) inb, outb, inw, outw, inl, outw instructions with Rust-like API
Documentation
# `cpuio`: Rust wrapper for `inb`, `outb`, etc., instructions

**WARNING: The interface to the low-level `outb`, `outw` and `outl`
functions has changed to match Linux.  Please reverse the order of
arguments to these three functions.**

This library is intended to be run on bare metal, and it only depends on
the `core` library.

To use this, add it to your `Cargo.toml` file and call `cpuio::Port::new`
to create a port, being sure to specify `u8`, `u16` or `u32` depending on
the size data supported by the port.

```rust
extern crate cpuio;

use cpuio::Port;

fn main() {
    // Create a port pointing at 0x60, the address of the PS/2 keyboard
    // port on x86 hardware.  This is an unsafe operation because many
    // ports can be used to reconfigure your underlying hardware, and
    // it's the responsiblity of the port creator to make sure it's
    // used safely.
    let mut keyboard: Port<u8> = unsafe { Port::new(0x60) };

    // Read a single scancode from a PS/2 keyboard.  If you run this as
    // an ordinary user, it will fail with a SIGSEGV.
    println!("scancode: {}", keyboard.read());
}
```

The constructor `Port::new` is available as a `const fn`, which allows you
to configure a port at compile time.

The is also an `UnsafePort` type which is identical, except that `read` and
`write` are explicitly marked as unsafe.  It's better to use `UnsafePort`
whenever any individual port operation might corrupt memory or cause
undefined behavior.

## Licensing

Licensed under the [Apache License, Version 2.0][LICENSE-APACHE] or the
[MIT license][LICENSE-MIT], at your option.

[LICENSE-APACHE]: http://www.apache.org/licenses/LICENSE-2.0
[LICENSE-MIT]: http://opensource.org/licenses/MIT