PCem
changeset 43:f53b76ab6f15
Devices can now be marked as not working, and disabled in release builds.
Video card menu now build dynamically from list.
| author | TomW |
|---|---|
| date | Thu Nov 28 20:03:59 2013 +0000 |
| parents | 2dc5624aebab |
| children | 64fa8cf6ba95 |
| files | src/device.c src/device.h src/pc.rc src/resources.h src/sis496.c src/sound.c src/sound_adlib.c src/sound_adlibgold.c src/sound_cms.c src/sound_gus.c src/sound_pas16.c src/sound_sb.c src/sound_sn76489.c src/sound_wss.c src/vid_ati18800.c src/vid_ati28800.c src/vid_ati_mach64.c src/vid_cga.c src/vid_cl5429.c src/vid_ega.c src/vid_et4000.c src/vid_et4000w32.c src/vid_hercules.c src/vid_mda.c src/vid_olivetti_m24.c src/vid_oti067.c src/vid_paradise.c src/vid_pc1512.c src/vid_pc1640.c src/vid_pc200.c src/vid_s3.c src/vid_s3_virge.c src/vid_tandy.c src/vid_tgui9440.c src/vid_tvga.c src/vid_vga.c src/video.c src/video.h src/win.c |
| diffstat | 39 files changed, 183 insertions(+), 133 deletions(-) [+] |
line diff
1.1 --- a/src/device.c Tue Nov 26 19:35:52 2013 +0000 1.2 +++ b/src/device.c Thu Nov 28 20:03:59 2013 +0000 1.3 @@ -42,6 +42,18 @@ 1.4 } 1.5 } 1.6 1.7 +int device_available(device_t *d) 1.8 +{ 1.9 +#ifdef RELEASE_BUILD 1.10 + if (d->flags & DEVICE_NOT_WORKING) 1.11 + return 0; 1.12 +#endif 1.13 + if (d->available) 1.14 + return d->available(); 1.15 + 1.16 + return 1; 1.17 +} 1.18 + 1.19 void device_speed_changed() 1.20 { 1.21 int c;
2.1 --- a/src/device.h Tue Nov 26 19:35:52 2013 +0000 2.2 +++ b/src/device.h Thu Nov 28 20:03:59 2013 +0000 2.3 @@ -1,6 +1,7 @@ 2.4 typedef struct device_t 2.5 { 2.6 char name[50]; 2.7 + uint32_t flags; 2.8 void *(*init)(); 2.9 void (*close)(void *p); 2.10 int (*available)(); 2.11 @@ -12,6 +13,12 @@ 2.12 void device_init(); 2.13 void device_add(device_t *d); 2.14 void device_close_all(); 2.15 +int device_available(device_t *d); 2.16 void device_speed_changed(); 2.17 void device_force_redraw(); 2.18 char *device_add_status_info(char *s, int max_len); 2.19 + 2.20 +enum 2.21 +{ 2.22 + DEVICE_NOT_WORKING = 1 /*Device does not currently work correctly and will be disabled in a release build*/ 2.23 +};
3.1 --- a/src/pc.rc Tue Nov 26 19:35:52 2013 +0000 3.2 +++ b/src/pc.rc Thu Nov 28 20:03:59 2013 +0000 3.3 @@ -46,7 +46,7 @@ 3.4 DEFPUSHBUTTON "OK",IDOK,17,216,50,14, WS_TABSTOP 3.5 PUSHBUTTON "Cancel",IDCANCEL,71,216,50,14, WS_TABSTOP 3.6 COMBOBOX IDC_COMBO1,62,16,107,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP 3.7 - COMBOBOX IDC_COMBO2,62,36,107,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP 3.8 + COMBOBOX IDC_COMBOVID,62,36,107,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP 3.9 COMBOBOX IDC_COMBOCPUM,62,56,107,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP 3.10 COMBOBOX IDC_COMBO3,62,76,107,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP 3.11 COMBOBOX IDC_COMBOCHC,62,96,107,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
4.1 --- a/src/resources.h Tue Nov 26 19:35:52 2013 +0000 4.2 +++ b/src/resources.h Thu Nov 28 20:03:59 2013 +0000 4.3 @@ -18,7 +18,7 @@ 4.4 #define IDM_CDROM_DISABLED 40200 4.5 4.6 #define IDC_COMBO1 1000 4.7 -#define IDC_COMBO2 1001 4.8 +#define IDC_COMBOVID 1001 4.9 #define IDC_COMBO3 1002 4.10 #define IDC_COMBO4 1003 4.11 #define IDC_COMBO5 1004
5.1 --- a/src/sis496.c Tue Nov 26 19:35:52 2013 +0000 5.2 +++ b/src/sis496.c Thu Nov 28 20:03:59 2013 +0000 5.3 @@ -130,6 +130,7 @@ 5.4 device_t sis496_device = 5.5 { 5.6 "SiS 496/497", 5.7 + 0, 5.8 sis496_init, 5.9 sis496_close, 5.10 NULL,
6.1 --- a/src/sound.c Tue Nov 26 19:35:52 2013 +0000 6.2 +++ b/src/sound.c Thu Nov 28 20:03:59 2013 +0000 6.3 @@ -46,10 +46,8 @@ 6.4 int sound_card_available(int card) 6.5 { 6.6 if (sound_cards[card].device) 6.7 - { 6.8 - if (sound_cards[card].device->available) 6.9 - return sound_cards[card].device->available(); 6.10 - } 6.11 + return device_available(sound_cards[card].device); 6.12 + 6.13 return 1; 6.14 } 6.15
7.1 --- a/src/sound_adlib.c Tue Nov 26 19:35:52 2013 +0000 7.2 +++ b/src/sound_adlib.c Thu Nov 28 20:03:59 2013 +0000 7.3 @@ -56,6 +56,7 @@ 7.4 device_t adlib_device = 7.5 { 7.6 "AdLib", 7.7 + 0, 7.8 adlib_init, 7.9 adlib_close, 7.10 NULL,
8.1 --- a/src/sound_adlibgold.c Tue Nov 26 19:35:52 2013 +0000 8.2 +++ b/src/sound_adlibgold.c Thu Nov 28 20:03:59 2013 +0000 8.3 @@ -591,6 +591,7 @@ 8.4 device_t adgold_device = 8.5 { 8.6 "AdLib Gold", 8.7 + 0, 8.8 adgold_init, 8.9 adgold_close, 8.10 NULL,
9.1 --- a/src/sound_cms.c Tue Nov 26 19:35:52 2013 +0000 9.2 +++ b/src/sound_cms.c Thu Nov 28 20:03:59 2013 +0000 9.3 @@ -173,6 +173,7 @@ 9.4 device_t cms_device = 9.5 { 9.6 "Creative Music System / Game Blaster", 9.7 + 0, 9.8 cms_init, 9.9 cms_close, 9.10 NULL,
10.1 --- a/src/sound_gus.c Tue Nov 26 19:35:52 2013 +0000 10.2 +++ b/src/sound_gus.c Thu Nov 28 20:03:59 2013 +0000 10.3 @@ -1103,6 +1103,7 @@ 10.4 device_t gus_device = 10.5 { 10.6 "Gravis UltraSound", 10.7 + 0, 10.8 gus_init, 10.9 gus_close, 10.10 NULL,
11.1 --- a/src/sound_pas16.c Tue Nov 26 19:35:52 2013 +0000 11.2 +++ b/src/sound_pas16.c Thu Nov 28 20:03:59 2013 +0000 11.3 @@ -747,6 +747,7 @@ 11.4 device_t pas16_device = 11.5 { 11.6 "Pro Audio Spectrum 16", 11.7 + DEVICE_NOT_WORKING, 11.8 pas16_init, 11.9 pas16_close, 11.10 NULL,
12.1 --- a/src/sound_sb.c Tue Nov 26 19:35:52 2013 +0000 12.2 +++ b/src/sound_sb.c Thu Nov 28 20:03:59 2013 +0000 12.3 @@ -432,6 +432,7 @@ 12.4 device_t sb_1_device = 12.5 { 12.6 "Sound Blaster v1.0", 12.7 + 0, 12.8 sb_1_init, 12.9 sb_close, 12.10 NULL, 12.11 @@ -442,6 +443,7 @@ 12.12 device_t sb_15_device = 12.13 { 12.14 "Sound Blaster v1.5", 12.15 + 0, 12.16 sb_15_init, 12.17 sb_close, 12.18 NULL, 12.19 @@ -452,6 +454,7 @@ 12.20 device_t sb_2_device = 12.21 { 12.22 "Sound Blaster v2.0", 12.23 + 0, 12.24 sb_2_init, 12.25 sb_close, 12.26 NULL, 12.27 @@ -462,6 +465,7 @@ 12.28 device_t sb_pro_v1_device = 12.29 { 12.30 "Sound Blaster Pro v1", 12.31 + 0, 12.32 sb_pro_v1_init, 12.33 sb_close, 12.34 NULL, 12.35 @@ -472,6 +476,7 @@ 12.36 device_t sb_pro_v2_device = 12.37 { 12.38 "Sound Blaster Pro v2", 12.39 + 0, 12.40 sb_pro_v2_init, 12.41 sb_close, 12.42 NULL, 12.43 @@ -482,6 +487,7 @@ 12.44 device_t sb_16_device = 12.45 { 12.46 "Sound Blaster 16", 12.47 + 0, 12.48 sb_16_init, 12.49 sb_close, 12.50 NULL, 12.51 @@ -492,6 +498,7 @@ 12.52 device_t sb_awe32_device = 12.53 { 12.54 "Sound Blaster AWE32", 12.55 + 0, 12.56 sb_awe32_init, 12.57 sb_close, 12.58 sb_awe32_available,
13.1 --- a/src/sound_sn76489.c Tue Nov 26 19:35:52 2013 +0000 13.2 +++ b/src/sound_sn76489.c Thu Nov 28 20:03:59 2013 +0000 13.3 @@ -192,6 +192,7 @@ 13.4 device_t sn76489_device = 13.5 { 13.6 "TI SN74689 PSG", 13.7 + 0, 13.8 sn76489_init, 13.9 sn76489_close, 13.10 NULL,
14.1 --- a/src/sound_wss.c Tue Nov 26 19:35:52 2013 +0000 14.2 +++ b/src/sound_wss.c Thu Nov 28 20:03:59 2013 +0000 14.3 @@ -123,6 +123,7 @@ 14.4 device_t wss_device = 14.5 { 14.6 "Windows Sound System", 14.7 + 0, 14.8 wss_init, 14.9 wss_close, 14.10 NULL,
15.1 --- a/src/vid_ati18800.c Tue Nov 26 19:35:52 2013 +0000 15.2 +++ b/src/vid_ati18800.c Thu Nov 28 20:03:59 2013 +0000 15.3 @@ -170,6 +170,7 @@ 15.4 device_t ati18800_device = 15.5 { 15.6 "ATI-18800", 15.7 + 0, 15.8 ati18800_init, 15.9 ati18800_close, 15.10 NULL,
16.1 --- a/src/vid_ati28800.c Tue Nov 26 19:35:52 2013 +0000 16.2 +++ b/src/vid_ati28800.c Thu Nov 28 20:03:59 2013 +0000 16.3 @@ -191,6 +191,7 @@ 16.4 device_t ati28800_device = 16.5 { 16.6 "ATI-28800", 16.7 + 0, 16.8 ati28800_init, 16.9 ati28800_close, 16.10 NULL,
17.1 --- a/src/vid_ati_mach64.c Tue Nov 26 19:35:52 2013 +0000 17.2 +++ b/src/vid_ati_mach64.c Thu Nov 28 20:03:59 2013 +0000 17.3 @@ -2095,6 +2095,7 @@ 17.4 device_t mach64gx_device = 17.5 { 17.6 "ATI Mach64GX", 17.7 + 0, 17.8 mach64gx_init, 17.9 mach64_close, 17.10 NULL,
18.1 --- a/src/vid_cga.c Tue Nov 26 19:35:52 2013 +0000 18.2 +++ b/src/vid_cga.c Thu Nov 28 20:03:59 2013 +0000 18.3 @@ -520,6 +520,7 @@ 18.4 device_t cga_device = 18.5 { 18.6 "CGA", 18.7 + 0, 18.8 cga_standalone_init, 18.9 cga_close, 18.10 NULL,
19.1 --- a/src/vid_cl5429.c Tue Nov 26 19:35:52 2013 +0000 19.2 +++ b/src/vid_cl5429.c Thu Nov 28 20:03:59 2013 +0000 19.3 @@ -869,6 +869,7 @@ 19.4 device_t gd5429_device = 19.5 { 19.6 "Cirrus Logic GD5429", 19.7 + DEVICE_NOT_WORKING, 19.8 gd5429_init, 19.9 gd5429_close, 19.10 NULL,
20.1 --- a/src/vid_ega.c Tue Nov 26 19:35:52 2013 +0000 20.2 +++ b/src/vid_ega.c Thu Nov 28 20:03:59 2013 +0000 20.3 @@ -837,6 +837,7 @@ 20.4 device_t ega_device = 20.5 { 20.6 "EGA", 20.7 + 0, 20.8 ega_standalone_init, 20.9 ega_close, 20.10 NULL,
21.1 --- a/src/vid_et4000.c Tue Nov 26 19:35:52 2013 +0000 21.2 +++ b/src/vid_et4000.c Thu Nov 28 20:03:59 2013 +0000 21.3 @@ -173,6 +173,7 @@ 21.4 device_t et4000_device = 21.5 { 21.6 "Tseng Labs ET4000AX", 21.7 + 0, 21.8 et4000_init, 21.9 et4000_close, 21.10 NULL,
22.1 --- a/src/vid_et4000w32.c Tue Nov 26 19:35:52 2013 +0000 22.2 +++ b/src/vid_et4000w32.c Thu Nov 28 20:03:59 2013 +0000 22.3 @@ -1000,6 +1000,7 @@ 22.4 device_t et4000w32p_device = 22.5 { 22.6 "Tseng Labs ET4000/w32p", 22.7 + 0, 22.8 et4000w32p_init, 22.9 et4000w32p_close, 22.10 NULL,
23.1 --- a/src/vid_hercules.c Tue Nov 26 19:35:52 2013 +0000 23.2 +++ b/src/vid_hercules.c Thu Nov 28 20:03:59 2013 +0000 23.3 @@ -354,6 +354,7 @@ 23.4 device_t hercules_device = 23.5 { 23.6 "Hercules", 23.7 + 0, 23.8 hercules_init, 23.9 hercules_close, 23.10 NULL,
24.1 --- a/src/vid_mda.c Tue Nov 26 19:35:52 2013 +0000 24.2 +++ b/src/vid_mda.c Thu Nov 28 20:03:59 2013 +0000 24.3 @@ -311,6 +311,7 @@ 24.4 device_t mda_device = 24.5 { 24.6 "MDA", 24.7 + 0, 24.8 mda_init, 24.9 mda_close, 24.10 NULL,
25.1 --- a/src/vid_olivetti_m24.c Tue Nov 26 19:35:52 2013 +0000 25.2 +++ b/src/vid_olivetti_m24.c Thu Nov 28 20:03:59 2013 +0000 25.3 @@ -482,6 +482,7 @@ 25.4 device_t m24_device = 25.5 { 25.6 "Olivetti M24 (video)", 25.7 + 0, 25.8 m24_init, 25.9 m24_close, 25.10 NULL,
26.1 --- a/src/vid_oti067.c Tue Nov 26 19:35:52 2013 +0000 26.2 +++ b/src/vid_oti067.c Thu Nov 28 20:03:59 2013 +0000 26.3 @@ -159,6 +159,7 @@ 26.4 device_t oti067_device = 26.5 { 26.6 "Oak OTI-067", 26.7 + 0, 26.8 oti067_init, 26.9 oti067_close, 26.10 NULL,
27.1 --- a/src/vid_paradise.c Tue Nov 26 19:35:52 2013 +0000 27.2 +++ b/src/vid_paradise.c Thu Nov 28 20:03:59 2013 +0000 27.3 @@ -345,6 +345,7 @@ 27.4 device_t paradise_pvga1a_device = 27.5 { 27.6 "Paradise PVGA1A", 27.7 + 0, 27.8 paradise_pvga1a_init, 27.9 paradise_close, 27.10 NULL, 27.11 @@ -355,6 +356,7 @@ 27.12 device_t paradise_wd90c11_device = 27.13 { 27.14 "Paradise WD90C11", 27.15 + 0, 27.16 paradise_wd90c11_init, 27.17 paradise_close, 27.18 NULL,
28.1 --- a/src/vid_pc1512.c Tue Nov 26 19:35:52 2013 +0000 28.2 +++ b/src/vid_pc1512.c Thu Nov 28 20:03:59 2013 +0000 28.3 @@ -481,6 +481,7 @@ 28.4 device_t pc1512_device = 28.5 { 28.6 "Amstrad PC1512 (video)", 28.7 + 0, 28.8 pc1512_init, 28.9 pc1512_close, 28.10 NULL,
29.1 --- a/src/vid_pc1640.c Tue Nov 26 19:35:52 2013 +0000 29.2 +++ b/src/vid_pc1640.c Thu Nov 28 20:03:59 2013 +0000 29.3 @@ -144,6 +144,7 @@ 29.4 device_t pc1640_device = 29.5 { 29.6 "Amstrad PC1640 (video)", 29.7 + 0, 29.8 pc1640_init, 29.9 pc1640_close, 29.10 NULL,
30.1 --- a/src/vid_pc200.c Tue Nov 26 19:35:52 2013 +0000 30.2 +++ b/src/vid_pc200.c Thu Nov 28 20:03:59 2013 +0000 30.3 @@ -134,6 +134,7 @@ 30.4 device_t pc200_device = 30.5 { 30.6 "Amstrad PC200 (video)", 30.7 + 0, 30.8 pc200_init, 30.9 pc200_close, 30.10 NULL,
31.1 --- a/src/vid_s3.c Tue Nov 26 19:35:52 2013 +0000 31.2 +++ b/src/vid_s3.c Thu Nov 28 20:03:59 2013 +0000 31.3 @@ -1689,6 +1689,7 @@ 31.4 device_t s3_bahamas64_device = 31.5 { 31.6 "Paradise Bahamas 64 (S3 Vision864)", 31.7 + 0, 31.8 s3_bahamas64_init, 31.9 s3_close, 31.10 NULL, 31.11 @@ -1700,6 +1701,7 @@ 31.12 device_t s3_9fx_device = 31.13 { 31.14 "Number 9 9FX (S3 Trio64)", 31.15 + 0, 31.16 s3_9fx_init, 31.17 s3_close, 31.18 NULL,
32.1 --- a/src/vid_s3_virge.c Tue Nov 26 19:35:52 2013 +0000 32.2 +++ b/src/vid_s3_virge.c Thu Nov 28 20:03:59 2013 +0000 32.3 @@ -517,6 +517,7 @@ 32.4 device_t s3_virge_device = 32.5 { 32.6 "Diamond Stealth 3D 2000 (S3 VIRGE)", 32.7 + DEVICE_NOT_WORKING, 32.8 s3_virge_init, 32.9 s3_virge_close, 32.10 NULL,
33.1 --- a/src/vid_tandy.c Tue Nov 26 19:35:52 2013 +0000 33.2 +++ b/src/vid_tandy.c Thu Nov 28 20:03:59 2013 +0000 33.3 @@ -691,6 +691,7 @@ 33.4 device_t tandy_device = 33.5 { 33.6 "Tandy 1000 (video)", 33.7 + 0, 33.8 tandy_init, 33.9 tandy_close, 33.10 NULL,
34.1 --- a/src/vid_tgui9440.c Tue Nov 26 19:35:52 2013 +0000 34.2 +++ b/src/vid_tgui9440.c Thu Nov 28 20:03:59 2013 +0000 34.3 @@ -1124,6 +1124,7 @@ 34.4 device_t tgui9440_device = 34.5 { 34.6 "Trident TGUI 9440", 34.7 + 0, 34.8 tgui9440_init, 34.9 tgui_close, 34.10 NULL,
35.1 --- a/src/vid_tvga.c Tue Nov 26 19:35:52 2013 +0000 35.2 +++ b/src/vid_tvga.c Thu Nov 28 20:03:59 2013 +0000 35.3 @@ -284,6 +284,7 @@ 35.4 device_t tvga8900d_device = 35.5 { 35.6 "Trident TVGA 8900D", 35.7 + 0, 35.8 tvga8900d_init, 35.9 tvga_close, 35.10 NULL,
36.1 --- a/src/vid_vga.c Tue Nov 26 19:35:52 2013 +0000 36.2 +++ b/src/vid_vga.c Thu Nov 28 20:03:59 2013 +0000 36.3 @@ -124,6 +124,7 @@ 36.4 device_t vga_device = 36.5 { 36.6 "VGA", 36.7 + DEVICE_NOT_WORKING, 36.8 vga_init, 36.9 vga_close, 36.10 NULL,
37.1 --- a/src/video.c Tue Nov 26 19:35:52 2013 +0000 37.2 +++ b/src/video.c Thu Nov 28 20:03:59 2013 +0000 37.3 @@ -33,6 +33,81 @@ 37.4 #include "vid_tvga.h" 37.5 #include "vid_vga.h" 37.6 37.7 +typedef struct 37.8 +{ 37.9 + char name[64]; 37.10 + device_t *device; 37.11 + int legacy_id; 37.12 +} VIDEO_CARD; 37.13 + 37.14 +static VIDEO_CARD video_cards[] = 37.15 +{ 37.16 + {"CGA", &cga_device, GFX_CGA}, 37.17 + {"MDA", &mda_device, GFX_MDA}, 37.18 + {"Hercules", &hercules_device, GFX_HERCULES}, 37.19 + {"EGA", &ega_device, GFX_EGA}, 37.20 + {"Trident TVGA8900D", &tvga8900d_device, GFX_TVGA}, 37.21 + {"Tseng ET4000AX", &et4000_device, GFX_ET4000}, 37.22 + {"Diamond Stealth 32 (Tseng ET4000/w32p)", &et4000w32p_device, GFX_ET4000W32}, 37.23 + {"Paradise Bahamas 64 (S3 Vision864)", &s3_bahamas64_device, GFX_BAHAMAS64}, 37.24 + {"Number Nine 9FX (S3 Trio64)", &s3_9fx_device, GFX_N9_9FX}, 37.25 + {"Diamond Stealth 3D 2000 (S3 ViRGE)", &s3_virge_device, GFX_VIRGE}, 37.26 + {"Trident TGUI9440", &tgui9440_device, GFX_TGUI9440}, 37.27 + {"VGA", &vga_device, GFX_VGA}, 37.28 + {"ATI VGA Edge-16 (ATI-18800)", &ati18800_device, GFX_VGAEDGE16}, 37.29 + {"ATI VGA Charger", &ati28800_device, GFX_VGACHARGER}, 37.30 + {"OAK OTI-067", &oti067_device, GFX_OTI067}, 37.31 + {"ATI Graphics Pro Turbo (Mach64 GX)", &mach64gx_device, GFX_MACH64GX}, 37.32 + {"Cirrus Logic CL-GD5429", &gd5429_device, GFX_CL_GD5429}, 37.33 + {"", NULL, 0} 37.34 +}; 37.35 + 37.36 +int video_card_available(int card) 37.37 +{ 37.38 + if (video_cards[card].device) 37.39 + return device_available(video_cards[card].device); 37.40 + 37.41 + return 1; 37.42 +} 37.43 + 37.44 +char *video_card_getname(int card) 37.45 +{ 37.46 + return video_cards[card].name; 37.47 +} 37.48 + 37.49 +int video_card_getid(char *s) 37.50 +{ 37.51 + int c = 0; 37.52 + 37.53 + while (video_cards[c].device) 37.54 + { 37.55 + if (!strcmp(video_cards[c].name, s)) 37.56 + return c; 37.57 + c++; 37.58 + } 37.59 + 37.60 + return 0; 37.61 +} 37.62 + 37.63 +int video_old_to_new(int card) 37.64 +{ 37.65 + int c = 0; 37.66 + 37.67 + while (video_cards[c].device) 37.68 + { 37.69 + if (video_cards[c].legacy_id == card) 37.70 + return c; 37.71 + c++; 37.72 + } 37.73 + 37.74 + return 0; 37.75 +} 37.76 + 37.77 +int video_new_to_old(int card) 37.78 +{ 37.79 + return video_cards[card].legacy_id; 37.80 +} 37.81 + 37.82 uint32_t *video_15to32, *video_16to32; 37.83 37.84 int egareads=0,egawrites=0; 37.85 @@ -159,82 +234,7 @@ 37.86 device_add(&oti067_device); 37.87 return; 37.88 } 37.89 - switch (gfxcard) 37.90 - { 37.91 - case GFX_MDA: 37.92 - device_add(&mda_device); 37.93 - break; 37.94 - 37.95 - case GFX_HERCULES: 37.96 - device_add(&hercules_device); 37.97 - break; 37.98 - 37.99 - case GFX_CGA: 37.100 - device_add(&cga_device); 37.101 - break; 37.102 - 37.103 - case GFX_EGA: 37.104 - device_add(&ega_device); 37.105 - break; 37.106 - 37.107 - case GFX_TVGA: 37.108 - device_add(&tvga8900d_device); 37.109 - break; 37.110 - 37.111 - case GFX_ET4000: 37.112 - device_add(&et4000_device); 37.113 - break; 37.114 - 37.115 - case GFX_ET4000W32: 37.116 - device_add(&et4000w32p_device); 37.117 - break; 37.118 - 37.119 - case GFX_BAHAMAS64: 37.120 - device_add(&s3_bahamas64_device); 37.121 - break; 37.122 - 37.123 - case GFX_N9_9FX: 37.124 - device_add(&s3_9fx_device); 37.125 - break; 37.126 - 37.127 - case GFX_STEALTH64: 37.128 - break; 37.129 - 37.130 - case GFX_VIRGE: 37.131 - device_add(&s3_virge_device); 37.132 - break; 37.133 - 37.134 - case GFX_TGUI9440: 37.135 - device_add(&tgui9440_device); 37.136 - break; 37.137 - 37.138 - case GFX_VGA: 37.139 - device_add(&vga_device); 37.140 - break; 37.141 - 37.142 - case GFX_VGAEDGE16: 37.143 - device_add(&ati18800_device); 37.144 - break; 37.145 - 37.146 - case GFX_VGACHARGER: 37.147 - device_add(&ati18800_device); 37.148 - break; 37.149 - 37.150 - case GFX_OTI067: 37.151 - device_add(&oti067_device); 37.152 - return; 37.153 - 37.154 - case GFX_MACH64GX: 37.155 - device_add(&mach64gx_device); 37.156 - return; 37.157 - 37.158 - case GFX_CL_GD5429: 37.159 - device_add(&gd5429_device); 37.160 - return; 37.161 - 37.162 - default: 37.163 - fatal("Bad gfx card %i\n",gfxcard); 37.164 - } 37.165 + device_add(video_cards[video_old_to_new(gfxcard)].device); 37.166 } 37.167 37.168 37.169 @@ -245,29 +245,7 @@ 37.170 37.171 int xsize=1,ysize=1; 37.172 37.173 - 37.174 -PALETTE cgapal;/* = 37.175 -{ 37.176 - { 0, 0, 0},{0,42,0},{42,0,0},{42,21,0}, 37.177 - { 0, 0, 0},{0,42,42},{42,0,42},{42,42,42}, 37.178 - { 0, 0, 0},{21,63,21},{63,21,21},{63,63,21}, 37.179 - { 0, 0, 0},{21,63,63},{63,21,63},{63,63,63}, 37.180 - 37.181 - {0, 0, 0}, { 0, 0, 42}, { 0, 42, 0}, { 0, 42, 42}, 37.182 - {42, 0, 0}, {42, 0, 42}, {42, 21, 00}, {42, 42, 42}, 37.183 - {21, 21, 21}, {21, 21, 63}, {21, 63, 21}, {21, 63, 63}, 37.184 - {63, 21, 21}, {63, 21, 63}, {63, 63, 21}, {63, 63, 63}, 37.185 - 37.186 - {0,0,0},{0,21,0},{0,0,42},{0,42,42}, 37.187 - {42,0,21},{21,10,21},{42,0,42},{42,0,63}, 37.188 - {21,21,21},{21,63,21},{42,21,42},{21,63,63}, 37.189 - {63,0,0},{42,42,0},{63,21,42},{41,41,41}, 37.190 - 37.191 - {0,0,0},{0,42,42},{42,0,0},{42,42,42}, 37.192 - {0,0,0},{0,42,42},{42,0,0},{42,42,42}, 37.193 - {0,0,0},{0,63,63},{63,0,0},{63,63,63}, 37.194 - {0,0,0},{0,63,63},{63,0,0},{63,63,63}, 37.195 -};*/ 37.196 +PALETTE cgapal; 37.197 37.198 void loadfont(char *s, int format) 37.199 {
38.1 --- a/src/video.h Tue Nov 26 19:35:52 2013 +0000 38.2 +++ b/src/video.h Thu Nov 28 20:03:59 2013 +0000 38.3 @@ -1,3 +1,9 @@ 38.4 +int video_card_available(int card); 38.5 +char *video_card_getname(int card); 38.6 +int video_card_getid(char *s); 38.7 +int video_old_to_new(int card); 38.8 +int video_new_to_old(int card); 38.9 + 38.10 extern int egareads,egawrites; 38.11 38.12 extern int fullchange;
39.1 --- a/src/win.c Tue Nov 26 19:35:52 2013 +0000 39.2 +++ b/src/win.c Thu Nov 28 20:03:59 2013 +0000 39.3 @@ -560,7 +560,6 @@ 39.4 39.5 extern int is486; 39.6 int romstolist[26], listtomodel[26], romstomodel[26], modeltolist[26]; 39.7 -int vidtolist[20],listtovid[20]; 39.8 static int settings_sound_to_list[20], settings_list_to_sound[20]; 39.9 39.10 int mem_list_to_size[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,32,48,64,256}; 39.11 @@ -578,6 +577,7 @@ 39.12 39.13 BOOL CALLBACK configdlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) 39.14 { 39.15 + char temp_str[256]; 39.16 HWND h; 39.17 int c, d; 39.18 int rom,gfx,mem,fpu; 39.19 @@ -606,29 +606,27 @@ 39.20 c++; 39.21 } 39.22 SendMessage(h, CB_SETCURSEL, modeltolist[model], 0); 39.23 - 39.24 - h=GetDlgItem(hdlg,IDC_COMBO2); 39.25 - memset(vidtolist, 0, sizeof(vidtolist)); 39.26 - c=4; 39.27 - SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"CGA"); vidtolist[GFX_CGA]=0; listtovid[0]=0; 39.28 - SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"MDA"); vidtolist[GFX_MDA]=1; listtovid[1]=1; 39.29 - SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"Hercules"); vidtolist[GFX_HERCULES]=2; listtovid[2]=2; 39.30 - SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"EGA"); vidtolist[GFX_EGA]=3; listtovid[3]=3; 39.31 - if (gfx_present[GFX_TVGA]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"Trident 8900D"); vidtolist[GFX_TVGA]=c; listtovid[c]=GFX_TVGA; c++; } 39.32 - if (gfx_present[GFX_ET4000]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"Tseng ET4000AX"); vidtolist[GFX_ET4000]=c; listtovid[c]=GFX_ET4000; c++; } 39.33 - if (gfx_present[GFX_ET4000W32]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"Diamond Stealth 32"); vidtolist[GFX_ET4000W32]=c; listtovid[c]=GFX_ET4000W32; c++; } 39.34 - if (gfx_present[GFX_BAHAMAS64]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"Paradise Bahamas 64"); vidtolist[GFX_BAHAMAS64]=c; listtovid[c]=GFX_BAHAMAS64; c++; } 39.35 - if (gfx_present[GFX_N9_9FX]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"Number Nine 9FX"); vidtolist[GFX_N9_9FX]=c; listtovid[c]=GFX_N9_9FX; c++; } 39.36 - if (gfx_present[GFX_VIRGE]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"S3 VIRGE"); vidtolist[GFX_VIRGE]=c; listtovid[c]=GFX_VIRGE; c++; } 39.37 - if (gfx_present[GFX_TGUI9440]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"Trident TGUI9440"); vidtolist[GFX_TGUI9440]=c; listtovid[c]=GFX_TGUI9440; c++; } 39.38 - if (gfx_present[GFX_VGA]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"VGA"); vidtolist[GFX_VGA]=c; listtovid[c]=GFX_VGA; c++; } 39.39 - if (gfx_present[GFX_VGAEDGE16]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"ATI VGA Edge-16"); vidtolist[GFX_VGAEDGE16]=c; listtovid[c]=GFX_VGAEDGE16; c++; } 39.40 - if (gfx_present[GFX_VGACHARGER]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"ATI VGA Charger"); vidtolist[GFX_VGACHARGER]=c; listtovid[c]=GFX_VGACHARGER; c++; } 39.41 - if (gfx_present[GFX_OTI067]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"Oak OTI-067"); vidtolist[GFX_OTI067]=c; listtovid[c]=GFX_OTI067; c++; } 39.42 - if (gfx_present[GFX_MACH64GX]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"ATI Graphics Pro Turbo"); vidtolist[GFX_MACH64GX]=c; listtovid[c]=GFX_MACH64GX; c++; } 39.43 - if (gfx_present[GFX_CL_GD5429]) { SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)"Cirrus Logic CL-GD5429"); vidtolist[GFX_CL_GD5429]=c; listtovid[c]=GFX_CL_GD5429; c++; } 39.44 - SendMessage(h,CB_SETCURSEL,vidtolist[gfxcard],0); 39.45 - if (models[model].fixed_gfxcard) EnableWindow(h,FALSE); 39.46 + 39.47 + h = GetDlgItem(hdlg, IDC_COMBOVID); 39.48 + c = d = 0; 39.49 + while (1) 39.50 + { 39.51 + char *s = video_card_getname(c); 39.52 + 39.53 + if (!s[0]) 39.54 + break; 39.55 + 39.56 + if (video_card_available(c)) 39.57 + { 39.58 + SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)s); 39.59 + if (video_new_to_old(c) == gfxcard) 39.60 + SendMessage(h, CB_SETCURSEL, d, 0); 39.61 + 39.62 + d++; 39.63 + } 39.64 + 39.65 + c++; 39.66 + } 39.67 39.68 h=GetDlgItem(hdlg,IDC_COMBOCPUM); 39.69 c = 0; 39.70 @@ -736,8 +734,9 @@ 39.71 h=GetDlgItem(hdlg,IDC_COMBO1); 39.72 temp_model = listtomodel[SendMessage(h,CB_GETCURSEL,0,0)]; 39.73 39.74 - h=GetDlgItem(hdlg,IDC_COMBO2); 39.75 - gfx=listtovid[SendMessage(h,CB_GETCURSEL,0,0)]; 39.76 + h = GetDlgItem(hdlg, IDC_COMBOVID); 39.77 + SendMessage(h, CB_GETLBTEXT, SendMessage(h,CB_GETCURSEL,0,0), (LPARAM)temp_str); 39.78 + gfx = video_new_to_old(video_card_getid(temp_str)); 39.79 39.80 h=GetDlgItem(hdlg,IDC_COMBOMEM); 39.81 mem=mem_list_to_size[SendMessage(h,CB_GETCURSEL,0,0)]; 39.82 @@ -818,11 +817,22 @@ 39.83 temp_model = listtomodel[SendMessage(h,CB_GETCURSEL,0,0)]; 39.84 39.85 /*Enable/disable gfxcard list*/ 39.86 - h = GetDlgItem(hdlg, IDC_COMBO2); 39.87 + h = GetDlgItem(hdlg, IDC_COMBOVID); 39.88 if (!models[temp_model].fixed_gfxcard) 39.89 { 39.90 + char *s = video_card_getname(video_old_to_new(gfxcard)); 39.91 + 39.92 EnableWindow(h, TRUE); 39.93 - SendMessage(h, CB_SETCURSEL, gfxcard, 0); 39.94 + 39.95 + c = 0; 39.96 + while (1) 39.97 + { 39.98 + SendMessage(h, CB_GETLBTEXT, c, (LPARAM)temp_str); 39.99 + if (!strcmp(temp_str, s)) 39.100 + break; 39.101 + c++; 39.102 + } 39.103 + SendMessage(h, CB_SETCURSEL, c, 0); 39.104 } 39.105 else 39.106 EnableWindow(h, FALSE);
