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 +};