mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
pcipc.cpp: first partially working implemantetion with isa, superio and et4000 (nw)
Video shows bios messages and is possible to go into bios configuration screens. i82371sb.cpp has isa enabled and a new device for the pci ide controller. There are still a few things to correct here and there but i think it's a nice starting point.
This commit is contained in:
parent
529ddf11fa
commit
a89cd327d9
@ -32,10 +32,11 @@ void i82371sb_isa_device::config_map(address_map &map)
|
|||||||
|
|
||||||
void i82371sb_isa_device::internal_io_map(address_map &map)
|
void i82371sb_isa_device::internal_io_map(address_map &map)
|
||||||
{
|
{
|
||||||
|
map(0x0000, 0xffff).rw(m_isabus, FUNC(isa16_device::io16_r), FUNC(isa16_device::io16_w));
|
||||||
map(0x0000, 0x001f).rw("dma8237_1", FUNC(am9517a_device::read), FUNC(am9517a_device::write));
|
map(0x0000, 0x001f).rw("dma8237_1", FUNC(am9517a_device::read), FUNC(am9517a_device::write));
|
||||||
map(0x0020, 0x003f).rw("pic8259_master", FUNC(pic8259_device::read), FUNC(pic8259_device::write));
|
map(0x0020, 0x003f).rw("pic8259_master", FUNC(pic8259_device::read), FUNC(pic8259_device::write));
|
||||||
map(0x0040, 0x005f).rw("pit8254", FUNC(pit8254_device::read), FUNC(pit8254_device::write));
|
map(0x0040, 0x005f).rw("pit8254", FUNC(pit8254_device::read), FUNC(pit8254_device::write));
|
||||||
map(0x0061, 0x0061).rw(FUNC(i82371sb_isa_device::at_portb_r), FUNC(i82371sb_isa_device::at_portb_w));
|
map(0x0060, 0x0061).rw(FUNC(i82371sb_isa_device::at_portb_r), FUNC(i82371sb_isa_device::at_portb_w));
|
||||||
map(0x0080, 0x009f).rw(FUNC(i82371sb_isa_device::at_page8_r), FUNC(i82371sb_isa_device::at_page8_w));
|
map(0x0080, 0x009f).rw(FUNC(i82371sb_isa_device::at_page8_r), FUNC(i82371sb_isa_device::at_page8_w));
|
||||||
map(0x00a0, 0x00bf).rw("pic8259_slave", FUNC(pic8259_device::read), FUNC(pic8259_device::write));
|
map(0x00a0, 0x00bf).rw("pic8259_slave", FUNC(pic8259_device::read), FUNC(pic8259_device::write));
|
||||||
map(0x00b2, 0x00b3).rw(FUNC(i82371sb_isa_device::read_apmcapms), FUNC(i82371sb_isa_device::write_apmcapms));
|
map(0x00b2, 0x00b3).rw(FUNC(i82371sb_isa_device::read_apmcapms), FUNC(i82371sb_isa_device::write_apmcapms));
|
||||||
@ -98,14 +99,6 @@ MACHINE_CONFIG_START(i82371sb_isa_device::device_add_mconfig)
|
|||||||
MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir2_w))
|
MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir2_w))
|
||||||
MCFG_PIC8259_IN_SP_CB(GND)
|
MCFG_PIC8259_IN_SP_CB(GND)
|
||||||
|
|
||||||
// MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide", ata_devices, "hdd", nullptr, false)
|
|
||||||
// MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE("pic8259_slave", pic8259_device, ir6_w))
|
|
||||||
// MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE(":maincpu", AS_PROGRAM)
|
|
||||||
//
|
|
||||||
// MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide2", ata_devices, "cdrom", nullptr, false)
|
|
||||||
// MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE("pic8259_slave", pic8259_device, ir7_w))
|
|
||||||
// MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE(":maincpu", AS_PROGRAM)
|
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
SPEAKER(config, "mono").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND, 0)
|
MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND, 0)
|
||||||
@ -183,15 +176,12 @@ void i82371sb_isa_device::device_reset()
|
|||||||
ctlmtr = 0x00;
|
ctlmtr = 0x00;
|
||||||
cthmtr = 0x00;
|
cthmtr = 0x00;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_at_spkrdata = 0;
|
m_at_spkrdata = 0;
|
||||||
m_pit_out2 = 1;
|
m_pit_out2 = 1;
|
||||||
m_dma_channel = -1;
|
m_dma_channel = -1;
|
||||||
m_cur_eop = false;
|
m_cur_eop = false;
|
||||||
m_nmi_enabled = 0;
|
m_nmi_enabled = 0;
|
||||||
m_refresh = false;
|
m_refresh = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void i82371sb_isa_device::reset_all_mappings()
|
void i82371sb_isa_device::reset_all_mappings()
|
||||||
@ -396,13 +386,12 @@ void i82371sb_isa_device::map_bios(address_space *memory_space, uint32_t start,
|
|||||||
void i82371sb_isa_device::map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space,
|
void i82371sb_isa_device::map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space,
|
||||||
uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space)
|
uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space)
|
||||||
{
|
{
|
||||||
io_space->install_readwrite_handler(0, 0xffff, read16_delegate(FUNC(isa16_device::io16_r), &(*m_isabus)), write16_delegate(FUNC(isa16_device::io16_w), &(*m_isabus)));
|
|
||||||
memory_space->install_readwrite_handler(0, 0xfffff, read16_delegate(FUNC(isa16_device::mem16_r), &(*m_isabus)), write16_delegate(FUNC(isa16_device::mem16_w), &(*m_isabus)));
|
memory_space->install_readwrite_handler(0, 0xfffff, read16_delegate(FUNC(isa16_device::mem16_r), &(*m_isabus)), write16_delegate(FUNC(isa16_device::mem16_w), &(*m_isabus)));
|
||||||
|
|
||||||
// assume that map_extra of the southbridge is called before the one of the northbridge
|
// assume that map_extra of the southbridge is called before the one of the northbridge
|
||||||
map_bios(memory_space, 0xfffc0000, 0xffffffff);
|
map_bios(memory_space, 0xfffc0000, 0xffffffff);
|
||||||
map_bios(memory_space, 0x000e0000, 0x000fffff);
|
map_bios(memory_space, 0x000e0000, 0x000fffff);
|
||||||
io_space->install_device(0, 0xff, *this, &i82371sb_isa_device::internal_io_map);
|
io_space->install_device(0, 0xffff, *this, &i82371sb_isa_device::internal_io_map);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if(fwh_dec_en1 & 0x80) {
|
if(fwh_dec_en1 & 0x80) {
|
||||||
@ -681,27 +670,41 @@ WRITE_LINE_MEMBER( i82371sb_isa_device::pc_dack7_w ) { pc_select_dma_channel(7,
|
|||||||
|
|
||||||
READ8_MEMBER( i82371sb_isa_device::at_portb_r )
|
READ8_MEMBER( i82371sb_isa_device::at_portb_r )
|
||||||
{
|
{
|
||||||
uint8_t data = m_at_speaker;
|
if (offset == 0)
|
||||||
data &= ~0xd0; /* AT BIOS don't likes this being set */
|
{
|
||||||
|
return m_isabus->io16_r(space, 0x60 / 2, 0x00ff);
|
||||||
/* 0x10 is the dram refresh line bit on the 5170, just a timer here, 15.085us. */
|
}
|
||||||
data |= m_refresh ? 0x10 : 0;
|
|
||||||
|
|
||||||
if (m_pit_out2)
|
|
||||||
data |= 0x20;
|
|
||||||
else
|
else
|
||||||
data &= ~0x20; /* ps2m30 wants this */
|
{
|
||||||
|
uint8_t data = m_at_speaker;
|
||||||
|
data &= ~0xd0; /* AT BIOS don't likes this being set */
|
||||||
|
|
||||||
return data;
|
/* 0x10 is the dram refresh line bit on the 5170, just a timer here, 15.085us. */
|
||||||
|
data |= m_refresh ? 0x10 : 0;
|
||||||
|
|
||||||
|
if (m_pit_out2)
|
||||||
|
data |= 0x20;
|
||||||
|
else
|
||||||
|
data &= ~0x20; /* ps2m30 wants this */
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( i82371sb_isa_device::at_portb_w )
|
WRITE8_MEMBER( i82371sb_isa_device::at_portb_w )
|
||||||
{
|
{
|
||||||
m_at_speaker = data;
|
if (offset == 0)
|
||||||
m_pit8254->write_gate2(BIT(data, 0));
|
{
|
||||||
at_speaker_set_spkrdata( BIT(data, 1));
|
m_isabus->io16_w(space, 0x60 / 2, data, 0x00ff);
|
||||||
m_channel_check = BIT(data, 3);
|
}
|
||||||
m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
|
else
|
||||||
|
{
|
||||||
|
m_at_speaker = data;
|
||||||
|
m_pit8254->write_gate2(BIT(data, 0));
|
||||||
|
at_speaker_set_spkrdata( BIT(data, 1));
|
||||||
|
m_channel_check = BIT(data, 3);
|
||||||
|
m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( i82371sb_isa_device::at_dma8237_2_r )
|
READ8_MEMBER( i82371sb_isa_device::at_dma8237_2_r )
|
||||||
@ -747,3 +750,177 @@ void i82371sb_isa_device::update_smireq_line()
|
|||||||
else
|
else
|
||||||
m_smi_callback(0);
|
m_smi_callback(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
DEFINE_DEVICE_TYPE(I82371SB_IDE, i82371sb_ide_device, "i82371sb_ide", "Intel 82371 southbridge IDE interface")
|
||||||
|
|
||||||
|
void i82371sb_ide_device::config_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x04, 0x05).rw(FUNC(i82371sb_ide_device::command_r), FUNC(i82371sb_ide_device::command_w));
|
||||||
|
map(0x20, 0x23).rw(FUNC(i82371sb_ide_device::bmiba_r), FUNC(i82371sb_ide_device::bmiba_w));
|
||||||
|
map(0x40, 0x41).rw(FUNC(i82371sb_ide_device::idetim_primary_r), FUNC(i82371sb_ide_device::idetim_primary_w));
|
||||||
|
map(0x42, 0x43).rw(FUNC(i82371sb_ide_device::idetim_secondary_r), FUNC(i82371sb_ide_device::idetim_secondary_w));
|
||||||
|
map(0x44, 0x44).rw(FUNC(i82371sb_ide_device::sidetim_r), FUNC(i82371sb_ide_device::sidetim_w));
|
||||||
|
}
|
||||||
|
|
||||||
|
void i82371sb_ide_device::internal_io_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x0170, 0x0177).rw(FUNC(i82371sb_ide_device::ide2_read32_cs0_r), FUNC(i82371sb_ide_device::ide2_write32_cs0_w));
|
||||||
|
map(0x01f0, 0x01f7).rw(FUNC(i82371sb_ide_device::ide1_read32_cs0_r), FUNC(i82371sb_ide_device::ide1_write32_cs0_w));
|
||||||
|
map(0x0376, 0x0376).rw(FUNC(i82371sb_ide_device::ide2_read_cs1_r), FUNC(i82371sb_ide_device::ide2_write_cs1_w));
|
||||||
|
map(0x03f6, 0x03f6).rw(FUNC(i82371sb_ide_device::ide1_read_cs1_r), FUNC(i82371sb_ide_device::ide1_write_cs1_w));
|
||||||
|
}
|
||||||
|
|
||||||
|
MACHINE_CONFIG_START(i82371sb_ide_device::device_add_mconfig)
|
||||||
|
MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide1", ata_devices, "hdd", nullptr, false)
|
||||||
|
MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE(*this, i82371sb_ide_device, primary_int))
|
||||||
|
MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE(":maincpu", AS_PROGRAM)
|
||||||
|
|
||||||
|
MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide2", ata_devices, "cdrom", nullptr, false)
|
||||||
|
MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE(*this, i82371sb_ide_device, secondary_int))
|
||||||
|
MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE(":maincpu", AS_PROGRAM)
|
||||||
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
i82371sb_ide_device::i82371sb_ide_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
|
: pci_device(mconfig, I82371SB_IDE, tag, owner, clock)
|
||||||
|
, command(2)
|
||||||
|
, bmiba(1)
|
||||||
|
, idetim_primary(0)
|
||||||
|
, idetim_secondary(0)
|
||||||
|
, sidetim(0)
|
||||||
|
, m_irq_pri_callback(*this)
|
||||||
|
, m_irq_sec_callback(*this)
|
||||||
|
, m_ide1(*this, "ide1")
|
||||||
|
, m_ide2(*this, "ide2")
|
||||||
|
{
|
||||||
|
set_ids(0x80867010, 0x03, 0x010180, 0x00000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void i82371sb_ide_device::device_start()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void i82371sb_ide_device::device_reset()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void i82371sb_ide_device::reset_all_mappings()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void i82371sb_ide_device::map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space,
|
||||||
|
uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space)
|
||||||
|
{
|
||||||
|
if (command & 1)
|
||||||
|
{
|
||||||
|
offs_t m_base = bmiba & 0xfff0;
|
||||||
|
|
||||||
|
io_space->install_device(0, 0x3ff, *this, &i82371sb_ide_device::internal_io_map);
|
||||||
|
io_space->install_readwrite_handler(m_base, m_base + 0x7, read32_delegate(FUNC(bus_master_ide_controller_device::bmdma_r), &(*m_ide1)), write32_delegate(FUNC(bus_master_ide_controller_device::bmdma_w), &(*m_ide1)), 0xffffffff);
|
||||||
|
io_space->install_readwrite_handler(m_base + 0x8, m_base + 0xf, read32_delegate(FUNC(bus_master_ide_controller_device::bmdma_r), &(*m_ide2)), write32_delegate(FUNC(bus_master_ide_controller_device::bmdma_w), &(*m_ide2)), 0xffffffff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(i82371sb_ide_device::primary_int)
|
||||||
|
{
|
||||||
|
m_irq_pri_callback(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(i82371sb_ide_device::secondary_int)
|
||||||
|
{
|
||||||
|
m_irq_sec_callback(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
READ16_MEMBER(i82371sb_ide_device::command_r)
|
||||||
|
{
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE16_MEMBER(i82371sb_ide_device::command_w)
|
||||||
|
{
|
||||||
|
mem_mask &= 5;
|
||||||
|
COMBINE_DATA(&command);
|
||||||
|
if (mem_mask & 1)
|
||||||
|
remap_cb();
|
||||||
|
}
|
||||||
|
|
||||||
|
READ32_MEMBER(i82371sb_ide_device::bmiba_r)
|
||||||
|
{
|
||||||
|
return bmiba;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE32_MEMBER(i82371sb_ide_device::bmiba_w)
|
||||||
|
{
|
||||||
|
mem_mask &= 0xfff0;
|
||||||
|
COMBINE_DATA(&bmiba);
|
||||||
|
if (command & 1)
|
||||||
|
remap_cb();
|
||||||
|
}
|
||||||
|
|
||||||
|
READ16_MEMBER(i82371sb_ide_device::idetim_primary_r)
|
||||||
|
{
|
||||||
|
return idetim_primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE16_MEMBER(i82371sb_ide_device::idetim_primary_w)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
READ16_MEMBER(i82371sb_ide_device::idetim_secondary_r)
|
||||||
|
{
|
||||||
|
return idetim_secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE16_MEMBER(i82371sb_ide_device::idetim_secondary_w)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(i82371sb_ide_device::sidetim_r)
|
||||||
|
{
|
||||||
|
return sidetim;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(i82371sb_ide_device::sidetim_w)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
READ32_MEMBER(i82371sb_ide_device::ide1_read32_cs0_r)
|
||||||
|
{
|
||||||
|
return m_ide1->read_cs0(offset, mem_mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE32_MEMBER(i82371sb_ide_device::ide1_write32_cs0_w)
|
||||||
|
{
|
||||||
|
m_ide1->write_cs0(offset, data, mem_mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
READ32_MEMBER(i82371sb_ide_device::ide2_read32_cs0_r)
|
||||||
|
{
|
||||||
|
return m_ide2->read_cs0(offset, mem_mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE32_MEMBER(i82371sb_ide_device::ide2_write32_cs0_w)
|
||||||
|
{
|
||||||
|
m_ide2->write_cs0(offset, data, mem_mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(i82371sb_ide_device::ide1_read_cs1_r)
|
||||||
|
{
|
||||||
|
return m_ide1->read_cs1(1, 0xff0000) >> 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(i82371sb_ide_device::ide1_write_cs1_w)
|
||||||
|
{
|
||||||
|
m_ide1->write_cs1(1, data << 16, 0xff0000);
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(i82371sb_ide_device::ide2_read_cs1_r)
|
||||||
|
{
|
||||||
|
return m_ide2->read_cs1(1, 0xff0000) >> 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(i82371sb_ide_device::ide2_write_cs1_w)
|
||||||
|
{
|
||||||
|
m_ide2->write_cs1(1, data << 16, 0xff0000);
|
||||||
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "pci.h"
|
#include "pci.h"
|
||||||
|
#include "machine/pci-ide.h"
|
||||||
|
|
||||||
#include "machine/ins8250.h"
|
#include "machine/ins8250.h"
|
||||||
#include "machine/ds128x.h"
|
#include "machine/ds128x.h"
|
||||||
@ -180,4 +181,75 @@ private:
|
|||||||
|
|
||||||
DECLARE_DEVICE_TYPE(I82371SB_ISA, i82371sb_isa_device)
|
DECLARE_DEVICE_TYPE(I82371SB_ISA, i82371sb_isa_device)
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define MCFG_I82371SB_IDE_IRQ_PRI_CB(_devcb) \
|
||||||
|
devcb = &downcast<i82371sb_ide_device &>(*device).set_irq_pri_callback(DEVCB_##_devcb);
|
||||||
|
|
||||||
|
#define MCFG_I82371SB_IDE_IRQ_SEC_CB(_devcb) \
|
||||||
|
devcb = &downcast<i82371sb_ide_device &>(*device).set_irq_sec_callback(DEVCB_##_devcb);
|
||||||
|
|
||||||
|
#define MCFG_I82371SB_IDE_INTERRUPTS(_tag, _dev, _irq_pri, _irq_sec) \
|
||||||
|
MCFG_I82371SB_IDE_IRQ_PRI_CB(WRITELINE(_tag, _dev, _irq_pri)) \
|
||||||
|
MCFG_I82371SB_IDE_IRQ_SEC_CB(WRITELINE(_tag, _dev, _irq_sec))
|
||||||
|
|
||||||
|
class i82371sb_ide_device : public pci_device {
|
||||||
|
public:
|
||||||
|
i82371sb_ide_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
|
||||||
|
template <class Object> devcb_base &set_irq_pri_callback(Object &&cb) { return m_irq_pri_callback.set_callback(std::forward<Object>(cb)); }
|
||||||
|
template <class Object> devcb_base &set_irq_sec_callback(Object &&cb) { return m_irq_sec_callback.set_callback(std::forward<Object>(cb)); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void device_start() override;
|
||||||
|
virtual void device_reset() override;
|
||||||
|
// optional information overrides
|
||||||
|
virtual void device_add_mconfig(machine_config &config) override;
|
||||||
|
|
||||||
|
virtual void reset_all_mappings() override;
|
||||||
|
virtual void map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space,
|
||||||
|
uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space) override;
|
||||||
|
|
||||||
|
virtual void config_map(address_map &map) override;
|
||||||
|
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(primary_int);
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(secondary_int);
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_READ16_MEMBER(command_r);
|
||||||
|
DECLARE_WRITE16_MEMBER(command_w);
|
||||||
|
DECLARE_READ32_MEMBER(bmiba_r);
|
||||||
|
DECLARE_WRITE32_MEMBER(bmiba_w);
|
||||||
|
DECLARE_READ16_MEMBER(idetim_primary_r);
|
||||||
|
DECLARE_WRITE16_MEMBER(idetim_primary_w);
|
||||||
|
DECLARE_READ16_MEMBER(idetim_secondary_r);
|
||||||
|
DECLARE_WRITE16_MEMBER(idetim_secondary_w);
|
||||||
|
DECLARE_READ8_MEMBER(sidetim_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(sidetim_w);
|
||||||
|
|
||||||
|
DECLARE_READ32_MEMBER(ide1_read32_cs0_r);
|
||||||
|
DECLARE_WRITE32_MEMBER(ide1_write32_cs0_w);
|
||||||
|
DECLARE_READ32_MEMBER(ide2_read32_cs0_r);
|
||||||
|
DECLARE_WRITE32_MEMBER(ide2_write32_cs0_w);
|
||||||
|
DECLARE_READ8_MEMBER(ide1_read_cs1_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(ide1_write_cs1_w);
|
||||||
|
DECLARE_READ8_MEMBER(ide2_read_cs1_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(ide2_write_cs1_w);
|
||||||
|
|
||||||
|
void internal_io_map(address_map &map);
|
||||||
|
|
||||||
|
uint16_t command;
|
||||||
|
uint32_t bmiba;
|
||||||
|
int idetim_primary, idetim_secondary;
|
||||||
|
int sidetim;
|
||||||
|
|
||||||
|
devcb_write_line m_irq_pri_callback;
|
||||||
|
devcb_write_line m_irq_sec_callback;
|
||||||
|
|
||||||
|
required_device<bus_master_ide_controller_device> m_ide1;
|
||||||
|
required_device<bus_master_ide_controller_device> m_ide2;
|
||||||
|
};
|
||||||
|
|
||||||
|
DECLARE_DEVICE_TYPE(I82371SB_IDE, i82371sb_ide_device)
|
||||||
|
|
||||||
#endif // MAME_MACHINE_I82371SB_H
|
#endif // MAME_MACHINE_I82371SB_H
|
||||||
|
@ -493,7 +493,8 @@ MACHINE_CONFIG_START(pcipc_state::pcipc)
|
|||||||
MCFG_DEVICE_ADD( ":pci:07.0", I82371SB_ISA, 0)
|
MCFG_DEVICE_ADD( ":pci:07.0", I82371SB_ISA, 0)
|
||||||
MCFG_I82371SB_BOOT_STATE_HOOK(WRITE8(*this, pcipc_state, boot_state_phoenix_ver40_rev6_w))
|
MCFG_I82371SB_BOOT_STATE_HOOK(WRITE8(*this, pcipc_state, boot_state_phoenix_ver40_rev6_w))
|
||||||
MCFG_I82371SB_SMI_CB(INPUTLINE(":maincpu", INPUT_LINE_SMI))
|
MCFG_I82371SB_SMI_CB(INPUTLINE(":maincpu", INPUT_LINE_SMI))
|
||||||
// MCFG_DEVICE_ADD( ":pci:07.1", IDE_PCI, 0, 0x80867010, 0x03, 0x00000000)
|
MCFG_DEVICE_ADD( ":pci:07.1", I82371SB_IDE, 0)
|
||||||
|
MCFG_I82371SB_IDE_INTERRUPTS(":pci:07.0:pic8259_slave", pic8259_device, ir6_w, ir7_w)
|
||||||
// MCFG_DEVICE_ADD( ":pci:12.0", MGA2064W, 0)
|
// MCFG_DEVICE_ADD( ":pci:12.0", MGA2064W, 0)
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("board4", ISA16_SLOT, 0, "pci:07.0:isabus", isa_internal_devices, "fdc37c93x", true)
|
MCFG_DEVICE_ADD("board4", ISA16_SLOT, 0, "pci:07.0:isabus", isa_internal_devices, "fdc37c93x", true)
|
||||||
@ -519,13 +520,13 @@ MACHINE_CONFIG_END
|
|||||||
|
|
||||||
ROM_START(pcipc)
|
ROM_START(pcipc)
|
||||||
ROM_REGION32_LE(0x40000, ":pci:07.0", 0) /* PC bios */
|
ROM_REGION32_LE(0x40000, ":pci:07.0", 0) /* PC bios */
|
||||||
ROM_SYSTEM_BIOS(0, "n7ns04", "Version 21/01/98, without integrated sound")
|
ROM_SYSTEM_BIOS(0, "m55ns04", "m55ns04") // Micronics M55HI-Plus with no sound
|
||||||
ROMX_LOAD("m7ns04.rom", 0x00000, 0x40000, CRC(9c1f656b) SHA1(f4a0a522d8c47b6ddb6c01fe9a34ddf5b1977f8d), ROM_BIOS(0) )
|
ROMX_LOAD("m55-04ns.rom", 0x20000, 0x20000, CRC(0116B2B0) SHA1(19b0203decfd4396695334517488d488aec3ccde), ROM_BIOS(0))
|
||||||
ROM_SYSTEM_BIOS(1, "n7s04", "Version 21/01/98, with integrated sound")
|
ROM_SYSTEM_BIOS(1, "m55s04", "m55s04") // with sound
|
||||||
ROMX_LOAD("m7s04.rom", 0x00000, 0x40000, CRC(3689f5a9) SHA1(8daacdb0dc6783d2161680564ffe83ac2515f7ef), ROM_BIOS(1) )
|
ROMX_LOAD("m55-04s.rom", 0x20000, 0x20000, CRC(34A7422E) SHA1(68753fe373c97844beff83ea75c634c77cfedb8f), ROM_BIOS(1))
|
||||||
ROM_SYSTEM_BIOS(2, "crisis", "Version 07/01/98, for flash recovery")
|
ROM_SYSTEM_BIOS(2, "crisis", "Version 07/01/98, for flash recovery")
|
||||||
ROMX_LOAD("crisis.rom", 0x00000, 0x40000, CRC(38a1458a) SHA1(8881ac336392cca79a772b4168f63efc31f953dd), ROM_BIOS(2) )
|
ROMX_LOAD("crisis.rom", 0x00000, 0x40000, CRC(38a1458a) SHA1(8881ac336392cca79a772b4168f63efc31f953dd), ROM_BIOS(2) )
|
||||||
ROM_SYSTEM_BIOS(3, "5hx29", "5hx29") \
|
ROM_SYSTEM_BIOS(3, "5hx29", "5hx29")
|
||||||
ROMX_LOAD("5hx29.bin", 0x20000, 0x20000, CRC(07719a55) SHA1(b63993fd5186cdb4f28c117428a507cd069e1f68), ROM_BIOS(3) )
|
ROMX_LOAD("5hx29.bin", 0x20000, 0x20000, CRC(07719a55) SHA1(b63993fd5186cdb4f28c117428a507cd069e1f68), ROM_BIOS(3) )
|
||||||
ROM_REGION(0x8000,"ibm_vga", 0)
|
ROM_REGION(0x8000,"ibm_vga", 0)
|
||||||
ROM_LOAD("ibm-vga.bin", 0x00000, 0x8000, BAD_DUMP CRC(74e3fadb) SHA1(dce6491424f1726203776dfae9a967a98a4ba7b5) )
|
ROM_LOAD("ibm-vga.bin", 0x00000, 0x8000, BAD_DUMP CRC(74e3fadb) SHA1(dce6491424f1726203776dfae9a967a98a4ba7b5) )
|
||||||
@ -541,6 +542,7 @@ ROM_START(pcipctx)
|
|||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
static INPUT_PORTS_START(pcipc)
|
static INPUT_PORTS_START(pcipc)
|
||||||
|
PORT_INCLUDE(at_keyboard)
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
COMP(1998, pcipc, 0, 0, pcipc, pcipc, pcipc_state, empty_init, "Hack Inc.", "Sandbox PCI PC (440HX)", MACHINE_NO_SOUND)
|
COMP(1998, pcipc, 0, 0, pcipc, pcipc, pcipc_state, empty_init, "Hack Inc.", "Sandbox PCI PC (440HX)", MACHINE_NO_SOUND)
|
||||||
|
Loading…
Reference in New Issue
Block a user