mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
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:
commit
9b875c8074
@ -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)
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -11178,7 +11178,6 @@ dvk_kcgd //
|
||||
|
||||
@source:dvk_ksm.cpp
|
||||
dvk_ksm //
|
||||
dvk_ksm01 //
|
||||
|
||||
@source:dwarfd.cpp
|
||||
dwarfd // (c) 198? Electro-Sports
|
||||
|
Loading…
Reference in New Issue
Block a user