LTCD_060719.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:17 +02:00
commit f86e69648b
156 files changed
+49537

No files matched your search

+189
View File
@@ -0,0 +1,189 @@
I8 mxx=grwidth>>1,
myy=grheight>>1,
mzz=0;
BoolU4 mouse_buttons[5];
U8 last_mouse_jiffy=0;
BoolU4 mouse_installed=FALSE;
BoolU4 mouse_has_wheel=FALSE;
BoolU4 mouse_has_ext_buttons=FALSE;
BoolU4 mouse_evt=FALSE;
BoolU4 mouse_irqs_working=FALSE;
U8 mouse_evt_time;
void MouseGetDeviceType()
{
U1 b;
KbdMouseCmdAck(0xF2);
b=KbdCmdRead;
if (b==3)
mouse_has_wheel=TRUE;
else if (b==4)
mouse_has_ext_buttons=TRUE;
}
void MouseReset()
{
KbdCmdFlush;
KbdCmdSend(KEYB_CTRL,0xA8); //Enable Mouse
KbdCmdFlush;
KbdCmdSend(KEYB_CTRL,0xA9); //check for mouse
KbdCmdFlush;
KbdMouseCmdAck(0xFF); //Reset
KbdCmdRead;
KbdCmdRead;
KbdMouseCmdAck(0xFF); //Reset
KbdCmdRead;
KbdCmdRead;
KbdMouseCmdAck(0xF3);
KbdMouseCmdAck(200);
KbdMouseCmdAck(0xF3); // enable Mouse
KbdMouseCmdAck(100); // Set Rate
KbdMouseCmdAck(0xF3);
KbdMouseCmdAck(80); //Resolution
MouseGetDeviceType; // enable Mouse
KbdMouseCmdAck(0xF3);
KbdMouseCmdAck(10);
MouseGetDeviceType; // enable Mouse
KbdMouseCmdAck(0xE8); //Resolution
KbdMouseCmdAck(0x03);
KbdMouseCmdAck(0xE6);
KbdMouseCmdAck(0xF3); // Set Rate
//if your mouse doesn't work, try this
// KbdMouseCmdAck(40);
KbdMouseCmdAck(100);
KbdMouseCmdAck(0xF4); // enable Mouse
}
void MouseHandler()
{
I8 i,j,dx,dy,dz,
old_mxx=mxx,old_myy=myy,old_mzz=mzz;
BoolU4 evt=FALSE,old_buttons[5];
U1 mouse_buf[4];
U8 evt_time=BootTime;
try {
for (i=0;i<5;i++)
old_buttons[i]=mouse_buttons[i];
for (i=0;i<3;i++) {
j=KbdCmdRead;
if (j<0)
throw;
else
mouse_buf[i]=j;
}
if (mouse_has_wheel || mouse_has_ext_buttons) {
j=KbdCmdRead;
if (j<0)
throw;
else
mouse_buf[3]=j;
} else
mouse_buf[3]=0;
Sti;
mouse_buttons[0] = mouse_buf[0] & 1;
mouse_buttons[1] = (mouse_buf[0] & 2) >> 1;
mouse_buttons[2] = (mouse_buf[0] & 4) >> 2;
mouse_buttons[3] = (mouse_buf[3] & 0x10) >> 4;
mouse_buttons[4] = (mouse_buf[3] & 0x20) >> 5;
if (mouse_buf[0] & 0x10)
dx=mouse_buf[1]-256;
else
dx=mouse_buf[1];
if (mouse_buf[0] & 0x20)
dy=256-mouse_buf[2];
else
dy=-mouse_buf[2];
if (mouse_buf[3] & 0x08)
dz=(mouse_buf[3]&7)-8;
else
dz=mouse_buf[3]&7;
mxx+=dx;
myy+=dy;
mzz+=dz;
if (mxx < 0) mxx=0;
if (mxx>=grwidth) mxx=grwidth-1;
if (myy < 0) myy=0;
if (myy>=grheight) myy=grheight-1;
} catch {
Fs->catch_except=TRUE;
KbdCmdFlush;
}
for (i=0;i<5;i++)
if (old_buttons[i]!=mouse_buttons[i])
evt=TRUE;
if (old_mxx!=mxx || old_myy!=myy || old_mzz!=mzz)
evt=TRUE;
if (evt) {
mouse_evt_time=evt_time;
last_mouse_jiffy=jiffies;
mouse_evt=TRUE;
}
}
void MouseIrqHandler()
{
mouse_irqs_working=TRUE;
MouseHandler;
}
void PollMouse()
{ //I can't get IRQ's working on some computers
U8 old_flags=GetFlags;
if (mouse_irqs_working) return;
// Cli;
if (!Bt(&sys_irq_flags,1)) {//not in keybd IRQ
if (InP(KEYB_CTRL) & 1) {
KbdCmdSend(KEYB_CTRL,0x60);
KbdCmdSend(KEYB_PORT,0x51); //disable kbd
MouseHandler;
KbdCmdSend(KEYB_CTRL,0x60);
KbdCmdSend(KEYB_PORT,0x41); //enable kbd
}
}
SetFlags(old_flags);
}
BoolU4 InstallMouseDriver()
{
BoolU4 result;
I8 i;
// U8 old_flags=GetFlags;
// Cli;
ext[EXT_IRQ0C]=NULL;
mouse_evt=FALSE;
for(i=0;i<5;i++)
mouse_buttons[i]=0;
mouse_has_wheel=FALSE;
mouse_has_ext_buttons=FALSE;
try {
MouseReset;
result=TRUE;
mouse_evt=TRUE;
ext[EXT_IRQ0C]=&MouseIrqHandler;
} catch {
Fs->catch_except=TRUE;
result=FALSE;
}
mouse_installed=result;
// SetFlags(old_flags);
return result;
}
Spawn(&InstallMouseDriver);