diff --git a/src/ibm.h b/src/ibm.h index 02fb0fc..5365a29 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -321,7 +321,8 @@ enum GFX_CL_GD5428, /*Cirrus Logic CL-GD5428*/ GFX_IBM_GD5428, /*IBM 1MB SVGA Adapter/A*/ GFX_TVGA9000B, /*Trident TVGA9000B*/ - GFX_BANSHEE, + GFX_BANSHEE, /*Voodoo Banshee - reference PCI board with SGRAM*/ + GFX_CL_BANSHEE, /*Creative Labs Voodoo Blaster Banshee PCI - with SDRAM*/ GFX_MAX }; diff --git a/src/vid_voodoo_banshee.c b/src/vid_voodoo_banshee.c index 796a42d..61e7132 100644 --- a/src/vid_voodoo_banshee.c +++ b/src/vid_voodoo_banshee.c @@ -1864,7 +1864,7 @@ static void banshee_pci_write(int func, int addr, uint8_t val, void *p) } } -static device_config_t banshee_config[] = +static device_config_t banshee_sgram_config[] = { { .name = "memory", @@ -1925,16 +1925,60 @@ static device_config_t banshee_config[] = } }; -static void *banshee_init() +static device_config_t banshee_sdram_config[] = +{ + { + .name = "bilinear", + .description = "Bilinear filtering", + .type = CONFIG_BINARY, + .default_int = 1 + }, + { + .name = "render_threads", + .description = "Render threads", + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "1", + .value = 1 + }, + { + .description = "2", + .value = 2 + }, + { + .description = "" + } + }, + .default_int = 2 + }, +#ifndef NO_CODEGEN + { + .name = "recompiler", + .description = "Recompiler", + .type = CONFIG_BINARY, + .default_int = 1 + }, +#endif + { + .type = -1 + } +}; + +static void *banshee_init_common(char *fn, int has_sgram) { int mem_size; banshee_t *banshee = malloc(sizeof(banshee_t)); memset(banshee, 0, sizeof(banshee_t)); - // rom_init(&banshee->bios_rom, "gainward.BIN", 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - rom_init(&banshee->bios_rom, "a-trend.VBI", 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); + rom_init(&banshee->bios_rom, fn, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - mem_size = device_get_config_int("memory"); + if (has_sgram) + mem_size = device_get_config_int("memory"); + else + mem_size = 16; /*SDRAM Banshee only supports 16 MB*/ + svga_init(&banshee->svga, banshee, mem_size << 20, banshee_recalctimings, banshee_in, banshee_out, @@ -1976,9 +2020,10 @@ static void *banshee_init() banshee->svga.miscout = 1; banshee->dramInit0 = 1 << 27; - if (mem_size == 16) + if (has_sgram && mem_size == 16) banshee->dramInit0 |= (1 << 26); /*2xSGRAM = 16 MB*/ -// banshee->dramInit1 = 1 << 30; /*SDRAM*/ + if (!has_sgram) + banshee->dramInit1 = 1 << 30; /*SDRAM*/ banshee->svga.decode_mask = 0x1ffffff; pci_add(banshee_pci_read, banshee_pci_write, banshee); @@ -1996,9 +2041,22 @@ static void *banshee_init() return banshee; } +static void *banshee_init(FILE *f, int has_sgram) +{ + return banshee_init_common("pci_sg.rom", 1); +} +static void *creative_banshee_init(FILE *f, int has_sgram) +{ + return banshee_init_common("blasterpci.rom", 0); +} + static int banshee_available() { - return rom_present("a-trend.VBI"); + return rom_present("pci_sg.rom"); +} +static int creative_banshee_available() +{ + return rom_present("blasterpci.rom"); } static void banshee_close(void *p) @@ -2085,9 +2143,9 @@ static void banshee_add_status_info(char *s, int max_len, void *p) voodoo_recomp = 0; } -device_t atrend_voodoo_banshee_device = +device_t voodoo_banshee_device = { - "A-Trend Helios 3D (Voodoo Banshee)", + "Voodoo Banshee PCI (reference)", 0, banshee_init, banshee_close, @@ -2095,5 +2153,18 @@ device_t atrend_voodoo_banshee_device = banshee_speed_changed, banshee_force_redraw, banshee_add_status_info, - banshee_config + banshee_sgram_config +}; + +device_t creative_voodoo_banshee_device = +{ + "Creative Labs 3D Blaster Banshee PCI", + 0, + creative_banshee_init, + banshee_close, + creative_banshee_available, + banshee_speed_changed, + banshee_force_redraw, + banshee_add_status_info, + banshee_sdram_config }; diff --git a/src/vid_voodoo_banshee.h b/src/vid_voodoo_banshee.h index 9479816..6e72747 100644 --- a/src/vid_voodoo_banshee.h +++ b/src/vid_voodoo_banshee.h @@ -1,3 +1,4 @@ -extern device_t atrend_voodoo_banshee_device; +extern device_t voodoo_banshee_device; +extern device_t creative_voodoo_banshee_device; void banshee_set_overlay_addr(void *p, uint32_t addr); diff --git a/src/video.c b/src/video.c index 0550186..a8c7dbb 100644 --- a/src/video.c +++ b/src/video.c @@ -83,7 +83,6 @@ typedef struct static VIDEO_CARD video_cards[] = { - {"A-Trend Helios 3D (Voodoo Banshee)", "banshee", &atrend_voodoo_banshee_device, GFX_BANSHEE, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 2, 2, 1, 20, 20, 21}}, {"Acumos AVGA2 / Cirrus Logic CL-GD5402", "avga2", &avga2_device, GFX_AVGA2, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_ISA, 3, 3, 6, 5, 5, 10}}, {"ATI Graphics Pro Turbo (Mach64 GX)", "mach64gx", &mach64gx_device, GFX_MACH64GX, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 2, 2, 1, 20, 20, 21}}, {"ATI Video Xpression (Mach64 VT2)", "mach64vt2", &mach64vt2_device, GFX_MACH64VT2, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 2, 2, 1, 20, 20, 21}}, @@ -97,6 +96,7 @@ static VIDEO_CARD video_cards[] = {"Cirrus Logic CL-GD5430", "cl_gd5430", &gd5430_device, GFX_CL_GD5430, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 4, 4, 8, 10, 10, 20}}, {"Cirrus Logic CL-GD5434", "cl_gd5434", &gd5434_device, GFX_CL_GD5434, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 4, 4, 8, 10, 10, 20}}, {"Compaq CGA", "compaq_cga", &compaq_cga_device, GFX_COMPAQ_CGA, VIDEO_FLAG_TYPE_CGA, {VIDEO_ISA, 8, 16, 32, 8, 16, 32}}, + {"Creative Labs 3D Blaster Banshee PCI", "cl_banshee", &creative_voodoo_banshee_device, GFX_CL_BANSHEE, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 2, 2, 1, 20, 20, 21}}, {"Diamond Stealth 32 (Tseng ET4000/w32p)", "stealth32", &et4000w32p_device, GFX_ET4000W32, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 4, 4, 4, 10, 10, 10}}, {"Diamond Stealth 3D 2000 (S3 ViRGE)", "stealth3d_2000", &s3_virge_device, GFX_VIRGE, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 2, 2, 3, 28, 28, 45}}, {"EGA", "ega", &ega_device, GFX_EGA, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_ISA, 8, 16, 32, 8, 16, 32}}, @@ -129,6 +129,7 @@ static VIDEO_CARD video_cards[] = {"Tseng ET4000AX", "et4000ax", &et4000_device, GFX_ET4000, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_ISA, 3, 3, 6, 5, 5, 10}}, {"VGA", "vga", &vga_device, GFX_VGA, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_ISA, 8, 16, 32, 8, 16, 32}}, {"Wyse 700", "wy700", &wy700_device, GFX_WY700, VIDEO_FLAG_TYPE_CGA, {VIDEO_ISA, 8, 16, 32, 8, 16, 32}}, + {"Voodoo Banshee (reference)", "banshee", &voodoo_banshee_device, GFX_BANSHEE, VIDEO_FLAG_TYPE_SPECIAL, {VIDEO_BUS, 2, 2, 1, 20, 20, 21}}, {"", "", NULL, 0} };