mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
bml3: adjusted keyboard, fixes Insect Hunter.
This commit is contained in:
parent
269b62055e
commit
3c655c7113
@ -76,7 +76,7 @@ Compaibility flags:
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="insecth" supported="partial"><!-- keyboard sometimes not working -->
|
||||
<software name="insecth">
|
||||
<description>Insect Hunter</description>
|
||||
<year>1986</year>
|
||||
<publisher><unknown></publisher>
|
||||
|
@ -10,7 +10,6 @@
|
||||
- implement sound as a bml3bus slot device
|
||||
- account for hardware differences between MB-6890, MB-6891 and MB-6892
|
||||
(e.g. custom font support on the MB-6892)
|
||||
- MP1805 fdc crashes if a disk is inserted.
|
||||
|
||||
**************************************************************************************/
|
||||
|
||||
@ -65,7 +64,7 @@
|
||||
// D80_CLOCK / 105.0 // 153600 Hz
|
||||
|
||||
// Frequencies for cassette mode:
|
||||
// / 13440 //1200
|
||||
// / 13440 // 1200
|
||||
// / 6720 // 2400
|
||||
// / 3360 // 4800
|
||||
// / 1680 // 9600
|
||||
@ -90,6 +89,7 @@ public:
|
||||
, m_banke(*this, "banke")
|
||||
, m_bankf(*this, "bankf")
|
||||
, m_bankg(*this, "bankg")
|
||||
, m_io_keyboard(*this, "X%u", 0U)
|
||||
{ }
|
||||
|
||||
void bml3mk2(machine_config &config);
|
||||
@ -126,7 +126,6 @@ private:
|
||||
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
|
||||
// INTERRUPT_GEN_MEMBER(irq);
|
||||
INTERRUPT_GEN_MEMBER(timer_firq);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(kansas_r);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(kansas_w);
|
||||
@ -139,11 +138,12 @@ private:
|
||||
u8 m_psg_latch;
|
||||
u8 m_attr_latch;
|
||||
u8 m_vres_reg;
|
||||
bool m_keyb_interrupt_disabled;
|
||||
bool m_keyb_interrupt_enabled;
|
||||
bool m_keyb_nmi_disabled; // not used yet
|
||||
bool m_keyb_counter_operation_disabled;
|
||||
u8 m_keyb_empty_scan;
|
||||
u8 m_keyb_scancode;
|
||||
u16 m_kbt = 0;
|
||||
bool m_keyb_capslock_led_on;
|
||||
bool m_keyb_hiragana_led_on;
|
||||
bool m_keyb_katakana_led_on;
|
||||
@ -174,6 +174,7 @@ private:
|
||||
required_memory_bank m_banke;
|
||||
required_memory_bank m_bankf;
|
||||
required_memory_bank m_bankg;
|
||||
required_ioport_array<4> m_io_keyboard;
|
||||
};
|
||||
|
||||
u8 bml3_state::mc6845_r(offs_t offset)
|
||||
@ -200,6 +201,7 @@ void bml3_state::mc6845_w(offs_t offset, u8 data)
|
||||
|
||||
u8 bml3_state::keyboard_r()
|
||||
{
|
||||
m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
|
||||
u8 ret = m_keyb_scancode;
|
||||
if (!machine().side_effects_disabled())
|
||||
m_keyb_scancode &= 0x7f;
|
||||
@ -212,7 +214,7 @@ void bml3_state::keyboard_w(u8 data)
|
||||
m_keyb_hiragana_led_on = BIT(data, 1);
|
||||
m_keyb_capslock_led_on = BIT(data, 2);
|
||||
m_keyb_counter_operation_disabled = BIT(data, 3);
|
||||
m_keyb_interrupt_disabled = !BIT(data, 6);
|
||||
m_keyb_interrupt_enabled = BIT(data, 6);
|
||||
m_keyb_nmi_disabled = !BIT(data, 7);
|
||||
}
|
||||
|
||||
@ -471,7 +473,7 @@ static INPUT_PORTS_START( bml3 )
|
||||
PORT_DIPSETTING( 0x0002, "60 kiB (32 kiB + 28 kiB)" )
|
||||
*/
|
||||
|
||||
PORT_START("key1") //0x00-0x1f
|
||||
PORT_START("X0") //0x00-0x1f
|
||||
PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
|
||||
PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("? PAD")
|
||||
@ -505,7 +507,7 @@ static INPUT_PORTS_START( bml3 )
|
||||
PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Delete PAD") //backspace
|
||||
PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("\xC2\xA5") PORT_CODE(KEYCODE_TAB) // yen sign
|
||||
|
||||
PORT_START("key2") //0x20-0x3f
|
||||
PORT_START("X1") //0x20-0x3f
|
||||
PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u')
|
||||
PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r')
|
||||
PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y')
|
||||
@ -539,7 +541,7 @@ static INPUT_PORTS_START( bml3 )
|
||||
PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("6 PAD") PORT_CODE(KEYCODE_6_PAD)
|
||||
PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("- PAD") PORT_CODE(KEYCODE_MINUS_PAD)
|
||||
|
||||
PORT_START("key3") //0x40-0x5f
|
||||
PORT_START("X2") //0x40-0x5f
|
||||
PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m')
|
||||
PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v')
|
||||
PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n')
|
||||
@ -563,7 +565,7 @@ static INPUT_PORTS_START( bml3 )
|
||||
PORT_BIT(0x00100000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("PF5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_CHAR(UCHAR_MAMEKEY(F10))
|
||||
PORT_BIT(0xffe00000,IP_ACTIVE_HIGH,IPT_UNKNOWN)
|
||||
|
||||
PORT_START("key4")
|
||||
PORT_START("X3")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) PORT_CHANGED_MEMBER(DEVICE_SELF, bml3_state, nmi_button, 0)
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -660,8 +662,6 @@ MC6845_UPDATE_ROW( bml3_state::crtc_update_row )
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(bml3_state::keyboard_callback)
|
||||
{
|
||||
static const char *const portnames[3] = { "key1","key2","key3" };
|
||||
int i,port_i;
|
||||
bool trigger = false;
|
||||
|
||||
if(!BIT(m_keyb_scancode, 7))
|
||||
@ -684,9 +684,9 @@ TIMER_DEVICE_CALLBACK_MEMBER(bml3_state::keyboard_callback)
|
||||
}
|
||||
else if (m_keyb_scancode < 32*3)
|
||||
{
|
||||
port_i = m_keyb_scancode / 32;
|
||||
i = m_keyb_scancode % 32;
|
||||
if((ioport(portnames[port_i])->read()>>i) & 1)
|
||||
u8 port_i = m_keyb_scancode / 32;
|
||||
u8 i = m_keyb_scancode % 32;
|
||||
if(BIT(m_io_keyboard[port_i]->read(),i))
|
||||
{
|
||||
m_keyb_empty_scan = 2;
|
||||
trigger = true;
|
||||
@ -694,16 +694,18 @@ TIMER_DEVICE_CALLBACK_MEMBER(bml3_state::keyboard_callback)
|
||||
}
|
||||
if (trigger)
|
||||
{
|
||||
m_kbt = 0xfff;
|
||||
m_keyb_scancode |= 0x80;
|
||||
if (!m_keyb_interrupt_disabled)
|
||||
if (m_keyb_interrupt_enabled)
|
||||
m_maincpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
|
||||
}
|
||||
/* Don't need this apparently...
|
||||
else
|
||||
{
|
||||
m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
|
||||
}
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_kbt > 0)
|
||||
m_kbt--;
|
||||
if (m_kbt == 1)
|
||||
m_keyb_scancode &= 0x7f;
|
||||
}
|
||||
}
|
||||
|
||||
@ -753,7 +755,7 @@ void bml3_state::machine_start()
|
||||
save_item(NAME(m_psg_latch));
|
||||
save_item(NAME(m_attr_latch));
|
||||
save_item(NAME(m_vres_reg));
|
||||
save_item(NAME(m_keyb_interrupt_disabled));
|
||||
save_item(NAME(m_keyb_interrupt_enabled));
|
||||
save_item(NAME(m_keyb_nmi_disabled));
|
||||
save_item(NAME(m_keyb_counter_operation_disabled));
|
||||
save_item(NAME(m_keyb_empty_scan));
|
||||
@ -761,6 +763,7 @@ void bml3_state::machine_start()
|
||||
save_item(NAME(m_keyb_capslock_led_on));
|
||||
save_item(NAME(m_keyb_hiragana_led_on));
|
||||
save_item(NAME(m_keyb_katakana_led_on));
|
||||
save_item(NAME(m_kbt));
|
||||
save_item(NAME(m_cassbit));
|
||||
save_item(NAME(m_cassold));
|
||||
save_item(NAME(m_cass_data));
|
||||
@ -796,7 +799,7 @@ void bml3_state::machine_reset()
|
||||
m_psg_latch = 0;
|
||||
m_attr_latch = 0;
|
||||
m_vres_reg = 0;
|
||||
m_keyb_interrupt_disabled = 0;
|
||||
m_keyb_interrupt_enabled = 0;
|
||||
m_keyb_nmi_disabled = 0;
|
||||
m_keyb_counter_operation_disabled = 0;
|
||||
m_keyb_empty_scan = 0;
|
||||
@ -809,6 +812,7 @@ void bml3_state::machine_reset()
|
||||
m_cassbit = 0;
|
||||
m_cassold = 0;
|
||||
m_nmi = 0;
|
||||
m_kbt = 0;
|
||||
}
|
||||
|
||||
void bml3_state::piaA_w(uint8_t data)
|
||||
|
Loading…
Reference in New Issue
Block a user