From d1398349c9449fe7d32c58ef1b3a8b139536c72b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 23 Dec 2013 22:01:17 +0000 Subject: [PATCH] [NTVDM]: DOS: Implement INT 29h: DOS 2+ Fast Console Output. svn path=/branches/ntvdm/; revision=61365 --- subsystems/ntvdm/dos.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/subsystems/ntvdm/dos.c b/subsystems/ntvdm/dos.c index 46b330e6ccb..c871d3daa4c 100644 --- a/subsystems/ntvdm/dos.c +++ b/subsystems/ntvdm/dos.c @@ -2575,6 +2575,24 @@ VOID WINAPI DosBreakInterrupt(LPWORD Stack) VdmRunning = FALSE; } +VOID WINAPI DosFastConOut(LPWORD Stack) +{ + /* + * This is the DOS 2+ Fast Console Output Interrupt. + * See Ralf Brown: http://www.ctyme.com/intr/rb-4124.htm + * for more information. + */ + UNREFERENCED_PARAMETER(Stack); + + /* + * The default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh. + * Do better and call directly BiosPrintCharacter: it's what INT 10/AH=0Eh + * does. Otherwise we would have to set BL to DOS_CHAR_ATTRIBUTE and + * BH to Bda->VideoPage. + */ + BiosPrintCharacter(getAL(), DOS_CHAR_ATTRIBUTE, Bda->VideoPage); +} + VOID WINAPI DosInt2Fh(LPWORD Stack) { DPRINT1("DOS System Function INT 0x2F, AH = %xh, AL = %xh NOT IMPLEMENTED!\n", @@ -2731,6 +2749,7 @@ BOOLEAN DosInitialize(VOID) // RegisterInt32(0x22, DosInt22h ); // Termination RegisterInt32(0x23, DosBreakInterrupt); // Ctrl-C / Ctrl-Break // RegisterInt32(0x24, DosInt24h ); // Critical Error + RegisterInt32(0x29, DosFastConOut ); // DOS 2+ Fast Console Output RegisterInt32(0x2F, DosInt2Fh ); return TRUE; -- 2.17.1