Additional fixes to ET4000AX and ET4000/W32p - fixes segment bank messup when exiting from Windows;
The internal video cards of the Trigem 286M and the Packard Bell PB640 now have the correct timings.
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
# settings, so we can avoid changing the main one for all of
|
||||
# our local setups.
|
||||
#
|
||||
# Version: @(#)Makefile.local 1.0.15 2018/07/19
|
||||
# Version: @(#)Makefile.local 1.0.16 2018/08/01
|
||||
#
|
||||
# Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
#
|
||||
@@ -62,6 +62,7 @@ STUFF :=
|
||||
# -DENABLE_386_LOG=N sets logging level at N.
|
||||
# -DENABLE_386_DYNAREC_LOG=N sets logging level at N.
|
||||
# -DENABLE_808X_LOG=N sets logging level at N.
|
||||
# -DENABLE_FPU_LOG=N sets logging level at N.
|
||||
# -DENABLE_X86SEG_LOG=N sets logging level at N.
|
||||
# disk/ logging:
|
||||
# -DENABLE_ESDI_AT_LOG=N sets logging level at N.
|
||||
|
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Emulation of the Tseng Labs ET4000.
|
||||
*
|
||||
* Version: @(#)vid_et4000.c 1.0.14 2018/08/25
|
||||
* Version: @(#)vid_et4000.c 1.0.15 2018/08/26
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -98,6 +98,15 @@ void et4000_out(uint16_t addr, uint8_t val, void *p)
|
||||
}
|
||||
et4000->banking = val;
|
||||
return;
|
||||
case 0x3cf:
|
||||
if ((svga->gdcaddr & 15) == 6) {
|
||||
if (!(svga->crtc[0x36] & 0x10) && !(val & 0x08)) {
|
||||
svga->write_bank = (et4000->banking & 0xf) * 0x10000;
|
||||
svga->read_bank = ((et4000->banking >> 4) & 0xf) * 0x10000;
|
||||
} else
|
||||
svga->write_bank = svga->read_bank = 0;
|
||||
}
|
||||
break;
|
||||
case 0x3D4:
|
||||
svga->crtcreg = val & 0x3f;
|
||||
return;
|
||||
@@ -112,6 +121,14 @@ void et4000_out(uint16_t addr, uint8_t val, void *p)
|
||||
val &= crtc_mask[svga->crtcreg];
|
||||
svga->crtc[svga->crtcreg] = val;
|
||||
|
||||
if (svga->crtcreg == 0x36) {
|
||||
if (!(val & 0x10) && !(svga->gdcreg[6] & 0x08)) {
|
||||
svga->write_bank = (et4000->banking & 0xf) * 0x10000;
|
||||
svga->read_bank = ((et4000->banking >> 4) & 0xf) * 0x10000;
|
||||
} else
|
||||
svga->write_bank = svga->read_bank = 0;
|
||||
}
|
||||
|
||||
if (old != val)
|
||||
{
|
||||
if (svga->crtcreg < 0xE || svga->crtcreg > 0x10)
|
||||
|
@@ -10,7 +10,7 @@
|
||||
*
|
||||
* Known bugs: Accelerator doesn't work in planar modes
|
||||
*
|
||||
* Version: @(#)vid_et4000w32.c 1.0.15 2018/08/25
|
||||
* Version: @(#)vid_et4000w32.c 1.0.16 2018/08/26
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -223,6 +223,12 @@ void et4000w32p_out(uint16_t addr, uint8_t val, void *p)
|
||||
switch (svga->gdcaddr & 15)
|
||||
{
|
||||
case 6:
|
||||
if (!(svga->crtc[0x36] & 0x10) && !(val & 0x08)) {
|
||||
svga->write_bank = ((et4000->banking2 & 1) << 20) | ((et4000->banking & 0xf) * 65536);
|
||||
svga->read_bank = ((et4000->banking2 & 0x10) << 16) | (((et4000->banking >> 4) & 0xf) * 65536);
|
||||
} else
|
||||
svga->write_bank = svga->read_bank = 0;
|
||||
|
||||
svga->gdcreg[svga->gdcaddr & 15] = val;
|
||||
et4000w32p_recalcmapping(et4000);
|
||||
return;
|
||||
@@ -241,10 +247,11 @@ void et4000w32p_out(uint16_t addr, uint8_t val, void *p)
|
||||
old = svga->crtc[svga->crtcreg];
|
||||
svga->crtc[svga->crtcreg] = val;
|
||||
if (svga->crtcreg == 0x36) {
|
||||
if (!(val & 0x10)) {
|
||||
if (!(val & 0x10) && !(svga->gdcreg[6] & 0x08)) {
|
||||
svga->write_bank = ((et4000->banking2 & 1) << 20) | ((et4000->banking & 0xf) * 65536);
|
||||
svga->read_bank = ((et4000->banking2 & 0x10) << 16) | (((et4000->banking >> 4) & 0xf) * 65536);
|
||||
}
|
||||
} else
|
||||
svga->write_bank = svga->read_bank = 0;
|
||||
}
|
||||
if (old != val)
|
||||
{
|
||||
|
@@ -40,7 +40,7 @@
|
||||
* W = 3 bus clocks
|
||||
* L = 4 bus clocks
|
||||
*
|
||||
* Version: @(#)video.c 1.0.24 2018/08/16
|
||||
* Version: @(#)video.c 1.0.25 2018/08/26
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -411,8 +411,10 @@ static video_timings_t timing_wd90c11 = {VIDEO_ISA, 3, 3, 6, 5, 5,10};
|
||||
static video_timings_t timing_oti067 = {VIDEO_ISA, 6, 8,16, 6, 8,16};
|
||||
static video_timings_t timing_vga = {VIDEO_ISA, 8,16,32, 8,16,32};
|
||||
static video_timings_t timing_ps1_svga = {VIDEO_ISA, 6, 8,16, 6, 8,16};
|
||||
static video_timings_t timing_tg286m = {VIDEO_ISA, 3, 3, 6, 5, 5,10};
|
||||
static video_timings_t timing_t3100e = {VIDEO_ISA, 8,16,32, 8,16,32};
|
||||
static video_timings_t timing_endeavor = {VIDEO_BUS, 3, 2, 4,25,25,40};
|
||||
static video_timings_t timing_pb640 = {VIDEO_BUS, 4, 4, 8,10,10,20};
|
||||
|
||||
void
|
||||
video_update_timing(void)
|
||||
@@ -467,12 +469,18 @@ video_update_timing(void)
|
||||
case ROM_IBMPS1_2133:
|
||||
timing = &timing_ps1_svga;
|
||||
break;
|
||||
case ROM_TG286M:
|
||||
timing = &timing_tg286m;
|
||||
break;
|
||||
case ROM_T3100E:
|
||||
timing = &timing_t3100e;
|
||||
break;
|
||||
case ROM_ENDEAVOR:
|
||||
timing = &timing_endeavor;
|
||||
break;
|
||||
case ROM_PB640:
|
||||
timing = &timing_pb640;
|
||||
break;
|
||||
default:
|
||||
new_gfxcard = video_old_to_new(gfxcard);
|
||||
timing = video_card_gettiming(new_gfxcard);
|
||||
|
Reference in New Issue
Block a user