mirror of
https://github.com/holub/mame
synced 2025-04-22 00:11:58 +03:00
lbpc: Add ISA bus and EGA card so startup process can be visible (nw)
v40, v50: Add timer 2 control input (nw) ncr5380n: This error really needs to be non-fatal (nw)
This commit is contained in:
parent
2e052f7e98
commit
13beade767
@ -130,6 +130,7 @@ class v50_base_device : public nec_common_device, public device_v5x_interface
|
||||
public:
|
||||
template <unsigned Channel> DECLARE_WRITE_LINE_MEMBER(dreq_w) { m_dmau->dreq_w<Channel>(state); }
|
||||
DECLARE_WRITE_LINE_MEMBER(hack_w) { m_dmau->hack_w(state); }
|
||||
DECLARE_WRITE_LINE_MEMBER(tctl2_w) { m_tcu->write_gate2(state); }
|
||||
|
||||
protected:
|
||||
v50_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, bool is_16bit, uint8_t prefetch_size, uint8_t prefetch_cycles, uint32_t chip_type);
|
||||
|
@ -187,7 +187,7 @@ void ncr5380n_device::step(bool timeout)
|
||||
if(win != scsi_id) {
|
||||
scsi_bus->data_w(scsi_refid, 0);
|
||||
scsi_bus->ctrl_w(scsi_refid, 0, S_ALL);
|
||||
fatalerror("need to wait for bus free\n");
|
||||
logerror("need to wait for bus free\n");
|
||||
}
|
||||
|
||||
state &= STATE_MASK;
|
||||
|
@ -14,13 +14,16 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
//#include "bus/isa/isa.h"
|
||||
#include "bus/isa/isa.h"
|
||||
#include "bus/isa/isa_cards.h"
|
||||
#include "bus/nscsi/devices.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "cpu/nec/v5x.h"
|
||||
#include "machine/ins8250.h"
|
||||
#include "machine/ncr5380n.h"
|
||||
#include "machine/upd765.h"
|
||||
#include "sound/spkrdev.h"
|
||||
#include "speaker.h"
|
||||
|
||||
class lbpc_state : public driver_device
|
||||
{
|
||||
@ -28,19 +31,89 @@ public:
|
||||
lbpc_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_expbus(*this, "expbus")
|
||||
, m_speaker(*this, "speaker")
|
||||
, m_port61(0xff)
|
||||
, m_speaker_data(false)
|
||||
{
|
||||
}
|
||||
|
||||
void lbpc(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
u8 exp_dack1_r();
|
||||
void exp_dack1_w(u8 data);
|
||||
DECLARE_WRITE_LINE_MEMBER(iochck_w);
|
||||
u8 port61_r();
|
||||
void port61_w(u8 data);
|
||||
DECLARE_WRITE_LINE_MEMBER(out2_w);
|
||||
|
||||
void mem_map(address_map &map);
|
||||
void io_map(address_map &map);
|
||||
|
||||
required_device<v40_device> m_maincpu;
|
||||
required_device<isa8_device> m_expbus;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
|
||||
u8 m_port61;
|
||||
bool m_speaker_data;
|
||||
};
|
||||
|
||||
|
||||
void lbpc_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_port61));
|
||||
save_item(NAME(m_speaker_data));
|
||||
}
|
||||
|
||||
void lbpc_state::machine_reset()
|
||||
{
|
||||
port61_w(0);
|
||||
}
|
||||
|
||||
|
||||
u8 lbpc_state::exp_dack1_r()
|
||||
{
|
||||
return m_expbus->dack_r(0);
|
||||
}
|
||||
|
||||
void lbpc_state::exp_dack1_w(u8 data)
|
||||
{
|
||||
m_expbus->dack_w(0, data);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(lbpc_state::iochck_w)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
u8 lbpc_state::port61_r()
|
||||
{
|
||||
return m_port61;
|
||||
}
|
||||
|
||||
void lbpc_state::port61_w(u8 data)
|
||||
{
|
||||
if (BIT(m_port61, 1) && !BIT(data, 1))
|
||||
m_speaker->level_w(0);
|
||||
else if (!BIT(m_port61, 1) && BIT(data, 1))
|
||||
m_speaker->level_w(m_speaker_data);
|
||||
m_maincpu->tctl2_w(BIT(data, 0));
|
||||
|
||||
m_port61 = data;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(lbpc_state::out2_w)
|
||||
{
|
||||
m_speaker_data = state;
|
||||
if (BIT(m_port61, 1))
|
||||
m_speaker->level_w(state);
|
||||
}
|
||||
|
||||
void lbpc_state::mem_map(address_map &map)
|
||||
{
|
||||
map(0x00000, 0x9ffff).ram(); // 256K, 512K or 768K DRAM
|
||||
@ -69,11 +142,21 @@ void lbpc_state::lbpc(machine_config &config)
|
||||
m_maincpu->set_clk<0>(14.318181_MHz_XTAL / 12); // TCLK input generated by ASIC1
|
||||
m_maincpu->set_clk<1>(14.318181_MHz_XTAL / 12);
|
||||
m_maincpu->set_clk<2>(14.318181_MHz_XTAL / 12);
|
||||
m_maincpu->out_handler<2>().set(FUNC(lbpc_state::out2_w));
|
||||
m_maincpu->out_hreq_cb().set_inputline(m_maincpu, INPUT_LINE_HALT);
|
||||
m_maincpu->out_hreq_cb().append(m_maincpu, FUNC(v40_device::hack_w));
|
||||
m_maincpu->in_memr_cb().set([this] (offs_t offset) { return m_maincpu->space(AS_PROGRAM).read_byte(offset); });
|
||||
m_maincpu->out_memw_cb().set([this] (offs_t offset, u8 data) { m_maincpu->space(AS_PROGRAM).write_byte(offset, data); });
|
||||
m_maincpu->in_ior_cb<0>().set(FUNC(lbpc_state::exp_dack1_r));
|
||||
m_maincpu->out_iow_cb<0>().set(FUNC(lbpc_state::exp_dack1_w));
|
||||
m_maincpu->in_ior_cb<1>().set("fdc", FUNC(wd37c65c_device::dma_r));
|
||||
m_maincpu->out_iow_cb<1>().set("fdc", FUNC(wd37c65c_device::dma_w));
|
||||
m_maincpu->in_ior_cb<2>().set("scsi:7:ncr", FUNC(ncr53c80_device::dma_r));
|
||||
m_maincpu->out_iow_cb<2>().set("scsi:7:ncr", FUNC(ncr53c80_device::dma_w));
|
||||
|
||||
SPEAKER(config, "mono").front_center();
|
||||
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.5);
|
||||
|
||||
ins8250_device &com(INS8250(config, "com", 1.8432_MHz_XTAL)); // NS8250AV
|
||||
com.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ4);
|
||||
com.out_rts_callback().set("serial", FUNC(rs232_port_device::write_rts)); // J3 pin 4
|
||||
@ -102,6 +185,17 @@ void lbpc_state::lbpc(machine_config &config)
|
||||
serial.rxd_handler().set("com", FUNC(ins8250_device::rx_w)); // J3 pin 3
|
||||
serial.cts_handler().set("com", FUNC(ins8250_device::cts_w)); // J3 pin 6
|
||||
serial.ri_handler().set("com", FUNC(ins8250_device::ri_w)); // J3 pin 8
|
||||
|
||||
ISA8(config, m_expbus, 14.318181_MHz_XTAL / 2);
|
||||
m_expbus->set_memspace(m_maincpu, AS_PROGRAM);
|
||||
m_expbus->set_iospace(m_maincpu, AS_IO);
|
||||
m_expbus->drq1_callback().set(m_maincpu, FUNC(v40_device::dreq_w<0>));
|
||||
m_expbus->irq2_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ2);
|
||||
m_expbus->irq3_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ3);
|
||||
m_expbus->irq5_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ5);
|
||||
m_expbus->iochck_callback().set(FUNC(lbpc_state::iochck_w));
|
||||
|
||||
ISA8_SLOT(config, "exp", 0, m_expbus, pc_isa8_cards, "ega", false);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user