io.rs 694 B

12345678910111213141516171819202122232425262728293031323334353637
  1. use core::arch::asm;
  2. #[derive(Clone, Copy)]
  3. pub struct Port8 {
  4. no: u16,
  5. }
  6. impl Port8 {
  7. pub const fn new(no: u16) -> Self {
  8. Self { no }
  9. }
  10. pub fn read(&self) -> u8 {
  11. let data;
  12. unsafe {
  13. asm!(
  14. "inb %dx, %al",
  15. in("dx") self.no,
  16. out("al") data,
  17. options(att_syntax, nomem, nostack)
  18. )
  19. };
  20. data
  21. }
  22. pub fn write(&self, data: u8) {
  23. unsafe {
  24. asm!(
  25. "outb %al, %dx",
  26. in("al") data,
  27. in("dx") self.no,
  28. options(att_syntax, nomem, nostack)
  29. )
  30. };
  31. }
  32. }