[feat] 简易鼠标驱动

This commit is contained in:
2026-06-06 11:32:08 +08:00
Unverified
parent 866c3e4d03
commit 3bece9e75e
7 changed files with 326 additions and 24 deletions
+48
View File
@@ -0,0 +1,48 @@
#pragma once
#include <common.h>
#define PS2_MOUSE_IRQ 12
#define PS2_MOUSE_VECTOR (PIC_IRQ_BASE + PS2_MOUSE_IRQ)
// PS/2 controller ports
#define PS2_DATA_PORT 0x60
#define PS2_STATUS_PORT 0x64
#define PS2_CMD_PORT 0x64
// PS/2 controller commands
#define PS2_CMD_READ_MB 0x20 // Read command byte
#define PS2_CMD_WRITE_MB 0x60 // Write command byte
#define PS2_CMD_ENABLE_A2 0xA8 // Enable auxiliary (second) port
#define PS2_CMD_SELF_TEST 0xAA // Controller self-test
// PS/2 command byte bits
#define PS2_CMD_IRQ12 0x02 // Enable IRQ12 (auxiliary device)
#define PS2_CMD_IRQ1 0x01 // Enable IRQ1 (keyboard)
// PS/2 controller status bits
#define PS2_STAT_OBF 0x01 // Output buffer full (data ready)
#define PS2_STAT_IBF 0x02 // Input buffer full (controller busy)
// PS/2 mouse commands
#define PS2_MOUSE_ENABLE 0xF4 // Enable data reporting
#define PS2_MOUSE_DISABLE 0xF5 // Disable data reporting
#define PS2_MOUSE_RESET 0xFF // Reset mouse
// Mouse packet byte 0 flags
#define PS2_MOUSE_LEFT 0x01
#define PS2_MOUSE_RIGHT 0x02
#define PS2_MOUSE_MIDDLE 0x04
#define PS2_MOUSE_ALWAYS1 0x08
#define PS2_MOUSE_X_SIGN 0x10
#define PS2_MOUSE_Y_SIGN 0x20
#define PS2_MOUSE_X_OVER 0x40
#define PS2_MOUSE_Y_OVER 0x80
void mouse_init(void);
SSINT32 mouse_get_x(void);
SSINT32 mouse_get_y(void);
bool mouse_get_btn_left(void);
bool mouse_get_btn_right(void);
bool mouse_get_btn_middle(void);