ec1840: define native motherboard, mark WORKING

This commit is contained in:
Sergey Svishchev 2019-04-16 23:35:27 +03:00
parent a712bb9fd2
commit 283e48dffd
3 changed files with 155 additions and 6 deletions

View File

@ -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;

View File

@ -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:

View File

@ -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, "<unknown>", "EC-1840", MACHINE_NOT_WORKING )
COMP( 1986, ec1840, ibm5150, 0, ec1840, 0, ec184x_state, init_ec1840, "<unknown>", "EC-1840", 0 )
COMP( 1987, ec1841, ibm5150, 0, ec1841, 0, ec184x_state, init_ec1841, "<unknown>", "EC-1841", 0 )
COMP( 1989, ec1845, ibm5150, 0, ec1841, 0, ec184x_state, init_ec1841, "<unknown>", "EC-1845", MACHINE_NOT_WORKING )
COMP( 1990, ec1847, ibm5150, 0, ec1847, 0, ec184x_state, empty_init, "<unknown>", "EC-1847", MACHINE_NOT_WORKING )