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:
parent
b0855c4d63
commit
c9eb0378a5
3 changed files with 12 additions and 3 deletions
|
@ -142,6 +142,7 @@ typedef struct {
|
|||
Bit8u count,delay;
|
||||
Bit8u enabled;
|
||||
} cursor;
|
||||
bool vret_triggered;
|
||||
} VGA_Draw;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue