Mouse FAIL - MS4

Jun 20, 2011 at 12:18 PM

Hi guys ,

I have my own mouse driver.

When I real boot my gui os from usb it loads as it should and displays but i can't move mouse i don't think it is taking my input here is my mouse drover code:

using

System;

using

System.Collections.Generic;

using

Cosmos.Hardware;

using

Cosmos.Kernel;

namespace

SuperByte

{

 

class MouseEx

{

 

public static int X, Y;

 

public static MouseState Buttons;

 

public static void Initialize()

{

 

//enable mouse

WaitSignal();

 

CPUBus.Write8(0x64, 0xA8);

 

// enable interrupt

WaitSignal();

 

CPUBus.Write8(0x64, 0x20);

WaitData();

 

byte status = (byte)(CPUBus.Read8(0x60) | 2);

WaitSignal();

 

CPUBus.Write8(0x64, 0x60);

WaitSignal();

 

CPUBus.Write8(0x60, status);

 

//default

Write(0xF6);

Read();

//Acknowledge

 

//Enable the mouse

Write(0xF4);

Read();

//Acknowledge

 

Interrupts.AddIRQHandler(12, new Interrupts.InterruptDelegate(HandleMouse));

}

 

public static byte GetMouseID()

{

 

CPUBus.Write8(0x64, 0xF2);

 

return CPUBus.Read8(0x60);

}

 

private static byte Read()

{

WaitData();

 

return CPUBus.Read8(0x60);

}

 

private static void Write(byte b)

{

 

//Wait to be able to send a command

WaitSignal();

 

//Tell the mouse we are sending a command

 

CPUBus.Write8(0x64, 0xD4);

 

//Wait for the final part

WaitSignal();

 

//Finally write

 

CPUBus.Write8(0x60, b);

}

 

private static void WaitData()

{

 

for (int i = 0; i < 1000 & ((CPUBus.Read8(0x64) & 1) == 1); i++)

;

}

 

private static void WaitSignal()

{

 

for (int i = 0; i < 1000 & ((CPUBus.Read8(0x64) & 2) != 0); i++)

;

}

 

public enum MouseState

{

None = 0,

Left = 1,

Right = 2,

Middle = 4

}

 

private static byte mouse_cycle = 0;

 

private static int[] mouse_byte = new int[4];

 

public static void HandleMouse(ref Interrupts.InterruptContext context)

{

 

switch (mouse_cycle)

{

 

case 0:

mouse_byte[0] =

CPUBus.Read8(0x60);

 

if ((mouse_byte[0] & 0x8) == 0x8)

mouse_cycle++;

 

break;

 

case 1:

mouse_byte[1] =

CPUBus.Read8(0x60);

mouse_cycle++;

 

break;

 

case 2:

mouse_byte[2] =

CPUBus.Read8(0x60);

mouse_cycle = 0;

 

if ((mouse_byte[0] & 0x10) == 0x10)

X -= mouse_byte[1] ^ 0xff;

 

else

X += mouse_byte[1];

 

if ((mouse_byte[0] & 0x20) == 0x20)

Y += mouse_byte[2] ^ 0xff;

 

else

Y -= mouse_byte[2];

 

if (X < 0)

X = 0;

 

else if (X > 319)

X = 319;

 

if (Y < 0)

Y = 0;

 

else if (Y > 199)

Y = 199;

Buttons = (

MouseState)(mouse_byte[0] & 0x7);

 

break;

}

}

}

}