diff options
| -rw-r--r-- | kernel/kernel.c | 3 | ||||
| -rw-r--r-- | kernel/mouse.c | 48 |
2 files changed, 43 insertions, 8 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c index 419a808..a030f7b 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -18,6 +18,9 @@ uint32_t c1,c2,c3; volatile uint8_t proc; uint32_t cpu_counter[SMP_MAX_PROC]; +volatile int16_t mouse_x; +volatile int16_t mouse_y; + void kernel_ap() { proc++; diff --git a/kernel/mouse.c b/kernel/mouse.c index bee595c..d000b30 100644 --- a/kernel/mouse.c +++ b/kernel/mouse.c @@ -11,9 +11,9 @@ static volatile uint8_t mouse_cycle; -static volatile int8_t mouse_byte[3]; -static volatile uint8_t mouse_x; -static volatile uint8_t mouse_y; +static volatile uint8_t mouse_byte[3]; +volatile int16_t mouse_x; +volatile int16_t mouse_y; static volatile uint8_t mouse_a; @@ -30,7 +30,8 @@ int8_t mouse_get_y() void mouse_init() { - mouse_cycle=mouse_x=mouse_y=0; + mouse_x=mouse_y=0; + mouse_cycle=1; uint8_t _status; //unsigned char @@ -62,7 +63,41 @@ void mouse_init() void mouse_log() { - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%d delta x: %d delta y: %d ",mouse_a, mouse_x,mouse_y); + //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%02x / %02x / %02x ",mouse_byte[0], mouse_byte[1],mouse_byte[2]); + + if(mouse_byte[0]&0x80||mouse_byte[0]&0x40)return; //skip packet on overflow + if(!(mouse_byte[0]&0x8))panic(FOOLOS_MODULE_NAME,"mouse packets out of sync!?"); // this bit is always 1, otherwise panic! + + // + if(mouse_byte[1]>127){ + mouse_x-=256; + mouse_x+=mouse_byte[1]; + } + else + { + mouse_x+=mouse_byte[1]; + } + if(mouse_byte[2]>127){ + mouse_y-=256; + mouse_y+=mouse_byte[2]; + } + else + { + mouse_y+=mouse_byte[2]; + } + + + + + if(mouse_x<0)mouse_x=0; + if(mouse_y<0)mouse_y=0; + if(mouse_x>800)mouse_x=800; + if(mouse_y>600)mouse_y=600; + + + //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%d / %d / %02x ",mouse_x, mouse_y,mouse_byte[2]); + PutFont('X', mouse_x,600-mouse_y, 0xffffff); + } //Mouse functions void mouse_handler()//struct regs *a_r) //struct regs *a_r (not used but just there) @@ -81,9 +116,6 @@ void mouse_handler()//struct regs *a_r) //struct regs *a_r (not used but just th break; case 2: mouse_byte[2]=x86_inb(0x60); - mouse_a=mouse_byte[0]; - mouse_x=mouse_byte[1]; - mouse_y=mouse_byte[2]; mouse_cycle=0; mouse_log(); break; |
