From 1ecf5b96b9ac5344390dc4e92691c245289b5a19 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Tue, 19 Mar 2024 16:54:15 +0100 Subject: mks3: Fix keyoff psr340: Finish the lcd, add the nvram. --- src/mame/yamaha/mks3.cpp | 133 ++++++++++++++++++++++--------------------- src/mame/yamaha/ympsr340.cpp | 79 ++++--------------------- 2 files changed, 78 insertions(+), 134 deletions(-) diff --git a/src/mame/yamaha/mks3.cpp b/src/mame/yamaha/mks3.cpp index 223416461b9..6f307f6291b 100644 --- a/src/mame/yamaha/mks3.cpp +++ b/src/mame/yamaha/mks3.cpp @@ -21,71 +21,71 @@ static INPUT_PORTS_START(piano) PORT_START("P1") PORT_BIT(0x0000000f, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C2") - PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C2#") - PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D2") - PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D2#") - PORT_BIT(0x00000100, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("E2") - PORT_BIT(0x00000200, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F2") - PORT_BIT(0x00000400, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F2#") - PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G2") - PORT_BIT(0x00001000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G2#") - PORT_BIT(0x00002000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A2") - PORT_BIT(0x00004000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A2#") - PORT_BIT(0x00008000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("B2") - PORT_BIT(0x00010000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C3") - PORT_BIT(0x00020000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C3#") - PORT_BIT(0x00040000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D3") - PORT_BIT(0x00080000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D3#") - PORT_BIT(0x00100000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("E3") - PORT_BIT(0x00200000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F3") - PORT_BIT(0x00400000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F3#") - PORT_BIT(0x00800000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G3") - PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G3#") - PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A3") - PORT_BIT(0x04000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A3#") - PORT_BIT(0x08000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("B3") - PORT_BIT(0x10000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C4") - PORT_BIT(0x20000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C4#") - PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D4") - PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D4#") + PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C1") + PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C1#") + PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D1") + PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D1#") + PORT_BIT(0x00000100, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("E1") + PORT_BIT(0x00000200, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F1") + PORT_BIT(0x00000400, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F1#") + PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G1") + PORT_BIT(0x00001000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G1#") + PORT_BIT(0x00002000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A1") + PORT_BIT(0x00004000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A1#") + PORT_BIT(0x00008000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("B1") + PORT_BIT(0x00010000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C2") + PORT_BIT(0x00020000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C2#") + PORT_BIT(0x00040000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D2") + PORT_BIT(0x00080000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D2#") + PORT_BIT(0x00100000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("E2") + PORT_BIT(0x00200000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F2") + PORT_BIT(0x00400000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F2#") + PORT_BIT(0x00800000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G2") + PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G2#") + PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A2") + PORT_BIT(0x04000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A2#") + PORT_BIT(0x08000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("B2") + PORT_BIT(0x10000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C3") + PORT_BIT(0x20000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C3#") + PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D3") + PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D3#") PORT_START("P2") - PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("E4") - PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F4") - PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F4#") - PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G4") - PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G4#") - PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A4") - PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A4#") - PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("B4") - PORT_BIT(0x00000100, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C5") - PORT_BIT(0x00000200, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C5#") - PORT_BIT(0x00000400, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D5") - PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D5#") - PORT_BIT(0x00001000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("E5") - PORT_BIT(0x00002000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F5") - PORT_BIT(0x00004000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F5#") - PORT_BIT(0x00008000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G5") - PORT_BIT(0x00010000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G5#") - PORT_BIT(0x00020000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A5") - PORT_BIT(0x00040000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A5#") - PORT_BIT(0x00080000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("B5") - PORT_BIT(0x00100000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C6") - PORT_BIT(0x00200000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C6#") - PORT_BIT(0x00400000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D6") - PORT_BIT(0x00800000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D6#") - PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("E6") - PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F6") - PORT_BIT(0x04000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F6#") - PORT_BIT(0x08000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G6") - PORT_BIT(0x10000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G6#") - PORT_BIT(0x20000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A6") - PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A6#") - PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("B6") + PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("E3") + PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F3") + PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F3#") + PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G3") + PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G3#") + PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A3") + PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A3#") + PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("B3") + PORT_BIT(0x00000100, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C4") + PORT_BIT(0x00000200, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C4#") + PORT_BIT(0x00000400, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D4") + PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D4#") + PORT_BIT(0x00001000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("E4") + PORT_BIT(0x00002000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F4") + PORT_BIT(0x00004000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F4#") + PORT_BIT(0x00008000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G4") + PORT_BIT(0x00010000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G4#") + PORT_BIT(0x00020000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A4") + PORT_BIT(0x00040000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A4#") + PORT_BIT(0x00080000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("B4") + PORT_BIT(0x00100000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C5") + PORT_BIT(0x00200000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C5#") + PORT_BIT(0x00400000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D5") + PORT_BIT(0x00800000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("D5#") + PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("E5") + PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F5") + PORT_BIT(0x04000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("F5#") + PORT_BIT(0x08000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G5") + PORT_BIT(0x10000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("G5#") + PORT_BIT(0x20000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A5") + PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("A5#") + PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("B5") PORT_START("P3") - PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C7") + PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_NAME("C6") PORT_BIT(0xfffffffe, IP_ACTIVE_HIGH, IPT_UNUSED) INPUT_PORTS_END @@ -154,12 +154,13 @@ void mks3_device::req_w(int state) return; m_req = state; - if(m_req == 0) + if(m_req == 0 && m_step == 0xff) transmit_next(); } TIMER_CALLBACK_MEMBER(mks3_device::transmit_tick) { + logerror("tr %d\n", m_step); if(m_step == 15) { transmit_next(); return; @@ -216,12 +217,12 @@ void mks3_device::send_next() // velocity is 10 bits, 0 = max, 3ff = min // // 80 | key number - // 20 for keyoff, velocity >> 5 otherwise - // 60 | (velocity & 1f) + // 20 for maximal time(?), velocity >> 5 otherwise + // 60 | (velocity & 1f) on) || 00 (keyoff) m_bytes[0] = 0x80 | (key & 0x7f); - m_bytes[1] = key & 0x100 ? 0 : 0x20; - m_bytes[2] = 0x60; + m_bytes[1] = 0; //key & 0x100 ? 0 : 0x20; + m_bytes[2] = (key & 0x100) ? 0x60 : 0x00; m_byte_count = 3; transmit_next(); } diff --git a/src/mame/yamaha/ympsr340.cpp b/src/mame/yamaha/ympsr340.cpp index 100c51b277b..e5199253872 100644 --- a/src/mame/yamaha/ympsr340.cpp +++ b/src/mame/yamaha/ympsr340.cpp @@ -18,9 +18,10 @@ #include "emu.h" +#include "bus/midi/midi.h" #include "cpu/h8/swx00.h" +#include "machine/nvram.h" #include "video/hd44780.h" -#include "bus/midi/midi.h" #include "mks3.h" @@ -37,6 +38,8 @@ public: psr340_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + m_ram(*this, "ram"), + m_nvram(*this, "ram"), m_mks3(*this, "mks3"), m_lcdc(*this, "ks0066"), m_outputs(*this, "%02d.%x.%x", 0U, 0U, 0U), @@ -51,6 +54,8 @@ protected: private: required_device m_maincpu; + required_shared_ptr m_ram; + required_device m_nvram; required_device m_mks3; required_device m_lcdc; output_finder<80, 8, 5> m_outputs; @@ -102,7 +107,7 @@ void psr340_state::txd_w(u8 data) void psr340_state::c_map(address_map &map) { map(0x000000, 0x1fffff).rom().region("maincpu", 0); // cs0 - map(0x400000, 0x43ffff).ram(); // cs2 + map(0x400000, 0x43ffff).ram().share(m_ram); // cs2 map(0x600000, 0x600000).lr8(NAME([]() -> uint8_t { return 0x80; })); // FDC status, cs3, cs4 w/ dack } @@ -128,70 +133,6 @@ void psr340_state::render_w(int state) return; const u8 *render = m_lcdc->render(); - - if(0) { - logerror("XX -\n"); - for(int i=2; i != 3; i++) { - for(int y=0; y != 8; y++) { - std::string r = "XX"; - for(int x=0; x != 10; x++) { - int idx = x+20*i; - uint8_t v = render[16*(x+20*i) + y]; - r += ' '; - for(int b=4; b >= 0; b--) { - bool known = (idx == 43 && b <= 3) || (idx == 44) || (idx == 45) || (idx == 46 && b >= 3); - known = known || (idx == 46 && b == 2 && y >= 5); - known = known || (idx == 46 && b == 1 && y >= 4); - known = known || (idx == 46 && b == 0 && y >= 5); - known = known || (idx == 47 && b == 4 && y >= 4); - known = known || (idx == 47 && b == 3 && y >= 5); - known = known || (idx == 47 && b == 2 && y >= 4); - known = known || (idx == 43 && b == 4 && y >= 4); - known = known || (idx == 42 && b == 0 && y >= 4 && y <= 6); - known = known || (idx == 42 && b == 1 && y >= 4); - known = known || (idx == 42 && b == 2 && y >= 4 && y <= 6); - known = known || (idx == 42 && b == 3 && y >= 4); - known = known || (idx == 42 && b == 4 && y >= 4 && y <= 6); - known = known || (idx == 41 && b == 1 && y >= 4); - known = known || (idx == 41 && b == 2 && y >= 4 && y <= 6); - known = known || (idx == 41 && b == 3 && y >= 4); - known = known || (idx == 41 && b == 4 && y >= 4 && y <= 6); - known = known || (idx == 40 && b == 0 && y >= 4); - known = known || (idx == 40 && b == 1 && y >= 4 && y <= 6); - - known = known || (idx == 40 && b == 4 && y >= 1 && y <= 6); - - known = known || (idx == 46 && y == 3 && b == 2); - known = known || (idx == 46 && y == 2 && b == 1); - known = known || (idx == 46 && y == 3 && b == 1); - known = known || (idx == 46 && y == 2 && b == 0); - known = known || (idx == 46 && y == 3 && b == 0); - known = known || (idx == 47 && y == 3 && b == 4); - known = known || (idx == 47 && y == 4 && b == 3); - - known = known || (idx == 40 && y == 7 && b == 2); - known = known || (idx == 40 && y == 7 && b == 1); - known = known || (idx == 41 && y == 7 && b == 4); - known = known || (idx == 41 && y == 7 && b == 2); - known = known || (idx == 42 && y == 7 && b == 4); - known = known || (idx == 42 && y == 7 && b == 2); - known = known || (idx == 42 && y == 7 && b == 0); - known = known || (idx == 47 && y == 3 && b == 3); - known = known || (idx == 47 && y == 3 && b == 2); - known = known || (idx == 47 && y == 1 && b == 1); - known = known || (idx == 47 && y == 1 && b == 0); - known = known || (idx == 47 && y == 2 && b == 4); - known = known || (idx == 41 && y == 4 && b == 0); - bool is = v & (0x01 << b); - r += known ? '_' : is ? '#' : '.'; - } - } - logerror("%s\n", r); - } - logerror("XX\n"); - } - } - for(int yy=0; yy != 8; yy++) for(int x=0; x != 80; x++) { uint8_t v = render[16*x + yy]; @@ -286,6 +227,8 @@ void psr340_state::psr340(machine_config &config) // something generates 500K for sci0, probably internal to the swx00 m_maincpu->sci_set_external_clock_period(0, attotime::from_hz(500000)); + NVRAM(config, m_nvram, nvram_device::DEFAULT_NONE); + MKS3(config, m_mks3); m_mks3->write_da().set(m_maincpu, FUNC(swx00_device::sci_rx_w<1>)); m_mks3->write_clk().set(m_maincpu, FUNC(swx00_device::sci_clk_w<1>)); @@ -317,8 +260,8 @@ ROM_START( psr340 ) ROM_REGION16_BE(0x200000, "wave", 0) ROM_LOAD("xv89810.bin", 0x000000, 0x200000, CRC(10e68363) SHA1(5edee814bf07c49088da44474fdd5c817e7c5af0)) - ROM_REGION(0x5704b, "screen", 0) - ROM_LOAD("psr340-lcd.svg", 0, 0x5704b, CRC(d93af0a9) SHA1(76156443025e0b4089259417bb266888c547b2d7)) + ROM_REGION(0x61809, "screen", 0) + ROM_LOAD("psr340-lcd.svg", 0, 0x61809, CRC(f9d11ca6) SHA1(da036d713c73d6b452a3e2d2b2234d473422d5fb)) ROM_END } // anonymous namespace -- cgit v1.2.3