// Send EOI to PIC outb(0x20, 0x20); In real mode or protected mode, you must set up the IDT (Interrupt Descriptor Table) for IRQ12 (vector 0x2C if PIC is in standard remap). Example for 32-bit protected mode:
Your main loop can now poll mouse_x , mouse_y , and mouse_buttons . Here’s a simple console debug: ps/2 compatible mouse driver
uint8_t data = inb(0x60);
The PS/2 mouse might seem like a relic of the 1990s, but it remains the gold standard for low-level OS development. Unlike USB, which relies on complex host controllers and descriptor parsing, the PS/2 interface is simple, memory-mapped, and interrupt-driven. In this article, we’ll build a bare-bones PS/2 mouse driver from scratch, covering initialization, packet decoding, and integration with a simple GUI. 1. Understanding the PS/2 Interface The PS/2 port uses two bidirectional lines: Clock (usually IRQ 12 for the mouse) and Data . Communication is synchronous, with the device sending 11-bit packets (1 start bit, 8 data bits, 1 parity bit, 1 stop bit) when the host pulls the clock low. // Send EOI to PIC outb(0x20, 0x20); In
// Send EOI to PIC outb(0x20, 0x20); In real mode or protected mode, you must set up the IDT (Interrupt Descriptor Table) for IRQ12 (vector 0x2C if PIC is in standard remap). Example for 32-bit protected mode:
Your main loop can now poll mouse_x , mouse_y , and mouse_buttons . Here’s a simple console debug:
uint8_t data = inb(0x60);
The PS/2 mouse might seem like a relic of the 1990s, but it remains the gold standard for low-level OS development. Unlike USB, which relies on complex host controllers and descriptor parsing, the PS/2 interface is simple, memory-mapped, and interrupt-driven. In this article, we’ll build a bare-bones PS/2 mouse driver from scratch, covering initialization, packet decoding, and integration with a simple GUI. 1. Understanding the PS/2 Interface The PS/2 port uses two bidirectional lines: Clock (usually IRQ 12 for the mouse) and Data . Communication is synchronous, with the device sending 11-bit packets (1 start bit, 8 data bits, 1 parity bit, 1 stop bit) when the host pulls the clock low.