I/O - Inputs/Outputs

Overview

I/O ports (Input/Output ports) are special hardware addresses used to communicate directly with devices via the x86 port-mapped I/O mechanism. Unlike memory-mapped registers, I/O ports are accessed using dedicated CPU instructions like in and out.

In BenOS, I/O ports are used to control and read data from low-level hardware components such as:

  • the PIT (Programmable Interval Timer),
  • the PIC (Programmable Interrupt Controller),
  • the PS/2 controller,
  • and other similar hardware interfaces.

Functions like inb(), outb(), etc., provide simple wrappers to perform byte access to these ports.



Functions

There are actually three functions used to access I/O ports.

// Source: kernel/cpu/include/io.h

void outb(uint16_t port, uint8_t value);
uint8_t inb(uint16_t port);
void io_wait();
  • outb() sends a given byte to a given port.
  • inb(): receives a byte from a given port.
  • io_wait(): creates a delay by sending an information to a port.