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:
parent
adc44912ef
commit
042a98ddeb
2 changed files with 26 additions and 27 deletions
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Reference in a new issue