From 50de0788363edd672a3af13e8a5e8d922837e759 Mon Sep 17 00:00:00 2001 From: Sergey Svishchev Date: Sun, 10 Jul 2016 16:25:04 +0300 Subject: [PATCH 1/2] ms7004: enable serial rx and re-add PORT_CODEs for F17..F20 --- src/mame/machine/ms7004.cpp | 28 ++++++++++++++++++---------- src/mame/machine/ms7004.h | 7 +++++++ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/mame/machine/ms7004.cpp b/src/mame/machine/ms7004.cpp index fb8ca4068cb..1e5cca40e0a 100644 --- a/src/mame/machine/ms7004.cpp +++ b/src/mame/machine/ms7004.cpp @@ -316,8 +316,8 @@ INPUT_PORTS_START( ms7004 ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 0") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_START("KBD0") // vertical row 15 - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F17") //PORT_CODE(KEYCODE_F17) PORT_CHAR(UCHAR_MAMEKEY(F17)) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F18") //PORT_CODE(KEYCODE_F18) PORT_CHAR(UCHAR_MAMEKEY(F18)) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F17") PORT_CODE(KEYCODE_F17) PORT_CHAR(UCHAR_MAMEKEY(F17)) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F18") PORT_CODE(KEYCODE_F18) PORT_CHAR(UCHAR_MAMEKEY(F18)) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF2") PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF3") PORT_CODE(KEYCODE_ASTERISK) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 8") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) @@ -326,8 +326,8 @@ INPUT_PORTS_START( ms7004 ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 3") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_START("KBD4") // vertical row 16 - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F19") //PORT_CODE(KEYCODE_F19) PORT_CHAR(UCHAR_MAMEKEY(F19)) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F20") //PORT_CODE(KEYCODE_F20) PORT_CHAR(UCHAR_MAMEKEY(F20)) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F19") PORT_CODE(KEYCODE_F19) PORT_CHAR(UCHAR_MAMEKEY(F19)) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F20") PORT_CODE(KEYCODE_F20) PORT_CHAR(UCHAR_MAMEKEY(F20)) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF4") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 9") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num ,") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) @@ -375,7 +375,8 @@ ms7004_device::ms7004_device(const machine_config &mconfig, const char *tag, dev m_kbd13(*this, "KBD13"), m_kbd14(*this, "KBD14"), m_kbd15(*this, "KBD15"), - m_tx_handler(*this) + m_tx_handler(*this), + m_rts_handler(*this) { } @@ -386,6 +387,7 @@ ms7004_device::ms7004_device(const machine_config &mconfig, const char *tag, dev void ms7004_device::device_start() { m_tx_handler.resolve_safe(); + m_rts_handler.resolve_safe(); } @@ -395,9 +397,15 @@ void ms7004_device::device_start() void ms7004_device::device_reset() { + m_rts_handler(0); } +WRITE_LINE_MEMBER( ms7004_device::write_rxd ) +{ + DBG_LOG(1,0,("write_rxd %d\n", state)); +} + //------------------------------------------------- // p1_w - //------------------------------------------------- @@ -441,7 +449,7 @@ WRITE8_MEMBER( ms7004_device::p2_w ) 6 LED "Caps" 7 LED "Hold" */ - DBG_LOG(2,0,( "%s: p2_w %02x = col %d\n", tag(), data, data&15)); + DBG_LOG(2,0,( "p2_w %02x = col %d\n", data, data&15)); m_p2 = data; m_i8243->i8243_p2_w(space, offset, data); @@ -456,8 +464,8 @@ WRITE8_MEMBER( ms7004_device::i8243_port_w ) { int sense = 0; - DBG_LOG(2,0,( "%s: 8243 port %d data %02xH\n", - tag(), offset + 4, data)); + DBG_LOG(2,0,( "8243 port %d data %02xH\n", + offset + 4, data)); if (data) { switch(offset << 4 | data) { @@ -480,8 +488,8 @@ WRITE8_MEMBER( ms7004_device::i8243_port_w ) } m_keylatch = BIT(sense, (m_p1 & 7)); if (m_keylatch) - DBG_LOG(1,0,( "%s: row %d col %02x t1 %d\n", - tag(), (m_p1 & 7), (offset << 4 | data), m_keylatch)); + DBG_LOG(1,0,( "row %d col %02x t1 %d\n", + (m_p1 & 7), (offset << 4 | data), m_keylatch)); } } diff --git a/src/mame/machine/ms7004.h b/src/mame/machine/ms7004.h index cbf36f3f311..ef9e9608d25 100644 --- a/src/mame/machine/ms7004.h +++ b/src/mame/machine/ms7004.h @@ -22,6 +22,9 @@ #define MCFG_MS7004_TX_HANDLER(_cb) \ devcb = &ms7004_device::set_tx_handler(*device, DEVCB_##_cb); +#define MCFG_MS7004_RTS_HANDLER(_cb) \ + devcb = &ms7004_device::set_rts_handler(*device, DEVCB_##_cb); + //************************************************************************** // TYPE DEFINITIONS @@ -36,12 +39,15 @@ public: ms7004_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); template static devcb_base &set_tx_handler(device_t &device, _Object wr) { return downcast(device).m_tx_handler.set_callback(wr); } + template static devcb_base &set_rts_handler(device_t &device, _Object wr) { return downcast(device).m_rts_handler.set_callback(wr); } DECLARE_WRITE8_MEMBER( p1_w ); DECLARE_WRITE8_MEMBER( p2_w ); DECLARE_READ8_MEMBER( t1_r ); DECLARE_WRITE8_MEMBER( i8243_port_w ); + DECLARE_WRITE_LINE_MEMBER( write_rxd ); + protected: // device-level overrides virtual machine_config_constructor device_mconfig_additions() const override; @@ -77,6 +83,7 @@ private: UINT8 m_p2; devcb_write_line m_tx_handler; + devcb_write_line m_rts_handler; }; // device type definition From 77e2e34f57e00792ac29fe0c3acda4ae1b534dea Mon Sep 17 00:00:00 2001 From: Sergey Svishchev Date: Mon, 18 Jul 2016 02:05:40 +0300 Subject: [PATCH 2/2] dvk_ksm: drop dvk_ksm01 variant and merge ROM sets; minor cleanup --- src/mame/drivers/dvk_ksm.cpp | 35 ++++++++++------------------------- src/mame/mame.lst | 1 - 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/src/mame/drivers/dvk_ksm.cpp b/src/mame/drivers/dvk_ksm.cpp index 60cfee34578..855be480138 100644 --- a/src/mame/drivers/dvk_ksm.cpp +++ b/src/mame/drivers/dvk_ksm.cpp @@ -11,7 +11,13 @@ Hardware revisions (XXX verify everything): - 7.102.076 -- has DIP switches, SRAM at 0x2000, model name "KSM" - - 7.102.228 -- no DIP switches, SRAM at 0x2100, model name "KSM-01" + - 7.102.228 -- no DIP switches, ?? SRAM at 0x2100, model name "KSM-01" + + Two sets of dumps exist: + - one puts SRAM at 0x2000, which is where technical manual puts it, + but chargen has 1 missing pixel in 'G' character. + - another puts SRAM at 0x2100, but has no missing pixel. + Merge them for now into one (SRAM at 0x2000 and no missing pixel). Emulates a VT52 without copier (ESC Z response is ESC / M), with Hold Screen mode and Graphics character set (but it is unique and @@ -49,7 +55,7 @@ ksm|DVK KSM, To do: - verify if pixel stretching is done by hw - verify details of hw revisions (memory map, DIP presence...) - - baud rate selection (missing feature in bitbanger) + - baud rate selection ****************************************************************************/ @@ -222,8 +228,7 @@ WRITE8_MEMBER(ksm_state::ksm_ppi_portc_w) WRITE_LINE_MEMBER(ksm_state::write_keyboard_clock) { -// KSM never sends data to keyboard -// m_i8251kbd->write_txc(state); + m_i8251kbd->write_txc(state); m_i8251kbd->write_rxc(state); } @@ -335,8 +340,7 @@ static MACHINE_CONFIG_START( ksm, ksm_state ) MCFG_CPU_IO_MAP(ksm_io) MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb) - MCFG_TIMER_DRIVER_ADD_PERIODIC("scantimer", ksm_state, scanline_callback, attotime::from_hz(50*28*11)) - MCFG_TIMER_START_DELAY(attotime::from_hz(XTAL_15_4MHz/KSM_HORZ_START)) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ksm_state, scanline_callback, "screen", 0, 1) MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green) MCFG_SCREEN_UPDATE_DRIVER(ksm_state, screen_update) @@ -383,29 +387,11 @@ static MACHINE_CONFIG_START( ksm, ksm_state ) MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(ksm_state, write_keyboard_clock)) MACHINE_CONFIG_END - -/* - Assumes that SRAM is at 0x2000, which is where technical manual puts it. - Chargen has 1 missing pixel in 'G' character. -*/ ROM_START( dvk_ksm ) ROM_REGION(0x1000, "maincpu", ROMREGION_ERASE00) ROM_LOAD( "ksm_04_rom0_d32.bin", 0x0000, 0x0800, CRC(6ad62715) SHA1(20f8f95119bc7fc6e0f16c67864e339a86edb44d)) ROM_LOAD( "ksm_05_rom1_d33.bin", 0x0800, 0x0800, CRC(5b29bcd2) SHA1(1f4f82c2f88f1e8615ec02076559dc606497e654)) - ROM_REGION(0x0800, "chargen", ROMREGION_ERASE00) - ROM_LOAD("ksm_03_cg_d31.bin", 0x0000, 0x0800, CRC(98853aa7) SHA1(09b8e1b5b10a00c0b0ae7e36ad1328113d31230a)) -ROM_END - -/* - Assumes that SRAM is at 0x2100, otherwise identical. - Chargen has no missing pixels in 'G' character. -*/ -ROM_START( dvk_ksm01 ) - ROM_REGION(0x1000, "maincpu", ROMREGION_ERASE00) - ROM_LOAD( "ksm_04_rom0_d32.bin", 0x0000, 0x0800, CRC(5276dc9a) SHA1(dd41dfb4cb3f1cf22d96d95f1ff6a27fe4eb9a38)) - ROM_LOAD( "ksm_05_rom1_d33.bin", 0x0800, 0x0800, CRC(5b29bcd2) SHA1(1f4f82c2f88f1e8615ec02076559dc606497e654)) - ROM_REGION(0x0800, "chargen", ROMREGION_ERASE00) ROM_LOAD("ksm_03_cg_d31.bin", 0x0000, 0x0800, CRC(6a8477e2) SHA1(c7871a96f135db05c3c8d718fbdf1728e22e72b7)) ROM_END @@ -414,4 +400,3 @@ ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ COMP( 1986, dvk_ksm, 0, 0, ksm, ksm, driver_device, 0, "USSR", "DVK KSM", 0) -COMP( 198?, dvk_ksm01,dvk_ksm,0, ksm, ksm, driver_device, 0, "USSR", "DVK KSM-01", 0) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index e3534e65d86..b82ddc9d18c 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -11178,7 +11178,6 @@ dvk_kcgd // @source:dvk_ksm.cpp dvk_ksm // -dvk_ksm01 // @source:dwarfd.cpp dwarfd // (c) 198? Electro-Sports