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",