summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine')
-rw-r--r--src/mame/machine/hal2.cpp4
-rw-r--r--src/mame/machine/sgi.cpp28
-rw-r--r--src/mame/machine/sgi.h4
3 files changed, 19 insertions, 17 deletions
diff --git a/src/mame/machine/hal2.cpp b/src/mame/machine/hal2.cpp
index e513282f17f..9c6d30180ce 100644
--- a/src/mame/machine/hal2.cpp
+++ b/src/mame/machine/hal2.cpp
@@ -78,8 +78,8 @@ uint16_t hal2_device::read(offs_t offset)
LOGMASKED(LOG_READS, "%s: HAL2 Status Read: %08x\n", machine().describe_context(), m_isr);
return m_isr;
case REVISION_REG:
- LOGMASKED(LOG_READS, "%s: HAL2 Revision Read: 0x4011\n", machine().describe_context());
- return 0x4011;
+ LOGMASKED(LOG_READS, "%s: HAL2 Revision Read: 0x4010\n", machine().describe_context());
+ return 0x4010;
case INDIRECT_DATA0_REG:
LOGMASKED(LOG_WRITES, "%s: HAL2 Indirect Data Register 0 Read: %04x\n", machine().describe_context(), m_idr[0]);
diff --git a/src/mame/machine/sgi.cpp b/src/mame/machine/sgi.cpp
index 0c171c2e0f2..9b2d66a7e4b 100644
--- a/src/mame/machine/sgi.cpp
+++ b/src/mame/machine/sgi.cpp
@@ -32,6 +32,7 @@ sgi_mc_device::sgi_mc_device(const machine_config &mconfig, const char *tag, dev
, m_maincpu(*this, finder_base::DUMMY_TAG)
, m_eeprom(*this, finder_base::DUMMY_TAG)
, m_int_dma_done_cb(*this)
+ , m_eisa_present(*this)
, m_rpss_timer(nullptr)
, m_dma_timer(nullptr)
, m_watchdog(0)
@@ -73,6 +74,7 @@ sgi_mc_device::sgi_mc_device(const machine_config &mconfig, const char *tag, dev
void sgi_mc_device::device_resolve_objects()
{
m_int_dma_done_cb.resolve_safe();
+ m_eisa_present.resolve_safe();
}
//-------------------------------------------------
@@ -81,15 +83,8 @@ void sgi_mc_device::device_resolve_objects()
void sgi_mc_device::device_start()
{
- // if Indigo2, ID appropriately
- if (!strcmp(machine().system().name, "ip244415"))
- {
- m_sys_id = 0x13; // rev. C MC, EISA bus present
- }
- else
- {
- m_sys_id = 0x03; // rev. C MC, no EISA bus
- }
+ m_sys_id = 0x03; // rev. C MC
+ m_sys_id = m_eisa_present() << 4;
m_rpss_timer = timer_alloc(TIMER_RPSS);
m_rpss_timer->adjust(attotime::never);
@@ -186,14 +181,19 @@ void sgi_mc_device::device_reset()
m_space = &m_maincpu->space(AS_PROGRAM);
}
-void sgi_mc_device::set_cpu_buserr(uint32_t address)
+void sgi_mc_device::set_cpu_buserr(uint32_t address, uint64_t mem_mask)
{
m_cpu_error_addr = address;
m_cpu_error_status = 0x00000400;
- if (address & 1)
- m_cpu_error_status |= 0x000000f0;
- else
- m_cpu_error_status |= 0x0000000f;
+ uint64_t mask = 0x00000000000000ffULL;
+ for (uint32_t bit = 0; bit < 8; bit++)
+ {
+ if (mem_mask & mask)
+ {
+ m_cpu_error_status |= (1 << bit);
+ }
+ mask <<= 8;
+ }
}
uint32_t sgi_mc_device::dma_translate(uint32_t address)
diff --git a/src/mame/machine/sgi.h b/src/mame/machine/sgi.h
index 2e6dca71641..203557fc7a2 100644
--- a/src/mame/machine/sgi.h
+++ b/src/mame/machine/sgi.h
@@ -28,11 +28,12 @@ public:
sgi_mc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
auto int_dma_done_cb() { return m_int_dma_done_cb.bind(); }
+ auto eisa_present() { return m_eisa_present.bind(); }
DECLARE_READ32_MEMBER(read);
DECLARE_WRITE32_MEMBER(write);
- void set_cpu_buserr(uint32_t address);
+ void set_cpu_buserr(uint32_t address, uint64_t mem_mask);
uint32_t get_mem_config(int channel) const { return m_mem_config[channel]; }
protected:
@@ -69,6 +70,7 @@ private:
required_device<eeprom_serial_93cxx_device> m_eeprom;
devcb_write_line m_int_dma_done_cb;
+ devcb_write_line m_eisa_present;
address_space *m_space;