1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//! # inout_port-rs
//!
//! inb/outb port in freestanding Rust.
//!
//!
//! ## Example#1
//! ```
//! #![no_std]
//! #![no_main]
//!
//! extern crate inout_port_rs;
//!
//! #[no_mangle]
//! pub extern "C" fn _start() -> !
//! {
//! _ = main();
//! loop {}
//! }
//!
//! use core::panic::PanicInfo;
//! #[panic_handler]
//! fn panic(_info: &PanicInfo) -> ! {
//! loop {}
//! }
//!
//! #[derive(Copy, Clone)]
//! #[repr(C, packed)]
//! struct __LowHigh {
//! l: u8,
//! h: u8,
//! }
//!
//! #[derive(Copy, Clone)]
//! union __Cursor {
//! value: u16,
//! lh: __LowHigh,
//! }
//! fn set_cursor(y: usize, x: usize) {
//! let cursor = __Cursor {
//! value: (y * 80 + x) as u16,
//! };
//! unsafe {
//! inout_port_rs::outb(0xe, 0x3d4);
//! inout_port_rs::outb(cursor.lh.h, 0x3d5);
//! inout_port_rs::outb(0xf, 0x3d4);
//! inout_port_rs::outb(cursor.lh.l, 0x3d5);
//! }
//! }
//! fn main() {
//! set_cursor(0,0);
//! }
//! ```
//!
compile_error!;
use asm;
/// Write a one byte data to port
pub unsafe
/// Read a one byte data from port
pub unsafe