mkit09a : starts and runs, but mysteries remain.

This commit is contained in:
Robbbert 2019-10-10 22:26:18 +11:00
parent 3e58602c22
commit 50a643e062

View File

@ -26,6 +26,14 @@ Test Paste:
2015-10-02 Added alternate bios found on a forum. Memory map is different.
Still to fix keyboard and display. No documentation exists.
2019-10-10 Adjusted mkit09a to display and accept input. However it appears
to be some other 6809 trainer. Although it "works", the usage
is largely unknown, as are some of the keys. Cassette status
also unknown. There may be a device at E400-E407.
When R (regs) is pressed, you can press 0(CC),1(A),2(B),3(DP),
4,(IX),5(IY),6(U),7(PC),8(SP).
Some patches were needed due to bugs or bad dump?
****************************************************************************/
#include "emu.h"
@ -49,19 +57,17 @@ public:
, m_io_keyboard(*this, "X%u", 0)
{ }
void mkit09a(machine_config &config);
void mkit09(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(trigger_reset);
DECLARE_INPUT_CHANGED_MEMBER(trigger_nmi);
private:
protected:
DECLARE_READ8_MEMBER(pa_r);
DECLARE_READ8_MEMBER(pb_r);
DECLARE_WRITE8_MEMBER(pa_w);
DECLARE_WRITE8_MEMBER(pb_w);
void mkit09_mem(address_map &map);
void mkit09a_mem(address_map &map);
uint8_t m_keydata;
virtual void machine_reset() override;
@ -73,6 +79,20 @@ private:
required_ioport_array<4> m_io_keyboard;
};
class mkit09a_state : public mkit09_state
{
public:
mkit09a_state(const machine_config &mconfig, device_type type, const char *tag)
: mkit09_state(mconfig, type, tag)
{ }
void mkit09a(machine_config &config);
private:
DECLARE_WRITE8_MEMBER(pa_w);
void mkit09a_mem(address_map &map);
};
void mkit09_state::mkit09_mem(address_map &map)
{
@ -82,11 +102,11 @@ void mkit09_state::mkit09_mem(address_map &map)
map(0xe000, 0xe7ff).mirror(0x1800).rom().region("roms", 0);
}
void mkit09_state::mkit09a_mem(address_map &map)
void mkit09a_state::mkit09a_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x07ff).ram();
map(0xe600, 0xe603).rw(m_pia, FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt));
map(0xe600, 0xe603).rw(m_pia, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0xee00, 0xefff).ram();
map(0xf000, 0xffff).rom().region("roms", 0);
}
@ -138,6 +158,53 @@ static INPUT_PORTS_START( mkit09 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NMI") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mkit09_state, trigger_nmi, 0)
INPUT_PORTS_END
// ToDo: work out what the keys marked "??" do.
static INPUT_PORTS_START( mkit09a )
PORT_START("X0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1')
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2')
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3')
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Inc") PORT_CODE(KEYCODE_UP) PORT_CHAR('^')
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Dec") PORT_CODE(KEYCODE_DOWN) PORT_CHAR('V')
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) PORT_CHAR('-')
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("X1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4')
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5')
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("L") PORT_CODE(KEYCODE_L) // ??
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P) // ??
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("X2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9')
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("cnt") PORT_CODE(KEYCODE_W) // ??
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ofs") PORT_CODE(KEYCODE_O) // ?? (same as G?)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("BP") PORT_CODE(KEYCODE_Q) // ?? (same as X?)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("X3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("REG") PORT_CODE(KEYCODE_R) PORT_CHAR('R')
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("GO") PORT_CODE(KEYCODE_G) PORT_CHAR('X')
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X) // ??
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SPECIAL")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RST") PORT_CODE(KEYCODE_ESC) PORT_CHANGED_MEMBER(DEVICE_SELF, mkit09_state, trigger_reset, 0)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("NMI") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mkit09_state, trigger_nmi, 0)
INPUT_PORTS_END
INPUT_CHANGED_MEMBER( mkit09_state::trigger_reset )
{
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? CLEAR_LINE : ASSERT_LINE);
@ -183,6 +250,18 @@ WRITE8_MEMBER( mkit09_state::pa_w )
return;
}
WRITE8_MEMBER( mkit09a_state::pa_w )
{
if (m_keydata > 3)
{
if (m_keydata < 10)
m_digits[13-m_keydata] = data;
m_keydata = 0;
}
return;
}
// write cassette, select keyboard row, select a digit
WRITE8_MEMBER( mkit09_state::pb_w )
{
@ -218,11 +297,11 @@ void mkit09_state::mkit09(machine_config &config)
m_cass->add_route(ALL_OUTPUTS, "mono", 0.05);
}
void mkit09_state::mkit09a(machine_config &config)
void mkit09a_state::mkit09a(machine_config &config)
{
/* basic machine hardware */
MC6809(config, m_maincpu, XTAL(4'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &mkit09_state::mkit09a_mem);
m_maincpu->set_addrmap(AS_PROGRAM, &mkit09a_state::mkit09a_mem);
/* video hardware */
config.set_default_layout(layout_mkit09);
@ -232,10 +311,11 @@ void mkit09_state::mkit09a(machine_config &config)
/* Devices */
PIA6821(config, m_pia, 0);
m_pia->readpa_handler().set(FUNC(mkit09_state::pa_r));
m_pia->readpb_handler().set(FUNC(mkit09_state::pb_r));
m_pia->writepa_handler().set(FUNC(mkit09_state::pa_w));
m_pia->writepb_handler().set(FUNC(mkit09_state::pb_w));
m_pia->readpa_handler().set(FUNC(mkit09a_state::pa_r));
m_pia->readpb_handler().set(FUNC(mkit09a_state::pb_r));
m_pia->writepa_handler().set(FUNC(mkit09a_state::pa_w));
m_pia->writepb_handler().set(FUNC(mkit09a_state::pb_w));
m_pia->cb2_handler().set([] (bool state) { }); // stop errorlog filling up - is it a keyclick?
m_pia->irqa_handler().set_inputline("maincpu", M6809_IRQ_LINE);
m_pia->irqb_handler().set_inputline("maincpu", M6809_IRQ_LINE);
@ -252,10 +332,13 @@ ROM_END
ROM_START( mkit09a )
ROM_REGION( 0x1000, "roms", 0 )
ROM_LOAD( "ukit09like.bin", 0x0000, 0x1000, CRC(2cdb6a84) SHA1(edfc1dfc954bdba80c3df64abf4d7553343c1fae) )
ROM_FILL(0x1d8,1,0x03) // fix data display
ROM_FILL(0x99b,1,0x06) // fix start address
ROM_FILL(0x99c,1,0x63) // ... so that MEM starts at 0000 instead of F908.
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1983, mkit09, 0, 0, mkit09, mkit09, mkit09_state, empty_init, "Multitech", "Microkit09", MACHINE_NO_SOUND_HW )
COMP( 1983, mkit09a, mkit09, 0, mkit09a, mkit09, mkit09_state, empty_init, "Multitech", "Microkit09 (Alt version)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1983, mkit09, 0, 0, mkit09, mkit09, mkit09_state, empty_init, "Multitech", "Microkit09", MACHINE_NO_SOUND_HW )
COMP( 1983, mkit09a, mkit09, 0, mkit09a, mkit09a, mkit09a_state, empty_init, "Multitech", "Microkit09 (Alt version)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )