mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
apple2e.cpp: added F1-F12 keys to the Franklin ACE 500 and 2200. [R. Belmont, Joshua Bell]
This commit is contained in:
parent
0fab97a476
commit
f4293f9da4
@ -215,6 +215,7 @@ public:
|
||||
m_kbdrom(*this, "keyboard"),
|
||||
m_kbspecial(*this, "keyb_special"),
|
||||
m_sysconfig(*this, "a2_config"),
|
||||
m_franklin_fkeys(*this, "franklin_fkeys"),
|
||||
m_speaker(*this, A2_SPEAKER_TAG),
|
||||
m_cassette(*this, A2_CASSETTE_TAG),
|
||||
m_upperbank(*this, A2_UPPERBANK_TAG),
|
||||
@ -270,6 +271,7 @@ public:
|
||||
optional_memory_region m_kbdrom;
|
||||
required_ioport m_kbspecial;
|
||||
required_ioport m_sysconfig;
|
||||
optional_ioport m_franklin_fkeys;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
optional_device<cassette_image_device> m_cassette;
|
||||
memory_view m_upperbank, m_0000bank, m_0200bank, m_0400bank;
|
||||
@ -421,7 +423,8 @@ private:
|
||||
|
||||
double m_joystick_x1_time, m_joystick_y1_time, m_joystick_x2_time, m_joystick_y2_time;
|
||||
|
||||
u16 m_lastchar, m_strobe;
|
||||
u32 m_franklin_last_fkeys;
|
||||
u16 m_lastchar, m_strobe, m_franklin_strobe;
|
||||
u8 m_transchar;
|
||||
bool m_anykeydown;
|
||||
int m_repeatdelay;
|
||||
@ -553,13 +556,13 @@ u8 apple2e_state::mig_r(u16 offset)
|
||||
// MIG RAM window
|
||||
if ((offset >= 0x200) && (offset < 0x220))
|
||||
{
|
||||
return m_migram[m_migpage + offset];
|
||||
return m_migram[m_migpage + (offset & 0x1f)];
|
||||
}
|
||||
|
||||
// increment MIG RAM window and return previous value
|
||||
if ((offset >= 0x220) && (offset < 0x240))
|
||||
{
|
||||
u8 rv = m_migram[m_migpage + offset];
|
||||
u8 rv = m_migram[m_migpage + (offset & 0x1f)];
|
||||
m_migpage += 0x20;
|
||||
m_migpage &= 0x7ff;
|
||||
return rv;
|
||||
@ -621,14 +624,14 @@ void apple2e_state::mig_w(u16 offset, u8 data)
|
||||
// MIG RAM window
|
||||
if ((offset >= 0x200) && (offset < 0x220))
|
||||
{
|
||||
m_migram[m_migpage + offset] = data;
|
||||
m_migram[m_migpage + (offset & 0x1f)] = data;
|
||||
return;
|
||||
}
|
||||
|
||||
// increment MIG RAM window, but write value at old location first
|
||||
if ((offset >= 0x220) && (offset < 0x240))
|
||||
{
|
||||
m_migram[m_migpage + offset] = data;
|
||||
m_migram[m_migpage + (offset & 0x1f)] = data;
|
||||
m_migpage += 0x20;
|
||||
m_migpage &= 0x7ff; // make sure we wrap
|
||||
return;
|
||||
@ -1051,6 +1054,8 @@ void apple2e_state::machine_start()
|
||||
save_item(NAME(m_joystick_y2_time));
|
||||
save_item(NAME(m_lastchar));
|
||||
save_item(NAME(m_strobe));
|
||||
save_item(NAME(m_franklin_last_fkeys));
|
||||
save_item(NAME(m_franklin_strobe));
|
||||
save_item(NAME(m_transchar));
|
||||
save_item(NAME(m_inh_slot));
|
||||
save_item(NAME(m_inh_bank));
|
||||
@ -1137,6 +1142,8 @@ void apple2e_state::machine_reset()
|
||||
m_romswitch = false;
|
||||
m_irqmask = 0;
|
||||
m_strobe = 0;
|
||||
m_franklin_last_fkeys = 0;
|
||||
m_franklin_strobe = 0x80;
|
||||
m_transchar = 0;
|
||||
m_anykeydown = false;
|
||||
m_repeatdelay = 10;
|
||||
@ -1328,6 +1335,20 @@ TIMER_DEVICE_CALLBACK_MEMBER(apple2e_state::apple2_interrupt)
|
||||
}
|
||||
update_slotrom_banks();
|
||||
}
|
||||
|
||||
// check Franklin F-keys
|
||||
if ((m_isace500) || (m_isace2200))
|
||||
{
|
||||
const u32 uFkeys = m_franklin_fkeys->read();
|
||||
|
||||
if (uFkeys ^ m_franklin_last_fkeys)
|
||||
{
|
||||
m_transchar = count_leading_zeros_32(uFkeys) + 0x20;
|
||||
m_strobe = 0x80;
|
||||
m_franklin_strobe = 0;
|
||||
m_franklin_last_fkeys = uFkeys;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2016,6 +2037,16 @@ u8 apple2e_state::c000_r(offs_t offset)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x27: // Ace 2x00 F key strobe
|
||||
if (m_isace2200)
|
||||
{
|
||||
m_strobe = 0;
|
||||
const u8 rv = m_franklin_strobe;
|
||||
m_franklin_strobe = 0x80;
|
||||
return rv;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x60: // cassette in
|
||||
case 0x68:
|
||||
if (m_cassette)
|
||||
@ -3145,7 +3176,13 @@ u8 apple2e_state::ace500_c0bx_r(offs_t offset)
|
||||
|
||||
// Alt key status (0=pressed). Reads as pressed for function keys.
|
||||
case 0x4:
|
||||
return 0xff;
|
||||
{
|
||||
m_strobe = 0;
|
||||
const u8 rv = m_franklin_strobe;
|
||||
m_franklin_strobe = 0x80;
|
||||
return rv;
|
||||
}
|
||||
break;
|
||||
|
||||
// Used by the IRQ handler. Appears to return altzp status in bit 7, same as $C016.
|
||||
case 0xc:
|
||||
@ -4462,6 +4499,20 @@ static INPUT_PORTS_START( ace500 )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Solid F") PORT_CODE(KEYCODE_RALT)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RESET") PORT_CODE(KEYCODE_F12)
|
||||
|
||||
PORT_START("franklin_fkeys")
|
||||
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
|
||||
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
|
||||
PORT_BIT(0x20000000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
|
||||
PORT_BIT(0x10000000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
|
||||
PORT_BIT(0x08000000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
|
||||
PORT_BIT(0x04000000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
|
||||
PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
|
||||
PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
|
||||
PORT_BIT(0x00800000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
|
||||
PORT_BIT(0x00400000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))
|
||||
PORT_BIT(0x00200000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11))
|
||||
PORT_BIT(0x00100000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12))
|
||||
|
||||
PORT_START(MOUSE_BUTTON_TAG) /* Mouse - button */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Mouse Button") PORT_CODE(MOUSECODE_BUTTON1)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user