summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/isa/prose4k1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/isa/prose4k1.cpp')
-rw-r--r--src/devices/bus/isa/prose4k1.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/devices/bus/isa/prose4k1.cpp b/src/devices/bus/isa/prose4k1.cpp
new file mode 100644
index 00000000000..abaadbc6a96
--- /dev/null
+++ b/src/devices/bus/isa/prose4k1.cpp
@@ -0,0 +1,92 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+/*
+ Speech Plus Prose 4001 speech synthesiser
+
+ Full-length ISA card. Supports operation in IBM PC mode (as an ISA bus
+ card) and standalone mode (controlled over a seria connection). The
+ example the ROMs were dumped from had many components unpopulated.
+
+ Major components include:
+ * Siemens 80188-N CPU
+ * NEC D77P20 DSP with EPROM memory
+ * Three TI 27C512 EPROMS
+ * 256 kbit SRAM
+ * Intel P8251A UART
+ * Three banks of eight DIP switches
+ */
+#include "emu.h"
+#include "prose4k1.h"
+
+#include "cpu/i86/i186.h"
+#include "machine/i8251.h"
+
+
+namespace {
+
+class prose4k1_device : public device_t, public device_isa8_card_interface
+{
+public:
+ static constexpr feature_type unemulated_features() { return feature::SOUND; }
+
+ prose4k1_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, ISA8_PROSE4001, tag, owner, clock),
+ device_isa8_card_interface(mconfig, *this)
+ {
+ }
+
+protected:
+ // device_t implementation
+ virtual tiny_rom_entry const *device_rom_region() const override ATTR_COLD;
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
+ virtual void device_start() override ATTR_COLD;
+
+private:
+ void main_map(address_map &map) ATTR_COLD;
+};
+
+
+ROM_START(prose4k1)
+ ROM_REGION(0x3'0000, "u8", 0)
+ ROM_LOAD("v3.4.1_pr4001.u3", 0x0'0000, 0x1'0000, CRC(12dac3ed) SHA1(cf8c0b9de1f00facbc5cb5dc8e2dcbb09d6ff479)) // TMS27C512, printed label
+ ROM_LOAD("v3.4.1_pr4001.u2", 0x1'0000, 0x1'0000, CRC(2ee241b7) SHA1(35b81f3b4deb552511f8d8f2d0aac9100fdee49d)) // TMS27C512, printed label
+ ROM_LOAD("v3.4.1_pr4001.u1", 0x2'0000, 0x1'0000, CRC(559f4950) SHA1(5c8709c82dadaea7012859c20141ef8f59d5e473)) // TMS27C512, handwritten label
+
+ ROM_REGION32_BE(0x0800, "dsp:prg", 0) // 512*23-bit words
+ ROM_LOAD("v3.12_5_04_90.prg", 0x0000, 0x0800, NO_DUMP)
+
+ ROM_REGION16_BE(0x0400, "dsp:dat", 0) // 512*13-bit words
+ ROM_LOAD("v3.12_5_04_90.dat", 0x0000, 0x0400, NO_DUMP)
+ROM_END
+
+
+tiny_rom_entry const *prose4k1_device::device_rom_region() const
+{
+ return ROM_NAME(prose4k1);
+}
+
+
+void prose4k1_device::device_add_mconfig(machine_config &config)
+{
+ I80188(config, "u8", 8'000'000).set_addrmap(AS_PROGRAM, &prose4k1_device::main_map); // TODO: measure clock
+
+ I8251(config, "u27", 0);
+}
+
+
+void prose4k1_device::device_start()
+{
+}
+
+
+void prose4k1_device::main_map(address_map &map)
+{
+ map(0x0'0000, 0x0'8000).ram();
+
+ map(0xd'0000, 0xf'ffff).rom().region("u8", 0x0'0000);
+}
+
+} // anonymous namespace
+
+
+DEFINE_DEVICE_TYPE_PRIVATE(ISA8_PROSE4001, device_isa8_card_interface, prose4k1_device, "isa_prose4001", "Speech Plus Prose 4001 (IBM PC mode)")