1
0
Fork 0

The mouse doesn't use Int10_setpos anymore. Added read+write char that accept x,y coordinates. Fixes Lotus123

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2122
This commit is contained in:
Peter Veenstra 2005-03-01 11:13:29 +00:00
parent adc44912ef
commit 042a98ddeb
2 changed files with 26 additions and 27 deletions

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: int10_char.cpp,v 1.31 2005-02-10 10:21:11 qbix79 Exp $ */
/* $Id: int10_char.cpp,v 1.32 2005-03-01 11:13:29 qbix79 Exp $ */
/* Character displaying moving functions */
@ -378,12 +378,22 @@ void INT10_ReadCharAttr(Bit16u * result,Bit8u page) {
// Compute the address
Bit16u address=page*real_readw(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE);
address+=(cur_row*real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS)+cur_col)*2;
// REad the char
// Read the char
PhysPt where = CurMode->pstart+address;
*result=mem_readw(where);
}
static void WriteChar(Bit16u col,Bit16u row,Bit8u page,Bit8u chr,Bit8u attr,bool useattr) {
void ReadCharAttr(Bit16u col,Bit16u row,Bit8u page,Bit16u * result) {
/* Used by the mouse */
Bit16u address=page*real_readw(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE);
address+=(row*real_readw(BIOSMEM_SEG,BIOSMEM_NB_COLS)+col)*2;
// Read the char
PhysPt where = CurMode->pstart+address;
*result=mem_readw(where);
}
void WriteChar(Bit16u col,Bit16u row,Bit8u page,Bit8u chr,Bit8u attr,bool useattr) {
/* Externally used by the mouse routine */
PhysPt fontdata;
Bitu x,y;
Bit8u cheight = real_readb(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT);

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: mouse.cpp,v 1.46 2005-02-24 20:14:57 qbix79 Exp $ */
/* $Id: mouse.cpp,v 1.47 2005-03-01 11:13:29 qbix79 Exp $ */
#include <string.h>
#include <math.h>
@ -200,20 +200,16 @@ INLINE void Mouse_AddEvent(Bit16u type) {
// ***************************************************************************
// Mouse cursor - text mode
// ***************************************************************************
/* Write and read directly to the screen. Do no use int_setcursorpos (LOTUS123) */
extern void WriteChar(Bit16u col,Bit16u row,Bit8u page,Bit8u chr,Bit8u attr,bool useattr);
extern void ReadCharAttr(Bit16u col,Bit16u row,Bit8u page,Bit16u * result);
void RestoreCursorBackgroundText()
{
if (mouse.shown<0) return;
if (mouse.background) {
// Save old Cursorposition
Bit8u oldx = CURSOR_POS_ROW(0);
Bit8u oldy = CURSOR_POS_COL(0);
// Restore background
INT10_SetCursorPos ((Bit8u)mouse.backposy,(Bit8u)mouse.backposx,0);
INT10_WriteChar (mouse.backData[0],mouse.backData[1],0,1,true);
// Restore old cursor position
INT10_SetCursorPos (oldx,oldy,0);
WriteChar(mouse.backposx,mouse.backposy,0,mouse.backData[0],mouse.backData[1],true);
mouse.background = false;
}
};
@ -223,26 +219,19 @@ void DrawCursorText()
// Restore Background
RestoreCursorBackgroundText();
// Save old Cursorposition
Bit8u oldx = CURSOR_POS_ROW(0);
Bit8u oldy = CURSOR_POS_COL(0);
// Save Background
Bit16u result;
INT10_SetCursorPos (POS_Y>>3,POS_X>>3,0);
INT10_ReadCharAttr (&result,0);
mouse.backData[0] = result & 0xFF;
mouse.backData[1] = result>>8;
mouse.backposx = POS_X>>3;
mouse.backposy = POS_Y>>3;
mouse.background = true;
Bit16u result;
ReadCharAttr(mouse.backposx,mouse.backposy,0,&result);
mouse.backData[0] = result & 0xFF;
mouse.backData[1] = result>>8;
mouse.background = true;
// Write Cursor
result = (result & mouse.textAndMask) ^ mouse.textXorMask;
INT10_WriteChar (result&0xFF,result>>8,0,1,true);
// Restore old cursor position
INT10_SetCursorPos (oldx,oldy,0);
WriteChar(mouse.backposx,mouse.backposy,0,result&0xFF,result>>8,true);
};
// ***************************************************************************
@ -325,7 +314,7 @@ void RestoreCursorBackground()
};
void DrawCursor() {
if (mouse.shown<0) return;
// Check video page
if (real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE)!=mouse.page) return;
@ -901,7 +890,7 @@ void CreateMouseCallback(void)
};
void MOUSE_Init(Section* sec) {
// Callback 0x33
CreateMouseCallback();
call_int74=CALLBACK_Allocate();