mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
Machines promoted to working
---------------------------- Sony NEWS NWS-3260 [Patrick Mackinlay] (nw) * tidy up side effects * some additional notes
This commit is contained in:
parent
f1462d0c22
commit
8565eef131
@ -168,10 +168,15 @@ u8 cxd1185_device::scsi_data_r()
|
|||||||
|
|
||||||
if (!m_pio_data_mode)
|
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())
|
if (m_state != IDLE && !m_state_timer->enabled())
|
||||||
m_state_timer->adjust(attotime::zero);
|
m_state_timer->adjust(attotime::zero);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
data = m_fifo.peek();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
data = scsi_bus->data_r();
|
data = scsi_bus->data_r();
|
||||||
@ -185,10 +190,13 @@ template <unsigned Register> u8 cxd1185_device::int_req_r()
|
|||||||
{
|
{
|
||||||
u8 const data = m_int_req[Register];
|
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;
|
m_int_req[Register] = 0;
|
||||||
int_check();
|
int_check();
|
||||||
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
* Sources:
|
* Sources:
|
||||||
*
|
*
|
||||||
* TODO
|
* TODO
|
||||||
|
* - graphics
|
||||||
* - sound
|
* - sound
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -224,7 +225,7 @@ void news_r3k_state::cpu_map(address_map &map)
|
|||||||
// 1fcc0007 // sccvect?
|
// 1fcc0007 // sccvect?
|
||||||
|
|
||||||
map(0x1fd00000, 0x1fd00007).m(m_hid, FUNC(news_hid_hle_device::map));
|
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(0x1fe00000, 0x1fe0000f).m(m_dma, FUNC(dmac_0448_device::map));
|
||||||
map(0x1fe00100, 0x1fe0010f).m(m_scsi, FUNC(cxd1185_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, 0x1fe00300).lr8([]() { return 0xff; }, "sound_r"); // HACK: disable sound
|
||||||
//map(0x1fe00300, 0x1fe00307); // sound
|
//map(0x1fe00300, 0x1fe00307); // sound
|
||||||
map(0x1fe40000, 0x1fe40003).portr("SW2");
|
map(0x1fe40000, 0x1fe40003).portr("SW2");
|
||||||
|
//map(0x1fe70000, 0x1fe9ffff).ram(); // ??
|
||||||
map(0x1fe80000, 0x1fe800ff).rom().region("idrom", 0).mirror(0x0003ff00);
|
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));
|
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()
|
u32 news_r3k_state::bus_error()
|
||||||
{
|
{
|
||||||
irq_w<BERR>(ASSERT_LINE);
|
if (!machine().side_effects_disabled())
|
||||||
|
irq_w<BERR>(ASSERT_LINE);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -361,6 +364,24 @@ void news_r3k_state::itimer(void *ptr, s32 param)
|
|||||||
|
|
||||||
void news_r3k_state::debug_w(u8 data)
|
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());
|
LOG("debug_w 0x%02x (%s)\n", data, machine().describe_context());
|
||||||
|
|
||||||
for (unsigned i = 0; i < 4; i++)
|
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_addrmap(AS_PROGRAM, &news_r3k_state::cpu_map);
|
||||||
m_cpu->set_fpu(mips1_device_base::MIPS_R3010Av4);
|
m_cpu->set_fpu(mips1_device_base::MIPS_R3010Av4);
|
||||||
|
|
||||||
// 12 SIMM slots
|
// 3 banks of 4x30-pin SIMMs with parity, first bank is soldered
|
||||||
// 30pin 4Mbyte SIMMs with parity?
|
|
||||||
RAM(config, m_ram);
|
RAM(config, m_ram);
|
||||||
m_ram->set_default_size("16M");
|
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);
|
DMAC_0448(config, m_dma, 0);
|
||||||
m_dma->set_bus(m_cpu, 0);
|
m_dma->set_bus(m_cpu, 0);
|
||||||
m_dma->out_int_cb().set(FUNC(news_r3k_state::irq_w<DMA>));
|
m_dma->out_int_cb().set(FUNC(news_r3k_state::irq_w<DMA>));
|
||||||
// TODO: channel 0 scsi
|
|
||||||
m_dma->dma_r_cb<1>().set(m_fdc, FUNC(upd72067_device::dma_r));
|
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));
|
m_dma->dma_w_cb<1>().set(m_fdc, FUNC(upd72067_device::dma_w));
|
||||||
// TODO: channel 2 audio
|
// 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_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]); });
|
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);
|
UPD72067(config, m_fdc, 16_MHz_XTAL);
|
||||||
m_fdc->intrq_wr_callback().set(m_dma, FUNC(dmac_0448_device::irq<1>));
|
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>));
|
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
|
// scsi bus and devices
|
||||||
NSCSI_BUS(config, m_scsibus);
|
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:0", news_scsi_devices, "harddisk");
|
||||||
NSCSI_CONNECTOR(config, "scsi:1", news_scsi_devices, nullptr);
|
NSCSI_CONNECTOR(config, "scsi:1", news_scsi_devices, nullptr);
|
||||||
NSCSI_CONNECTOR(config, "scsi:2", 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)
|
* 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
|
* 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);
|
SCREEN(config, m_lcd, SCREEN_TYPE_LCD);
|
||||||
m_lcd->set_raw(47185920, 1024, 0, 1024, 768, 0, 768);
|
m_lcd->set_raw(47185920, 1024, 0, 1024, 768, 0, 768);
|
||||||
m_lcd->set_screen_update(FUNC(news_r3k_state::screen_update));
|
m_lcd->set_screen_update(FUNC(news_r3k_state::screen_update));
|
||||||
@ -498,4 +520,4 @@ ROM_START(nws3260)
|
|||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
/* 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)
|
||||||
|
@ -149,12 +149,17 @@ template <news_hid_hle_device::news_hid_device Device> u8 news_hid_hle_device::d
|
|||||||
if (m_fifo[Device].empty())
|
if (m_fifo[Device].empty())
|
||||||
return 0;
|
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())
|
if (m_fifo[Device].empty())
|
||||||
out_irq<Device>(false);
|
out_irq<Device>(false);
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return m_fifo[Device].peek();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <news_hid_hle_device::news_hid_device Device> void news_hid_hle_device::reset_w(u8 data)
|
template <news_hid_hle_device::news_hid_device Device> void news_hid_hle_device::reset_w(u8 data)
|
||||||
|
Loading…
Reference in New Issue
Block a user