mirror of
https://github.com/holub/mame
synced 2025-07-03 17:08:39 +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
@ -167,12 +167,17 @@ u8 cxd1185_device::scsi_data_r()
|
||||
u8 data = 0;
|
||||
|
||||
if (!m_pio_data_mode)
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
data = m_fifo.dequeue();
|
||||
|
||||
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 <unsigned Register> u8 cxd1185_device::int_req_r()
|
||||
{
|
||||
u8 const data = m_int_req[Register];
|
||||
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
LOGMASKED(LOG_REG, "int_req_r<%d> 0x%02x\n", Register, data);
|
||||
|
||||
m_int_req[Register] = 0;
|
||||
int_check();
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
@ -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,6 +341,7 @@ void news_r3k_state::int_check()
|
||||
|
||||
u32 news_r3k_state::bus_error()
|
||||
{
|
||||
if (!machine().side_effects_disabled())
|
||||
irq_w<BERR>(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<DMA>));
|
||||
// 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)
|
||||
|
@ -149,6 +149,8 @@ template <news_hid_hle_device::news_hid_device Device> u8 news_hid_hle_device::d
|
||||
if (m_fifo[Device].empty())
|
||||
return 0;
|
||||
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
u8 const data = m_fifo[Device].dequeue();
|
||||
|
||||
if (m_fifo[Device].empty())
|
||||
@ -156,6 +158,9 @@ template <news_hid_hle_device::news_hid_device Device> u8 news_hid_hle_device::d
|
||||
|
||||
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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user