1
0
Fork 0

add vret irq (ega only; fixes Gauntlet hanging)

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3001
This commit is contained in:
Sebastian Strohhäcker 2007-09-28 21:06:18 +00:00
parent b0855c4d63
commit c9eb0378a5
3 changed files with 12 additions and 3 deletions

View file

@ -142,6 +142,7 @@ typedef struct {
Bit8u count,delay;
Bit8u enabled;
} cursor;
bool vret_triggered;
} VGA_Draw;
typedef struct {

View file

@ -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) {

View file

@ -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);
}
}