From b491d70a58f27c533ec4c269c0219f93e7f9a6af Mon Sep 17 00:00:00 2001 From: TomW Date: Thu, 10 Jul 2014 20:25:10 +0100 Subject: [PATCH] Added Phoenix Trio64. S3 cards now report FPM memory - allows 4 MB on Phoenix Trio64. --- src/ibm.h | 1 + src/vid_s3.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++-- src/vid_s3.h | 1 + src/video.c | 1 + 4 files changed, 73 insertions(+), 2 deletions(-) diff --git a/src/ibm.h b/src/ibm.h index 816df1c..711bfdc 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -347,6 +347,7 @@ enum GFX_CL_GD5429, /*Cirrus Logic CL-GD5429*/ GFX_VIRGEDX, /*S3 Virge/DX*/ GFX_PHOENIX_TRIO32, /*S3 732/Trio32 (Phoenix)*/ + GFX_PHOENIX_TRIO64, /*S3 764/Trio64 (Phoenix)*/ GFX_MAX }; diff --git a/src/vid_s3.c b/src/vid_s3.c index 5c77165..a183b08 100644 --- a/src/vid_s3.c +++ b/src/vid_s3.c @@ -1933,9 +1933,9 @@ static void *s3_init(char *bios_fn, int chip) NULL); if (PCI) - svga->crtc[0x36] = 2 | (2 << 2) | (1 << 4) | (vram_sizes[vram] << 5); + svga->crtc[0x36] = 2 | (3 << 2) | (1 << 4) | (vram_sizes[vram] << 5); else - svga->crtc[0x36] = 1 | (2 << 2) | (1 << 4) | (vram_sizes[vram] << 5); + svga->crtc[0x36] = 1 | (3 << 2) | (1 << 4) | (vram_sizes[vram] << 5); svga->crtc[0x37] = 1 | (7 << 5); s3_io_set(s3); @@ -2012,6 +2012,26 @@ int s3_phoenix_trio32_available() return rom_present("roms/86C732P.bin"); } +void *s3_phoenix_trio64_init() +{ + s3_t *s3 = s3_init("roms/86c764x1.bin", S3_TRIO64); + svga_t *svga = &s3->svga; + + s3->id = 0xe1; /*Trio64*/ + s3->id_ext = s3->id_ext_pci = 0x11; + s3->packed_mmio = 1; + + s3->getclock = s3_trio64_getclock; + s3->getclock_p = s3; + + return s3; +} + +int s3_phoenix_trio64_available() +{ + return rom_present("roms/86c764x1.bin"); +} + void s3_close(void *p) { s3_t *s3 = (s3_t *)p; @@ -2133,6 +2153,41 @@ static device_config_t s3_phoenix_trio32_config[] = } }; +static device_config_t s3_phoenix_trio64_config[] = +{ + { + .name = "memory", + .description = "Memory size", + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "512 KB", + .value = 0 + }, + { + .description = "1 MB", + .value = 1 + }, + { + .description = "2 MB", + .value = 2 + }, + { + .description = "4 MB", + .value = 4 + }, + { + .description = "" + } + }, + .default_int = 2 + }, + { + .type = -1 + } +}; + device_t s3_bahamas64_device = { "Paradise Bahamas 64 (S3 Vision864)", @@ -2171,3 +2226,16 @@ device_t s3_phoenix_trio32_device = s3_add_status_info, s3_phoenix_trio32_config }; + +device_t s3_phoenix_trio64_device = +{ + "Phoenix S3 Trio64", + 0, + s3_phoenix_trio64_init, + s3_close, + s3_phoenix_trio64_available, + s3_speed_changed, + s3_force_redraw, + s3_add_status_info, + s3_phoenix_trio64_config +}; diff --git a/src/vid_s3.h b/src/vid_s3.h index c1bbb20..c4bee58 100644 --- a/src/vid_s3.h +++ b/src/vid_s3.h @@ -1,3 +1,4 @@ device_t s3_bahamas64_device; device_t s3_9fx_device; device_t s3_phoenix_trio32_device; +device_t s3_phoenix_trio64_device; diff --git a/src/video.c b/src/video.c index 54e5444..19bf00c 100644 --- a/src/video.c +++ b/src/video.c @@ -58,6 +58,7 @@ static VIDEO_CARD video_cards[] = {"OAK OTI-067", &oti067_device, GFX_OTI067}, {"Paradise Bahamas 64 (S3 Vision864)", &s3_bahamas64_device, GFX_BAHAMAS64}, {"Phoenix S3 Trio32", &s3_phoenix_trio32_device, GFX_PHOENIX_TRIO32}, + {"Phoenix S3 Trio64", &s3_phoenix_trio64_device, GFX_PHOENIX_TRIO64}, {"S3 ViRGE/DX", &s3_virge_375_device, GFX_VIRGEDX}, {"Trident TVGA8900D", &tvga8900d_device, GFX_TVGA}, {"Tseng ET4000AX", &et4000_device, GFX_ET4000},