Merge pull request #1212 from shattered/_c107959

dvk_ksm: drop dvk_ksm01 variant and merge ROM sets; enable tx to its keyboard
This commit is contained in:
R. Belmont 2016-08-09 14:17:17 -04:00 committed by GitHub
commit 9b875c8074
4 changed files with 35 additions and 36 deletions

View File

@ -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)

View File

@ -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));
}
}

View File

@ -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<class _Object> static devcb_base &set_tx_handler(device_t &device, _Object wr) { return downcast<ms7004_device &>(device).m_tx_handler.set_callback(wr); }
template<class _Object> static devcb_base &set_rts_handler(device_t &device, _Object wr) { return downcast<ms7004_device &>(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

View File

@ -11178,7 +11178,6 @@ dvk_kcgd //
@source:dvk_ksm.cpp
dvk_ksm //
dvk_ksm01 //
@source:dwarfd.cpp
dwarfd // (c) 198? Electro-Sports