From 22e5c837ca246a229f28a9dc079734656bf62755 Mon Sep 17 00:00:00 2001 From: arbee Date: Sat, 10 Nov 2018 23:03:29 -0500 Subject: New machines added as MACHINE_NOT_WORKING Network Computing Devices NCD-19 [R. Belmont, Al Kossow] --- src/mame/drivers/ncd17c.cpp | 143 +++++++++++++++++++++++++++++++------------- src/mame/mame.lst | 1 + 2 files changed, 101 insertions(+), 43 deletions(-) diff --git a/src/mame/drivers/ncd17c.cpp b/src/mame/drivers/ncd17c.cpp index 8611b868300..771381505d1 100644 --- a/src/mame/drivers/ncd17c.cpp +++ b/src/mame/drivers/ncd17c.cpp @@ -6,46 +6,46 @@ NCD 17" color X terminal Hardware: - - MC68020FE20E CPU, no FPU, no MMU ("COPROC" location is empty) - - SCN2681AC1N40 DUART (Logitech serial mouse) + - MC68020 CPU, no FPU, no MMU + - 2681 DUART (Logitech serial mouse) - Unknown AMD Ethernet chip (c) 1987. LANCE or derivative? - - Bt478KPJ80 RAMDAC - - NMC9346N serial EEPROM - - 8 SIMM slots + - Bt478 RAMDAC - 1c8000 mask ff000000 - DUART? ****************************************************************************/ #include "emu.h" #include "bus/rs232/rs232.h" #include "cpu/m68000/m68000.h" #include "machine/mc68681.h" +#include "machine/am79c90.h" #include "screen.h" -class ncd17c_state : public driver_device +class ncd_020_state : public driver_device { public: - ncd17c_state(const machine_config &mconfig, device_type type, const char *tag) + ncd_020_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_screen(*this, "screen"), m_mainram(*this, "mainram"), - m_duart(*this, "duart") + m_duart(*this, "duart"), + m_lance(*this, "am79c90") { } - void ncd17c(machine_config &config); - void ncd17c_map(address_map &map); - - void init_ncd17c(); + void ncd_17c(machine_config &config); + void ncd_17c_map(address_map &map); + void ncd_19(machine_config &config); + void ncd_19_map(address_map &map); uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + uint32_t screen_update_19(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(duart_irq_handler); DECLARE_WRITE32_MEMBER(bt478_palette_w); DECLARE_READ32_MEMBER(ramsize_r); DECLARE_WRITE32_MEMBER(ramsize_w); - DECLARE_WRITE_LINE_MEMBER(vblank); + INTERRUPT_GEN_MEMBER(vblank); private: virtual void machine_reset() override; @@ -54,6 +54,7 @@ private: required_device m_screen; required_shared_ptr m_mainram; required_device m_duart; + required_device m_lance; inline void ATTR_PRINTF(3,4) verboselog( int n_level, const char *s_fmt, ... ); @@ -67,7 +68,7 @@ private: #define ENABLE_VERBOSE_LOG (0) -inline void ATTR_PRINTF(3,4) ncd17c_state::verboselog( int n_level, const char *s_fmt, ... ) +inline void ATTR_PRINTF(3,4) ncd_020_state::verboselog( int n_level, const char *s_fmt, ... ) { #if ENABLE_VERBOSE_LOG if( VERBOSE_LEVEL >= n_level ) @@ -82,7 +83,7 @@ inline void ATTR_PRINTF(3,4) ncd17c_state::verboselog( int n_level, const char * #endif } -void ncd17c_state::machine_reset() +void ncd_020_state::machine_reset() { m_entry = 0; m_stage = 0; @@ -90,14 +91,13 @@ void ncd17c_state::machine_reset() m_ramsize_phase = 0; } -WRITE_LINE_MEMBER(ncd17c_state::vblank) +INTERRUPT_GEN_MEMBER(ncd_020_state::vblank) { - if (state) - m_maincpu->set_input_line(M68K_IRQ_5, HOLD_LINE); + m_maincpu->set_input_line(M68K_IRQ_5, HOLD_LINE); } -uint32_t ncd17c_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +uint32_t ncd_020_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { uint32_t *scanline; int x, y; @@ -117,21 +117,59 @@ uint32_t ncd17c_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap return 0; } -void ncd17c_state::ncd17c_map(address_map &map) +uint32_t ncd_020_state::screen_update_19(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + uint32_t *scanline; + int x, y; + uint8_t pixels; + static const uint32_t palette[2] = { 0, 0xffffff }; + uint8_t *m_vram = (uint8_t *)m_mainram.target(); + + for (y = 0; y < 1024; y++) + { + scanline = &bitmap.pix32(y); + for (x = 0; x < 1024/8; x++) + { + pixels = m_vram[(y * (2048/8)) + (BYTE4_XOR_BE(x))]; + + *scanline++ = palette[(pixels>>7)&1]; + *scanline++ = palette[(pixels>>6)&1]; + *scanline++ = palette[(pixels>>5)&1]; + *scanline++ = palette[(pixels>>4)&1]; + *scanline++ = palette[(pixels>>3)&1]; + *scanline++ = palette[(pixels>>2)&1]; + *scanline++ = palette[(pixels>>1)&1]; + *scanline++ = palette[(pixels&1)]; + } + } + + return 0; +} + +void ncd_020_state::ncd_17c_map(address_map &map) { map(0x00000000, 0x000bffff).rom().region("maincpu", 0); map(0x001c8000, 0x001c803f).rw(m_duart, FUNC(scn2681_device::read), FUNC(scn2681_device::write)).umask32(0xff000000); - map(0x001d0000, 0x001d0003).w(FUNC(ncd17c_state::bt478_palette_w)); - map(0x01000000, 0x02ffffff).ram(); //w(FUNC(ncd17c_state::ramsize_r), FUNC(ncd17c_state::ramsize_w)); + map(0x001d0000, 0x001d0003).w(FUNC(ncd_020_state::bt478_palette_w)); + map(0x01000000, 0x02ffffff).ram(); //w(FUNC(ncd_020_state::ramsize_r), FUNC(ncd_020_state::ramsize_w)); map(0x03000000, 0x03ffffff).ram().share("mainram"); } -READ32_MEMBER(ncd17c_state::ramsize_r) +void ncd_020_state::ncd_19_map(address_map &map) +{ + map(0x00000000, 0x0000ffff).rom().region("maincpu", 0); + map(0x001e0000, 0x001e003f).rw(m_duart, FUNC(scn2681_device::read), FUNC(scn2681_device::write)).umask32(0xff000000); + map(0x00200000, 0x00200003).rw(m_lance, FUNC(am79c90_device::regs_r), FUNC(am79c90_device::regs_w)).umask32(0xffffffff); + map(0x00400000, 0x0043ffff).ram().share("mainram"); + map(0x00800000, 0x00bfffff).ram(); +} + +READ32_MEMBER(ncd_020_state::ramsize_r) { return m_ramsize_magic << 24; } -WRITE32_MEMBER(ncd17c_state::ramsize_w) +WRITE32_MEMBER(ncd_020_state::ramsize_w) { if (!m_ramsize_phase) { @@ -140,12 +178,12 @@ WRITE32_MEMBER(ncd17c_state::ramsize_w) m_ramsize_phase ^= 1; } -WRITE_LINE_MEMBER(ncd17c_state::duart_irq_handler) +WRITE_LINE_MEMBER(ncd_020_state::duart_irq_handler) { //m_maincpu->set_input_line_and_vector(M68K_IRQ_6, state, M68K_INT_ACK_AUTOVECTOR); } -WRITE32_MEMBER(ncd17c_state::bt478_palette_w) +WRITE32_MEMBER(ncd_020_state::bt478_palette_w) { if (mem_mask & 0xff000000) { @@ -184,33 +222,45 @@ WRITE32_MEMBER(ncd17c_state::bt478_palette_w) } } -void ncd17c_state::ncd17c(machine_config &config) +void ncd_020_state::ncd_17c(machine_config &config) { /* basic machine hardware */ M68020(config, m_maincpu, 20000000); - m_maincpu->set_addrmap(AS_PROGRAM, &ncd17c_state::ncd17c_map); + m_maincpu->set_addrmap(AS_PROGRAM, &ncd_020_state::ncd_17c_map); + m_maincpu->set_periodic_int(FUNC(ncd_020_state::vblank), attotime::from_hz(70.06)); - SCN2681(config, m_duart, 77.4144_MHz_XTAL / 21); - m_duart->irq_cb().set(FUNC(ncd17c_state::duart_irq_handler)); + SCN2681(config, m_duart, 3.6864_MHz_XTAL); + m_duart->irq_cb().set(FUNC(ncd_020_state::duart_irq_handler)); + + AM79C90(config, m_lance, XTAL(12'500'000)); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(77.4144_MHz_XTAL, 1376, 0, 1024, 803, 0, 768); // 56.260 kHz horizontal, 70.06 Hz vertical - m_screen->set_screen_update(FUNC(ncd17c_state::screen_update)); - m_screen->screen_vblank().set(FUNC(ncd17c_state::vblank)); + m_screen->set_screen_update(FUNC(ncd_020_state::screen_update)); } -static INPUT_PORTS_START( ncd17c ) -INPUT_PORTS_END - -void ncd17c_state::init_ncd17c() +void ncd_020_state::ncd_19(machine_config &config) { -// uint32_t *src = (uint32_t*)(memregion("maincpu")->base()); -// uint32_t *dst = m_mainram; -// memcpy(dst, src, 8); + /* basic machine hardware */ + M68020(config, m_maincpu, 15000000); + m_maincpu->set_addrmap(AS_PROGRAM, &ncd_020_state::ncd_19_map); + m_maincpu->set_periodic_int(FUNC(ncd_020_state::vblank), attotime::from_hz(72)); -// m_maincpu->reset(); + SCN2681(config, m_duart, 3.6864_MHz_XTAL); + m_duart->irq_cb().set(FUNC(ncd_020_state::duart_irq_handler)); + + AM79C90(config, m_lance, XTAL(12'500'000)); + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(72); + m_screen->set_visarea(0, 1280-1, 0, 1024-1); // Bitsavers claims this is 1280x1024 + m_screen->set_size(1400, 1152); + m_screen->set_screen_update(FUNC(ncd_020_state::screen_update_19)); } +static INPUT_PORTS_START( ncd_17c ) +INPUT_PORTS_END + /*************************************************************************** ROM definition(s) @@ -227,5 +277,12 @@ ROM_START( ncd17c ) ROM_LOAD16_BYTE( "ncd17c_v2.2.1_b2o.bin", 0x080001, 0x020000, CRC(2e5ebfaa) SHA1(d222c6cc743046a1c1dec1829c24fa918a54849d) ) ROM_END -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1990, ncd17c, 0, 0, ncd17c, ncd17c, ncd17c_state, init_ncd17c, "Network Computing Devices", "NCD17c Display Station", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) +ROM_START( ncd19 ) + ROM_REGION32_BE(0x10000, "maincpu", 0) + ROM_LOAD16_BYTE( "ncd19_v2.1.1_e.bin", 0x000000, 0x008000, CRC(28786528) SHA1(8f4ad6a593c55cce0477169132ecf38577086f4e) ) + ROM_LOAD16_BYTE( "ncd19_v2.1.1_o.bin", 0x000001, 0x008000, CRC(aeefbcf1) SHA1(0c28426d0ae7c18de02daee7d340c17dc461e7f4) ) +ROM_END + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1990, ncd17c, 0, 0, ncd_17c, ncd_17c, ncd_020_state, empty_init, "Network Computing Devices", "NCD-17C", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) +COMP( 1990, ncd19, 0, 0, ncd_19, ncd_17c, ncd_020_state, empty_init, "Network Computing Devices", "NCD-19", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index ea24b7744da..1e714c4c925 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -29822,6 +29822,7 @@ nc200 // 1993 NC200 @source:ncd17c.cpp ncd17c // 1990 Network Computing Devices +ncd19 // 1990 Network Computing Devices @source:nds.cpp nds // 2004 Nintendo -- cgit v1.2.3