diff --git a/src/devices/machine/cxd1185.cpp b/src/devices/machine/cxd1185.cpp index 2a9af3c5530..b599d307783 100644 --- a/src/devices/machine/cxd1185.cpp +++ b/src/devices/machine/cxd1185.cpp @@ -168,10 +168,15 @@ u8 cxd1185_device::scsi_data_r() if (!m_pio_data_mode) { - data = m_fifo.dequeue(); + if (!machine().side_effects_disabled()) + { + data = m_fifo.dequeue(); - if (m_state != IDLE && !m_state_timer->enabled()) - m_state_timer->adjust(attotime::zero); + if (m_state != IDLE && !m_state_timer->enabled()) + m_state_timer->adjust(attotime::zero); + } + else + data = m_fifo.peek(); } else data = scsi_bus->data_r(); @@ -185,10 +190,13 @@ template u8 cxd1185_device::int_req_r() { u8 const data = m_int_req[Register]; - LOGMASKED(LOG_REG, "int_req_r<%d> 0x%02x\n", Register, data); + if (!machine().side_effects_disabled()) + { + LOGMASKED(LOG_REG, "int_req_r<%d> 0x%02x\n", Register, data); - m_int_req[Register] = 0; - int_check(); + m_int_req[Register] = 0; + int_check(); + } return data; } diff --git a/src/mame/drivers/news_r3k.cpp b/src/mame/drivers/news_r3k.cpp index b726708ef0b..4fde0f4e98b 100644 --- a/src/mame/drivers/news_r3k.cpp +++ b/src/mame/drivers/news_r3k.cpp @@ -7,6 +7,7 @@ * Sources: * * TODO + * - graphics * - sound */ @@ -224,7 +225,7 @@ void news_r3k_state::cpu_map(address_map &map) // 1fcc0007 // sccvect? map(0x1fd00000, 0x1fd00007).m(m_hid, FUNC(news_hid_hle_device::map)); - map(0x1fd40000, 0x1fd40003).noprw().umask32(0xffff); // FIXME: ignore buzzer for now + map(0x1fd40000, 0x1fd40003).noprw(); // FIXME: ignore buzzer for now map(0x1fe00000, 0x1fe0000f).m(m_dma, FUNC(dmac_0448_device::map)); map(0x1fe00100, 0x1fe0010f).m(m_scsi, FUNC(cxd1185_device::map)); @@ -232,6 +233,7 @@ void news_r3k_state::cpu_map(address_map &map) map(0x1fe00300, 0x1fe00300).lr8([]() { return 0xff; }, "sound_r"); // HACK: disable sound //map(0x1fe00300, 0x1fe00307); // sound map(0x1fe40000, 0x1fe40003).portr("SW2"); + //map(0x1fe70000, 0x1fe9ffff).ram(); // ?? map(0x1fe80000, 0x1fe800ff).rom().region("idrom", 0).mirror(0x0003ff00); map(0x1fec0000, 0x1fec0003).rw(m_scc, FUNC(z80scc_device::ab_dc_r), FUNC(z80scc_device::ab_dc_w)); @@ -339,7 +341,8 @@ void news_r3k_state::int_check() u32 news_r3k_state::bus_error() { - irq_w(ASSERT_LINE); + if (!machine().side_effects_disabled()) + irq_w(ASSERT_LINE); return 0; } @@ -361,6 +364,24 @@ void news_r3k_state::itimer(void *ptr, s32 param) void news_r3k_state::debug_w(u8 data) { + /* + * The low four bits of this register control the diagnostic LEDs labelled 1-4 + * with bit 0 correspondig to LED #1, and a 0 value enabling the LED. A non- + * exhaustive list of diagnostic codes produced by the PROM follows: + * + * 4321 Stage + * ...x EPROM checksum + * ..x. NVRAM test (byte) + * ..xx NVRAM test (word) + * .x.. NVRAM test (dword) + * .x.x read dip-switch SW2 + * .xx. write test 0x1fe70000-1fe9ffff? + * .xxx address decode + * x... NVRAM test (dword) + * x..x RAM sizing + * x.x. inventory/boot + * + */ LOG("debug_w 0x%02x (%s)\n", data, machine().describe_context()); for (unsigned i = 0; i < 4; i++) @@ -382,15 +403,15 @@ void news_r3k_state::common(machine_config &config) m_cpu->set_addrmap(AS_PROGRAM, &news_r3k_state::cpu_map); m_cpu->set_fpu(mips1_device_base::MIPS_R3010Av4); - // 12 SIMM slots - // 30pin 4Mbyte SIMMs with parity? + // 3 banks of 4x30-pin SIMMs with parity, first bank is soldered RAM(config, m_ram); m_ram->set_default_size("16M"); + // TODO: confirm each bank supports 4x1M or 4x4M + m_ram->set_extra_options("4M,8M,12M,20M,24M,32M,36M,48M"); DMAC_0448(config, m_dma, 0); m_dma->set_bus(m_cpu, 0); m_dma->out_int_cb().set(FUNC(news_r3k_state::irq_w)); - // TODO: channel 0 scsi m_dma->dma_r_cb<1>().set(m_fdc, FUNC(upd72067_device::dma_r)); m_dma->dma_w_cb<1>().set(m_fdc, FUNC(upd72067_device::dma_w)); // TODO: channel 2 audio @@ -422,7 +443,6 @@ void news_r3k_state::common(machine_config &config) m_net->dma_in().set([this](offs_t offset) { return m_net_ram[offset >> 1]; }); m_net->dma_out().set([this](offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_net_ram[offset >> 1]); }); - // μPD72067, clock? UPD72067(config, m_fdc, 16_MHz_XTAL); m_fdc->intrq_wr_callback().set(m_dma, FUNC(dmac_0448_device::irq<1>)); m_fdc->drq_wr_callback().set(m_dma, FUNC(dmac_0448_device::drq<1>)); @@ -430,6 +450,7 @@ void news_r3k_state::common(machine_config &config) // scsi bus and devices NSCSI_BUS(config, m_scsibus); + // inquiry content for hard disk is "HITACHI DK312C CS01" NSCSI_CONNECTOR(config, "scsi:0", news_scsi_devices, "harddisk"); NSCSI_CONNECTOR(config, "scsi:1", news_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:2", news_scsi_devices, nullptr); @@ -459,9 +480,10 @@ void news_r3k_state::common(machine_config &config) /* * FIXME: the screen is supposed to be an 1120x780 monochrome (black/white) * LCD, with an HD64646FS LCD controller. The boot prom is happy if we just - * ignore the LCDC and pretend the screen is 1024 pixels wide. + * ignore the LCDC and pretend the screen is 1024 pixels wide. NEWS-OS + * should detect LCD-MONO 1120x780 1 plane; X server changes mode but probe + * and mode change method isn't understood yet. */ - // apparently 1024x768? SCREEN(config, m_lcd, SCREEN_TYPE_LCD); m_lcd->set_raw(47185920, 1024, 0, 1024, 768, 0, 768); m_lcd->set_screen_update(FUNC(news_r3k_state::screen_update)); @@ -498,4 +520,4 @@ ROM_START(nws3260) ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP(1991, nws3260, 0, 0, nws3260, nws3260, news_r3k_state, init_common, "Sony", "NWS-3260", MACHINE_IS_SKELETON) +COMP(1991, nws3260, 0, 0, nws3260, nws3260, news_r3k_state, init_common, "Sony", "NWS-3260", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND) diff --git a/src/mame/machine/news_hid.cpp b/src/mame/machine/news_hid.cpp index 162e93c6bb5..b770e79fba2 100644 --- a/src/mame/machine/news_hid.cpp +++ b/src/mame/machine/news_hid.cpp @@ -149,12 +149,17 @@ template u8 news_hid_hle_device::d if (m_fifo[Device].empty()) return 0; - u8 const data = m_fifo[Device].dequeue(); + if (!machine().side_effects_disabled()) + { + u8 const data = m_fifo[Device].dequeue(); - if (m_fifo[Device].empty()) - out_irq(false); + if (m_fifo[Device].empty()) + out_irq(false); - return data; + return data; + } + else + return m_fifo[Device].peek(); } template void news_hid_hle_device::reset_w(u8 data)