diff options
Diffstat (limited to 'src/mame/machine')
-rw-r--r-- | src/mame/machine/hal2.cpp | 4 | ||||
-rw-r--r-- | src/mame/machine/sgi.cpp | 28 | ||||
-rw-r--r-- | src/mame/machine/sgi.h | 4 |
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; |