trunk/src/mess/includes/pc.h
| r25399 | r25400 | |
| 8 | 8 | #define PC_H_ |
| 9 | 9 | |
| 10 | 10 | #include "machine/ins8250.h" |
| 11 | #include "machine/i8251.h" |
| 11 | 12 | #include "machine/i8255.h" |
| 12 | 13 | #include "machine/am9517a.h" |
| 13 | 14 | #include "machine/serial.h" |
| r25399 | r25400 | |
| 19 | 20 | #include "machine/ram.h" |
| 20 | 21 | #include "machine/pic8259.h" |
| 21 | 22 | #include "machine/pit8253.h" |
| 23 | #include "machine/ctronics.h" |
| 22 | 24 | |
| 23 | 25 | class pc_state : public driver_device |
| 24 | 26 | { |
| r25399 | r25400 | |
| 32 | 34 | m_pc_kbdc(*this, "pc_kbdc"), |
| 33 | 35 | m_speaker(*this, "speaker"), |
| 34 | 36 | m_cassette(*this, "cassette"), |
| 37 | m_centronics(*this, "centronics"), |
| 35 | 38 | m_ram(*this, RAM_TAG) { } |
| 36 | 39 | |
| 37 | 40 | required_device<cpu_device> m_maincpu; |
| r25399 | r25400 | |
| 41 | 44 | optional_device<pc_kbdc_device> m_pc_kbdc; |
| 42 | 45 | optional_device<speaker_sound_device> m_speaker; |
| 43 | 46 | optional_device<cassette_image_device> m_cassette; |
| 47 | optional_device<centronics_device> m_centronics; |
| 44 | 48 | optional_device<ram_device> m_ram; |
| 45 | 49 | |
| 46 | 50 | /* U73 is an LS74 - dual flip flop */ |
| r25399 | r25400 | |
| 120 | 124 | DECLARE_WRITE_LINE_MEMBER(pcjr_pic8259_set_int_line); |
| 121 | 125 | DECLARE_WRITE_LINE_MEMBER(ibm5150_pit8253_out1_changed); |
| 122 | 126 | DECLARE_WRITE_LINE_MEMBER(ibm5150_pit8253_out2_changed); |
| 127 | DECLARE_WRITE_LINE_MEMBER(mc1502_pit8253_out1_changed); |
| 128 | DECLARE_WRITE_LINE_MEMBER(mc1502_pit8253_out2_changed); |
| 123 | 129 | DECLARE_WRITE_LINE_MEMBER(pc_com_interrupt_1); |
| 124 | 130 | DECLARE_WRITE_LINE_MEMBER(pc_com_interrupt_2); |
| 125 | 131 | DECLARE_READ8_MEMBER(ibm5160_ppi_porta_r); |
| r25399 | r25400 | |
| 127 | 133 | DECLARE_WRITE8_MEMBER(ibm5160_ppi_portb_w); |
| 128 | 134 | DECLARE_READ8_MEMBER(pc_ppi_porta_r); |
| 129 | 135 | DECLARE_WRITE8_MEMBER(pc_ppi_portb_w); |
| 130 | | DECLARE_READ8_MEMBER(mc1502_ppi_porta_r); |
| 131 | 136 | DECLARE_WRITE8_MEMBER(mc1502_ppi_porta_w); |
| 132 | 137 | DECLARE_WRITE8_MEMBER(mc1502_ppi_portb_w); |
| 133 | 138 | DECLARE_READ8_MEMBER(mc1502_ppi_portc_r); |
| 134 | 139 | DECLARE_READ8_MEMBER(mc1502_kppi_porta_r); |
| 140 | DECLARE_READ8_MEMBER(mc1502_kppi_portc_r); |
| 135 | 141 | DECLARE_WRITE8_MEMBER(mc1502_kppi_portb_w); |
| 136 | 142 | DECLARE_WRITE8_MEMBER(mc1502_kppi_portc_w); |
| 137 | 143 | DECLARE_WRITE8_MEMBER(pcjr_ppi_portb_w); |
| r25399 | r25400 | |
| 199 | 205 | extern const i8255_interface ibm5160_ppi8255_interface; |
| 200 | 206 | extern const i8255_interface pc_ppi8255_interface; |
| 201 | 207 | extern const i8255_interface pcjr_ppi8255_interface; |
| 208 | extern const i8251_interface mc1502_i8251_interface; |
| 202 | 209 | extern const i8255_interface mc1502_ppi8255_interface; |
| 203 | 210 | extern const i8255_interface mc1502_ppi8255_interface_2; |
| 204 | 211 | |
trunk/src/mess/drivers/pc.c
| r25399 | r25400 | |
| 62 | 62 | #include "cpu/i86/i86.h" |
| 63 | 63 | #include "cpu/i86/i286.h" |
| 64 | 64 | #include "sound/speaker.h" |
| 65 | #include "sound/wave.h" |
| 65 | 66 | |
| 66 | 67 | #include "machine/i8255.h" |
| 67 | 68 | #include "machine/ins8250.h" |
| r25399 | r25400 | |
| 90 | 91 | #include "imagedev/harddriv.h" |
| 91 | 92 | #include "imagedev/cassette.h" |
| 92 | 93 | #include "imagedev/cartslot.h" |
| 94 | #include "imagedev/serial.h" |
| 93 | 95 | #include "formats/mfi_dsk.h" |
| 94 | 96 | #include "formats/pc_dsk.h" |
| 95 | 97 | #include "formats/asst128_dsk.h" |
| r25399 | r25400 | |
| 1339 | 1341 | NULL |
| 1340 | 1342 | }; |
| 1341 | 1343 | |
| 1344 | static const serial_image_interface mc1502_serial = |
| 1345 | { |
| 1346 | 9600, 8, 1, SERIAL_PARITY_NONE, 1, "upd8251" |
| 1347 | }; |
| 1348 | |
| 1342 | 1349 | static MACHINE_CONFIG_START( ibmpcjr, tandy_pc_state ) |
| 1343 | 1350 | /* basic machine hardware */ |
| 1344 | 1351 | MCFG_CPU_PC(ibmpcjr, ibmpcjr, I8088, 4900000, pcjr_frame_interrupt) /* TODO: Get correct cpu frequency, probably XTAL_14_31818MHz/3 */ |
| r25399 | r25400 | |
| 1426 | 1433 | |
| 1427 | 1434 | static MACHINE_CONFIG_START( mc1502, pc_state ) |
| 1428 | 1435 | /* basic machine hardware */ |
| 1429 | | // MCFG_CPU_PC(mc1502, mc1502, I8088, XTAL_16MHz/3, pcjr_frame_interrupt) /* check frame_interrupt */ |
| 1430 | 1436 | MCFG_CPU_ADD("maincpu", I8088, XTAL_16MHz/3) |
| 1431 | 1437 | MCFG_CPU_PROGRAM_MAP(mc1502_map) |
| 1432 | 1438 | MCFG_CPU_IO_MAP(mc1502_io) |
| r25399 | r25400 | |
| 1441 | 1447 | MCFG_I8255_ADD( "ppi8255", mc1502_ppi8255_interface ) /* not complete */ |
| 1442 | 1448 | MCFG_I8255_ADD( "ppi8255n2", mc1502_ppi8255_interface_2 ) /* not complete */ |
| 1443 | 1449 | |
| 1444 | | MCFG_I8251_ADD( "upd8251", default_i8251_interface ) |
| 1450 | MCFG_I8251_ADD( "upd8251", mc1502_i8251_interface ) |
| 1451 | MCFG_SERIAL_ADD("irps", mc1502_serial) |
| 1445 | 1452 | |
| 1446 | | /* video hardware */ |
| 1447 | | MCFG_FRAGMENT_ADD( pcvideo_mc1502 ) /* only 1 chargen, CGA_FONT dip always 1 */ |
| 1453 | /* video hardware (only 1 chargen in ROM; CGA_FONT dip always 1 */ |
| 1454 | MCFG_FRAGMENT_ADD( pcvideo_mc1502 ) |
| 1448 | 1455 | MCFG_GFXDECODE(ibmpcjr) |
| 1449 | 1456 | |
| 1450 | 1457 | /* sound hardware */ |
| 1451 | 1458 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 1459 | MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette") |
| 1452 | 1460 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 1453 | 1461 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) |
| 1454 | 1462 | |
| 1455 | | /* printer */ |
| 1456 | | // MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config) /* TODO: non-standard */ |
| 1463 | MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics) |
| 1464 | MCFG_CASSETTE_ADD( "cassette", mc1502_cassette_interface ) |
| 1457 | 1465 | |
| 1458 | | /* cassette */ |
| 1459 | | MCFG_CASSETTE_ADD( "cassette", mc1502_cassette_interface ) // has no motor control |
| 1460 | | |
| 1461 | 1466 | MCFG_FD1793x_ADD("vg93", XTAL_16MHz / 16) |
| 1462 | 1467 | MCFG_FLOPPY_DRIVE_ADD("fd0", mc1502_floppies, "525qd", pc_state::floppy_formats) |
| 1463 | 1468 | MCFG_FLOPPY_DRIVE_ADD("fd1", mc1502_floppies, "525qd", pc_state::floppy_formats) |
trunk/src/mess/machine/kb_7007_3.h
| r25399 | r25400 | |
| 11 | 11 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 12 | 12 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) |
| 13 | 13 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) |
| 14 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 7") PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_HOME) |
| 15 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 8") PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_UP) |
| 16 | | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_PGUP) |
| 14 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 7") PORT_CODE(KEYCODE_7_PAD) // PORT_CODE(KEYCODE_HOME) |
| 15 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 8") PORT_CODE(KEYCODE_8_PAD) // PORT_CODE(KEYCODE_UP) |
| 16 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD) // PORT_CODE(KEYCODE_PGUP) |
| 17 | 17 | |
| 18 | 18 | PORT_START("Y2") |
| 19 | 19 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) /* ??2 */ |
| r25399 | r25400 | |
| 21 | 21 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) /* ??? */ |
| 22 | 22 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Alt") PORT_CODE(KEYCODE_LALT) /* ??? */ |
| 23 | 23 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Rus/Lat") PORT_CODE(KEYCODE_RALT) /* ??? */ |
| 24 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_INSERT) /* ??? */ |
| 24 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD) // PORT_CODE(KEYCODE_INSERT) /* ??? */ |
| 25 | 25 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete") PORT_CODE(KEYCODE_DEL_PAD) /* ???? */ |
| 26 | 26 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad +") PORT_CODE(KEYCODE_PLUS_PAD) |
| 27 | 27 | |
| r25399 | r25400 | |
| 31 | 31 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') |
| 32 | 32 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') |
| 33 | 33 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) /* ???? */ |
| 34 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_END) |
| 35 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_DOWN) |
| 36 | | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_PGDN) |
| 34 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD) // PORT_CODE(KEYCODE_END) |
| 35 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD) // PORT_CODE(KEYCODE_DOWN) |
| 36 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) // PORT_CODE(KEYCODE_PGDN) |
| 37 | 37 | |
| 38 | 38 | PORT_START("Y4") |
| 39 | 39 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) |
| r25399 | r25400 | |
| 41 | 41 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') |
| 42 | 42 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') |
| 43 | 43 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') |
| 44 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 4") PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_LEFT) |
| 44 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 4") PORT_CODE(KEYCODE_4_PAD) // PORT_CODE(KEYCODE_LEFT) |
| 45 | 45 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 5") PORT_CODE(KEYCODE_5_PAD) |
| 46 | | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_RIGHT) |
| 46 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD) // PORT_CODE(KEYCODE_RIGHT) |
| 47 | 47 | |
| 48 | 48 | PORT_START("Y5") |
| 49 | 49 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) |
trunk/src/mess/machine/pc.c
| r25399 | r25400 | |
| 17 | 17 | |
| 18 | 18 | #include "machine/i8255.h" |
| 19 | 19 | #include "machine/ins8250.h" |
| 20 | #include "machine/i8251.h" |
| 20 | 21 | #include "machine/mc146818.h" |
| 21 | 22 | #include "machine/pic8259.h" |
| 22 | 23 | |
| r25399 | r25400 | |
| 409 | 410 | |
| 410 | 411 | /* MC1502 uses single XTAL for everything -- incl. CGA? check */ |
| 411 | 412 | |
| 413 | const i8251_interface mc1502_i8251_interface = |
| 414 | { |
| 415 | DEVCB_NULL, /* XXX RxD data are accessible via PPI port C, bit 7 */ |
| 416 | DEVCB_NULL, |
| 417 | DEVCB_NULL, |
| 418 | DEVCB_NULL, |
| 419 | DEVCB_NULL, |
| 420 | DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir7_w), /* default handler does nothing */ |
| 421 | DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir7_w), |
| 422 | DEVCB_NULL, |
| 423 | DEVCB_NULL /* XXX SYNDET triggers NMI */ |
| 424 | }; |
| 425 | |
| 426 | WRITE_LINE_MEMBER(pc_state::mc1502_pit8253_out1_changed) |
| 427 | { |
| 428 | machine().device<i8251_device>("upd8251")->txc_w(state); |
| 429 | machine().device<i8251_device>("upd8251")->rxc_w(state); |
| 430 | } |
| 431 | |
| 432 | WRITE_LINE_MEMBER(pc_state::mc1502_pit8253_out2_changed) |
| 433 | { |
| 434 | pc_speaker_set_input( state ); |
| 435 | m_cassette->output(state ? 1 : -1); |
| 436 | } |
| 437 | |
| 412 | 438 | const struct pit8253_interface mc1502_pit8253_config = |
| 413 | 439 | { |
| 414 | 440 | { |
| r25399 | r25400 | |
| 419 | 445 | }, { |
| 420 | 446 | XTAL_16MHz/12, /* serial port */ |
| 421 | 447 | DEVCB_NULL, |
| 422 | | DEVCB_NULL |
| 448 | DEVCB_DRIVER_LINE_MEMBER(pc_state,mc1502_pit8253_out1_changed) |
| 423 | 449 | }, { |
| 424 | 450 | XTAL_16MHz/12, /* pio port c pin 4, and speaker polling enough */ |
| 425 | 451 | DEVCB_NULL, |
| 426 | | DEVCB_DRIVER_LINE_MEMBER(pc_state,ibm5150_pit8253_out2_changed) |
| 452 | DEVCB_DRIVER_LINE_MEMBER(pc_state,mc1502_pit8253_out2_changed) |
| 427 | 453 | } |
| 428 | 454 | } |
| 429 | 455 | }; |
| r25399 | r25400 | |
| 886 | 912 | |
| 887 | 913 | static struct { |
| 888 | 914 | UINT8 pulsing; |
| 889 | | UINT8 latch; /* keyboard scan code */ |
| 890 | 915 | UINT16 mask; /* input lines */ |
| 891 | 916 | emu_timer *keyb_signal_timer; |
| 892 | 917 | } mc1502_keyb; |
| r25399 | r25400 | |
| 930 | 955 | } |
| 931 | 956 | } |
| 932 | 957 | |
| 933 | | READ8_MEMBER(pc_state::mc1502_ppi_porta_r) |
| 934 | | { |
| 935 | | // DBG_LOG(1,"mc1502_ppi_porta_r",("= %02X\n", mc1502_keyb.latch)); |
| 936 | | return mc1502_keyb.latch; |
| 937 | | } |
| 938 | | |
| 939 | 958 | WRITE8_MEMBER(pc_state::mc1502_ppi_porta_w) |
| 940 | 959 | { |
| 941 | | // DBG_LOG(1,"mc1502_ppi_porta_w",("( %02X )\n", data)); |
| 942 | | mc1502_keyb.latch = data; |
| 943 | | if (mc1502_keyb.pulsing) |
| 944 | | mc1502_keyb.pulsing--; |
| 945 | | m_pic8259->ir1_w(0); |
| 960 | m_centronics->write(space, 0, data); |
| 946 | 961 | } |
| 947 | 962 | |
| 948 | 963 | WRITE8_MEMBER(pc_state::mc1502_ppi_portb_w) |
| r25399 | r25400 | |
| 950 | 965 | // DBG_LOG(2,"mc1502_ppi_portb_w",("( %02X )\n", data)); |
| 951 | 966 | m_ppi_portb = data; |
| 952 | 967 | machine().device<pit8253_device>("pit8253")->gate2_w(BIT(data, 0)); |
| 953 | | pc_speaker_set_spkrdata( data & 0x02 ); |
| 968 | pc_speaker_set_spkrdata(BIT(data, 1)); |
| 969 | m_centronics->strobe_w(BIT(data, 2)); |
| 970 | m_centronics->autofeed_w(BIT(data, 3)); |
| 971 | m_centronics->init_prime_w(BIT(data, 4)); |
| 954 | 972 | } |
| 955 | 973 | |
| 974 | READ8_MEMBER(pc_state::mc1502_kppi_portc_r) |
| 975 | { |
| 976 | UINT8 data = 0; |
| 977 | |
| 978 | data |= m_centronics->fault_r() << 4; |
| 979 | data |= m_centronics->pe_r() << 5; |
| 980 | data |= m_centronics->busy_r() << 6; |
| 981 | data |= m_centronics->ack_r() << 7; |
| 982 | |
| 983 | return data; |
| 984 | } |
| 985 | |
| 956 | 986 | READ8_MEMBER(pc_state::mc1502_ppi_portc_r) |
| 957 | 987 | { |
| 958 | 988 | int timer2_output = machine().device<pit8253_device>("pit8253")->get_output(2); |
| r25399 | r25400 | |
| 1097 | 1127 | |
| 1098 | 1128 | I8255_INTERFACE( mc1502_ppi8255_interface ) |
| 1099 | 1129 | { |
| 1100 | | DEVCB_DRIVER_MEMBER(pc_state,mc1502_ppi_porta_r), |
| 1130 | DEVCB_NULL, |
| 1101 | 1131 | DEVCB_DRIVER_MEMBER(pc_state,mc1502_ppi_porta_w), |
| 1102 | 1132 | DEVCB_NULL, |
| 1103 | 1133 | DEVCB_DRIVER_MEMBER(pc_state,mc1502_ppi_portb_w), |