diff --git a/src/Makefile.local b/src/Makefile.local index 6ac2b5f97..4c0ad7d3d 100644 --- a/src/Makefile.local +++ b/src/Makefile.local @@ -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, # @@ -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. diff --git a/src/video/vid_et4000.c b/src/video/vid_et4000.c index bef8fbcf1..a412fe2e5 100644 --- a/src/video/vid_et4000.c +++ b/src/video/vid_et4000.c @@ -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, * Miran Grca, @@ -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) diff --git a/src/video/vid_et4000w32.c b/src/video/vid_et4000w32.c index fe8882632..10328ce5f 100644 --- a/src/video/vid_et4000w32.c +++ b/src/video/vid_et4000w32.c @@ -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, * Miran Grca, @@ -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) { diff --git a/src/video/video.c b/src/video/video.c index c31afb3e9..3bfef69d9 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -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, * Miran Grca, @@ -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);