Redirect DOS writes to stdout/console to DOSVM_PutChar.
This commit is contained in:
parent
f31c3e3898
commit
7e94af47aa
|
@ -79,6 +79,7 @@ extern BYTE WINAPI DOSVM_Int09ReadScan(BYTE*ascii);
|
||||||
|
|
||||||
/* int10.c */
|
/* int10.c */
|
||||||
extern void WINAPI DOSVM_Int10Handler(CONTEXT86*);
|
extern void WINAPI DOSVM_Int10Handler(CONTEXT86*);
|
||||||
|
extern void WINAPI DOSVM_PutChar(BYTE ascii);
|
||||||
|
|
||||||
/* int16.c */
|
/* int16.c */
|
||||||
extern void WINAPI DOSVM_Int16Handler(CONTEXT86*);
|
extern void WINAPI DOSVM_Int16Handler(CONTEXT86*);
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "vga.h"
|
#include "vga.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
|
#include "dosexe.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(int);
|
WINE_DEFAULT_DEBUG_CHANNEL(int);
|
||||||
|
|
||||||
|
@ -548,7 +549,7 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
|
||||||
|
|
||||||
case 0x0e: /* TELETYPE OUTPUT */
|
case 0x0e: /* TELETYPE OUTPUT */
|
||||||
TRACE("Teletype Output\n");
|
TRACE("Teletype Output\n");
|
||||||
CONSOLE_Write(AL_reg(context), 0, 0, 0);
|
DOSVM_PutChar(AL_reg(context));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x0f: /* GET CURRENT VIDEO MODE */
|
case 0x0f: /* GET CURRENT VIDEO MODE */
|
||||||
|
@ -826,3 +827,22 @@ static void scroll_window(int direction, char lines, char row1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* DOSVM_PutChar
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
void WINAPI DOSVM_PutChar(BYTE ascii)
|
||||||
|
{
|
||||||
|
BIOSDATA *data = DOSMEM_BiosData();
|
||||||
|
unsigned xpos, ypos;
|
||||||
|
|
||||||
|
TRACE("char: 0x%02x\n", ascii);
|
||||||
|
|
||||||
|
// FIXME: Update VGA text buffers here...
|
||||||
|
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), &ascii, 1, NULL, NULL);
|
||||||
|
|
||||||
|
VGA_GetCursorPos(&xpos, &ypos);
|
||||||
|
BIOS_SetCursorPos(data, 0, xpos, ypos);
|
||||||
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
|
||||||
|
|
||||||
case 0x02: /* WRITE CHARACTER TO STANDARD OUTPUT */
|
case 0x02: /* WRITE CHARACTER TO STANDARD OUTPUT */
|
||||||
TRACE("Write Character to Standard Output\n");
|
TRACE("Write Character to Standard Output\n");
|
||||||
CONSOLE_Write(DL_reg(context), 0, 0, 0);
|
DOSVM_PutChar(DL_reg(context));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x06: /* DIRECT CONSOLE IN/OUTPUT */
|
case 0x06: /* DIRECT CONSOLE IN/OUTPUT */
|
||||||
|
@ -123,7 +123,7 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
TRACE("Direct Console Output\n");
|
TRACE("Direct Console Output\n");
|
||||||
CONSOLE_Write(DL_reg(context), 0, 0, 0);
|
DOSVM_PutChar(DL_reg(context));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -163,6 +163,20 @@ void WINAPI DOSVM_Int21Handler( CONTEXT86 *context )
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x40: /* WRITE TO FILE OR DEVICE */
|
||||||
|
/* Writes to stdout are handled here. */
|
||||||
|
if (BX_reg(context) == 1) {
|
||||||
|
BYTE *ptr = CTX_SEG_OFF_TO_LIN(context,
|
||||||
|
context->SegDs,
|
||||||
|
context->Edx);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0; i<CX_reg(context); i++)
|
||||||
|
DOSVM_PutChar(ptr[i]);
|
||||||
|
} else
|
||||||
|
DOS3Call( context );
|
||||||
|
break;
|
||||||
|
|
||||||
case 0x44: /* IOCTL */
|
case 0x44: /* IOCTL */
|
||||||
DOSVM_Int21Handler_Ioctl( context );
|
DOSVM_Int21Handler_Ioctl( context );
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
#include "miscemu.h"
|
#include "miscemu.h"
|
||||||
|
#include "dosexe.h"
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* DOSVM_Int29Handler
|
* DOSVM_Int29Handler
|
||||||
|
@ -33,6 +34,5 @@
|
||||||
void WINAPI DOSVM_Int29Handler( CONTEXT86 *context )
|
void WINAPI DOSVM_Int29Handler( CONTEXT86 *context )
|
||||||
{
|
{
|
||||||
/* Yes, it seems that this is really all this interrupt does. */
|
/* Yes, it seems that this is really all this interrupt does. */
|
||||||
CONSOLE_Write(AL_reg(context), 0, 0, 0);
|
DOSVM_PutChar(AL_reg(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue