Skip to content

Commit a44c48b

Browse files
committed
-bus/isa/prose4k1.cpp: Dumped Speech Plus Prose 4001 CPU firmware. [Matt Balmer]
* The CPU passes its initial memory test, but no I/O is connected. -dynax/ddenlovr.cpp: Identified 18 of 40 DIP switches for hanakanz with high confidence, and improved inputs.
1 parent bab7f83 commit a44c48b

File tree

5 files changed

+202
-167
lines changed

5 files changed

+202
-167
lines changed

scripts/src/bus.lua

+2
Original file line numberDiff line numberDiff line change
@@ -1848,6 +1848,8 @@ if (BUSES["ISA"]~=null) then
18481848
MAME_DIR .. "src/devices/bus/isa/pds.h",
18491849
MAME_DIR .. "src/devices/bus/isa/pgc.cpp",
18501850
MAME_DIR .. "src/devices/bus/isa/pgc.h",
1851+
MAME_DIR .. "src/devices/bus/isa/prose4k1.cpp",
1852+
MAME_DIR .. "src/devices/bus/isa/prose4k1.h",
18511853
MAME_DIR .. "src/devices/bus/isa/sb16.cpp",
18521854
MAME_DIR .. "src/devices/bus/isa/sb16.h",
18531855
MAME_DIR .. "src/devices/bus/isa/sblaster.cpp",

src/devices/bus/isa/isa_cards.cpp

+35-32
Original file line numberDiff line numberDiff line change
@@ -10,84 +10,85 @@
1010
#include "isa_cards.h"
1111

1212
// video
13-
#include "mda.h"
14-
#include "cga.h"
1513
#include "aga.h"
14+
#include "cga.h"
1615
#include "ega.h"
16+
#include "eis_hgb107x.h"
17+
#include "ex1280.h"
18+
#include "mda.h"
19+
#include "num9rev.h"
1720
#include "pgc.h"
18-
#include "vga.h"
19-
#include "vga_ati.h"
2021
#include "svga_cirrus.h"
2122
#include "svga_paradise.h"
2223
#include "svga_s3.h"
23-
#include "svga_tseng.h"
2424
#include "svga_trident.h"
25-
#include "num9rev.h"
26-
#include "eis_hgb107x.h"
27-
#include "ex1280.h"
25+
#include "svga_tseng.h"
26+
#include "vga.h"
27+
#include "vga_ati.h"
2828

2929
// storage
30-
#include "fdc.h"
31-
#include "mufdc.h"
32-
#include "hdc.h"
33-
#include "wdxt_gen.h"
34-
#include "ide.h"
35-
#include "xtide.h"
36-
#include "side116.h"
3730
#include "acb2072.h"
3831
#include "aha1542b.h"
3932
#include "aha1542c.h"
4033
#include "aha174x.h"
41-
#include "wd1002a_wx1.h"
42-
#include "wd1007a.h"
43-
#include "mcd.h"
44-
#include "lbaenhancer.h"
45-
#include "cl_sh260.h"
34+
#include "asc88.h"
4635
#include "bt54x.h"
36+
#include "cl_sh260.h"
4737
#include "dcb.h"
38+
#include "fdc.h"
39+
#include "hdc.h"
40+
#include "ide.h"
41+
#include "lbaenhancer.h"
42+
#include "lrk330.h"
43+
#include "mcd.h"
44+
#include "mufdc.h"
45+
#include "omti8621.h"
46+
#include "side116.h"
47+
#include "tekram_dc820.h"
4848
#include "ultra12f.h"
4949
#include "ultra14f.h"
5050
#include "ultra24f.h"
51-
#include "tekram_dc820.h"
52-
#include "asc88.h"
53-
#include "omti8621.h"
54-
#include "lrk330.h"
51+
#include "wd1002a_wx1.h"
52+
#include "wd1007a.h"
53+
#include "wdxt_gen.h"
54+
#include "xtide.h"
5555

5656
// sound
5757
#include "adlib.h"
58+
#include "dectalk.h"
5859
#include "gblaster.h"
5960
#include "gus.h"
6061
#include "ibm_mfc.h"
6162
#include "ibm_speech.h"
6263
#include "mpu401.h"
6364
#include "pcmidi.h"
65+
#include "prose4k1.h"
66+
#include "sb16.h"
6467
#include "sblaster.h"
6568
#include "ssi2001.h"
6669
#include "stereo_fx.h"
67-
#include "dectalk.h"
68-
#include "sb16.h"
6970

7071
// network
7172
#include "3c503.h"
72-
#include "ne1000.h"
73-
#include "ne2000.h"
7473
#include "3c505.h"
74+
#include "3xtwin.h"
7575
#include "eis_sad8852.h"
7676
#include "eis_twib.h"
77+
#include "ne1000.h"
78+
#include "ne2000.h"
7779
#include "np600.h"
78-
#include "3xtwin.h"
7980

8081
// communication ports
81-
#include "lpt.h"
8282
#include "com.h"
83+
#include "lpt.h"
8384
#include "pds.h"
8485

8586
// other
86-
#include "hpblp.h"
87+
#include "bblue2.h"
8788
#include "chessmdr.h"
8889
#include "chessmsr.h"
8990
#include "finalchs.h"
90-
#include "bblue2.h"
91+
#include "hpblp.h"
9192
#include "opus100pm.h"
9293

9394

@@ -134,6 +135,7 @@ void pc_isa8_cards(device_slot_interface &device)
134135
device.option_add("ibm_mfc", ISA8_IBM_MFC);
135136
device.option_add("wd1002a_wx1", ISA8_WD1002A_WX1);
136137
device.option_add("dectalk", ISA8_DECTALK);
138+
device.option_add("prose4k1", ISA8_PROSE4001);
137139
device.option_add("pds", ISA8_PDS);
138140
device.option_add("lba_enhancer", ISA8_LBA_ENHANCER);
139141
device.option_add("asc88", ASC88);
@@ -182,6 +184,7 @@ void pc_isa16_cards(device_slot_interface &device)
182184
device.option_add("ibm_mfc", ISA8_IBM_MFC);
183185
device.option_add("fdcsmc", ISA8_FDC_SMC);
184186
device.option_add("dectalk", ISA8_DECTALK);
187+
device.option_add("prose4k1", ISA8_PROSE4001);
185188
device.option_add("pds", ISA8_PDS);
186189
device.option_add("lba_enhancer", ISA8_LBA_ENHANCER);
187190
device.option_add("chessmdr", ISA8_CHESSMDR);

src/devices/bus/isa/prose4k1.cpp

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// license:BSD-3-Clause
2+
// copyright-holders:Vas Crabb
3+
/*
4+
Speech Plus Prose 4001 speech synthesiser
5+
6+
Full-length ISA card. Supports operation in IBM PC mode (as an ISA bus
7+
card) and standalone mode (controlled over a seria connection). The
8+
example the ROMs were dumped from had many components unpopulated.
9+
10+
Major components include:
11+
* Siemens 80188-N CPU
12+
* NEC D77P20 DSP with EPROM memory
13+
* Three TI 27C512 EPROMS
14+
* 256 kbit SRAM
15+
* Intel P8251A UART
16+
* Three banks of eight DIP switches
17+
*/
18+
#include "emu.h"
19+
#include "prose4k1.h"
20+
21+
#include "cpu/i86/i186.h"
22+
#include "machine/i8251.h"
23+
24+
25+
namespace {
26+
27+
class prose4k1_device : public device_t, public device_isa8_card_interface
28+
{
29+
public:
30+
static constexpr feature_type unemulated_features() { return feature::SOUND; }
31+
32+
prose4k1_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) :
33+
device_t(mconfig, ISA8_PROSE4001, tag, owner, clock),
34+
device_isa8_card_interface(mconfig, *this)
35+
{
36+
}
37+
38+
protected:
39+
// device_t implementation
40+
virtual tiny_rom_entry const *device_rom_region() const override ATTR_COLD;
41+
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
42+
virtual void device_start() override ATTR_COLD;
43+
44+
private:
45+
void main_map(address_map &map) ATTR_COLD;
46+
};
47+
48+
49+
ROM_START(prose4k1)
50+
ROM_REGION(0x3'0000, "u8", 0)
51+
ROM_LOAD("v3.4.1_pr4001.u3", 0x0'0000, 0x1'0000, CRC(12dac3ed) SHA1(cf8c0b9de1f00facbc5cb5dc8e2dcbb09d6ff479)) // TMS27C512, printed label
52+
ROM_LOAD("v3.4.1_pr4001.u2", 0x1'0000, 0x1'0000, CRC(2ee241b7) SHA1(35b81f3b4deb552511f8d8f2d0aac9100fdee49d)) // TMS27C512, printed label
53+
ROM_LOAD("v3.4.1_pr4001.u1", 0x2'0000, 0x1'0000, CRC(559f4950) SHA1(5c8709c82dadaea7012859c20141ef8f59d5e473)) // TMS27C512, handwritten label
54+
55+
ROM_REGION32_BE(0x0800, "dsp:prg", 0) // 512*23-bit words
56+
ROM_LOAD("v3.12_5_04_90.prg", 0x0000, 0x0800, NO_DUMP)
57+
58+
ROM_REGION16_BE(0x0400, "dsp:dat", 0) // 512*13-bit words
59+
ROM_LOAD("v3.12_5_04_90.dat", 0x0000, 0x0400, NO_DUMP)
60+
ROM_END
61+
62+
63+
tiny_rom_entry const *prose4k1_device::device_rom_region() const
64+
{
65+
return ROM_NAME(prose4k1);
66+
}
67+
68+
69+
void prose4k1_device::device_add_mconfig(machine_config &config)
70+
{
71+
I80188(config, "u8", 8'000'000).set_addrmap(AS_PROGRAM, &prose4k1_device::main_map); // TODO: measure clock
72+
73+
I8251(config, "u27", 0);
74+
}
75+
76+
77+
void prose4k1_device::device_start()
78+
{
79+
}
80+
81+
82+
void prose4k1_device::main_map(address_map &map)
83+
{
84+
map(0x0'0000, 0x0'8000).ram();
85+
86+
map(0xd'0000, 0xf'ffff).rom().region("u8", 0x0'0000);
87+
}
88+
89+
} // anonymous namespace
90+
91+
92+
DEFINE_DEVICE_TYPE_PRIVATE(ISA8_PROSE4001, device_isa8_card_interface, prose4k1_device, "isa_prose4001", "Speech Plus Prose 4001 (IBM PC mode)")

src/devices/bus/isa/prose4k1.h

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// license:BSD-3-Clause
2+
// copyright-holders:Vas Crabb
3+
#ifndef MAME_BUS_ISA_PROSE4K1_H
4+
#define MAME_BUS_ISA_PROSE4K1_H
5+
6+
#pragma once
7+
8+
#include "isa.h"
9+
10+
11+
DECLARE_DEVICE_TYPE(ISA8_PROSE4001, device_isa8_card_interface)
12+
13+
#endif // MAME_BUS_ISA_PROSE4K1_H

0 commit comments

Comments
 (0)