diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 8b9ddab84..f6856a2e4 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -406,6 +406,7 @@ 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 velocity_100_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 6e4a758df..7f7f19a79 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -201,6 +201,7 @@ video_cards[] = { { "virge375_vbe20_vlb", &s3_virge_375_4_vlb_device }, { "tgui9400cxi_vlb", &tgui9400cxi_device }, { "tgui9440_vlb", &tgui9440_vlb_device }, + { "velocity100_agp", &velocity_100_agp_device }, { "voodoo3_2k_agp", &voodoo_3_2000_agp_device }, { "voodoo3_3k_agp", &voodoo_3_3000_agp_device }, { "", NULL } diff --git a/src/video/vid_voodoo_banshee.c b/src/video/vid_voodoo_banshee.c index 55ff77909..23805cb41 100644 --- a/src/video/vid_voodoo_banshee.c +++ b/src/video/vid_voodoo_banshee.c @@ -62,7 +62,8 @@ enum { TYPE_BANSHEE = 0, TYPE_V3_2000, - TYPE_V3_3000 + TYPE_V3_3000, + TYPE_VELOCITY100 }; typedef struct banshee_t @@ -2406,7 +2407,7 @@ static uint8_t banshee_pci_read(int func, int addr, void *p) case 0x00: ret = 0x1a; break; /*3DFX*/ case 0x01: ret = 0x12; break; - case 0x02: ret = (banshee->type == TYPE_BANSHEE) ? 0x03 : 0x05; break; + case 0x02: ret = (banshee->type == TYPE_BANSHEE) ? 0x03 : ((banshee->type == TYPE_VELOCITY100) ? 0x04 : 0x05); break; case 0x03: ret = 0x00; break; case 0x04: ret = banshee->pci_regs[0x04] & 0x27; break; @@ -2750,9 +2751,12 @@ static void *banshee_init_common(const device_t *info, char *fn, int has_sgram, if (!banshee->has_bios) mem_size = info->local; /* fixed size for on-board chips */ - else if (has_sgram) - mem_size = device_get_config_int("memory"); - else + else if (has_sgram) { + if (banshee->type == TYPE_VELOCITY100) + mem_size = 8; /* Velocity 100 only supports 8 MB */ + else + mem_size = device_get_config_int("memory"); + } else mem_size = 16; /* SDRAM Banshee only supports 16 MB */ svga_init(info, &banshee->svga, banshee, mem_size << 20, @@ -2889,6 +2893,10 @@ 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); } +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); +} static int banshee_available(void) { @@ -2908,6 +2916,10 @@ static int v3_3000_available(void) return rom_present("roms/video/voodoo/3k12sd.rom"); } #define v3_3000_agp_available v3_3000_available +static int velocity_100_available(void) +{ + return rom_present("roms/video/voodoo/Velocity100.VBI"); +} static void banshee_close(void *p) { @@ -3034,3 +3046,17 @@ const device_t voodoo_3_3000_agp_device = banshee_force_redraw, banshee_sdram_config }; + +const device_t velocity_100_agp_device = +{ + "3dfx Velocity 100", + DEVICE_AGP, + 0, + velocity_100_agp_init, + banshee_close, + NULL, + { velocity_100_available }, + banshee_speed_changed, + banshee_force_redraw, + banshee_sdram_config +}; \ No newline at end of file