isa/svga_paradise.cpp: add WD90C31-LR, WD90C31A_LR, WD90C31A_ZS, W90C33_ZZ ISA cards

This commit is contained in:
angelosa 2023-07-11 22:28:11 +02:00
parent 7ebcfc7637
commit 1420684c85
3 changed files with 326 additions and 10 deletions

View file

@ -225,6 +225,10 @@ void pc_isa16_cards(device_slot_interface &device)
device.option_add("wd90c00_jk", ISA16_WD90C00_JK);
device.option_add("wd90c11_lr", ISA16_WD90C11_LR);
device.option_add("wd90c30_lr", ISA16_WD90C30_LR);
device.option_add("wd90c31_lr", ISA16_WD90C31_LR);
device.option_add("wd90c31a_lr", ISA16_WD90C31A_LR);
device.option_add("wd90c31a_zs", ISA16_WD90C31A_ZS);
device.option_add("wd90c33_zz", ISA16_WD90C33_ZZ);
device.option_add("3c505", ISA16_3C505);
device.option_add("mach64", ISA16_SVGA_MACH64);
device.option_add("sb16_lle", ISA16_SB16);

View file

@ -26,13 +26,18 @@ TODO:
#include "screen.h"
// TODO: some of these are also ISA8
DEFINE_DEVICE_TYPE(ISA16_PVGA1A, isa16_pvga1a_device, "pvga1a", "Paradise Systems PVGA1A Graphics Card")
DEFINE_DEVICE_TYPE(ISA16_PVGA1A_JK, isa16_pvga1a_jk_device, "pvga1a_jk", "Paradise Systems PVGA1A-JK Graphics Card")
DEFINE_DEVICE_TYPE(ISA8_WD90C90_JK, isa8_wd90c90_jk_device, "wd90c90_jk", "Western Digital WD90C90-JK Graphics Card")
DEFINE_DEVICE_TYPE(ISA16_WD90C00_JK, isa16_wd90c00_jk_device, "wd90c00_jk", "Western Digital WD90C00-JK Graphics Card")
DEFINE_DEVICE_TYPE(ISA16_WD90C11_LR, isa16_wd90c11_lr_device, "wd90c11_lr", "Western Digital WD90C11-LR Graphics Card \"1024 CX\"")
DEFINE_DEVICE_TYPE(ISA16_WD90C30_LR, isa16_wd90c30_lr_device, "wd90c30_lr", "Western Digital WD90C30-LR Graphics Card \"1024 DX\"")
DEFINE_DEVICE_TYPE(ISA16_PVGA1A, isa16_pvga1a_device, "pvga1a", "Paradise Systems PVGA1A Graphics Card")
DEFINE_DEVICE_TYPE(ISA16_PVGA1A_JK, isa16_pvga1a_jk_device, "pvga1a_jk", "Paradise Systems PVGA1A-JK Graphics Card")
DEFINE_DEVICE_TYPE(ISA8_WD90C90_JK, isa8_wd90c90_jk_device, "wd90c90_jk", "Western Digital WD90C90-JK Graphics Card")
DEFINE_DEVICE_TYPE(ISA16_WD90C00_JK, isa16_wd90c00_jk_device, "wd90c00_jk", "Western Digital WD90C00-JK Graphics Card")
DEFINE_DEVICE_TYPE(ISA16_WD90C11_LR, isa16_wd90c11_lr_device, "wd90c11_lr", "Western Digital WD90C11-LR Graphics Card \"1024 CX\"")
DEFINE_DEVICE_TYPE(ISA16_WD90C30_LR, isa16_wd90c30_lr_device, "wd90c30_lr", "Western Digital WD90C30-LR Graphics Card \"1024 DX\"")
DEFINE_DEVICE_TYPE(ISA16_WD90C31_LR, isa16_wd90c31_lr_device, "wd90c31_lr", "Western Digital WD90C31-LR Graphics Card")
DEFINE_DEVICE_TYPE(ISA16_WD90C31A_LR, isa16_wd90c31a_lr_device, "wd90c31a_lr", "Western Digital WD90C31A-LR Graphics Card")
//DEFINE_DEVICE_TYPE(ISA16_WD90C31_ZS, isa16_wd90c31_zs_device, "wd90c31_zs", "Western Digital WD90C31-ZS Graphics Card")
DEFINE_DEVICE_TYPE(ISA16_WD90C31A_ZS, isa16_wd90c31a_zs_device, "wd90c31a_zs", "Western Digital WD90C31A-ZS Graphics Card")
// TODO: Also VL-Bus
DEFINE_DEVICE_TYPE(ISA16_WD90C33_ZZ, isa16_wd90c33_zz_device, "wd90c33_zz", "Western Digital WD90C33-ZZ Graphics Card")
isa16_pvga1a_device::isa16_pvga1a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, ISA16_PVGA1A, tag, owner, clock),
@ -289,7 +294,7 @@ void isa16_wd90c11_lr_device::device_add_mconfig(machine_config &config)
{
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update("vga", FUNC(wd90c00_vga_device::screen_update));
screen.set_screen_update("vga", FUNC(wd90c11a_vga_device::screen_update));
WD90C11A(config, m_vga, 0);
m_vga->set_screen("screen");
@ -308,7 +313,7 @@ void isa16_wd90c11_lr_device::device_start()
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c00_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c00_vga_device::mem_w)));
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c11a_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c11a_vga_device::mem_w)));
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c11_lr_device::io_isa_map);
}
@ -340,7 +345,7 @@ void isa16_wd90c30_lr_device::device_add_mconfig(machine_config &config)
{
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update("vga", FUNC(wd90c00_vga_device::screen_update));
screen.set_screen_update("vga", FUNC(wd90c30_vga_device::screen_update));
WD90C30(config, m_vga, 0);
m_vga->set_screen("screen");
@ -362,3 +367,218 @@ void isa16_wd90c30_lr_device::device_start()
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_w)));
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c30_lr_device::io_isa_map);
}
/******************
*
* WD90C31-LR
*
*****************/
isa16_wd90c31_lr_device::isa16_wd90c31_lr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, ISA16_WD90C31_LR, tag, owner, clock),
device_isa16_card_interface(mconfig, *this),
m_vga(*this, "vga")
{
}
ROM_START( wd90c31_lr )
ROM_REGION(0x8000,"vga_rom", ROMREGION_ERASE00)
ROM_SYSTEM_BIOS(0, "wdxlr831", "Western Digital WD90C31-LR")
ROMX_LOAD( "62-003259-800.bin", 0x000001, 0x004000, CRC(e71090bd) SHA1(f784ebc14801a0944271aab9ba4746dd9d0e001d), ROM_SKIP(1) | ROM_BIOS(0) )
ROMX_LOAD( "62-003260-800.bin", 0x000000, 0x004000, CRC(1e66af70) SHA1(7f236d6acb34d07480584d51f6bb57836ff262c4), ROM_SKIP(1) |ROM_BIOS(0) )
ROM_END
const tiny_rom_entry *isa16_wd90c31_lr_device::device_rom_region() const
{
return ROM_NAME( wd90c31_lr );
}
void isa16_wd90c31_lr_device::device_add_mconfig(machine_config &config)
{
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update("vga", FUNC(wd90c30_vga_device::screen_update));
// TODO: WD90C31
WD90C30(config, m_vga, 0);
m_vga->set_screen("screen");
// 512KB, 1MB
m_vga->set_vram_size(0x100000);
}
void isa16_wd90c31_lr_device::io_isa_map(address_map &map)
{
map(0x00, 0x2f).m(m_vga, FUNC(wd90c30_vga_device::io_map));
}
void isa16_wd90c31_lr_device::device_start()
{
set_isa_device();
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_w)));
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c31_lr_device::io_isa_map);
}
/******************
*
* WD90C31A-LR
*
*****************/
isa16_wd90c31a_lr_device::isa16_wd90c31a_lr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, ISA16_WD90C31A_LR, tag, owner, clock),
device_isa16_card_interface(mconfig, *this),
m_vga(*this, "vga")
{
}
ROM_START( wd90c31a_lr )
ROM_REGION(0x8000,"vga_rom", ROMREGION_ERASE00)
ROM_SYSTEM_BIOS(0, "speed24x", "Diamond Speedstar 24x (Vers. 1.04)")
ROMX_LOAD( "wd90c31alrdiamondspeedstar24x2.bin", 0x000000, 0x008000, CRC(578cb3c3) SHA1(ca7d871f9589eb06ace8075dd2d87a59bd191744), ROM_BIOS(0) )
// "wd90c31alrdiamondspeedstar24x1.bin" identical to above
ROM_SYSTEM_BIOS(1, "wd90c31a_lr", "Western Digital WD90C31A-LR")
ROMX_LOAD( "bios.bin", 0x000000, 0x008000, CRC(cdc4c32e) SHA1(52ed7b8301ec5ebab0d87bab8cddd9cc8612e2ab), ROM_BIOS(1) )
ROM_IGNORE( 0x8000 )
ROM_END
const tiny_rom_entry *isa16_wd90c31a_lr_device::device_rom_region() const
{
return ROM_NAME( wd90c31a_lr );
}
void isa16_wd90c31a_lr_device::device_add_mconfig(machine_config &config)
{
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update("vga", FUNC(wd90c00_vga_device::screen_update));
// TODO: WD90C31A
WD90C30(config, m_vga, 0);
m_vga->set_screen("screen");
// 512KB, 1MB
m_vga->set_vram_size(0x100000);
}
void isa16_wd90c31a_lr_device::io_isa_map(address_map &map)
{
map(0x00, 0x2f).m(m_vga, FUNC(wd90c30_vga_device::io_map));
}
void isa16_wd90c31a_lr_device::device_start()
{
set_isa_device();
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_w)));
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c31a_lr_device::io_isa_map);
}
/******************
*
* WD90C31A-ZS
*
*****************/
isa16_wd90c31a_zs_device::isa16_wd90c31a_zs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, ISA16_WD90C31A_ZS, tag, owner, clock),
device_isa16_card_interface(mconfig, *this),
m_vga(*this, "vga")
{
}
ROM_START( wd90c31a_zs )
ROM_REGION(0x8000,"vga_rom", ROMREGION_ERASE00)
ROM_SYSTEM_BIOS(0, "wd90c31a_zs", "Western Digital WD90C31A-ZS")
ROM_LOAD( "wd90c31azs.bin", 0x000000, 0x008000, CRC(521db1dd) SHA1(52cefcc9a1b7374c7414bb93a7805207ba5b7fe3) )
ROM_END
const tiny_rom_entry *isa16_wd90c31a_zs_device::device_rom_region() const
{
return ROM_NAME( wd90c31a_zs );
}
void isa16_wd90c31a_zs_device::device_add_mconfig(machine_config &config)
{
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update("vga", FUNC(wd90c00_vga_device::screen_update));
// TODO: WD90C31A
WD90C30(config, m_vga, 0);
m_vga->set_screen("screen");
// 512KB, 1MB
m_vga->set_vram_size(0x100000);
}
void isa16_wd90c31a_zs_device::io_isa_map(address_map &map)
{
map(0x00, 0x2f).m(m_vga, FUNC(wd90c30_vga_device::io_map));
}
void isa16_wd90c31a_zs_device::device_start()
{
set_isa_device();
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_w)));
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c31a_zs_device::io_isa_map);
}
/******************
*
* WD90C33-ZZ
*
*****************/
isa16_wd90c33_zz_device::isa16_wd90c33_zz_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, ISA16_WD90C33_ZZ, tag, owner, clock),
device_isa16_card_interface(mconfig, *this),
m_vga(*this, "vga")
{
}
ROM_START( wd90c33_zz )
ROM_REGION(0x8000,"vga_rom", ROMREGION_ERASE00)
ROM_SYSTEM_BIOS(0, "wd90c33_zz", "Western Digital WD90C33-ZZ")
ROM_LOAD( "bios.bin", 0x000000, 0x008000, CRC(b719d557) SHA1(0f93213ed439059d23e0793478793ffd6188ce12) )
ROM_IGNORE( 0x8000 )
ROM_END
const tiny_rom_entry *isa16_wd90c33_zz_device::device_rom_region() const
{
return ROM_NAME( wd90c33_zz );
}
void isa16_wd90c33_zz_device::device_add_mconfig(machine_config &config)
{
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update("vga", FUNC(wd90c30_vga_device::screen_update));
// TODO: WD90C33
WD90C30(config, m_vga, 0);
m_vga->set_screen("screen");
// 1MB, 2MB
m_vga->set_vram_size(0x100000);
}
void isa16_wd90c33_zz_device::io_isa_map(address_map &map)
{
map(0x00, 0x2f).m(m_vga, FUNC(wd90c30_vga_device::io_map));
}
void isa16_wd90c33_zz_device::device_start()
{
set_isa_device();
m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga_rom");
m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(wd90c30_vga_device::mem_w)));
m_isa->install_device(0x03b0, 0x03df, *this, &isa16_wd90c33_zz_device::io_isa_map);
}

View file

@ -145,6 +145,94 @@ private:
required_device<wd90c30_vga_device> m_vga;
};
class isa16_wd90c31_lr_device :
public device_t,
public device_isa16_card_interface
{
public:
// construction/destruction
isa16_wd90c31_lr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device-level overrides
virtual void device_start() override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
void io_isa_map(address_map &map);
private:
required_device<wd90c30_vga_device> m_vga;
};
class isa16_wd90c31a_lr_device :
public device_t,
public device_isa16_card_interface
{
public:
// construction/destruction
isa16_wd90c31a_lr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device-level overrides
virtual void device_start() override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
void io_isa_map(address_map &map);
private:
required_device<wd90c30_vga_device> m_vga;
};
class isa16_wd90c31a_zs_device :
public device_t,
public device_isa16_card_interface
{
public:
// construction/destruction
isa16_wd90c31a_zs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device-level overrides
virtual void device_start() override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
void io_isa_map(address_map &map);
private:
required_device<wd90c30_vga_device> m_vga;
};
class isa16_wd90c33_zz_device :
public device_t,
public device_isa16_card_interface
{
public:
// construction/destruction
isa16_wd90c33_zz_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// device-level overrides
virtual void device_start() override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
void io_isa_map(address_map &map);
private:
required_device<wd90c30_vga_device> m_vga;
};
// device type definition
DECLARE_DEVICE_TYPE(ISA16_PVGA1A, isa16_pvga1a_device)
DECLARE_DEVICE_TYPE(ISA16_PVGA1A_JK, isa16_pvga1a_jk_device)
@ -152,6 +240,10 @@ DECLARE_DEVICE_TYPE(ISA8_WD90C90_JK, isa8_wd90c90_jk_device)
DECLARE_DEVICE_TYPE(ISA16_WD90C00_JK, isa16_wd90c00_jk_device)
DECLARE_DEVICE_TYPE(ISA16_WD90C11_LR, isa16_wd90c11_lr_device)
DECLARE_DEVICE_TYPE(ISA16_WD90C30_LR, isa16_wd90c30_lr_device)
DECLARE_DEVICE_TYPE(ISA16_WD90C31_LR, isa16_wd90c31_lr_device)
DECLARE_DEVICE_TYPE(ISA16_WD90C31A_LR, isa16_wd90c31a_lr_device)
DECLARE_DEVICE_TYPE(ISA16_WD90C31A_ZS, isa16_wd90c31a_zs_device)
DECLARE_DEVICE_TYPE(ISA16_WD90C33_ZZ, isa16_wd90c33_zz_device)
#endif // MAME_BUS_ISA_SVGA_PARADISE_H