summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Dirk Best <mail@dirk-best.de>2014-11-11 06:05:20 +0100
committer Dirk Best <mail@dirk-best.de>2014-11-11 06:06:09 +0100
commit575d6ec0aa03ab0016c9f05abf4d5532e6f71b86 (patch)
tree83f3ee56be32154495985bf4904b6dbab35470a3
parent49c243d09ae7a21647ee201c1c8970ea2325cae6 (diff)
Skeleton driver for the Siemens PC-D [Dirk Best, rfka01]
-rw-r--r--src/emu/imagedev/floppy.c84
-rw-r--r--src/emu/imagedev/floppy.h4
-rw-r--r--src/mess/drivers/pc.c8
-rw-r--r--src/mess/drivers/pcd.c211
-rw-r--r--src/mess/mess.mak4
5 files changed, 303 insertions, 8 deletions
diff --git a/src/emu/imagedev/floppy.c b/src/emu/imagedev/floppy.c
index 18207595858..44e2ddd28f7 100644
--- a/src/emu/imagedev/floppy.c
+++ b/src/emu/imagedev/floppy.c
@@ -93,6 +93,15 @@ const device_type SONY_OA_D31V = &device_creator<sony_oa_d31v>;
const device_type SONY_OA_D32W = &device_creator<sony_oa_d32w>;
const device_type SONY_OA_D32V = &device_creator<sony_oa_d32v>;
+// teac 5.25" drives
+#if 0
+const device_type TEAC_FD_55A = &device_creator<teac_fd_55a>;
+const device_type TEAC_FD_55B = &device_creator<teac_fd_55b>;
+const device_type TEAC_FD_55E = &device_creator<teac_fd_55e>;
+#endif
+const device_type TEAC_FD_55F = &device_creator<teac_fd_55f>;
+const device_type TEAC_FD_55G = &device_creator<teac_fd_55g>;
+
// ALPS 5.25" drives
const device_type ALPS_3255190x = &device_creator<alps_3255190x>;
@@ -1762,6 +1771,81 @@ void sony_oa_d32v::handled_variants(UINT32 *variants, int &var_count) const
variants[var_count++] = floppy_image::SSDD;
}
+//-------------------------------------------------
+// teac fd-55f
+//
+// track to track: 3 ms
+// average: 94 ms
+// setting time: 15 ms
+// motor start time: 400 ms
+//
+//-------------------------------------------------
+
+teac_fd_55f::teac_fd_55f(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ floppy_image_device(mconfig, TEAC_FD_55F, "TEAC FD-55F FDD", tag, owner, clock, "teac_fd_55f", __FILE__)
+{
+}
+
+teac_fd_55f::~teac_fd_55f()
+{
+}
+
+void teac_fd_55f::setup_characteristics()
+{
+ form_factor = floppy_image::FF_525;
+ tracks = 80;
+ sides = 2;
+ set_rpm(300);
+}
+
+void teac_fd_55f::handled_variants(UINT32 *variants, int &var_count) const
+{
+ var_count = 0;
+ variants[var_count++] = floppy_image::SSSD;
+ variants[var_count++] = floppy_image::SSDD;
+ variants[var_count++] = floppy_image::SSQD;
+ variants[var_count++] = floppy_image::DSSD;
+ variants[var_count++] = floppy_image::DSDD;
+ variants[var_count++] = floppy_image::DSQD;
+}
+
+//-------------------------------------------------
+// teac fd-55g
+//
+// track to track: 3 ms
+// average: 91 ms
+// setting time: 15 ms
+// motor start time: 400 ms
+//
+//-------------------------------------------------
+
+teac_fd_55g::teac_fd_55g(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ floppy_image_device(mconfig, TEAC_FD_55G, "TEAC FD-55G FDD", tag, owner, clock, "teac_fd_55g", __FILE__)
+{
+}
+
+teac_fd_55g::~teac_fd_55g()
+{
+}
+
+void teac_fd_55g::setup_characteristics()
+{
+ form_factor = floppy_image::FF_525;
+ tracks = 77;
+ sides = 2;
+ set_rpm(360);
+}
+
+void teac_fd_55g::handled_variants(UINT32 *variants, int &var_count) const
+{
+ var_count = 0;
+ variants[var_count++] = floppy_image::SSSD;
+ variants[var_count++] = floppy_image::SSDD;
+ variants[var_count++] = floppy_image::SSQD;
+ variants[var_count++] = floppy_image::DSDD;
+ variants[var_count++] = floppy_image::DSQD;
+ variants[var_count++] = floppy_image::DSHD;
+}
//-------------------------------------------------
// ALPS 32551901 (black) / 32551902 (brown)
diff --git a/src/emu/imagedev/floppy.h b/src/emu/imagedev/floppy.h
index 89db2e4bff6..8cc7d0d6d29 100644
--- a/src/emu/imagedev/floppy.h
+++ b/src/emu/imagedev/floppy.h
@@ -239,6 +239,8 @@ DECLARE_FLOPPY_IMAGE_DEVICE(epson_sd_321, "floppy_5_25")
DECLARE_FLOPPY_IMAGE_DEVICE(sony_oa_d31v, "floppy_3_5")
DECLARE_FLOPPY_IMAGE_DEVICE(sony_oa_d32w, "floppy_3_5")
DECLARE_FLOPPY_IMAGE_DEVICE(sony_oa_d32v, "floppy_3_5")
+DECLARE_FLOPPY_IMAGE_DEVICE(teac_fd_55f, "floppy_5_25")
+DECLARE_FLOPPY_IMAGE_DEVICE(teac_fd_55g, "floppy_5_25")
DECLARE_FLOPPY_IMAGE_DEVICE(alps_3255190x, "floppy_5_25")
@@ -288,6 +290,8 @@ extern const device_type EPSON_SD_321;
extern const device_type SONY_OA_D31V;
extern const device_type SONY_OA_D32W;
extern const device_type SONY_OA_D32V;
+extern const device_type TEAC_FD_55F;
+extern const device_type TEAC_FD_55G;
extern const device_type ALPS_3255190x;
#endif /* FLOPPY_H */
diff --git a/src/mess/drivers/pc.c b/src/mess/drivers/pc.c
index b446d083da0..a28a1ad8635 100644
--- a/src/mess/drivers/pc.c
+++ b/src/mess/drivers/pc.c
@@ -422,13 +422,6 @@ ROM_START( olivm15 )
ROM_LOAD( "oliv_m15.bin",0xfc000, 0x04000, CRC(bf2ef795) SHA1(02d497131f5ca2c78f2accd38ab0eab6813e3ebf))
ROM_END
-// Siemens PC-D (80186)
-ROM_START( pcd )
- ROM_REGION(0x100000,"maincpu", 0)
- ROM_LOAD16_BYTE( "sni_pcd1.bin", 0xfc001, 0x2000, CRC(e20244dd) SHA1(0ebc5ddb93baacd9106f1917380de58aac64fe73))
- ROM_LOAD16_BYTE( "sni_pcd2.bin", 0xfc000, 0x2000, CRC(e03db2ec) SHA1(fcae8b0c9e7543706817b0a53872826633361fda))
-ROM_END
-
ROM_START( olypeopl )
ROM_REGION(0x100000,"maincpu", 0)
ROM_LOAD16_BYTE( "uo1271c0.bin", 0xfe000, 0x1000, CRC(c9187bce) SHA1(464e1f96046657b49afa4223ede1040650643d58))
@@ -516,7 +509,6 @@ COMP( 1983, ibm5550, ibm5150, 0, ibm5550, pccga, driver_device
COMP( 1985, pc7000, ibm5150, 0, pccga, pccga, driver_device, 0, "Sharp", "PC-7000", GAME_NOT_WORKING)
-COMP( 198?, pcd, ibm5150, 0, pccga, pccga, driver_device, 0, "Siemens", "PC-D", GAME_NOT_WORKING)
COMP( 198?, olypeopl, ibm5150, 0, pccga, pccga, driver_device, 0, "Olympia", "People PC", GAME_NOT_WORKING)
COMP( 1988, sx16, ibm5150, 0, pccga, pccga, driver_device, 0, "Sanyo", "SX-16", GAME_NOT_WORKING)
COMP( 198?, mbc16, ibm5150, 0, pccga, pccga, driver_device, 0, "Sanyo", "MBC-16" , GAME_NOT_WORKING)
diff --git a/src/mess/drivers/pcd.c b/src/mess/drivers/pcd.c
new file mode 100644
index 00000000000..ac158d14510
--- /dev/null
+++ b/src/mess/drivers/pcd.c
@@ -0,0 +1,211 @@
+/***************************************************************************
+
+ Siemens PC-D
+
+ license: MAME, GPL-2.0+
+ copyright-holders: Dirk Best
+
+ Skeleton driver
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/i86/i186.h"
+#include "machine/ram.h"
+#include "machine/pic8259.h"
+#include "machine/mc2661.h"
+#include "machine/wd_fdc.h"
+#include "machine/mc146818.h"
+#include "sound/speaker.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class pcd_state : public driver_device
+{
+public:
+ pcd_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_pic1(*this, "pic1"),
+ m_pic2(*this, "pic2"),
+ m_speaker(*this, "speaker"),
+ m_fdc(*this, "fdc"),
+ m_rtc(*this, "rtc")
+ { }
+
+ DECLARE_WRITE_LINE_MEMBER( pic1_irq );
+ DECLARE_READ8_MEMBER( pic1_slave_ack_r );
+ TIMER_DEVICE_CALLBACK_MEMBER( timer0_tick );
+ DECLARE_WRITE_LINE_MEMBER( i186_timer1_w );
+
+ DECLARE_READ8_MEMBER( crt_data_r );
+ DECLARE_WRITE8_MEMBER( crt_data_w );
+ DECLARE_READ8_MEMBER( crt_status_r );
+
+protected:
+ // driver_device overrides
+ virtual void machine_start();
+
+private:
+ required_device<i80186_cpu_device> m_maincpu;
+ required_device<pic8259_device> m_pic1;
+ required_device<pic8259_device> m_pic2;
+ required_device<speaker_sound_device> m_speaker;
+ required_device<wd2793_t> m_fdc;
+ required_device<mc146818_device> m_rtc;
+};
+
+
+//**************************************************************************
+// MACHINE EMULATION
+//**************************************************************************
+
+void pcd_state::machine_start()
+{
+}
+
+WRITE_LINE_MEMBER( pcd_state::pic1_irq )
+{
+ logerror("pic1 irq: %d\n", state);
+}
+
+READ8_MEMBER( pcd_state::pic1_slave_ack_r )
+{
+ if (offset == 0) // irq 0
+ return m_pic2->acknowledge();
+
+ return 0x00;
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER( pcd_state::timer0_tick )
+{
+ m_maincpu->tmrin0_w(0);
+ m_maincpu->tmrin0_w(1);
+}
+
+WRITE_LINE_MEMBER( pcd_state::i186_timer1_w )
+{
+ m_speaker->level_w(state);
+}
+
+READ8_MEMBER( pcd_state::crt_data_r )
+{
+ logerror("crt_data_r @ %02x\n", offset);
+ return 0xff;
+}
+
+WRITE8_MEMBER( pcd_state::crt_data_w )
+{
+ logerror("crt_data_w %02x @ %02x\n", data, offset);
+}
+
+READ8_MEMBER( pcd_state::crt_status_r )
+{
+ logerror("crt_status_r @ %02x\n", offset);
+ return 0xff;
+}
+
+
+//**************************************************************************
+// ADDRESS MAPS
+//**************************************************************************
+
+static ADDRESS_MAP_START( pcd_map, AS_PROGRAM, 16, pcd_state )
+ AM_RANGE(0x00000, 0x3ffff) AM_RAM // fixed 256k for now
+ AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("bios", 0)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( pcd_io, AS_IO, 16, pcd_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0xf900, 0xf907) AM_DEVREADWRITE8("fdc", wd2793_t, read, write, 0x00ff)
+ AM_RANGE(0xf940, 0xf941) AM_DEVREADWRITE8("pic1", pic8259_device, read, write, 0xff00)
+ AM_RANGE(0xf980, 0xf981) AM_READWRITE8(crt_data_r, crt_data_w, 0x00ff) AM_READ8(crt_status_r, 0xff00)
+// AM_RANGE(0xfa00, 0xfa7f) // pcs4-n (peripheral chip select)
+ADDRESS_MAP_END
+
+
+//**************************************************************************
+// MACHINE DRIVERS
+//**************************************************************************
+
+static SLOT_INTERFACE_START( pcd_floppies )
+ SLOT_INTERFACE("55f", TEAC_FD_55F)
+ SLOT_INTERFACE("55g", TEAC_FD_55G)
+SLOT_INTERFACE_END
+
+static MACHINE_CONFIG_START( pcd, pcd_state )
+ MCFG_CPU_ADD("maincpu", I80186, XTAL_16MHz / 2)
+ MCFG_CPU_PROGRAM_MAP(pcd_map)
+ MCFG_CPU_IO_MAP(pcd_io)
+ MCFG_80186_TMROUT1_HANDLER(WRITELINE(pcd_state, i186_timer1_w))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("timer0_tick", pcd_state, timer0_tick, attotime::from_hz(XTAL_16MHz / 2 / 16))
+
+ MCFG_PIC8259_ADD("pic1", WRITELINE(pcd_state, pic1_irq), VCC, READ8(pcd_state, pic1_slave_ack_r))
+ MCFG_PIC8259_ADD("pic2", DEVWRITELINE("pic1", pic8259_device, ir0_w), GND, NULL)
+
+#if 0
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("256K")
+ MCFG_RAM_EXTRA_OPTIONS("512K,1M")
+#endif
+
+ // floppy disk controller
+ MCFG_WD2793x_ADD("fdc", XTAL_16MHz/2/8)
+ MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("pic1", pic8259_device, ir6_w))
+ MCFG_WD_FDC_DRQ_CALLBACK(DEVWRITELINE("maincpu", i80186_cpu_device, drq1_w))
+
+ // floppy drives
+ MCFG_FLOPPY_DRIVE_ADD("fdc:0", pcd_floppies, "55g", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:1", pcd_floppies, "55g", floppy_image_device::default_floppy_formats)
+
+ // usart
+ MCFG_DEVICE_ADD("usart1", MC2661, XTAL_4_9152MHz)
+ MCFG_MC2661_TXEMT_DSCHG_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir2_w))
+ MCFG_DEVICE_ADD("usart2", MC2661, XTAL_4_9152MHz)
+ MCFG_MC2661_TXEMT_DSCHG_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir3_w))
+ MCFG_DEVICE_ADD("usart3", MC2661, XTAL_4_9152MHz)
+ MCFG_MC2661_TXEMT_DSCHG_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir4_w))
+
+ // sound hardware
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+
+ // rtc
+ MCFG_MC146818_ADD("rtc", XTAL_32_768kHz)
+ MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir7_w))
+MACHINE_CONFIG_END
+
+
+//**************************************************************************
+// ROM DEFINITIONS
+//**************************************************************************
+
+ROM_START( pcd )
+ ROM_REGION(0x4000, "bios", 0)
+ ROM_LOAD16_BYTE("s26361-d359.d42", 0x0001, 0x2000, CRC(e20244dd) SHA1(0ebc5ddb93baacd9106f1917380de58aac64fe73))
+ ROM_LOAD16_BYTE("s26361-d359.d43", 0x0000, 0x2000, CRC(e03db2ec) SHA1(fcae8b0c9e7543706817b0a53872826633361fda))
+
+ // hdd (omti 5100)
+ ROM_REGION(0x2000, "hdd", 0)
+ ROM_LOAD("1002401-n.bin", 0x0000, 0x2000, CRC(d531e25c) SHA1(22e4762a70841b80e843a5d76175c1fdb6838e18))
+
+ // gfx card (scn2674 with 8741), to be moved
+ ROM_REGION(0x400, "graphics", 0)
+ ROM_LOAD("s36361-d321-v1.bin", 0x000, 0x400, CRC(69baeb2a) SHA1(98b9cd0f38c51b4988a3aed0efcf004bedd115ff))
+
+ // keyboard (8035), to be moved
+ ROM_REGION(0x1000, "keyboard", 0)
+ ROM_LOAD("pcd_keyboard.bin", 0x0000, 0x1000, CRC(d227d6cb) SHA1(3d6140764d3d043428c941826370ebf1597c63bd))
+ROM_END
+
+
+//**************************************************************************
+// GAME DRIVERS
+//**************************************************************************
+
+COMP( 1984, pcd, 0, 0, pcd, 0, driver_device, 0, "Siemens", "PC-D", GAME_NOT_WORKING )
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index d55b71d9691..b9120ead2a9 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -783,6 +783,7 @@ DRVLIBS += \
$(MESSOBJ)/sega.a \
$(MESSOBJ)/sgi.a \
$(MESSOBJ)/sharp.a \
+ $(MESSOBJ)/siemens.a \
$(MESSOBJ)/sinclair.a \
$(MESSOBJ)/skeleton.a \
$(MESSOBJ)/snk.a \
@@ -1622,6 +1623,9 @@ $(MESSOBJ)/sinclair.a: \
$(MESS_VIDEO)/zx8301.o \
$(MESS_MACHINE)/zx8302.o \
+$(MESSOBJ)/siemens.a: \
+ $(MESS_DRIVERS)/pcd.o \
+
$(MESSOBJ)/snk.a: \
$(MESS_DRIVERS)/ng_aes.o \
$(MESS_DRIVERS)/ngp.o $(MESS_VIDEO)/k1ge.o \