diff options
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 |
commit | 575d6ec0aa03ab0016c9f05abf4d5532e6f71b86 (patch) | |
tree | 83f3ee56be32154495985bf4904b6dbab35470a3 | |
parent | 49c243d09ae7a21647ee201c1c8970ea2325cae6 (diff) |
Skeleton driver for the Siemens PC-D [Dirk Best, rfka01]
-rw-r--r-- | src/emu/imagedev/floppy.c | 84 | ||||
-rw-r--r-- | src/emu/imagedev/floppy.h | 4 | ||||
-rw-r--r-- | src/mess/drivers/pc.c | 8 | ||||
-rw-r--r-- | src/mess/drivers/pcd.c | 211 | ||||
-rw-r--r-- | src/mess/mess.mak | 4 |
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 \ |