cvs.gedasymbols.org/archives/browse.cgi | search |
From: | "Michael Stewart" <mike AT reggin DOT freeserve DOT co DOT uk> |
Newsgroups: | comp.os.msdos.djgpp |
Subject: | Re: Mouse Drawing Problem in SVGA Banked Mode 0x101 |
Date: | Wed, 13 Jan 1999 23:35:20 -0000 |
Organization: | Customer of Planet Online |
Lines: | 87 |
Message-ID: | <77jarv$vko$1@news5.svr.pol.co.uk> |
References: | <3699BEA0 DOT 7E4 AT magicsoftware DOT freeserve DOT co DOT uk> |
NNTP-Posting-Host: | modem-88.thalidomide.dialup.pol.co.uk |
X-Trace: | news5.svr.pol.co.uk 916270783 32408 62.136.88.216 (13 Jan 1999 23:39:43 GMT) |
NNTP-Posting-Date: | 13 Jan 1999 23:39:43 GMT |
X-Complaints-To: | abuse AT theplanet DOT net |
X-Newsreader: | Microsoft Outlook Express 4.72.3110.5 |
X-MimeOLE: | Produced By Microsoft MimeOLE V4.72.3110.3 |
To: | djgpp AT delorie DOT com |
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
Reply-To: | djgpp AT delorie DOT com |
Simon wrote in message <3699BEA0 DOT 7E4 AT magicsoftware DOT freeserve DOT co DOT uk>... >Hello, I am having a problem concerning drawing of the mouse pointer(in >an interrupt) >and drawing of normal graphics (not in an interrupt) in banked SVGA mode >0x101 (640*480*256) . What happens is that the mouse pointer sometimes >is drawn >to the wrong area of the screen but only when the pointer is on a bank >boundry. >This also only occurs when other graphics are being drawn in non >interupt code, >everything works fine in linear mode though. Any way here are a few >pieces of code which >may help diagnose my annoying problem. > >Thanks for any help given >Simon > ><snip> When you are redrawing your mouse pointer during the interrupt you say you get the error when you are drawing other graphics at the same time. I think that is where the error is, as you are drawing your mouse some code is changing the bank before you place your pixel (can't guarentee that though :-). Try adding something like this to your code to see if it gets rid of your problem. // in your drawing code while (draw_flag); // pause if something else is drawing draw_flag = true; // prevent other things drawing // draw your stuff draw_flag = false; // allow other things to be drawn // in your mouse code static void MouseInteruptHandler(_go32_dpmi_registers *reg){ __dpmi_regs registers; //get button stuff registers.x.ax=MOUSE_INFO_FUNCTION; __dpmi_int(MOUSE_DRIVER, ®isters); //store System.Mouse.MouseButtonsStates=registers.x.bx; //get x-y movement since last interrupt registers.x.ax=MOUSE_MOVEMENT_RELATIVE_FUNCTION; __dpmi_int(MOUSE_DRIVER, ®isters); disable(); System.Mouse.MouseXPos += registers.x.cx; System.Mouse.MouseYPos += registers.x.dx; System.Mouse.MouseXRelativePos = registers.x.cx; System.Mouse.MouseYRelativePos = registers.x.dx; //adjust to keep in limits if (System.Mouse.MouseXPos >= System.Mouse.MXMaxLimit) System.Mouse.MouseXPos=System.Mouse.MXMaxLimit; if (System.Mouse.MouseXPos <= System.Mouse.MXMinLimit) System.Mouse.MouseXPos=System.Mouse.MYMinLimit; if (System.Mouse.MouseYPos >= System.Mouse.MYMaxLimit) System.Mouse.MouseYPos=System.Mouse.MYMaxLimit; if (System.Mouse.MouseYPos <= System.Mouse.MYMinLimit) System.Mouse.MouseYPos=System.Mouse.MYMinLimit; // You should be able to get rid of this code by using the mouse driver to // limit the mouse movement. if (System.Mouse.MousePointerVisible==MOUSE_ON) { while (draw_flag); draw_flag = true; DrawMousePointer(); //uses setpixel and to draw a pointer draw_flag = false; } enable(); System.Mouse.MouseXOldPos=System.Mouse.MouseXPos; System.Mouse.MouseYOldPos=System.Mouse.MouseYPos; //used to run any extra code when the mouse ints //not used when error occurs RunInterruptCallbacks(&mouse_interrupt_call_list); }
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |