From a36d4c6609904827268f8d885e594b0438a92dc7 Mon Sep 17 00:00:00 2001 From: "R. Belmont" Date: Thu, 13 Feb 2014 02:33:58 +0000 Subject: [PATCH] kb3600: converted to devcb2 (nw) --- src/mess/drivers/apple2.c | 56 +++++----------- src/mess/drivers/apple2gs.c | 31 ++++----- src/mess/drivers/apple3.c | 125 +++++++++++++++++------------------- src/mess/drivers/bw12.c | 31 ++++----- src/mess/machine/kb3600.c | 97 +++++++++++++--------------- src/mess/machine/kb3600.h | 89 ++++++++++++------------- 6 files changed, 195 insertions(+), 234 deletions(-) diff --git a/src/mess/drivers/apple2.c b/src/mess/drivers/apple2.c index d90bb0054ea..adbd522c45d 100644 --- a/src/mess/drivers/apple2.c +++ b/src/mess/drivers/apple2.c @@ -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") diff --git a/src/mess/drivers/apple2gs.c b/src/mess/drivers/apple2gs.c index 6a814b07320..1673e5ec2e6 100644 --- a/src/mess/drivers/apple2gs.c +++ b/src/mess/drivers/apple2gs.c @@ -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") diff --git a/src/mess/drivers/apple3.c b/src/mess/drivers/apple3.c index f2a8c72a290..acc3ab1dff0 100644 --- a/src/mess/drivers/apple3.c +++ b/src/mess/drivers/apple3.c @@ -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) diff --git a/src/mess/drivers/bw12.c b/src/mess/drivers/bw12.c index 613c14b2543..5b3967afea2 100644 --- a/src/mess/drivers/bw12.c +++ b/src/mess/drivers/bw12.c @@ -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)) diff --git a/src/mess/machine/kb3600.c b/src/mess/machine/kb3600.c index 7d9af023879..224cebca2ab 100644 --- a/src/mess/machine/kb3600.c +++ b/src/mess/machine/kb3600.c @@ -35,37 +35,6 @@ // devices const device_type AY3600 = &device_creator; - - -//************************************************************************** -// 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(static_config()); - if (intf != NULL) - *static_cast(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; } diff --git a/src/mess/machine/kb3600.h b/src/mess/machine/kb3600.h index 8d6dd8a25aa..52601e422fc 100644 --- a/src/mess/machine/kb3600.h +++ b/src/mess/machine/kb3600.h @@ -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 static devcb2_base &set_x0_cb(device_t &device, _Object rd) { return downcast(device).m_read_x0.set_callback(rd); } + template static devcb2_base &set_x1_cb(device_t &device, _Object rd) { return downcast(device).m_read_x1.set_callback(rd); } + template static devcb2_base &set_x2_cb(device_t &device, _Object rd) { return downcast(device).m_read_x2.set_callback(rd); } + template static devcb2_base &set_x3_cb(device_t &device, _Object rd) { return downcast(device).m_read_x3.set_callback(rd); } + template static devcb2_base &set_x4_cb(device_t &device, _Object rd) { return downcast(device).m_read_x4.set_callback(rd); } + template static devcb2_base &set_x5_cb(device_t &device, _Object rd) { return downcast(device).m_read_x5.set_callback(rd); } + template static devcb2_base &set_x6_cb(device_t &device, _Object rd) { return downcast(device).m_read_x6.set_callback(rd); } + template static devcb2_base &set_x7_cb(device_t &device, _Object rd) { return downcast(device).m_read_x7.set_callback(rd); } + template static devcb2_base &set_x8_cb(device_t &device, _Object rd) { return downcast(device).m_read_x8.set_callback(rd); } + template static devcb2_base &set_shift_cb(device_t &device, _Object rd) { return downcast(device).m_read_shift.set_callback(rd); } + template static devcb2_base &set_control_cb(device_t &device, _Object rd) { return downcast(device).m_read_control.set_callback(rd); } + template static devcb2_base &set_data_ready_cb(device_t &device, _Object wr) { return downcast(device).m_write_data_ready.set_callback(wr); } + template static devcb2_base &set_ako_cb(device_t &device, _Object wr) { return downcast(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