trunk/src/mame/drivers/maygayv1.c
| r26374 | r26375 | |
| 129 | 129 | #include "video/awpvid.h" |
| 130 | 130 | #include "cpu/mcs51/mcs51.h" |
| 131 | 131 | #include "machine/6821pia.h" |
| 132 | | #include "machine/68681.h" |
| 132 | #include "machine/n68681.h" |
| 133 | 133 | #include "sound/2413intf.h" |
| 134 | 134 | #include "sound/upd7759.h" |
| 135 | 135 | #include "machine/nvram.h" |
| r26374 | r26375 | |
| 220 | 220 | : driver_device(mconfig, type, tag), |
| 221 | 221 | m_maincpu(*this, "maincpu"), |
| 222 | 222 | m_soundcpu(*this, "soundcpu"), |
| 223 | | m_upd7759(*this, "upd") { } |
| 223 | m_upd7759(*this, "upd"), |
| 224 | m_duart68681(*this, "duart68681") { } |
| 224 | 225 | |
| 226 | required_device<cpu_device> m_maincpu; |
| 227 | required_device<i8052_device> m_soundcpu; |
| 228 | required_device<upd7759_device> m_upd7759; |
| 229 | required_device<duartn68681_device> m_duart68681; |
| 230 | |
| 225 | 231 | int m_vsync_latch_preset; |
| 226 | 232 | UINT8 m_p1; |
| 227 | 233 | UINT8 m_p3; |
| 228 | 234 | int m_d68681_val; |
| 229 | | device_t *m_duart68681; |
| 230 | 235 | i82716_t m_i82716; |
| 231 | 236 | i8279_t m_i8279; |
| 232 | 237 | DECLARE_WRITE16_MEMBER(i82716_w); |
| r26374 | r26375 | |
| 249 | 254 | INTERRUPT_GEN_MEMBER(vsync_interrupt); |
| 250 | 255 | DECLARE_WRITE8_MEMBER(data_from_i8031); |
| 251 | 256 | DECLARE_READ8_MEMBER(data_to_i8031); |
| 252 | | required_device<cpu_device> m_maincpu; |
| 253 | | required_device<i8052_device> m_soundcpu; |
| 254 | | required_device<upd7759_device> m_upd7759; |
| 257 | DECLARE_WRITE_LINE_MEMBER(duart_irq_handler); |
| 258 | DECLARE_WRITE_LINE_MEMBER(duart_txa); |
| 255 | 259 | }; |
| 256 | 260 | |
| 257 | 261 | |
| r26374 | r26375 | |
| 697 | 701 | AM_RANGE(0x860000, 0x86000d) AM_READWRITE(read_odd, write_odd) |
| 698 | 702 | AM_RANGE(0x86000e, 0x86000f) AM_WRITE(vsync_int_ctrl) |
| 699 | 703 | AM_RANGE(0x880000, 0x89ffff) AM_READWRITE(i82716_r, i82716_w) |
| 700 | | AM_RANGE(0x8a0000, 0x8a001f) AM_DEVREADWRITE8_LEGACY("duart68681", duart68681_r, duart68681_w, 0xff) |
| 704 | AM_RANGE(0x8a0000, 0x8a001f) AM_DEVREADWRITE8("duart68681", duartn68681_device, read, write, 0xff) |
| 701 | 705 | AM_RANGE(0x8c0000, 0x8c000f) AM_DEVREADWRITE8("pia", pia6821_device, read, write, 0xff) |
| 702 | 706 | ADDRESS_MAP_END |
| 703 | 707 | |
| r26374 | r26375 | |
| 940 | 944 | |
| 941 | 945 | ***************************************************************************/ |
| 942 | 946 | |
| 943 | | static void duart_irq_handler(device_t *device, int state, UINT8 vector) |
| 947 | WRITE_LINE_MEMBER(maygayv1_state::duart_irq_handler) |
| 944 | 948 | { |
| 945 | | maygayv1_state *drvstate = device->machine().driver_data<maygayv1_state>(); |
| 946 | | drvstate->m_maincpu->set_input_line_and_vector(5, state, vector); |
| 947 | | // drvstate->m_maincpu->set_input_line(5, state ? ASSERT_LINE : CLEAR_LINE); |
| 949 | m_maincpu->set_input_line_and_vector(5, state, m_duart68681->get_irq_vector()); |
| 950 | // m_maincpu->set_input_line(5, state ? ASSERT_LINE : CLEAR_LINE); |
| 948 | 951 | }; |
| 949 | 952 | |
| 950 | 953 | |
| 951 | | static void duart_tx(device_t *device, int channel, UINT8 data) |
| 954 | WRITE_LINE_MEMBER(maygayv1_state::duart_txa) |
| 952 | 955 | { |
| 953 | | maygayv1_state *state = device->machine().driver_data<maygayv1_state>(); |
| 954 | | if (channel == 0) |
| 955 | | { |
| 956 | | state->m_d68681_val = data; |
| 957 | | state->m_soundcpu->set_input_line(MCS51_RX_LINE, ASSERT_LINE); // ? |
| 958 | | } |
| 959 | | |
| 956 | m_d68681_val = state; |
| 957 | m_soundcpu->set_input_line(MCS51_RX_LINE, ASSERT_LINE); // ? |
| 960 | 958 | }; |
| 961 | 959 | |
| 962 | | static const duart68681_config maygayv1_duart68681_config = |
| 960 | static const duartn68681_config maygayv1_duart68681_config = |
| 963 | 961 | { |
| 964 | | duart_irq_handler, |
| 965 | | duart_tx, |
| 966 | | NULL, |
| 967 | | NULL |
| 962 | DEVCB_DRIVER_LINE_MEMBER(maygayv1_state, duart_irq_handler), |
| 963 | DEVCB_DRIVER_LINE_MEMBER(maygayv1_state, duart_txa), |
| 964 | DEVCB_NULL, |
| 965 | DEVCB_NULL, |
| 966 | DEVCB_NULL |
| 968 | 967 | }; |
| 969 | 968 | |
| 970 | 969 | |
| r26374 | r26375 | |
| 975 | 974 | |
| 976 | 975 | WRITE8_MEMBER(maygayv1_state::data_from_i8031) |
| 977 | 976 | { |
| 978 | | duart68681_rx_data(m_duart68681, 0, data); |
| 977 | m_duart68681->rx_a_w(data); |
| 979 | 978 | } |
| 980 | 979 | |
| 981 | 980 | READ8_MEMBER(maygayv1_state::b_read) |
| r26374 | r26375 | |
| 1016 | 1015 | |
| 1017 | 1016 | save_pointer(NAME(i82716.dram), 0x40000); |
| 1018 | 1017 | |
| 1019 | | // duart_68681_init(DUART_CLOCK, duart_irq_handler, duart_tx); |
| 1020 | | |
| 1021 | 1018 | m_soundcpu->i8051_set_serial_tx_callback(write8_delegate(FUNC(maygayv1_state::data_from_i8031),this)); |
| 1022 | 1019 | m_soundcpu->i8051_set_serial_rx_callback(read8_delegate(FUNC(maygayv1_state::data_to_i8031),this)); |
| 1023 | 1020 | } |
| r26374 | r26375 | |
| 1026 | 1023 | { |
| 1027 | 1024 | i82716_t &i82716 = m_i82716; |
| 1028 | 1025 | // ? |
| 1029 | | m_duart68681 = machine().device( "duart68681" ); |
| 1030 | 1026 | memset(i82716.dram, 0, 0x40000); |
| 1031 | 1027 | i82716.r[RWBA] = 0x0200; |
| 1032 | 1028 | } |
| r26374 | r26375 | |
| 1065 | 1061 | |
| 1066 | 1062 | MCFG_PALETTE_LENGTH(16) |
| 1067 | 1063 | |
| 1068 | | MCFG_DUART68681_ADD("duart68681", DUART_CLOCK, maygayv1_duart68681_config) |
| 1064 | MCFG_DUARTN68681_ADD("duart68681", DUART_CLOCK, maygayv1_duart68681_config) |
| 1069 | 1065 | |
| 1070 | 1066 | |
| 1071 | 1067 | MCFG_SPEAKER_STANDARD_MONO("mono") |