kb3600: converted to devcb2 (nw)

This commit is contained in:
R. Belmont 2014-02-13 02:33:58 +00:00
parent 6a57b2c85a
commit a36d4c6609
6 changed files with 195 additions and 234 deletions

View File

@ -406,8 +406,8 @@ static INPUT_PORTS_START( apple2_common )
PORT_START("X0")
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
@ -881,40 +881,6 @@ static SLOT_INTERFACE_START(apple2eaux_cards)
SLOT_INTERFACE("rw3", A2EAUX_RAMWORKS3) /* Applied Engineering RamWorks III */
SLOT_INTERFACE_END
static AY3600_INTERFACE( ay3600_intf )
{
DEVCB_INPUT_PORT("X0"),
DEVCB_INPUT_PORT("X1"),
DEVCB_INPUT_PORT("X2"),
DEVCB_INPUT_PORT("X3"),
DEVCB_INPUT_PORT("X4"),
DEVCB_INPUT_PORT("X5"),
DEVCB_INPUT_PORT("X6"),
DEVCB_INPUT_PORT("X7"),
DEVCB_INPUT_PORT("X8"),
DEVCB_DRIVER_LINE_MEMBER(apple2_state, ay3600_shift_r),
DEVCB_DRIVER_LINE_MEMBER(apple2_state, ay3600_control_r),
DEVCB_DRIVER_LINE_MEMBER(apple2_state, ay3600_data_ready_w),
DEVCB_NULL
};
static AY3600_INTERFACE( ay3600_iie_intf )
{
DEVCB_INPUT_PORT("X0"),
DEVCB_INPUT_PORT("X1"),
DEVCB_INPUT_PORT("X2"),
DEVCB_INPUT_PORT("X3"),
DEVCB_INPUT_PORT("X4"),
DEVCB_INPUT_PORT("X5"),
DEVCB_INPUT_PORT("X6"),
DEVCB_INPUT_PORT("X7"),
DEVCB_INPUT_PORT("X8"),
DEVCB_DRIVER_LINE_MEMBER(apple2_state, ay3600_shift_r),
DEVCB_DRIVER_LINE_MEMBER(apple2_state, ay3600_control_r),
DEVCB_DRIVER_LINE_MEMBER(apple2_state, ay3600_iie_data_ready_w),
DEVCB_NULL
};
static MACHINE_CONFIG_START( apple2_common, apple2_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6502, 1021800) /* close to actual CPU frequency of 1.020484 MHz */
@ -942,7 +908,19 @@ static MACHINE_CONFIG_START( apple2_common, apple2_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
/* keyboard controller */
MCFG_AY3600_ADD("ay3600", 0, ay3600_intf)
MCFG_DEVICE_ADD("ay3600", AY3600, 0)
MCFG_AY3600_MATRIX_X0(IOPORT("X0"))
MCFG_AY3600_MATRIX_X1(IOPORT("X1"))
MCFG_AY3600_MATRIX_X2(IOPORT("X2"))
MCFG_AY3600_MATRIX_X3(IOPORT("X3"))
MCFG_AY3600_MATRIX_X4(IOPORT("X4"))
MCFG_AY3600_MATRIX_X5(IOPORT("X5"))
MCFG_AY3600_MATRIX_X6(IOPORT("X6"))
MCFG_AY3600_MATRIX_X7(IOPORT("X7"))
MCFG_AY3600_MATRIX_X8(IOPORT("X8"))
MCFG_AY3600_SHIFT_CB(READLINE(apple2_state, ay3600_shift_r))
MCFG_AY3600_CONTROL_CB(READLINE(apple2_state, ay3600_control_r))
MCFG_AY3600_DATA_READY_CB(WRITELINE(apple2_state, ay3600_data_ready_w))
/* slot devices */
MCFG_A2BUS_BUS_ADD("a2bus", "maincpu", a2bus_intf)
@ -998,8 +976,8 @@ static MACHINE_CONFIG_DERIVED( apple2e, apple2_common )
MCFG_CASSETTE_ADD( "cassette", apple2_cassette_interface )
/* keyboard controller */
MCFG_DEVICE_REMOVE("ay3600")
MCFG_AY3600_ADD("ay3600", 0, ay3600_iie_intf)
MCFG_DEVICE_MODIFY("ay3600")
MCFG_AY3600_DATA_READY_CB(WRITELINE(apple2_state, ay3600_iie_data_ready_w))
// IIe and later have no physical slot 0, the "language card" is built into the motherboard
MCFG_A2BUS_SLOT_REMOVE("sl0")

View File

@ -319,23 +319,6 @@ static SLOT_INTERFACE_START(apple2_cards)
SLOT_INTERFACE("hsscsi", A2BUS_HSSCSI) /* Apple II High-Speed SCSI Card */
SLOT_INTERFACE_END
static AY3600_INTERFACE( ay3600_iie_intf )
{
DEVCB_INPUT_PORT("X0"),
DEVCB_INPUT_PORT("X1"),
DEVCB_INPUT_PORT("X2"),
DEVCB_INPUT_PORT("X3"),
DEVCB_INPUT_PORT("X4"),
DEVCB_INPUT_PORT("X5"),
DEVCB_INPUT_PORT("X6"),
DEVCB_INPUT_PORT("X7"),
DEVCB_INPUT_PORT("X8"),
DEVCB_DRIVER_LINE_MEMBER(apple2_state, ay3600_shift_r),
DEVCB_DRIVER_LINE_MEMBER(apple2_state, ay3600_control_r),
DEVCB_DRIVER_LINE_MEMBER(apple2_state, ay3600_iie_data_ready_w),
DEVCB_NULL
};
static MACHINE_CONFIG_START( apple2gs, apple2gs_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", G65816, APPLE2GS_14M/5)
@ -371,7 +354,19 @@ static MACHINE_CONFIG_START( apple2gs, apple2gs_state )
MCFG_VIDEO_START_OVERRIDE(apple2gs_state, apple2gs )
/* keyboard controller */
MCFG_AY3600_ADD("ay3600", 0, ay3600_iie_intf)
MCFG_DEVICE_ADD("ay3600", AY3600, 0)
MCFG_AY3600_MATRIX_X0(IOPORT("X0"))
MCFG_AY3600_MATRIX_X1(IOPORT("X1"))
MCFG_AY3600_MATRIX_X2(IOPORT("X2"))
MCFG_AY3600_MATRIX_X3(IOPORT("X3"))
MCFG_AY3600_MATRIX_X4(IOPORT("X4"))
MCFG_AY3600_MATRIX_X5(IOPORT("X5"))
MCFG_AY3600_MATRIX_X6(IOPORT("X6"))
MCFG_AY3600_MATRIX_X7(IOPORT("X7"))
MCFG_AY3600_MATRIX_X8(IOPORT("X8"))
MCFG_AY3600_SHIFT_CB(READLINE(apple2_state, ay3600_shift_r))
MCFG_AY3600_CONTROL_CB(READLINE(apple2_state, ay3600_control_r))
MCFG_AY3600_DATA_READY_CB(WRITELINE(apple2_state, ay3600_iie_data_ready_w))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")

View File

@ -47,23 +47,6 @@ static const struct a2bus_interface a2bus_intf =
DEVCB_NULL
};
static AY3600_INTERFACE( ay3600_intf )
{
DEVCB_INPUT_PORT("X0"),
DEVCB_INPUT_PORT("X1"),
DEVCB_INPUT_PORT("X2"),
DEVCB_INPUT_PORT("X3"),
DEVCB_INPUT_PORT("X4"),
DEVCB_INPUT_PORT("X5"),
DEVCB_INPUT_PORT("X6"),
DEVCB_INPUT_PORT("X7"),
DEVCB_INPUT_PORT("X8"),
DEVCB_DRIVER_LINE_MEMBER(apple3_state, ay3600_shift_r),
DEVCB_DRIVER_LINE_MEMBER(apple3_state, ay3600_control_r),
DEVCB_DRIVER_LINE_MEMBER(apple3_state, ay3600_data_ready_w),
DEVCB_NULL
};
static MACHINE_CONFIG_START( apple3, apple3_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6502, 2000000) /* 2 MHz */
@ -89,7 +72,19 @@ static MACHINE_CONFIG_START( apple3, apple3_state )
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", apple3_state, apple3_interrupt, "screen", 0, 1)
/* keyboard controller */
MCFG_AY3600_ADD("ay3600", 0, ay3600_intf)
MCFG_DEVICE_ADD("ay3600", AY3600, 0)
MCFG_AY3600_MATRIX_X0(IOPORT("X0"))
MCFG_AY3600_MATRIX_X1(IOPORT("X1"))
MCFG_AY3600_MATRIX_X2(IOPORT("X2"))
MCFG_AY3600_MATRIX_X3(IOPORT("X3"))
MCFG_AY3600_MATRIX_X4(IOPORT("X4"))
MCFG_AY3600_MATRIX_X5(IOPORT("X5"))
MCFG_AY3600_MATRIX_X6(IOPORT("X6"))
MCFG_AY3600_MATRIX_X7(IOPORT("X7"))
MCFG_AY3600_MATRIX_X8(IOPORT("X8"))
MCFG_AY3600_SHIFT_CB(READLINE(apple3_state, ay3600_shift_r))
MCFG_AY3600_CONTROL_CB(READLINE(apple3_state, ay3600_control_r))
MCFG_AY3600_DATA_READY_CB(WRITELINE(apple3_state, ay3600_data_ready_w))
/* slot bus */
MCFG_A2BUS_BUS_ADD("a2bus", "maincpu", a2bus_intf)
@ -175,52 +170,52 @@ static INPUT_PORTS_START( apple3 )
0x37 0x35 0x33 0x101 0x3f 0x3d 0x108 0x100 0x3e
*/
PORT_START("X0")
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_START("X1")
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q')
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w')
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e')
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r')
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t')
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y')
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u')
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i')
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o')
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q')
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w')
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e')
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r')
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t')
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y')
PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u')
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i')
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o')
PORT_START("X2")
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a')
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s')
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d')
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f')
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h')
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g')
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j')
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k')
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l')
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a')
PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s')
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d')
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f')
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h')
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g')
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j')
PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k')
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l')
PORT_START("X3")
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z')
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x')
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c')
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v')
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b')
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n')
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m')
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z')
PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x')
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c')
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v')
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b')
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n')
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m')
PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_START("X4")
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_UNUSED)
@ -283,13 +278,13 @@ static INPUT_PORTS_START( apple3 )
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("keyb_special")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Control") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Open Apple") PORT_CODE(KEYCODE_LALT)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Solid Apple") PORT_CODE(KEYCODE_RALT)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RESET") PORT_CODE(KEYCODE_F12)
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Control") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Open Apple") PORT_CODE(KEYCODE_LALT)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Solid Apple") PORT_CODE(KEYCODE_RALT)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RESET") PORT_CODE(KEYCODE_F12)
INPUT_PORTS_END
ROM_START(apple3)

View File

@ -526,23 +526,6 @@ WRITE_LINE_MEMBER( bw12_state::ay3600_data_ready_w )
}
}
static AY3600_INTERFACE( bw12_ay3600_intf )
{
DEVCB_INPUT_PORT("X0"),
DEVCB_INPUT_PORT("X1"),
DEVCB_INPUT_PORT("X2"),
DEVCB_INPUT_PORT("X3"),
DEVCB_INPUT_PORT("X4"),
DEVCB_INPUT_PORT("X5"),
DEVCB_INPUT_PORT("X6"),
DEVCB_INPUT_PORT("X7"),
DEVCB_INPUT_PORT("X8"),
DEVCB_DRIVER_LINE_MEMBER(bw12_state, ay3600_shift_r),
DEVCB_DRIVER_LINE_MEMBER(bw12_state, ay3600_control_r),
DEVCB_DRIVER_LINE_MEMBER(bw12_state, ay3600_data_ready_w),
DEVCB_NULL
};
/* Machine Initialization */
void bw12_state::machine_start()
@ -647,7 +630,19 @@ static MACHINE_CONFIG_START( common, bw12_state )
MCFG_Z80SIO0_ADD(Z80SIO_TAG, XTAL_16MHz/4, sio_intf)
MCFG_PIT8253_ADD(PIT8253_TAG, pit_intf)
MCFG_AY3600_ADD(AY3600PRO002_TAG, 0, bw12_ay3600_intf)
MCFG_DEVICE_ADD(AY3600PRO002_TAG, AY3600, 0)
MCFG_AY3600_MATRIX_X0(IOPORT("X0"))
MCFG_AY3600_MATRIX_X1(IOPORT("X1"))
MCFG_AY3600_MATRIX_X2(IOPORT("X2"))
MCFG_AY3600_MATRIX_X3(IOPORT("X3"))
MCFG_AY3600_MATRIX_X4(IOPORT("X4"))
MCFG_AY3600_MATRIX_X5(IOPORT("X5"))
MCFG_AY3600_MATRIX_X6(IOPORT("X6"))
MCFG_AY3600_MATRIX_X7(IOPORT("X7"))
MCFG_AY3600_MATRIX_X8(IOPORT("X8"))
MCFG_AY3600_SHIFT_CB(READLINE(bw12_state, ay3600_shift_r))
MCFG_AY3600_CONTROL_CB(READLINE(bw12_state, ay3600_control_r))
MCFG_AY3600_DATA_READY_CB(WRITELINE(bw12_state, ay3600_data_ready_w))
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxa_w))

View File

@ -35,37 +35,6 @@
// devices
const device_type AY3600 = &device_creator<ay3600_device>;
//**************************************************************************
// DEVICE CONFIGURATION
//**************************************************************************
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
void ay3600_device::device_config_complete()
{
// inherit a copy of the static data
const ay3600_interface *intf = reinterpret_cast<const ay3600_interface *>(static_config());
if (intf != NULL)
*static_cast<ay3600_interface *>(this) = *intf;
// or initialize to defaults if none provided
else
{
memset(&m_in_shift_cb, 0, sizeof(m_in_shift_cb));
memset(&m_in_control_cb, 0, sizeof(m_in_control_cb));
memset(&m_out_data_ready_cb, 0, sizeof(m_out_data_ready_cb));
memset(&m_out_ako_cb, 0, sizeof(m_out_ako_cb));
}
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@ -75,7 +44,20 @@ void ay3600_device::device_config_complete()
//-------------------------------------------------
ay3600_device::ay3600_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, AY3600, "AY-5-3600", tag, owner, clock, "ay3600", __FILE__)
: device_t(mconfig, AY3600, "AY-5-3600", tag, owner, clock, "ay3600", __FILE__),
m_read_x0(*this),
m_read_x1(*this),
m_read_x2(*this),
m_read_x3(*this),
m_read_x4(*this),
m_read_x5(*this),
m_read_x6(*this),
m_read_x7(*this),
m_read_x8(*this),
m_read_shift(*this),
m_read_control(*this),
m_write_data_ready(*this),
m_write_ako(*this)
{
}
@ -86,19 +68,19 @@ ay3600_device::ay3600_device(const machine_config &mconfig, const char *tag, dev
void ay3600_device::device_start()
{
// resolve callbacks
m_in_x_func[0].resolve(m_in_x0_cb, *this);
m_in_x_func[1].resolve(m_in_x1_cb, *this);
m_in_x_func[2].resolve(m_in_x2_cb, *this);
m_in_x_func[3].resolve(m_in_x3_cb, *this);
m_in_x_func[4].resolve(m_in_x4_cb, *this);
m_in_x_func[5].resolve(m_in_x5_cb, *this);
m_in_x_func[6].resolve(m_in_x6_cb, *this);
m_in_x_func[7].resolve(m_in_x7_cb, *this);
m_in_x_func[8].resolve(m_in_x8_cb, *this);
m_in_shift_func.resolve(m_in_shift_cb, *this);
m_in_control_func.resolve(m_in_control_cb, *this);
m_out_data_ready_func.resolve(m_out_data_ready_cb, *this);
m_out_ako_func.resolve(m_out_ako_cb, *this);
m_read_x0.resolve_safe(0);
m_read_x1.resolve_safe(0);
m_read_x2.resolve_safe(0);
m_read_x3.resolve_safe(0);
m_read_x4.resolve_safe(0);
m_read_x5.resolve_safe(0);
m_read_x6.resolve_safe(0);
m_read_x7.resolve_safe(0);
m_read_x8.resolve_safe(0);
m_read_shift.resolve_safe(0);
m_read_control.resolve_safe(0);
m_write_data_ready.resolve_safe();
m_write_ako.resolve_safe();
// allocate timers
m_scan_timer = timer_alloc();
@ -129,7 +111,20 @@ void ay3600_device::device_timer(emu_timer &timer, device_timer_id id, int param
for (int x = 0; x < 9; x++)
{
UINT16 data = m_in_x_func[x](0,0xffff);
UINT16 data = 0;
switch(x)
{
case 0: data = m_read_x0(); break;
case 1: data = m_read_x1(); break;
case 2: data = m_read_x2(); break;
case 3: data = m_read_x3(); break;
case 4: data = m_read_x4(); break;
case 5: data = m_read_x5(); break;
case 6: data = m_read_x6(); break;
case 7: data = m_read_x7(); break;
case 8: data = m_read_x8(); break;
}
for (int y = 0; y < 10; y++)
{
@ -145,14 +140,14 @@ void ay3600_device::device_timer(emu_timer &timer, device_timer_id id, int param
b = 0x100 | b;
}
b |= (m_in_shift_func() << 6);
b |= (m_in_control_func() << 7);
b |= (m_read_shift() << 6);
b |= (m_read_control() << 7);
if (m_b != b)
{
m_b = b;
m_out_data_ready_func(1);
m_write_data_ready(1);
return;
}
}
@ -166,7 +161,7 @@ void ay3600_device::device_timer(emu_timer &timer, device_timer_id id, int param
if (ako != m_ako)
{
m_out_ako_func(ako);
m_write_ako(ako);
m_ako = ako;
}
}
@ -180,7 +175,7 @@ UINT16 ay3600_device::b_r()
{
UINT16 data = m_b;
m_out_data_ready_func(0);
m_write_data_ready(0);
return data;
}

View File

@ -65,70 +65,73 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_AY3600_ADD(_tag, _clock, _config) \
MCFG_DEVICE_ADD(_tag, AY3600, _clock) \
MCFG_DEVICE_CONFIG(_config)
#define AY3600_INTERFACE(name) \
const ay3600_interface (name) =
#define MCFG_AY3600_MATRIX_X0(_cb) \
devcb = &ay3600_device::set_x0_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_MATRIX_X1(_cb) \
devcb = &ay3600_device::set_x1_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_MATRIX_X2(_cb) \
devcb = &ay3600_device::set_x2_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_MATRIX_X3(_cb) \
devcb = &ay3600_device::set_x3_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_MATRIX_X4(_cb) \
devcb = &ay3600_device::set_x4_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_MATRIX_X5(_cb) \
devcb = &ay3600_device::set_x5_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_MATRIX_X6(_cb) \
devcb = &ay3600_device::set_x6_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_MATRIX_X7(_cb) \
devcb = &ay3600_device::set_x7_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_MATRIX_X8(_cb) \
devcb = &ay3600_device::set_x8_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_SHIFT_CB(_cb) \
devcb = &ay3600_device::set_shift_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_CONTROL_CB(_cb) \
devcb = &ay3600_device::set_control_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_DATA_READY_CB(_cb) \
devcb = &ay3600_device::set_data_ready_cb(*device, DEVCB2_##_cb);
#define MCFG_AY3600_AKO_CB(_cb) \
devcb = &ay3600_device::set_ako_cb(*device, DEVCB2_##_cb);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> ay3600_interface
struct ay3600_interface
{
devcb_read16 m_in_x0_cb;
devcb_read16 m_in_x1_cb;
devcb_read16 m_in_x2_cb;
devcb_read16 m_in_x3_cb;
devcb_read16 m_in_x4_cb;
devcb_read16 m_in_x5_cb;
devcb_read16 m_in_x6_cb;
devcb_read16 m_in_x7_cb;
devcb_read16 m_in_x8_cb;
devcb_read_line m_in_shift_cb;
devcb_read_line m_in_control_cb;
devcb_write_line m_out_data_ready_cb;
devcb_write_line m_out_ako_cb;
};
// ======================> ay3600_device
class ay3600_device : public device_t,
public ay3600_interface
class ay3600_device : public device_t
{
public:
// construction/destruction
ay3600_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
public:
// public interface
UINT16 b_r();
template<class _Object> static devcb2_base &set_x0_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_x0.set_callback(rd); }
template<class _Object> static devcb2_base &set_x1_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_x1.set_callback(rd); }
template<class _Object> static devcb2_base &set_x2_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_x2.set_callback(rd); }
template<class _Object> static devcb2_base &set_x3_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_x3.set_callback(rd); }
template<class _Object> static devcb2_base &set_x4_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_x4.set_callback(rd); }
template<class _Object> static devcb2_base &set_x5_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_x5.set_callback(rd); }
template<class _Object> static devcb2_base &set_x6_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_x6.set_callback(rd); }
template<class _Object> static devcb2_base &set_x7_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_x7.set_callback(rd); }
template<class _Object> static devcb2_base &set_x8_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_x8.set_callback(rd); }
template<class _Object> static devcb2_base &set_shift_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_shift.set_callback(rd); }
template<class _Object> static devcb2_base &set_control_cb(device_t &device, _Object rd) { return downcast<ay3600_device &>(device).m_read_control.set_callback(rd); }
template<class _Object> static devcb2_base &set_data_ready_cb(device_t &device, _Object wr) { return downcast<ay3600_device &>(device).m_write_data_ready.set_callback(wr); }
template<class _Object> static devcb2_base &set_ako_cb(device_t &device, _Object wr) { return downcast<ay3600_device &>(device).m_write_ako.set_callback(wr); }
devcb2_read16 m_read_x0, m_read_x1, m_read_x2, m_read_x3, m_read_x4, m_read_x5, m_read_x6, m_read_x7, m_read_x8;
devcb2_read_line m_read_shift, m_read_control;
devcb2_write_line m_write_data_ready, m_write_ako;
protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual void device_config_complete();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
private:
devcb_resolved_read16 m_in_x_func[9];
devcb_resolved_read_line m_in_shift_func;
devcb_resolved_read_line m_in_control_func;
devcb_resolved_write_line m_out_data_ready_func;
devcb_resolved_write_line m_out_ako_func;
int m_b; // output buffer
int m_ako; // any key down