From c9eb0378a5e91a36850c3582b3007b0bb497ad06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Fri, 28 Sep 2007 21:06:18 +0000 Subject: [PATCH] add vret irq (ega only; fixes Gauntlet hanging) Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3001 --- include/vga.h | 1 + src/hardware/vga_draw.cpp | 4 ++++ src/hardware/vga_misc.cpp | 10 +++++++--- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/include/vga.h b/include/vga.h index d85b4042..d0500dbe 100644 --- a/include/vga.h +++ b/include/vga.h @@ -142,6 +142,7 @@ typedef struct { Bit8u count,delay; Bit8u enabled; } cursor; + bool vret_triggered; } VGA_Draw; typedef struct { diff --git a/src/hardware/vga_draw.cpp b/src/hardware/vga_draw.cpp index 70693707..185e2a1d 100644 --- a/src/hardware/vga_draw.cpp +++ b/src/hardware/vga_draw.cpp @@ -617,6 +617,10 @@ static void VGA_VerticalTimer(Bitu val) { //VGA_DrawPart( vga.draw.parts_lines ); PIC_AddEvent(VGA_DrawPart,(float)vga.draw.delay.parts,vga.draw.parts_lines); // PIC_AddEvent(VGA_DrawPart,(float)(vga.draw.delay.parts/2),vga.draw.parts_lines); //Else tearline in Tyrian and second reality + if (GCC_UNLIKELY(machine==MCH_EGA)) { + PIC_ActivateIRQ(2); + vga.draw.vret_triggered=true; + } } void VGA_CheckScanLength(void) { diff --git a/src/hardware/vga_misc.cpp b/src/hardware/vga_misc.cpp index 4d9093b9..2da0c33e 100644 --- a/src/hardware/vga_misc.cpp +++ b/src/hardware/vga_misc.cpp @@ -139,11 +139,17 @@ static Bitu read_p3ca(Bitu port,Bitu iolen) { } static Bitu read_p3c2(Bitu port,Bitu iolen) { - return 0x70; + Bitu retcode=0x70; + if (GCC_UNLIKELY(machine==MCH_EGA)) { + retcode |= (vga.draw.vret_triggered ? 0x80 : 0x00); + vga.draw.vret_triggered=false; + } + return retcode; } void VGA_SetupMisc(void) { if (IS_EGAVGA_ARCH) { + vga.draw.vret_triggered=false; IO_RegisterReadHandler(0x3c2,read_p3c2,IO_MB); IO_RegisterWriteHandler(0x3c2,write_p3c2,IO_MB); if (IS_VGA_ARCH) { @@ -156,5 +162,3 @@ void VGA_SetupMisc(void) { IO_RegisterReadHandler(0x3ba,vga_read_p3da,IO_MB); } } - -