From ac48f84a23795afaa108953b2dd1e6c3ed4128f9 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 10 Nov 2022 12:17:24 -0500 Subject: [PATCH 1/7] Cleanups in vid_voodoo_banshee.c --- src/video/vid_voodoo_banshee.c | 39 +++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index cb4d2b18e..e740321d7 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -46,6 +46,12 @@ #include <86box/vid_voodoo_regs.h> #include <86box/vid_voodoo_render.h> +#define ROM_BANSHEE "roms/video/voodoo/Pci_sg.rom" +#define ROM_CREATIVE_BANSHEE "roms/video/voodoo/BlasterPCI.rom" +#define ROM_VOODOO3_2000 "roms/video/voodoo/2k11sd.rom" +#define ROM_VOODOO3_3000 "roms/video/voodoo/3k12sd.rom" +#define ROM_VELOCITY_100 "roms/video/voodoo/Velocity100.VBI" + static video_timings_t timing_banshee = { .type = VIDEO_PCI, .write_b = 2, .write_w = 2, .write_l = 1, .read_b = 20, .read_w = 20, .read_l = 21 }; static video_timings_t timing_banshee_agp = { .type = VIDEO_AGP, .write_b = 2, .write_w = 2, .write_l = 1, .read_b = 20, .read_w = 20, .read_l = 21 }; @@ -3040,70 +3046,79 @@ banshee_init_common(const device_t *info, char *fn, int has_sgram, int type, int static void * banshee_init(const device_t *info) { - return banshee_init_common(info, "roms/video/voodoo/Pci_sg.rom", 1, TYPE_BANSHEE, VOODOO_BANSHEE, 0); + return banshee_init_common(info, ROM_BANSHEE, 1, TYPE_BANSHEE, VOODOO_BANSHEE, 0); } + static void * creative_banshee_init(const device_t *info) { - return banshee_init_common(info, "roms/video/voodoo/BlasterPCI.rom", 0, TYPE_BANSHEE, VOODOO_BANSHEE, 0); + return banshee_init_common(info, ROM_CREATIVE_BANSHEE, 0, TYPE_BANSHEE, VOODOO_BANSHEE, 0); } + static void * v3_2000_init(const device_t *info) { - return banshee_init_common(info, "roms/video/voodoo/2k11sd.rom", 0, TYPE_V3_2000, VOODOO_3, 0); + return banshee_init_common(info, ROM_VOODOO3_2000, 0, TYPE_V3_2000, VOODOO_3, 0); } + static void * v3_2000_agp_init(const device_t *info) { - return banshee_init_common(info, "roms/video/voodoo/2k11sd.rom", 0, TYPE_V3_2000, VOODOO_3, 1); + return banshee_init_common(info, ROM_VOODOO3_2000, 0, TYPE_V3_2000, VOODOO_3, 1); } + static void * v3_2000_agp_onboard_init(const device_t *info) { return banshee_init_common(info, NULL, 1, TYPE_V3_2000, VOODOO_3, 1); } + static void * v3_3000_init(const device_t *info) { - return banshee_init_common(info, "roms/video/voodoo/3k12sd.rom", 0, TYPE_V3_3000, VOODOO_3, 0); + return banshee_init_common(info, ROM_VOODOO3_3000, 0, TYPE_V3_3000, VOODOO_3, 0); } + static void * v3_3000_agp_init(const device_t *info) { - return banshee_init_common(info, "roms/video/voodoo/3k12sd.rom", 0, TYPE_V3_3000, VOODOO_3, 1); + return banshee_init_common(info, ROM_VOODOO3_3000, 0, TYPE_V3_3000, VOODOO_3, 1); } static void * velocity_100_agp_init(const device_t *info) { - return banshee_init_common(info, "roms/video/voodoo/Velocity100.VBI", 1, TYPE_VELOCITY100, VOODOO_3, 1); + return banshee_init_common(info, ROM_VELOCITY_100, 1, TYPE_VELOCITY100, VOODOO_3, 1); } static int banshee_available(void) { - return rom_present("roms/video/voodoo/Pci_sg.rom"); + return rom_present(ROM_BANSHEE); } + static int creative_banshee_available(void) { - return rom_present("roms/video/voodoo/BlasterPCI.rom"); + return rom_present(ROM_CREATIVE_BANSHEE); } + static int v3_2000_available(void) { - return rom_present("roms/video/voodoo/2k11sd.rom"); + return rom_present(ROM_VOODOO3_2000); } #define v3_2000_agp_available v3_2000_available + static int v3_3000_available(void) { - return rom_present("roms/video/voodoo/3k12sd.rom"); + return rom_present(ROM_VOODOO3_3000); } #define v3_3000_agp_available v3_3000_available static int velocity_100_available(void) { - return rom_present("roms/video/voodoo/Velocity100.VBI"); + return rom_present(ROM_VELOCITY_100); } static void From 6f031c34df9d0bc16c2af6134701ef590e4df832 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 10 Nov 2022 13:06:47 -0500 Subject: [PATCH 2/7] Voodoo 3 1000 --- src/include/86box/video.h | 2 ++ src/video/vid_table.c | 2 ++ src/video/vid_voodoo_banshee.c | 56 ++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 91ef40eab..da90e6510 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -520,6 +520,8 @@ extern const device_t ps1vga_mca_device; extern const device_t voodoo_device; extern const device_t voodoo_banshee_device; extern const device_t creative_voodoo_banshee_device; +extern const device_t voodoo_3_1000_device; +extern const device_t voodoo_3_1000_agp_device; extern const device_t voodoo_3_2000_device; extern const device_t voodoo_3_2000_agp_device; extern const device_t voodoo_3_2000_agp_onboard_8m_device; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index 247581348..b06a20d49 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -208,6 +208,7 @@ video_cards[] = { { &tgui9680_pci_device }, { &voodoo_banshee_device }, { &creative_voodoo_banshee_device }, + { &voodoo_3_1000_device }, { &voodoo_3_2000_device }, { &voodoo_3_3000_device }, { &mach64gx_vlb_device }, @@ -250,6 +251,7 @@ video_cards[] = { { &s3_diamond_stealth_4000_agp_device }, { &s3_trio3d2x_agp_device }, { &velocity_100_agp_device }, + { &voodoo_3_1000_agp_device }, { &voodoo_3_2000_agp_device }, { &voodoo_3_3000_agp_device }, { NULL } diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index e740321d7..331b9d761 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -48,6 +48,7 @@ #define ROM_BANSHEE "roms/video/voodoo/Pci_sg.rom" #define ROM_CREATIVE_BANSHEE "roms/video/voodoo/BlasterPCI.rom" +#define ROM_VOODOO3_1000 "roms/video/voodoo/1k11sg.rom" #define ROM_VOODOO3_2000 "roms/video/voodoo/2k11sd.rom" #define ROM_VOODOO3_3000 "roms/video/voodoo/3k12sd.rom" #define ROM_VELOCITY_100 "roms/video/voodoo/Velocity100.VBI" @@ -67,6 +68,7 @@ static uint8_t vb_filter_bx_g[256][256]; enum { TYPE_BANSHEE = 0, + TYPE_V3_1000, TYPE_V3_2000, TYPE_V3_3000, TYPE_VELOCITY100 @@ -3016,6 +3018,13 @@ banshee_init_common(const device_t *info, char *fn, int has_sgram, int type, int } break; + case TYPE_V3_1000: + banshee->pci_regs[0x2c] = 0x1a; + banshee->pci_regs[0x2d] = 0x12; + banshee->pci_regs[0x2e] = 0x52; + banshee->pci_regs[0x2f] = 0x00; + break; + case TYPE_V3_2000: banshee->pci_regs[0x2c] = 0x1a; banshee->pci_regs[0x2d] = 0x12; @@ -3055,6 +3064,18 @@ creative_banshee_init(const device_t *info) return banshee_init_common(info, ROM_CREATIVE_BANSHEE, 0, TYPE_BANSHEE, VOODOO_BANSHEE, 0); } +static void * +v3_1000_init(const device_t *info) +{ + return banshee_init_common(info, ROM_VOODOO3_1000, 1, TYPE_V3_1000, VOODOO_3, 0); +} + +static void * +v3_1000_agp_init(const device_t *info) +{ + return banshee_init_common(info, ROM_VOODOO3_1000, 1, TYPE_V3_1000, VOODOO_3, 1); +} + static void * v3_2000_init(const device_t *info) { @@ -3102,6 +3123,13 @@ creative_banshee_available(void) return rom_present(ROM_CREATIVE_BANSHEE); } +static int +v3_1000_available(void) +{ + return rom_present(ROM_VOODOO3_1000); +} +#define v3_1000_agp_available v3_1000_available + static int v3_2000_available(void) { @@ -3179,6 +3207,34 @@ const device_t creative_voodoo_banshee_device = { banshee_sdram_config }; +const device_t voodoo_3_1000_device = { + .name = "3dfx Voodoo3 1000", + .internal_name = "voodoo3_1k_pci", + .flags = DEVICE_PCI, + .local = 0, + .init = v3_1000_init, + .close = banshee_close, + .reset = NULL, + { .available = v3_1000_available }, + .speed_changed = banshee_speed_changed, + .force_redraw = banshee_force_redraw, + banshee_sgram_config +}; + +const device_t voodoo_3_1000_agp_device = { + .name = "3dfx Voodoo3 1000", + .internal_name = "voodoo3_1k_agp", + .flags = DEVICE_AGP, + .local = 0, + .init = v3_1000_agp_init, + .close = banshee_close, + .reset = NULL, + { .available = v3_1000_agp_available }, + .speed_changed = banshee_speed_changed, + .force_redraw = banshee_force_redraw, + banshee_sgram_config +}; + const device_t voodoo_3_2000_device = { .name = "3dfx Voodoo3 2000", .internal_name = "voodoo3_2k_pci", From 381f9d11fc04c74c05a2b9f3ccf1cfba896c058a Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 10 Nov 2022 13:07:52 -0500 Subject: [PATCH 3/7] Voodoo 3 3500 TV --- src/include/86box/video.h | 2 + src/video/vid_table.c | 2 + src/video/vid_voodoo_banshee.c | 67 +++++++++++++++++++++++++++++++++- 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index da90e6510..2ed57549c 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -527,6 +527,8 @@ extern const device_t voodoo_3_2000_agp_device; extern const device_t voodoo_3_2000_agp_onboard_8m_device; extern const device_t voodoo_3_3000_device; extern const device_t voodoo_3_3000_agp_device; +extern const device_t voodoo_3_3500_agp_ntsc_device; +extern const device_t voodoo_3_3500_agp_pal_device; extern const device_t velocity_100_agp_device; /* Wyse 700 */ diff --git a/src/video/vid_table.c b/src/video/vid_table.c index b06a20d49..501a6d407 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -254,6 +254,8 @@ video_cards[] = { { &voodoo_3_1000_agp_device }, { &voodoo_3_2000_agp_device }, { &voodoo_3_3000_agp_device }, + { &voodoo_3_3500_agp_ntsc_device }, + { &voodoo_3_3500_agp_pal_device }, { NULL } }; // clang-format on diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 331b9d761..ea0d988b3 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -51,6 +51,8 @@ #define ROM_VOODOO3_1000 "roms/video/voodoo/1k11sg.rom" #define ROM_VOODOO3_2000 "roms/video/voodoo/2k11sd.rom" #define ROM_VOODOO3_3000 "roms/video/voodoo/3k12sd.rom" +#define ROM_VOODOO3_3500_AGP_NTSC "roms/video/voodoo/35k05n.rom" +#define ROM_VOODOO3_3500_AGP_PAL "roms/video/voodoo/35k05p.rom" #define ROM_VELOCITY_100 "roms/video/voodoo/Velocity100.VBI" static video_timings_t timing_banshee = { .type = VIDEO_PCI, .write_b = 2, .write_w = 2, .write_l = 1, .read_b = 20, .read_w = 20, .read_l = 21 }; @@ -71,7 +73,9 @@ enum { TYPE_V3_1000, TYPE_V3_2000, TYPE_V3_3000, - TYPE_VELOCITY100 + TYPE_V3_3500, + TYPE_VELOCITY100, + TYPE_VELOCITY200 }; typedef struct banshee_t { @@ -3039,6 +3043,13 @@ banshee_init_common(const device_t *info, char *fn, int has_sgram, int type, int banshee->pci_regs[0x2f] = 0x00; break; + case TYPE_V3_3500: + banshee->pci_regs[0x2c] = 0x1a; + banshee->pci_regs[0x2d] = 0x12; + banshee->pci_regs[0x2e] = 0x60; + banshee->pci_regs[0x2f] = 0x00; + break; + case TYPE_VELOCITY100: banshee->pci_regs[0x2c] = 0x1a; banshee->pci_regs[0x2d] = 0x12; @@ -3105,6 +3116,19 @@ v3_3000_agp_init(const device_t *info) { return banshee_init_common(info, ROM_VOODOO3_3000, 0, TYPE_V3_3000, VOODOO_3, 1); } + +static void * +v3_3500_agp_ntsc_init(const device_t *info) +{ + return banshee_init_common(info, ROM_VOODOO3_3500_AGP_NTSC, 0, TYPE_V3_3500, VOODOO_3, 1); +} + +static void * +v3_3500_agp_pal_init(const device_t *info) +{ + return banshee_init_common(info, ROM_VOODOO3_3500_AGP_PAL, 0, TYPE_V3_3500, VOODOO_3, 1); +} + static void * velocity_100_agp_init(const device_t *info) { @@ -3143,6 +3167,19 @@ v3_3000_available(void) return rom_present(ROM_VOODOO3_3000); } #define v3_3000_agp_available v3_3000_available + +static int +v3_3500_agp_ntsc_available(void) +{ + return rom_present(ROM_VOODOO3_3500_AGP_NTSC); +} + +static int +v3_3500_agp_pal_available(void) +{ + return rom_present(ROM_VOODOO3_3500_AGP_PAL); +} + static int velocity_100_available(void) { @@ -3305,6 +3342,34 @@ const device_t voodoo_3_3000_agp_device = { banshee_sdram_config }; +const device_t voodoo_3_3500_agp_ntsc_device = { + .name = "3dfx Voodoo3 3500 TV (NTSC)", + .internal_name = "voodoo3_3500_agp_ntsc", + .flags = DEVICE_AGP, + .local = 0, + .init = v3_3500_agp_ntsc_init, + .close = banshee_close, + .reset = NULL, + { .available = v3_3500_agp_ntsc_available }, + .speed_changed = banshee_speed_changed, + .force_redraw = banshee_force_redraw, + banshee_sdram_config +}; + +const device_t voodoo_3_3500_agp_pal_device = { + .name = "3dfx Voodoo3 3500 TV (PAL)", + .internal_name = "voodoo3_3500_agp_pal", + .flags = DEVICE_AGP, + .local = 0, + .init = v3_3500_agp_pal_init, + .close = banshee_close, + .reset = NULL, + { .available = v3_3500_agp_pal_available }, + .speed_changed = banshee_speed_changed, + .force_redraw = banshee_force_redraw, + banshee_sdram_config +}; + const device_t velocity_100_agp_device = { .name = "3dfx Velocity 100", .internal_name = "velocity100_agp", From 7176d7c66c5aa686f1d9ef140b9e3fbfe0b2d3a7 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 10 Nov 2022 13:10:39 -0500 Subject: [PATCH 4/7] Velocity 200 AGP --- src/include/86box/video.h | 1 + src/video/vid_table.c | 1 + src/video/vid_voodoo_banshee.c | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 2ed57549c..4bd81c906 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -530,6 +530,7 @@ extern const device_t voodoo_3_3000_agp_device; extern const device_t voodoo_3_3500_agp_ntsc_device; extern const device_t voodoo_3_3500_agp_pal_device; extern const device_t velocity_100_agp_device; +extern const device_t velocity_200_agp_device; /* Wyse 700 */ extern const device_t wy700_device; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index 501a6d407..b36cb1889 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -251,6 +251,7 @@ video_cards[] = { { &s3_diamond_stealth_4000_agp_device }, { &s3_trio3d2x_agp_device }, { &velocity_100_agp_device }, + { &velocity_200_agp_device }, { &voodoo_3_1000_agp_device }, { &voodoo_3_2000_agp_device }, { &voodoo_3_3000_agp_device }, diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index ea0d988b3..21f6f578d 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -54,6 +54,7 @@ #define ROM_VOODOO3_3500_AGP_NTSC "roms/video/voodoo/35k05n.rom" #define ROM_VOODOO3_3500_AGP_PAL "roms/video/voodoo/35k05p.rom" #define ROM_VELOCITY_100 "roms/video/voodoo/Velocity100.VBI" +#define ROM_VELOCITY_200 "roms/video/voodoo/Velocity200sg.rom" static video_timings_t timing_banshee = { .type = VIDEO_PCI, .write_b = 2, .write_w = 2, .write_l = 1, .read_b = 20, .read_w = 20, .read_l = 21 }; static video_timings_t timing_banshee_agp = { .type = VIDEO_AGP, .write_b = 2, .write_w = 2, .write_l = 1, .read_b = 20, .read_w = 20, .read_l = 21 }; @@ -3056,6 +3057,13 @@ banshee_init_common(const device_t *info, char *fn, int has_sgram, int type, int banshee->pci_regs[0x2e] = 0x4b; banshee->pci_regs[0x2f] = 0x00; break; + + case TYPE_VELOCITY200: + banshee->pci_regs[0x2c] = 0x1a; + banshee->pci_regs[0x2d] = 0x12; + banshee->pci_regs[0x2e] = 0x54; + banshee->pci_regs[0x2f] = 0x00; + break; } video_inform(VIDEO_FLAG_TYPE_SPECIAL, banshee->agp ? &timing_banshee_agp : &timing_banshee); @@ -3135,6 +3143,12 @@ velocity_100_agp_init(const device_t *info) return banshee_init_common(info, ROM_VELOCITY_100, 1, TYPE_VELOCITY100, VOODOO_3, 1); } +static void * +velocity_200_agp_init(const device_t *info) +{ + return banshee_init_common(info, ROM_VELOCITY_200, 1, TYPE_VELOCITY200, VOODOO_3, 1); +} + static int banshee_available(void) { @@ -3186,6 +3200,12 @@ velocity_100_available(void) return rom_present(ROM_VELOCITY_100); } +static int +velocity_200_available(void) +{ + return rom_present(ROM_VELOCITY_200); +} + static void banshee_close(void *p) { @@ -3383,3 +3403,17 @@ const device_t velocity_100_agp_device = { .force_redraw = banshee_force_redraw, banshee_sdram_config }; + +const device_t velocity_200_agp_device = { + .name = "3dfx Velocity 200", + .internal_name = "velocity200_agp", + .flags = DEVICE_AGP, + .local = 0, + .init = velocity_200_agp_init, + .close = banshee_close, + .reset = NULL, + { .available = velocity_200_available }, + .speed_changed = banshee_speed_changed, + .force_redraw = banshee_force_redraw, + banshee_sgram_config +}; From 5a462053fd49336e76a381c8b388c5a43a6370bc Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 10 Nov 2022 17:18:16 -0500 Subject: [PATCH 5/7] Compaq Voodoo 3 3500 --- src/include/86box/video.h | 1 + src/video/vid_table.c | 1 + src/video/vid_voodoo_banshee.c | 53 ++++++++++++++++++++++++++++------ 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 4bd81c906..9315c3fdd 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -529,6 +529,7 @@ extern const device_t voodoo_3_3000_device; extern const device_t voodoo_3_3000_agp_device; extern const device_t voodoo_3_3500_agp_ntsc_device; extern const device_t voodoo_3_3500_agp_pal_device; +extern const device_t compaq_voodoo_3_3500_agp_device; extern const device_t velocity_100_agp_device; extern const device_t velocity_200_agp_device; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index b36cb1889..0b54596cb 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -257,6 +257,7 @@ video_cards[] = { { &voodoo_3_3000_agp_device }, { &voodoo_3_3500_agp_ntsc_device }, { &voodoo_3_3500_agp_pal_device }, + { &compaq_voodoo_3_3500_agp_device }, { NULL } }; // clang-format on diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 21f6f578d..935fc5760 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -46,15 +46,16 @@ #include <86box/vid_voodoo_regs.h> #include <86box/vid_voodoo_render.h> -#define ROM_BANSHEE "roms/video/voodoo/Pci_sg.rom" -#define ROM_CREATIVE_BANSHEE "roms/video/voodoo/BlasterPCI.rom" -#define ROM_VOODOO3_1000 "roms/video/voodoo/1k11sg.rom" -#define ROM_VOODOO3_2000 "roms/video/voodoo/2k11sd.rom" -#define ROM_VOODOO3_3000 "roms/video/voodoo/3k12sd.rom" -#define ROM_VOODOO3_3500_AGP_NTSC "roms/video/voodoo/35k05n.rom" -#define ROM_VOODOO3_3500_AGP_PAL "roms/video/voodoo/35k05p.rom" -#define ROM_VELOCITY_100 "roms/video/voodoo/Velocity100.VBI" -#define ROM_VELOCITY_200 "roms/video/voodoo/Velocity200sg.rom" +#define ROM_BANSHEE "roms/video/voodoo/Pci_sg.rom" +#define ROM_CREATIVE_BANSHEE "roms/video/voodoo/BlasterPCI.rom" +#define ROM_VOODOO3_1000 "roms/video/voodoo/1k11sg.rom" +#define ROM_VOODOO3_2000 "roms/video/voodoo/2k11sd.rom" +#define ROM_VOODOO3_3000 "roms/video/voodoo/3k12sd.rom" +#define ROM_VOODOO3_3500_AGP_NTSC "roms/video/voodoo/35k05n.rom" +#define ROM_VOODOO3_3500_AGP_PAL "roms/video/voodoo/35k05p.rom" +#define ROM_VOODOO3_3500_AGP_COMPAQ "roms/video/voodoo/V3_3500_AGP_SD_2.15.05_Compaq.rom" +#define ROM_VELOCITY_100 "roms/video/voodoo/Velocity100.VBI" +#define ROM_VELOCITY_200 "roms/video/voodoo/Velocity200sg.rom" static video_timings_t timing_banshee = { .type = VIDEO_PCI, .write_b = 2, .write_w = 2, .write_l = 1, .read_b = 20, .read_w = 20, .read_l = 21 }; static video_timings_t timing_banshee_agp = { .type = VIDEO_AGP, .write_b = 2, .write_w = 2, .write_l = 1, .read_b = 20, .read_w = 20, .read_l = 21 }; @@ -75,6 +76,7 @@ enum { TYPE_V3_2000, TYPE_V3_3000, TYPE_V3_3500, + TYPE_V3_3500_COMPAQ, TYPE_VELOCITY100, TYPE_VELOCITY200 }; @@ -3051,6 +3053,13 @@ banshee_init_common(const device_t *info, char *fn, int has_sgram, int type, int banshee->pci_regs[0x2f] = 0x00; break; + case TYPE_V3_3500_COMPAQ: + banshee->pci_regs[0x2c] = 0x1a; + banshee->pci_regs[0x2d] = 0x12; + banshee->pci_regs[0x2e] = 0x4f; + banshee->pci_regs[0x2f] = 0x12; + break; + case TYPE_VELOCITY100: banshee->pci_regs[0x2c] = 0x1a; banshee->pci_regs[0x2d] = 0x12; @@ -3137,6 +3146,12 @@ v3_3500_agp_pal_init(const device_t *info) return banshee_init_common(info, ROM_VOODOO3_3500_AGP_PAL, 0, TYPE_V3_3500, VOODOO_3, 1); } +static void * +compaq_v3_3500_agp_init(const device_t *info) +{ + return banshee_init_common(info, ROM_VOODOO3_3500_AGP_COMPAQ, 0, TYPE_V3_3500_COMPAQ, VOODOO_3, 1); +} + static void * velocity_100_agp_init(const device_t *info) { @@ -3194,6 +3209,12 @@ v3_3500_agp_pal_available(void) return rom_present(ROM_VOODOO3_3500_AGP_PAL); } +static int +compaq_v3_3500_agp_available(void) +{ + return rom_present(ROM_VOODOO3_3500_AGP_COMPAQ); +} + static int velocity_100_available(void) { @@ -3390,6 +3411,20 @@ const device_t voodoo_3_3500_agp_pal_device = { banshee_sdram_config }; +const device_t compaq_voodoo_3_3500_agp_device = { + .name = "Compaq Voodoo3 3500 TV", + .internal_name = "compaq_voodoo3_3500_agp", + .flags = DEVICE_AGP, + .local = 0, + .init = compaq_v3_3500_agp_init, + .close = banshee_close, + .reset = NULL, + { .available = compaq_v3_3500_agp_available }, + .speed_changed = banshee_speed_changed, + .force_redraw = banshee_force_redraw, + banshee_sdram_config +}; + const device_t velocity_100_agp_device = { .name = "3dfx Velocity 100", .internal_name = "velocity100_agp", From 7c2c1e985d38643ec19cd0f443ad2c5381cf8c21 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 10 Nov 2022 17:19:50 -0500 Subject: [PATCH 6/7] Falcon Northwest Voodoo3 3500 SE --- src/include/86box/video.h | 1 + src/video/vid_table.c | 1 + src/video/vid_voodoo_banshee.c | 27 +++++++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 9315c3fdd..86b077387 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -530,6 +530,7 @@ extern const device_t voodoo_3_3000_agp_device; extern const device_t voodoo_3_3500_agp_ntsc_device; extern const device_t voodoo_3_3500_agp_pal_device; extern const device_t compaq_voodoo_3_3500_agp_device; +extern const device_t voodoo_3_3500_se_agp_device; extern const device_t velocity_100_agp_device; extern const device_t velocity_200_agp_device; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index 0b54596cb..d8d908e24 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -258,6 +258,7 @@ video_cards[] = { { &voodoo_3_3500_agp_ntsc_device }, { &voodoo_3_3500_agp_pal_device }, { &compaq_voodoo_3_3500_agp_device }, + { &voodoo_3_3500_se_agp_device }, { NULL } }; // clang-format on diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 935fc5760..7bedf661d 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -54,6 +54,7 @@ #define ROM_VOODOO3_3500_AGP_NTSC "roms/video/voodoo/35k05n.rom" #define ROM_VOODOO3_3500_AGP_PAL "roms/video/voodoo/35k05p.rom" #define ROM_VOODOO3_3500_AGP_COMPAQ "roms/video/voodoo/V3_3500_AGP_SD_2.15.05_Compaq.rom" +#define ROM_VOODOO3_3500_SE_AGP "roms/video/voodoo/V3_3500_AGP_SD_2.15.06_NTSC_Falcon_Northwest.rom" #define ROM_VELOCITY_100 "roms/video/voodoo/Velocity100.VBI" #define ROM_VELOCITY_200 "roms/video/voodoo/Velocity200sg.rom" @@ -3152,6 +3153,12 @@ compaq_v3_3500_agp_init(const device_t *info) return banshee_init_common(info, ROM_VOODOO3_3500_AGP_COMPAQ, 0, TYPE_V3_3500_COMPAQ, VOODOO_3, 1); } +static void * +v3_3500_se_agp_init(const device_t *info) +{ + return banshee_init_common(info, ROM_VOODOO3_3500_SE_AGP, 0, TYPE_V3_3500, VOODOO_3, 1); +} + static void * velocity_100_agp_init(const device_t *info) { @@ -3215,6 +3222,12 @@ compaq_v3_3500_agp_available(void) return rom_present(ROM_VOODOO3_3500_AGP_COMPAQ); } +static int +v3_3500_se_agp_available(void) +{ + return rom_present(ROM_VOODOO3_3500_SE_AGP); +} + static int velocity_100_available(void) { @@ -3425,6 +3438,20 @@ const device_t compaq_voodoo_3_3500_agp_device = { banshee_sdram_config }; +const device_t voodoo_3_3500_se_agp_device = { + .name = "Falcon Northwest Voodoo3 3500 SE", + .internal_name = "voodoo3_3500_se_agp", + .flags = DEVICE_AGP, + .local = 0, + .init = v3_3500_se_agp_init, + .close = banshee_close, + .reset = NULL, + { .available = v3_3500_se_agp_available }, + .speed_changed = banshee_speed_changed, + .force_redraw = banshee_force_redraw, + banshee_sdram_config +}; + const device_t velocity_100_agp_device = { .name = "3dfx Velocity 100", .internal_name = "velocity100_agp", From b6466ba266f3af63c985c78dbc4ac3798dcc3957 Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 10 Nov 2022 17:20:54 -0500 Subject: [PATCH 7/7] Voodoo3 3500 SI --- src/include/86box/video.h | 1 + src/video/vid_table.c | 1 + src/video/vid_voodoo_banshee.c | 35 ++++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 86b077387..0dad732e8 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -531,6 +531,7 @@ extern const device_t voodoo_3_3500_agp_ntsc_device; extern const device_t voodoo_3_3500_agp_pal_device; extern const device_t compaq_voodoo_3_3500_agp_device; extern const device_t voodoo_3_3500_se_agp_device; +extern const device_t voodoo_3_3500_si_agp_device; extern const device_t velocity_100_agp_device; extern const device_t velocity_200_agp_device; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index d8d908e24..b6b55f56f 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -259,6 +259,7 @@ video_cards[] = { { &voodoo_3_3500_agp_pal_device }, { &compaq_voodoo_3_3500_agp_device }, { &voodoo_3_3500_se_agp_device }, + { &voodoo_3_3500_si_agp_device }, { NULL } }; // clang-format on diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 7bedf661d..ca22eae02 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -55,6 +55,7 @@ #define ROM_VOODOO3_3500_AGP_PAL "roms/video/voodoo/35k05p.rom" #define ROM_VOODOO3_3500_AGP_COMPAQ "roms/video/voodoo/V3_3500_AGP_SD_2.15.05_Compaq.rom" #define ROM_VOODOO3_3500_SE_AGP "roms/video/voodoo/V3_3500_AGP_SD_2.15.06_NTSC_Falcon_Northwest.rom" +#define ROM_VOODOO3_3500_SI_AGP "roms/video/voodoo/V3_3500_AGP_SD_2.15.07_PAL_3500TV-SI.rom" #define ROM_VELOCITY_100 "roms/video/voodoo/Velocity100.VBI" #define ROM_VELOCITY_200 "roms/video/voodoo/Velocity200sg.rom" @@ -78,6 +79,7 @@ enum { TYPE_V3_3000, TYPE_V3_3500, TYPE_V3_3500_COMPAQ, + TYPE_V3_3500_SI, TYPE_VELOCITY100, TYPE_VELOCITY200 }; @@ -3061,6 +3063,13 @@ banshee_init_common(const device_t *info, char *fn, int has_sgram, int type, int banshee->pci_regs[0x2f] = 0x12; break; + case TYPE_V3_3500_SI: + banshee->pci_regs[0x2c] = 0x1a; + banshee->pci_regs[0x2d] = 0x12; + banshee->pci_regs[0x2e] = 0x61; + banshee->pci_regs[0x2f] = 0x00; + break; + case TYPE_VELOCITY100: banshee->pci_regs[0x2c] = 0x1a; banshee->pci_regs[0x2d] = 0x12; @@ -3159,6 +3168,12 @@ v3_3500_se_agp_init(const device_t *info) return banshee_init_common(info, ROM_VOODOO3_3500_SE_AGP, 0, TYPE_V3_3500, VOODOO_3, 1); } +static void * +v3_3500_si_agp_init(const device_t *info) +{ + return banshee_init_common(info, ROM_VOODOO3_3500_SI_AGP, 0, TYPE_V3_3500_SI, VOODOO_3, 1); +} + static void * velocity_100_agp_init(const device_t *info) { @@ -3228,6 +3243,12 @@ v3_3500_se_agp_available(void) return rom_present(ROM_VOODOO3_3500_SE_AGP); } +static int +v3_3500_si_agp_available(void) +{ + return rom_present(ROM_VOODOO3_3500_SI_AGP); +} + static int velocity_100_available(void) { @@ -3452,6 +3473,20 @@ const device_t voodoo_3_3500_se_agp_device = { banshee_sdram_config }; +const device_t voodoo_3_3500_si_agp_device = { + .name = "3dfx Voodoo3 3500 SI", + .internal_name = "voodoo3_3500_si_agp", + .flags = DEVICE_AGP, + .local = 0, + .init = v3_3500_si_agp_init, + .close = banshee_close, + .reset = NULL, + { .available = v3_3500_si_agp_available }, + .speed_changed = banshee_speed_changed, + .force_redraw = banshee_force_redraw, + banshee_sdram_config +}; + const device_t velocity_100_agp_device = { .name = "3dfx Velocity 100", .internal_name = "velocity100_agp",