Commit 7e94af47 authored by Jukka Heinonen's avatar Jukka Heinonen Committed by Alexandre Julliard

Redirect DOS writes to stdout/console to DOSVM_PutChar.

parent f31c3e38
...@@ -79,6 +79,7 @@ extern BYTE WINAPI DOSVM_Int09ReadScan(BYTE*ascii); ...@@ -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 @@ ...@@ -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 ) ...@@ -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, ...@@ -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 ) ...@@ -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 ) ...@@ -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 ) ...@@ -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 @@ ...@@ -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 @@ ...@@ -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));
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment