summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers
diff options
context:
space:
mode:
author Patrick Mackinlay <pmackinlay@hotmail.com>2020-04-05 16:05:41 +0700
committer Patrick Mackinlay <pmackinlay@hotmail.com>2020-04-05 16:05:41 +0700
commit8565eef131ae272c6901e560cf33b0187d269045 (patch)
tree60afa566400c6cbc5e2929ed75fb1ef90b4b64f1 /src/mame/drivers
parentf1462d0c223c3b3694eb56bc18daf05e9367e941 (diff)
Machines promoted to working
---------------------------- Sony NEWS NWS-3260 [Patrick Mackinlay] (nw) * tidy up side effects * some additional notes
Diffstat (limited to 'src/mame/drivers')
-rw-r--r--src/mame/drivers/news_r3k.cpp40
1 files changed, 31 insertions, 9 deletions
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<BERR>(ASSERT_LINE);
+ 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)