diff options
author | Curt Coder <curtcoder@mail.com> | 2014-05-12 21:10:55 +0000 |
---|---|---|
committer | Curt Coder <curtcoder@mail.com> | 2014-05-12 21:10:55 +0000 |
commit | c8664d0f57463bf9bb0f00dfefedcd0bab026222 (patch) | |
tree | c54f3d9cc4f9658c3a9200b759b6e47f259b65d3 /src/mame | |
parent | ed6cb5ba4a4e6945846866998257a623fd53e007 (diff) |
(MAME) nflfoot: Refactored to use z80dart. (nw)
Diffstat (limited to 'src/mame')
-rw-r--r-- | src/mame/drivers/mcr.c | 83 | ||||
-rw-r--r-- | src/mame/includes/mcr.h | 17 | ||||
-rw-r--r-- | src/mame/machine/mcr.c | 33 |
3 files changed, 31 insertions, 102 deletions
diff --git a/src/mame/drivers/mcr.c b/src/mame/drivers/mcr.c index 68c80e49e7d..6b04b7d4c6a 100644 --- a/src/mame/drivers/mcr.c +++ b/src/mame/drivers/mcr.c @@ -298,14 +298,6 @@ static UINT8 last_op4; static UINT8 dpoker_coin_status; static UINT8 dpoker_output; -static UINT8 nflfoot_serial_out_active; -static UINT8 nflfoot_serial_out_bits; -static UINT8 nflfoot_serial_out_numbits; - -static UINT8 nflfoot_serial_in_active; -static UINT16 nflfoot_serial_in_bits; -static UINT8 nflfoot_serial_in_numbits; - WRITE8_MEMBER(mcr_state::mcr_control_port_w) @@ -647,30 +639,10 @@ WRITE8_MEMBER(mcr_state::dotron_op4_w) * *************************************/ -WRITE16_MEMBER(mcr_state::mcr_ipu_sio_transmit) -{ - logerror("ipu_sio_transmit: %02X\n", data); - - /* create a 10-bit value with a '1','0' sequence for the start bit */ - nflfoot_serial_in_active = TRUE; - nflfoot_serial_in_bits = (data << 2) | 1; - nflfoot_serial_in_numbits = 10; -} - - READ8_MEMBER(mcr_state::nflfoot_ip2_r) { /* bit 7 = J3-2 on IPU board = TXDA on SIO */ - UINT8 val = 0x80; - - /* we only do this if we have active data */ - if (nflfoot_serial_in_active) - { - val = (nflfoot_serial_in_bits & 1) ? 0x00 : 0x80; - nflfoot_serial_in_bits >>= 1; - if (--nflfoot_serial_in_numbits == 0) - nflfoot_serial_in_active = FALSE; - } + UINT8 val = m_sio_txda << 7; if (space.device().safe_pc() != 0x107) logerror("%04X:ip2_r = %02X\n", space.device().safe_pc(), val); @@ -680,42 +652,13 @@ READ8_MEMBER(mcr_state::nflfoot_ip2_r) WRITE8_MEMBER(mcr_state::nflfoot_op4_w) { - z80sio_device *sio = machine().device<z80sio_device>("ipu_sio"); - - /* bit 7 = J3-7 on IPU board = /RXDA on SIO */ logerror("%04X:op4_w(%d%d%d)\n", space.device().safe_pc(), (data >> 7) & 1, (data >> 6) & 1, (data >> 5) & 1); - /* look for a non-zero start bit to go active */ - if (!nflfoot_serial_out_active && (data & 0x80)) - { - nflfoot_serial_out_active = TRUE; - nflfoot_serial_out_bits = 0; - nflfoot_serial_out_numbits = 0; - logerror(" -- serial active\n"); - } - - /* accumulate bits as they are written */ - else if (nflfoot_serial_out_active) - { - /* if we've accumulated less than 8, just add to the pile */ - if (nflfoot_serial_out_numbits < 8) - { - nflfoot_serial_out_bits = (nflfoot_serial_out_bits >> 1) | (~data & 0x80); - nflfoot_serial_out_numbits++; - logerror(" -- accumulated %d bits\n", nflfoot_serial_out_numbits); - } - - /* once we have 8, the final bit is a stop bit, feed it to the SIO */ - else - { - logerror(" -- stop bit = %d; final value = %02X\n", (data >> 7) & 1, nflfoot_serial_out_bits); - nflfoot_serial_out_active = FALSE; - sio->receive_data(0, nflfoot_serial_out_bits); - } - } + /* bit 7 = J3-7 on IPU board = /RXDA on SIO */ + m_sio->rxa_w(!((data >> 7) & 1)); /* bit 6 = J3-3 on IPU board = CTSA on SIO */ - sio->set_cts(0, (data >> 6) & 1); + m_sio->ctsa_w((data >> 6) & 1); /* bit 4 = SEL0 (J1-8) on squawk n talk board */ /* bits 3-0 = MD3-0 connected to squawk n talk (J1-4,3,2,1) */ @@ -855,7 +798,7 @@ static ADDRESS_MAP_START( ipu_91695_portmap, AS_IO, 8, mcr_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x03) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_pio0", z80pio_device, read, write) - AM_RANGE(0x04, 0x07) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_sio", z80sio_device, read, write) + AM_RANGE(0x04, 0x07) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_sio", z80dart_device, cd_ba_r, cd_ba_w) AM_RANGE(0x08, 0x0b) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_ctc", z80ctc_device, read, write) AM_RANGE(0x0c, 0x0f) AM_MIRROR(0xe0) AM_DEVREADWRITE("ipu_pio1", z80pio_device, read, write) AM_RANGE(0x10, 0x13) AM_MIRROR(0xe0) AM_WRITE(mcr_ipu_laserdisk_w) @@ -1962,7 +1905,10 @@ static MACHINE_CONFIG_DERIVED( mcr_91490_ipu, mcr_91490_snt ) MCFG_DEVICE_ADD("ipu_pio1", Z80PIO, 7372800/2) MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("ipu", INPUT_LINE_IRQ0)) - MCFG_Z80SIO_ADD("ipu_sio", 7372800/2 /* same as "ipu" */, nflfoot_sio_intf) + MCFG_Z80SIO0_ADD("ipu_sio", 7372800/2, 0, 0, 0, 0) + MCFG_Z80DART_OUT_INT_CB(INPUTLINE("ipu", INPUT_LINE_IRQ0)) + MCFG_Z80DART_OUT_TXDA_CB(WRITELINE(mcr_state, sio_txda_w)) + MCFG_Z80DART_OUT_TXDB_CB(WRITELINE(mcr_state, sio_txdb_w)) MACHINE_CONFIG_END @@ -2929,15 +2875,8 @@ DRIVER_INIT_MEMBER(mcr_state,nflfoot) machine().device<midway_ssio_device>("ssio")->set_custom_input(2, 0x80, read8_delegate(FUNC(mcr_state::nflfoot_ip2_r),this)); machine().device<midway_ssio_device>("ssio")->set_custom_output(4, 0xff, write8_delegate(FUNC(mcr_state::nflfoot_op4_w),this)); - nflfoot_serial_out_active = FALSE; - nflfoot_serial_in_active = FALSE; - - save_item(NAME(nflfoot_serial_out_active)); - save_item(NAME(nflfoot_serial_out_bits)); - save_item(NAME(nflfoot_serial_out_numbits)); - save_item(NAME(nflfoot_serial_in_active)); - save_item(NAME(nflfoot_serial_in_bits)); - save_item(NAME(nflfoot_serial_in_numbits)); + save_item(NAME(m_sio_txda)); + save_item(NAME(m_sio_txdb)); } diff --git a/src/mame/includes/mcr.h b/src/mame/includes/mcr.h index cc6d2f3aae8..ff7937f669c 100644 --- a/src/mame/includes/mcr.h +++ b/src/mame/includes/mcr.h @@ -10,7 +10,7 @@ #include "cpu/z80/z80daisy.h" #include "machine/z80ctc.h" #include "machine/z80pio.h" -#include "machine/z80sio.h" +#include "machine/z80dart.h" #include "audio/midway.h" #include "sound/samples.h" @@ -28,6 +28,7 @@ public: m_spriteram(*this, "spriteram"), m_videoram(*this, "videoram"), m_paletteram(*this, "paletteram"), + m_sio(*this, "ipu_sio"), m_ssio(*this, "ssio"), m_chip_squeak_deluxe(*this, "csd"), m_sounds_good(*this, "sg"), @@ -37,7 +38,9 @@ public: m_dpoker_hopper_timer(*this, "dp_hopper"), m_samples(*this, "samples"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_sio_txda(0), + m_sio_txdb(0) { } // these should be required but can't because mcr68 shares with us // once the sound boards are properly device-ified, fix this @@ -47,6 +50,7 @@ public: optional_shared_ptr<UINT8> m_videoram; optional_shared_ptr<UINT8> m_paletteram; + optional_device<z80dart_device> m_sio; optional_device<midway_ssio_device> m_ssio; optional_device<midway_chip_squeak_deluxe_device> m_chip_squeak_deluxe; optional_device<midway_sounds_good_device> m_sounds_good; @@ -118,21 +122,22 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(dpoker_coin_in_callback); TIMER_DEVICE_CALLBACK_MEMBER(mcr_interrupt); TIMER_DEVICE_CALLBACK_MEMBER(mcr_ipu_interrupt); - DECLARE_WRITE16_MEMBER(mcr_ipu_sio_transmit); - DECLARE_WRITE_LINE_MEMBER(ipu_ctc_interrupt); - DECLARE_WRITE8_MEMBER(ipu_break_changed); + DECLARE_WRITE_LINE_MEMBER(sio_txda_w); + DECLARE_WRITE_LINE_MEMBER(sio_txdb_w); void mcr_set_color(int index, int data); void journey_set_color(int index, int data); void render_sprites_91399(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void render_sprites_91464(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int primask, int sprmask, int colormask); void mcr_init(int cpuboard, int vidboard, int ssioboard); + + int m_sio_txda; + int m_sio_txdb; }; /*----------- defined in machine/mcr.c -----------*/ extern const z80_daisy_config mcr_daisy_chain[]; extern const z80_daisy_config mcr_ipu_daisy_chain[]; -extern const z80sio_interface nflfoot_sio_intf; extern UINT8 mcr_cocktail_flip; extern const gfx_layout mcr_bg_layout; diff --git a/src/mame/machine/mcr.c b/src/mame/machine/mcr.c index 3add3e16b6e..b746ed79419 100644 --- a/src/mame/machine/mcr.c +++ b/src/mame/machine/mcr.c @@ -92,22 +92,6 @@ const z80_daisy_config mcr_ipu_daisy_chain[] = }; -WRITE_LINE_MEMBER(mcr_state::ipu_ctc_interrupt) -{ - m_ipu->set_input_line(0, state); -} - - -const z80sio_interface nflfoot_sio_intf = -{ - DEVCB_DRIVER_LINE_MEMBER(mcr_state,ipu_ctc_interrupt), /* interrupt handler */ - DEVCB_NULL, /* DTR changed handler */ - DEVCB_NULL, /* RTS changed handler */ - DEVCB_DRIVER_MEMBER(mcr_state,ipu_break_changed), /* BREAK changed handler */ - DEVCB_DRIVER_MEMBER16(mcr_state,mcr_ipu_sio_transmit)/* transmit handler */ -}; - - /************************************* * @@ -185,17 +169,18 @@ TIMER_DEVICE_CALLBACK_MEMBER(mcr_state::mcr_ipu_interrupt) * *************************************/ -WRITE8_MEMBER(mcr_state::ipu_break_changed) +WRITE_LINE_MEMBER(mcr_state::sio_txda_w) { - /* channel B is connected to the CED player */ - if (offset == 1) - { - logerror("DTR changed -> %d\n", data); - if (data == 1) - downcast<z80sio_device *>(machine().device("ipu_sio"))->receive_data(1, 0); - } + m_sio_txda = !state; } +WRITE_LINE_MEMBER(mcr_state::sio_txdb_w) +{ + // disc player + m_sio_txdb = !state; + + m_sio->rxb_w(state); +} WRITE8_MEMBER(mcr_state::mcr_ipu_laserdisk_w) { |