summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/isa
diff options
context:
space:
mode:
author angelosa <lordkale4@gmail.com>2023-07-04 19:33:37 +0200
committer angelosa <lordkale4@gmail.com>2023-07-04 19:33:37 +0200
commite3f493b094a65e818d3564b8928b6166e2c08804 (patch)
tree42ab53b10b4280894c1e91867d2f749078afe394 /src/devices/bus/isa
parent863e520f3d462bfafd9e7ac1e55e2792e81f7a3f (diff)
isa/isa_cards.cpp: add Paradise Systems PVGA1 ISA16 card
Diffstat (limited to 'src/devices/bus/isa')
-rw-r--r--src/devices/bus/isa/isa_cards.cpp2
-rw-r--r--src/devices/bus/isa/svga_paradise.cpp70
-rw-r--r--src/devices/bus/isa/svga_paradise.h43
3 files changed, 115 insertions, 0 deletions
diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp
index a5b480737c9..0d04aa72783 100644
--- a/src/devices/bus/isa/isa_cards.cpp
+++ b/src/devices/bus/isa/isa_cards.cpp
@@ -18,6 +18,7 @@
#include "vga.h"
#include "vga_ati.h"
#include "svga_cirrus.h"
+#include "svga_paradise.h"
#include "svga_s3.h"
#include "svga_tseng.h"
#include "svga_trident.h"
@@ -217,6 +218,7 @@ void pc_isa16_cards(device_slot_interface &device)
device.option_add("gfxultrap", ISA16_SVGA_GFXULTRAPRO);
device.option_add("tvga9000", ISA16_SVGA_TVGA9000);
// device.option_add("tgui9680",ISA16_SVGA_TGUI9680);
+ device.option_add("pvga1a", ISA16_PVGA1A);
device.option_add("3c505", ISA16_3C505);
device.option_add("mach64", ISA16_SVGA_MACH64);
device.option_add("sb16_lle", ISA16_SB16);
diff --git a/src/devices/bus/isa/svga_paradise.cpp b/src/devices/bus/isa/svga_paradise.cpp
new file mode 100644
index 00000000000..4dcb5cf85a1
--- /dev/null
+++ b/src/devices/bus/isa/svga_paradise.cpp
@@ -0,0 +1,70 @@
+// license:BSD-3-Clause
+// copyright-holders:Angelo Salese
+/***************************************************************************
+
+ ISA SVGA Paradise / Western Digital wrapper
+
+***************************************************************************/
+
+#include "emu.h"
+#include "svga_paradise.h"
+
+#include "screen.h"
+
+DEFINE_DEVICE_TYPE(ISA16_PVGA1A, isa16_pvga1a_device, "pvga1a", "Paradise Systems PVGA1A 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),
+ device_isa16_card_interface(mconfig, *this),
+ m_vga(*this, "vga")
+{
+}
+
+ROM_START( go481 )
+ ROM_REGION(0x8000,"vga_rom", 0)
+ ROM_SYSTEM_BIOS(0, "pvga1a", "Paradise Systems PVGA1A")
+ ROMX_LOAD("bios.bin", 0x000000, 0x008000, CRC(2be5d405) SHA1(5e3b4ebae221b7ad02f3eaa052178cb39d1d9bbe), ROM_BIOS(0))
+ ROM_IGNORE( 0x8000 )
+ // Western Digital licensed
+ ROM_SYSTEM_BIOS(1, "go481", "Olivetti GO481")
+ ROMX_LOAD("oli_go481_hi.bin", 0x000001, 0x004000, CRC(cda447be) SHA1(f397e3ddd3885666e3151fb4f681abf47fef36ba), ROM_SKIP(1) | ROM_BIOS(1))
+ ROM_IGNORE( 0x4000 )
+ ROMX_LOAD("oli_go481_lo.bin", 0x000000, 0x004000, CRC(7db97902) SHA1(b93aa9d45942e98fb4932b4db34b82d459060adf), ROM_SKIP(1) | ROM_BIOS(1))
+ ROM_IGNORE( 0x4000 )
+ROM_END
+
+const tiny_rom_entry *isa16_pvga1a_device::device_rom_region() const
+{
+ return ROM_NAME( go481 );
+}
+
+void isa16_pvga1a_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(pvga1a_vga_device::screen_update));
+
+ PVGA1A(config, m_vga, 0);
+ m_vga->set_screen("screen");
+ m_vga->set_vram_size(0x100000);
+}
+
+void isa16_pvga1a_device::io_isa_map(address_map &map)
+{
+ map(0x00, 0x2f).m(m_vga, FUNC(pvga1a_vga_device::io_map));
+}
+
+void isa16_pvga1a_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(pvga1a_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(pvga1a_vga_device::mem_w)));
+ m_isa->install_device(0x03b0, 0x03df, *this, &isa16_pvga1a_device::io_isa_map);
+}
+
+void isa16_pvga1a_device::device_reset()
+{
+
+}
diff --git a/src/devices/bus/isa/svga_paradise.h b/src/devices/bus/isa/svga_paradise.h
new file mode 100644
index 00000000000..3972013a5c8
--- /dev/null
+++ b/src/devices/bus/isa/svga_paradise.h
@@ -0,0 +1,43 @@
+// license:BSD-3-Clause
+// copyright-holders:Angelo Salese
+
+#ifndef MAME_BUS_ISA_SVGA_PARADISE_H
+#define MAME_BUS_ISA_SVGA_PARADISE_H
+
+#pragma once
+
+#include "isa.h"
+#include "video/pc_vga_paradise.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class isa16_pvga1a_device :
+ public device_t,
+ public device_isa16_card_interface
+{
+public:
+ // construction/destruction
+ isa16_pvga1a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() 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<pvga1a_vga_device> m_vga;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(ISA16_PVGA1A, isa16_pvga1a_device)
+
+#endif // MAME_BUS_ISA_SVGA_PARADISE_H