From 381f9d11fc04c74c05a2b9f3ccf1cfba896c058a Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Thu, 10 Nov 2022 13:07:52 -0500 Subject: [PATCH] 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",