diff --git a/src/pc.c b/src/pc.c index 3a78b8b..4752655 100644 --- a/src/pc.c +++ b/src/pc.c @@ -700,7 +700,7 @@ void loadconfig(char *fn) gfxcard = video_get_video_from_internal_name(p); else gfxcard = 0; - video_speed = config_get_int(CFG_MACHINE, NULL, "video_speed", 3); + video_speed = config_get_int(CFG_MACHINE, NULL, "video_speed", -1); p = (char *)config_get_string(CFG_MACHINE, NULL, "sndcard", ""); if (p) sound_card_current = sound_card_get_from_internal_name(p); diff --git a/src/video.c b/src/video.c index 952828e..43b8d23 100644 --- a/src/video.c +++ b/src/video.c @@ -44,43 +44,54 @@ #include "vid_t3100e.h" #include "vid_t1000.h" +enum +{ + VIDEO_ISA = 0, + VIDEO_BUS +}; + typedef struct { char name[64]; char internal_name[24]; device_t *device; int legacy_id; + struct + { + int type; + int b, w, l; + } timing; } VIDEO_CARD; static VIDEO_CARD video_cards[] = { - {"ATI Graphics Pro Turbo (Mach64 GX)", "mach64gx", &mach64gx_device, GFX_MACH64GX}, - {"ATI Video Xpression (Mach64 VT2)", "mach64vt2", &mach64vt2_device, GFX_MACH64VT2}, - {"ATI VGA Charger (ATI-28800)", "ati28800", &ati28800_device, GFX_VGACHARGER}, - {"ATI VGA Edge-16 (ATI-18800)", "ati18800", &ati18800_device, GFX_VGAEDGE16}, - {"CGA", "cga", &cga_device, GFX_CGA}, - {"Cirrus Logic CL-GD5429", "cl_gd5429", &gd5429_device, GFX_CL_GD5429}, - {"Diamond Stealth 32 (Tseng ET4000/w32p)", "stealth32", &et4000w32p_device, GFX_ET4000W32}, - {"Diamond Stealth 3D 2000 (S3 ViRGE)", "stealth3d_2000", &s3_virge_device, GFX_VIRGE}, - {"EGA", "ega", &ega_device, GFX_EGA}, - {"Hercules", "hercules", &hercules_device, GFX_HERCULES}, - {"Hercules InColor", "incolor", &incolor_device, GFX_INCOLOR}, - {"MDA", "mda", &mda_device, GFX_MDA}, - {"MDSI Genius", "genius", &genius_device, GFX_GENIUS}, - {"Number Nine 9FX (S3 Trio64)", "n9_9fx", &s3_9fx_device, GFX_N9_9FX}, - {"OAK OTI-067", "oti067", &oti067_device, GFX_OTI067}, - {"Olivetti GO481 (Paradise PVGA1A)", "olivetti_go481", ¶dise_pvga1a_oli_go481_device, GFX_OLIVETTI_GO481}, - {"Paradise Bahamas 64 (S3 Vision864)", "bahamas64", &s3_bahamas64_device, GFX_BAHAMAS64}, - {"Phoenix S3 Trio32", "px_trio32", &s3_phoenix_trio32_device, GFX_PHOENIX_TRIO32}, - {"Phoenix S3 Trio64", "px_trio64", &s3_phoenix_trio64_device, GFX_PHOENIX_TRIO64}, - {"Plantronics ColorPlus", "plantronics", &colorplus_device, GFX_COLORPLUS}, - {"S3 ViRGE/DX", "virge375", &s3_virge_375_device, GFX_VIRGEDX}, - {"Trident TVGA8900D", "tvga8900d", &tvga8900d_device, GFX_TVGA}, - {"Tseng ET4000AX", "et4000ax", &et4000_device, GFX_ET4000}, - {"Trident TGUI9440", "tgui9440", &tgui9440_device, GFX_TGUI9440}, - {"VGA", "vga", &vga_device, GFX_VGA}, - {"Wyse 700", "wy700", &wy700_device, GFX_WY700}, - {"", "", NULL, 0} + {"ATI Graphics Pro Turbo (Mach64 GX)", "mach64gx", &mach64gx_device, GFX_MACH64GX, {VIDEO_BUS, 4, 8, 16}}, + {"ATI Video Xpression (Mach64 VT2)", "mach64vt2", &mach64vt2_device, GFX_MACH64VT2, {VIDEO_BUS, 3, 3, 4}}, + {"ATI VGA Charger (ATI-28800)", "ati28800", &ati28800_device, GFX_VGACHARGER, {VIDEO_ISA, 3, 3, 6}}, + {"ATI VGA Edge-16 (ATI-18800)", "ati18800", &ati18800_device, GFX_VGAEDGE16, {VIDEO_ISA, 3, 3, 6}}, + {"CGA", "cga", &cga_device, GFX_CGA, {VIDEO_ISA, 8, 16, 32}}, + {"Cirrus Logic CL-GD5429", "cl_gd5429", &gd5429_device, GFX_CL_GD5429, {VIDEO_ISA, 3, 3, 6}}, + {"Diamond Stealth 32 (Tseng ET4000/w32p)", "stealth32", &et4000w32p_device, GFX_ET4000W32, {VIDEO_BUS, 4, 5, 10}}, + {"Diamond Stealth 3D 2000 (S3 ViRGE)", "stealth3d_2000", &s3_virge_device, GFX_VIRGE, {VIDEO_BUS, 3, 5, 10}}, + {"EGA", "ega", &ega_device, GFX_EGA, {VIDEO_ISA, 8, 16, 32}}, + {"Hercules", "hercules", &hercules_device, GFX_HERCULES, {VIDEO_ISA, 8, 16, 32}}, + {"Hercules InColor", "incolor", &incolor_device, GFX_INCOLOR, {VIDEO_ISA, 8, 16, 32}}, + {"MDA", "mda", &mda_device, GFX_MDA, {VIDEO_ISA, 8, 16, 32}}, + {"MDSI Genius", "genius", &genius_device, GFX_GENIUS, {VIDEO_ISA, 8, 16, 32}}, + {"Number Nine 9FX (S3 Trio64)", "n9_9fx", &s3_9fx_device, GFX_N9_9FX, {VIDEO_BUS, 3, 5, 10}}, + {"OAK OTI-067", "oti067", &oti067_device, GFX_OTI067, {VIDEO_ISA, 6, 8, 16}}, + {"Olivetti GO481 (Paradise PVGA1A)", "olivetti_go481", ¶dise_pvga1a_oli_go481_device, GFX_OLIVETTI_GO481, {VIDEO_ISA, 6, 8, 16}}, + {"Paradise Bahamas 64 (S3 Vision864)", "bahamas64", &s3_bahamas64_device, GFX_BAHAMAS64, {VIDEO_BUS, 4, 5, 10}}, + {"Phoenix S3 Trio32", "px_trio32", &s3_phoenix_trio32_device, GFX_PHOENIX_TRIO32, {VIDEO_BUS, 4, 5, 10}}, + {"Phoenix S3 Trio64", "px_trio64", &s3_phoenix_trio64_device, GFX_PHOENIX_TRIO64, {VIDEO_BUS, 3, 5, 10}}, + {"Plantronics ColorPlus", "plantronics", &colorplus_device, GFX_COLORPLUS, {VIDEO_ISA, 8, 16, 32}}, + {"S3 ViRGE/DX", "virge375", &s3_virge_375_device, GFX_VIRGEDX, {VIDEO_BUS, 2, 3, 4}}, + {"Trident TVGA8900D", "tvga8900d", &tvga8900d_device, GFX_TVGA, {VIDEO_ISA, 3, 3, 6}}, + {"Tseng ET4000AX", "et4000ax", &et4000_device, GFX_ET4000, {VIDEO_ISA, 3, 3, 6}}, + {"Trident TGUI9440", "tgui9440", &tgui9440_device, GFX_TGUI9440, {VIDEO_BUS, 4, 8, 16}}, + {"VGA", "vga", &vga_device, GFX_VGA, {VIDEO_ISA, 8, 16, 32}}, + {"Wyse 700", "wy700", &wy700_device, GFX_WY700, {VIDEO_ISA, 8, 16, 32}}, + {"", "", NULL, 0} }; int video_card_available(int card) @@ -210,14 +221,8 @@ Fast VLB/PCI - L = 4 bus clocks */ -enum -{ - VIDEO_ISA = 0, - VIDEO_BUS -}; - int video_speed = 0; -int video_timing[6][4] = +int video_timing[7][4] = { {VIDEO_ISA, 8, 16, 32}, {VIDEO_ISA, 6, 8, 16}, @@ -229,20 +234,42 @@ int video_timing[6][4] = void video_updatetiming() { - if (video_timing[video_speed][0] == VIDEO_ISA) - { - video_timing_b = (int)(isa_timing * video_timing[video_speed][1]); - video_timing_w = (int)(isa_timing * video_timing[video_speed][2]); - video_timing_l = (int)(isa_timing * video_timing[video_speed][3]); + if (video_speed == -1) + { + int new_gfxcard = video_old_to_new(gfxcard); + + if (video_cards[new_gfxcard].timing.type == VIDEO_ISA) + { + video_timing_b = (int)(isa_timing * video_cards[new_gfxcard].timing.b); + video_timing_w = (int)(isa_timing * video_cards[new_gfxcard].timing.w); + video_timing_l = (int)(isa_timing * video_cards[new_gfxcard].timing.l); + } + else + { + video_timing_b = (int)(bus_timing * video_cards[new_gfxcard].timing.b); + video_timing_w = (int)(bus_timing * video_cards[new_gfxcard].timing.w); + video_timing_l = (int)(bus_timing * video_cards[new_gfxcard].timing.l); + } + if (cpu_16bitbus) + video_timing_l = video_timing_w * 2; + } + else + { + if (video_timing[video_speed][0] == VIDEO_ISA) + { + video_timing_b = (int)(isa_timing * video_timing[video_speed][1]); + video_timing_w = (int)(isa_timing * video_timing[video_speed][2]); + video_timing_l = (int)(isa_timing * video_timing[video_speed][3]); + } + else + { + video_timing_b = (int)(bus_timing * video_timing[video_speed][1]); + video_timing_w = (int)(bus_timing * video_timing[video_speed][2]); + video_timing_l = (int)(bus_timing * video_timing[video_speed][3]); + } + if (cpu_16bitbus) + video_timing_l = video_timing_w * 2; } - else - { - video_timing_b = (int)(bus_timing * video_timing[video_speed][1]); - video_timing_w = (int)(bus_timing * video_timing[video_speed][2]); - video_timing_l = (int)(bus_timing * video_timing[video_speed][3]); - } - if (cpu_16bitbus) - video_timing_l = video_timing_w * 2; } int video_timing_b, video_timing_w, video_timing_l; diff --git a/src/wx-config.c b/src/wx-config.c index 806f52e..40f5abd 100644 --- a/src/wx-config.c +++ b/src/wx-config.c @@ -469,7 +469,7 @@ int config_dlgsave(void* hdlg) } h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOSPD")); - video_speed = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0); + video_speed = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0) - 1; cpu_manufacturer = temp_cpu_m; cpu = temp_cpu; @@ -592,13 +592,14 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam) || (cpu_flags & CPU_REQUIRES_DYNAREC), 0); h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOSPD")); + wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) "Default"); wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) "8-bit"); wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) "Slow 16-bit"); wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) "Fast 16-bit"); wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) "Slow VLB/PCI"); wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) "Mid VLB/PCI"); wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) "Fast VLB/PCI"); - wx_sendmessage(h, WX_CB_SETCURSEL, video_speed, 0); + wx_sendmessage(h, WX_CB_SETCURSEL, video_speed+1, 0); h = wx_getdlgitem(hdlg, WX_ID("IDC_MEMSPIN")); printf("%d\n", models[model].ram_granularity);