From 283e48dffd67581789eb2dc986ae7a02a973033e Mon Sep 17 00:00:00 2001 From: Sergey Svishchev Date: Tue, 16 Apr 2019 23:35:27 +0300 Subject: ec1840: define native motherboard, mark WORKING --- src/devices/machine/genpc.cpp | 121 +++++++++++++++++++++++++++++++++++++++++- src/devices/machine/genpc.h | 23 ++++++++ src/mame/drivers/ec184x.cpp | 17 ++++-- 3 files changed, 155 insertions(+), 6 deletions(-) diff --git a/src/devices/machine/genpc.cpp b/src/devices/machine/genpc.cpp index e626bf96b30..50528d17aa7 100644 --- a/src/devices/machine/genpc.cpp +++ b/src/devices/machine/genpc.cpp @@ -778,7 +778,118 @@ WRITE8_MEMBER( ibm5150_mb_device::pc_ppi_portb_w ) // GLOBAL VARIABLES //************************************************************************** -DEFINE_DEVICE_TYPE(EC1841_MOTHERBOARD, ec1841_mb_device, "ec1841_mb", "EC-1840 motherboard") +DEFINE_DEVICE_TYPE(EC1840_MOTHERBOARD, ec1840_mb_device, "ec1840_mb", "EC-1840 motherboard") + + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void ec1840_mb_device::device_add_mconfig(machine_config &config) +{ + ec1841_mb_device::device_add_mconfig(config); + + m_ppi8255->in_pc_callback().set(FUNC(ec1840_mb_device::pc_ppi_portc_r)); +} + +// via http://oldpc.su/pc/ec1840/ec1840rep.html +static INPUT_PORTS_START( ec1840_mb ) + PORT_START("DSW0") /* SA1 */ + PORT_DIPNAME( 0xc0, 0x40, "Number of floppy drives") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x40, "2" ) + PORT_DIPSETTING( 0x80, "3" ) + PORT_DIPSETTING( 0xc0, "4" ) + PORT_DIPNAME( 0x30, 0x30, "Graphics adapter") + PORT_DIPSETTING( 0x00, "Reserved" ) + PORT_DIPSETTING( 0x10, "Color 40x25" ) + PORT_DIPSETTING( 0x20, "Color 80x25" ) + PORT_DIPSETTING( 0x30, "Monochrome" ) + PORT_BIT( 0x0c, 0x0c, IPT_UNUSED ) + PORT_DIPNAME( 0x02, 0x02, "DMAC installed") + PORT_DIPSETTING( 0x00, DEF_STR(No) ) + PORT_DIPSETTING( 0x02, DEF_STR(Yes) ) + PORT_DIPNAME( 0x01, 0x01, "Boot from floppy") + PORT_DIPSETTING( 0x00, DEF_STR(No) ) + PORT_DIPSETTING( 0x01, DEF_STR(Yes) ) + + PORT_START("SA2") + PORT_BIT( 0xcf, 0x00, IPT_UNUSED ) + PORT_DIPNAME( 0x20, 0x20, "SA2.5") + PORT_DIPSETTING( 0x00, DEF_STR(No) ) + PORT_DIPSETTING( 0x20, DEF_STR(Yes) ) + PORT_DIPNAME( 0x10, 0x10, "SA2.4") + PORT_DIPSETTING( 0x00, DEF_STR(No) ) + PORT_DIPSETTING( 0x10, DEF_STR(Yes) ) +INPUT_PORTS_END + +//------------------------------------------------- +// input_ports - device-specific input ports +//------------------------------------------------- + +ioport_constructor ec1840_mb_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( ec1840_mb ); +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// ec1840_mb_device - constructor +//------------------------------------------------- + +ec1840_mb_device::ec1840_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : ec1841_mb_device(mconfig, EC1840_MOTHERBOARD, tag, owner, clock) +{ +} + +void ec1840_mb_device::device_start() +{ +} + +READ8_MEMBER( ec1840_mb_device::pc_ppi_portc_r ) +{ + int data = 0xff; + + data &= ~0x80; // no parity error + data &= ~0x40; // no error on expansion board + + if (m_ppi_portc_switch_high) + { + /* read hi nibble of SW2 */ + data = data & 0xf0; + + switch (m_ram->size()) + { + case 128 * 1024: data |= 0x00; break; + case 256 * 1024: data |= 0x01; break; + case 384 * 1024: data |= 0x02; break; + case 512 * 1024: data |= 0x03; break; + case 640 * 1024: data |= 0x04; break; + } + + PIO_LOG(1,"PIO_C_r (hi)",("$%02x\n", data)); + } + else + { + /* read lo nibble of S2 */ + data = (data & 0xf0) | (ioport("DSW0")->read() >> 4); + PIO_LOG(1,"PIO_C_r (lo)",("$%02x\n", data)); + } + + data = ( data & ~0x20 ) | ( m_pit_out2 ? 0x20 : 0x00 ); + + return data; +} + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE(EC1841_MOTHERBOARD, ec1841_mb_device, "ec1841_mb", "EC-1841 motherboard") //------------------------------------------------- @@ -820,6 +931,7 @@ static INPUT_PORTS_START( ec1841_mb ) PORT_DIPSETTING( 0x00, DEF_STR(No) ) PORT_START("SA2") + PORT_BIT( 0xcb, 0x00, IPT_UNUSED ) PORT_DIPNAME( 0x04, 0x04, "Speech synthesizer") PORT_DIPSETTING( 0x00, "Installed" ) PORT_DIPSETTING( 0x04, "Not installed" ) @@ -847,6 +959,11 @@ ec1841_mb_device::ec1841_mb_device(const machine_config &mconfig, const char *ta { } +ec1841_mb_device::ec1841_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : ibm5160_mb_device(mconfig, type, tag, owner, clock) +{ +} + void ec1841_mb_device::device_start() { } @@ -875,7 +992,7 @@ WRITE8_MEMBER( ec1841_mb_device::pc_ppi_portb_w ) m_pc_kbdc->clock_write_from_mb(m_ppi_clock_signal); } -READ8_MEMBER ( ec1841_mb_device::pc_ppi_portc_r ) +READ8_MEMBER( ec1841_mb_device::pc_ppi_portc_r ) { int data=0xff; diff --git a/src/devices/machine/genpc.h b/src/devices/machine/genpc.h index e222b975873..876005d0a26 100644 --- a/src/devices/machine/genpc.h +++ b/src/devices/machine/genpc.h @@ -158,6 +158,7 @@ private: // device type definition DECLARE_DEVICE_TYPE(IBM5150_MOTHERBOARD, ibm5150_mb_device) + class ec1841_mb_device : public ibm5160_mb_device { public: @@ -165,6 +166,8 @@ public: ec1841_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: + ec1841_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + // optional information overrides virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; @@ -180,6 +183,26 @@ private: DECLARE_DEVICE_TYPE(EC1841_MOTHERBOARD, ec1841_mb_device) +class ec1840_mb_device : public ec1841_mb_device +{ +public: + // construction/destruction + ec1840_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + // optional information overrides + virtual void device_add_mconfig(machine_config &config) override; + virtual ioport_constructor device_input_ports() const override; + virtual void device_start() override; + +private: + DECLARE_READ8_MEMBER ( pc_ppi_portc_r ); + DECLARE_WRITE8_MEMBER( pc_ppi_portb_w ); +}; + +DECLARE_DEVICE_TYPE(EC1840_MOTHERBOARD, ec1840_mb_device) + + class pc_noppi_mb_device : public ibm5160_mb_device { public: diff --git a/src/mame/drivers/ec184x.cpp b/src/mame/drivers/ec184x.cpp index 98a3056406c..c2b47e8c307 100644 --- a/src/mame/drivers/ec184x.cpp +++ b/src/mame/drivers/ec184x.cpp @@ -47,6 +47,7 @@ public: void ec1847(machine_config &config); void ec1840(machine_config &config); + void init_ec1840(); void init_ec1841(); private: @@ -153,6 +154,14 @@ WRITE8_MEMBER(ec184x_state::memboard_w) m_memory.enable[offset] = data; } +void ec184x_state::init_ec1840() +{ + address_space &program = m_maincpu->space(AS_PROGRAM); + + program.install_readwrite_bank(0, m_ram->size()-1, "bank10"); + membank("bank10")->set_base(m_ram->pointer()); +} + void ec184x_state::init_ec1841() { address_space &program = m_maincpu->space(AS_PROGRAM); @@ -206,7 +215,7 @@ void ec184x_state::ec1847_map(address_map &map) void ec184x_state::ec1840_io(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x00ff).m("mb", FUNC(ibm5150_mb_device::map)); + map(0x0000, 0x00ff).m("mb", FUNC(ec1840_mb_device::map)); } void ec184x_state::ec1841_io(address_map &map) @@ -232,7 +241,7 @@ void ec184x_state::ec1840(machine_config &config) m_maincpu->set_addrmap(AS_IO, &ec184x_state::ec1840_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - IBM5150_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + EC1840_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); // FIXME: determine ISA bus clock ISA8_SLOT(config, "isa1", 0, "mb:isa", ec184x_isa8_cards, "ec1840.0002", false); @@ -246,7 +255,7 @@ void ec184x_state::ec1840(machine_config &config) PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_EC_1841).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); - RAM(config, m_ram).set_default_size("512K"); + RAM(config, m_ram).set_default_size("640K").set_extra_options("128K,256K,384K,512K"); } void ec184x_state::ec1841(machine_config &config) @@ -375,7 +384,7 @@ ROM_START( ec1847 ) ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS -COMP( 1987, ec1840, ibm5150, 0, ec1840, 0, ec184x_state, empty_init, "", "EC-1840", MACHINE_NOT_WORKING ) +COMP( 1986, ec1840, ibm5150, 0, ec1840, 0, ec184x_state, init_ec1840, "", "EC-1840", 0 ) COMP( 1987, ec1841, ibm5150, 0, ec1841, 0, ec184x_state, init_ec1841, "", "EC-1841", 0 ) COMP( 1989, ec1845, ibm5150, 0, ec1841, 0, ec184x_state, init_ec1841, "", "EC-1845", MACHINE_NOT_WORKING ) COMP( 1990, ec1847, ibm5150, 0, ec1847, 0, ec184x_state, empty_init, "", "EC-1847", MACHINE_NOT_WORKING ) -- cgit v1.2.3