Major changes to video code - no more ROM set checks, and type and timings are set in a card's device init function;
Added the ExpertColor DSV3868P CF55 (S3 Vision868).
This commit is contained in:
@@ -40,7 +40,7 @@
|
||||
* W = 3 bus clocks
|
||||
* L = 4 bus clocks
|
||||
*
|
||||
* Version: @(#)video.c 1.0.25 2018/08/26
|
||||
* Version: @(#)video.c 1.0.26 2018/09/19
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -67,11 +67,6 @@
|
||||
#include "vid_svga.h"
|
||||
|
||||
|
||||
enum {
|
||||
VIDEO_ISA = 0,
|
||||
VIDEO_BUS
|
||||
};
|
||||
|
||||
bitmap_t *screen = NULL,
|
||||
*buffer = NULL,
|
||||
*buffer32 = NULL;
|
||||
@@ -110,6 +105,8 @@ static int video_force_resize;
|
||||
int invert_display = 0;
|
||||
int video_grayscale = 0;
|
||||
int video_graytype = 0;
|
||||
static int vid_type;
|
||||
static const video_timings_t *vid_timings;
|
||||
|
||||
|
||||
PALETTE cgapal = {
|
||||
@@ -400,107 +397,41 @@ cgapal_rebuild(void)
|
||||
}
|
||||
|
||||
|
||||
static video_timings_t timing_dram = {VIDEO_BUS, 0,0,0, 0,0,0}; /*No additional waitstates*/
|
||||
static video_timings_t timing_pc1512 = {VIDEO_BUS, 0,0,0, 0,0,0}; /*PC1512 video code handles waitstates itself*/
|
||||
static video_timings_t timing_pc1640 = {VIDEO_ISA, 8,16,32, 8,16,32};
|
||||
static video_timings_t timing_pc200 = {VIDEO_ISA, 8,16,32, 8,16,32};
|
||||
static video_timings_t timing_m24 = {VIDEO_ISA, 8,16,32, 8,16,32};
|
||||
static video_timings_t timing_t1000 = {VIDEO_ISA, 8,16,32, 8,16,32};
|
||||
static video_timings_t timing_pvga1a = {VIDEO_ISA, 6, 8,16, 6, 8,16};
|
||||
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_inform(int type, const video_timings_t *ptr)
|
||||
{
|
||||
vid_type = type;
|
||||
vid_timings = ptr;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
video_get_type(void)
|
||||
{
|
||||
return vid_type;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
video_update_timing(void)
|
||||
{
|
||||
video_timings_t *timing;
|
||||
int new_gfxcard;
|
||||
if (!vid_timings)
|
||||
return;
|
||||
|
||||
new_gfxcard = 0;
|
||||
|
||||
switch(romset) {
|
||||
case ROM_IBMPCJR:
|
||||
case ROM_TANDY:
|
||||
case ROM_TANDY1000HX:
|
||||
case ROM_TANDY1000SL2:
|
||||
timing = &timing_dram;
|
||||
break;
|
||||
case ROM_PC1512:
|
||||
timing = &timing_pc1512;
|
||||
break;
|
||||
case ROM_PC1640:
|
||||
timing = &timing_pc1640;
|
||||
break;
|
||||
case ROM_PC200:
|
||||
timing = &timing_pc200;
|
||||
break;
|
||||
case ROM_OLIM24:
|
||||
timing = &timing_m24;
|
||||
break;
|
||||
case ROM_PC2086:
|
||||
case ROM_PC3086:
|
||||
timing = &timing_pvga1a;
|
||||
break;
|
||||
case ROM_T1000:
|
||||
case ROM_T1200:
|
||||
timing = &timing_t1000;
|
||||
break;
|
||||
case ROM_AMA932J:
|
||||
timing = &timing_oti067;
|
||||
break;
|
||||
case ROM_MEGAPC:
|
||||
case ROM_MEGAPCDX:
|
||||
timing = &timing_wd90c11;
|
||||
break;
|
||||
case ROM_IBMPS1_2011:
|
||||
case ROM_IBMPS2_M30_286:
|
||||
case ROM_IBMPS2_M50:
|
||||
case ROM_IBMPS2_M55SX:
|
||||
case ROM_IBMPS2_M80:
|
||||
timing = &timing_vga;
|
||||
break;
|
||||
case ROM_IBMPS1_2121:
|
||||
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);
|
||||
break;
|
||||
}
|
||||
|
||||
if (timing->type == VIDEO_ISA) {
|
||||
video_timing_read_b = ISA_CYCLES(timing->read_b);
|
||||
video_timing_read_w = ISA_CYCLES(timing->read_w);
|
||||
video_timing_read_l = ISA_CYCLES(timing->read_l);
|
||||
video_timing_write_b = ISA_CYCLES(timing->write_b);
|
||||
video_timing_write_w = ISA_CYCLES(timing->write_w);
|
||||
video_timing_write_l = ISA_CYCLES(timing->write_l);
|
||||
if (vid_timings->type == VIDEO_ISA) {
|
||||
video_timing_read_b = ISA_CYCLES(vid_timings->read_b);
|
||||
video_timing_read_w = ISA_CYCLES(vid_timings->read_w);
|
||||
video_timing_read_l = ISA_CYCLES(vid_timings->read_l);
|
||||
video_timing_write_b = ISA_CYCLES(vid_timings->write_b);
|
||||
video_timing_write_w = ISA_CYCLES(vid_timings->write_w);
|
||||
video_timing_write_l = ISA_CYCLES(vid_timings->write_l);
|
||||
} else {
|
||||
video_timing_read_b = (int)(bus_timing * timing->read_b);
|
||||
video_timing_read_w = (int)(bus_timing * timing->read_w);
|
||||
video_timing_read_l = (int)(bus_timing * timing->read_l);
|
||||
video_timing_write_b = (int)(bus_timing * timing->write_b);
|
||||
video_timing_write_w = (int)(bus_timing * timing->write_w);
|
||||
video_timing_write_l = (int)(bus_timing * timing->write_l);
|
||||
video_timing_read_b = (int)(bus_timing * vid_timings->read_b);
|
||||
video_timing_read_w = (int)(bus_timing * vid_timings->read_w);
|
||||
video_timing_read_l = (int)(bus_timing * vid_timings->read_l);
|
||||
video_timing_write_b = (int)(bus_timing * vid_timings->write_b);
|
||||
video_timing_write_w = (int)(bus_timing * vid_timings->write_w);
|
||||
video_timing_write_l = (int)(bus_timing * vid_timings->write_l);
|
||||
}
|
||||
|
||||
if (cpu_16bitbus) {
|
||||
|
||||
Reference in New Issue
Block a user