diff options
294 files changed, 6317 insertions, 5375 deletions
diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua index 7b0356db03b..0683ab0a0b9 100644 --- a/scripts/src/machine.lua +++ b/scripts/src/machine.lua @@ -429,6 +429,18 @@ end --------------------------------------------------- -- +--@src/devices/machine/74259.h,MACHINES["TTL74259"] = true +--------------------------------------------------- + +if (MACHINES["TTL74259"]~=null) then + files { + MAME_DIR .. "src/devices/machine/74259.cpp", + MAME_DIR .. "src/devices/machine/74259.h", + } +end + +--------------------------------------------------- +-- --@src/devices/machine/7474.h,MACHINES["TTL7474"] = true --------------------------------------------------- @@ -766,20 +778,6 @@ if (MACHINES["CXD1095"]~=null) then } end ---------------------------------------------------- --- ---@src/devices/machine/dm9334.h,MACHINES["DM9334"] = true ---------------------------------------------------- - -if (MACHINES["DM9334"]~=null) then - files { - MAME_DIR .. "src/devices/machine/dm9334.cpp", - MAME_DIR .. "src/devices/machine/dm9334.h", - } -end - ---------------------------------------------------- --- --@src/devices/machine/ds1204.h,MACHINES["DS1204"] = true --------------------------------------------------- diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 712bdb4a618..5fb5fd61520 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -375,6 +375,7 @@ MACHINES["TTL74157"] = true MACHINES["TTL74166"] = true --MACHINES["TTL74175"] = true MACHINES["TTL74181"] = true +MACHINES["TTL74259"] = true MACHINES["TTL7474"] = true MACHINES["KBDC8042"] = true MACHINES["I8257"] = true @@ -406,7 +407,6 @@ MACHINES["CR589"] = true --MACHINES["CS4031"] = true --MACHINES["CS8221"] = true MACHINES["CXD1095"] = true ---MACHINES["DM9334"] = true MACHINES["DP8390"] = true MACHINES["DS1204"] = true MACHINES["DS1205"] = true diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index d989bdaf2d5..0bbe1aa57fa 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -397,7 +397,6 @@ MACHINES["CR589"] = true MACHINES["CS4031"] = true MACHINES["CS8221"] = true MACHINES["CXD1095"] = true -MACHINES["DM9334"] = true MACHINES["DP8390"] = true --MACHINES["DS1204"] = true MACHINES["DS1302"] = true @@ -561,6 +560,7 @@ MACHINES["TTL74161"] = true MACHINES["TTL74164"] = true MACHINES["TTL74175"] = true MACHINES["TTL74181"] = true +MACHINES["TTL74259"] = true MACHINES["TTL7474"] = true MACHINES["UPD1990A"] = true --MACHINES["UPD4992"] = true diff --git a/scripts/target/mame/tiny.lua b/scripts/target/mame/tiny.lua index f4ac6d81074..c4d72fa7658 100644 --- a/scripts/target/mame/tiny.lua +++ b/scripts/target/mame/tiny.lua @@ -57,6 +57,7 @@ MACHINES["6821PIA"] = true MACHINES["TTL74148"] = true MACHINES["TTL74153"] = true MACHINES["TTL7474"] = true +MACHINES["TTL74259"] = true MACHINES["RIOT6532"] = true MACHINES["PIT8253"] = true MACHINES["Z80CTC"] = true diff --git a/src/devices/bus/ti99/peb/pcode.cpp b/src/devices/bus/ti99/peb/pcode.cpp index 4e09b5a4739..d30622f6a41 100644 --- a/src/devices/bus/ti99/peb/pcode.cpp +++ b/src/devices/bus/ti99/peb/pcode.cpp @@ -103,6 +103,7 @@ ti_pcode_card_device::ti_pcode_card_device(const machine_config &mconfig, const device_t(mconfig, TI99_P_CODE, tag, owner, clock), device_ti99_peribox_card_interface(mconfig, *this), m_rom(nullptr), + m_crulatch(*this, "crulatch"), m_bank_select(0), m_active(false), m_clock_count(0), @@ -254,18 +255,18 @@ READ8Z_MEMBER(ti_pcode_card_device::crureadz) WRITE8_MEMBER(ti_pcode_card_device::cruwrite) { if ((offset & 0xff00)==CRU_BASE) - { - int addr = offset & 0x00ff; + m_crulatch->write_bit((offset & 0x80) >> 5 | (offset & 0x06) >> 1, data); +} - if (addr==0) - m_selected = (data != 0); +WRITE_LINE_MEMBER(ti_pcode_card_device::pcpage_w) +{ + m_selected = state; +} - if (addr==0x80) // Bit 4 is on address line 8 - { - m_bank_select = (data+1); // we're calling this bank 1 and bank 2 - if (TRACE_CRU) logerror("Select rom bank %d\n", m_bank_select); - } - } +WRITE_LINE_MEMBER(ti_pcode_card_device::ekrpg_w) +{ + m_bank_select = state ? 2 : 1; // we're calling this bank 1 and bank 2 + if (TRACE_CRU) logerror("Select rom bank %d\n", m_bank_select); } void ti_pcode_card_device::device_start() @@ -361,6 +362,10 @@ MACHINE_CONFIG_MEMBER( ti_pcode_card_device::device_add_mconfig ) MCFG_GROM_ADD( PGROM5_TAG, 5, PCODE_GROM_TAG, 0xa000, WRITELINE(ti_pcode_card_device, ready_line)) MCFG_GROM_ADD( PGROM6_TAG, 6, PCODE_GROM_TAG, 0xc000, WRITELINE(ti_pcode_card_device, ready_line)) MCFG_GROM_ADD( PGROM7_TAG, 7, PCODE_GROM_TAG, 0xe000, WRITELINE(ti_pcode_card_device, ready_line)) + + MCFG_DEVICE_ADD("crulatch", LS259, 0) // U12 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ti_pcode_card_device, pcpage_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ti_pcode_card_device, ekrpg_w)) MACHINE_CONFIG_END const tiny_rom_entry *ti_pcode_card_device::device_rom_region() const diff --git a/src/devices/bus/ti99/peb/pcode.h b/src/devices/bus/ti99/peb/pcode.h index 21b77ff9cd8..a07effcd478 100644 --- a/src/devices/bus/ti99/peb/pcode.h +++ b/src/devices/bus/ti99/peb/pcode.h @@ -18,6 +18,7 @@ #pragma once #include "peribox.h" +#include "machine/74259.h" #include "machine/tmc0430.h" namespace bus { namespace ti99 { namespace peb { @@ -45,11 +46,15 @@ protected: virtual ioport_constructor device_input_ports() const override; private: - DECLARE_WRITE_LINE_MEMBER( ready_line ); + DECLARE_WRITE_LINE_MEMBER(ready_line); + + DECLARE_WRITE_LINE_MEMBER(pcpage_w); + DECLARE_WRITE_LINE_MEMBER(ekrpg_w); void debugger_read(address_space& space, uint16_t addr, uint8_t& value); tmc0430_device* m_grom[8]; uint8_t* m_rom; + required_device<ls259_device> m_crulatch; int m_bank_select; bool m_active; int m_clock_count; diff --git a/src/devices/bus/ti99/peb/ti_fdc.cpp b/src/devices/bus/ti99/peb/ti_fdc.cpp index dea17a77c85..c185af4a95b 100644 --- a/src/devices/bus/ti99/peb/ti_fdc.cpp +++ b/src/devices/bus/ti99/peb/ti_fdc.cpp @@ -57,7 +57,7 @@ ti_fdc_device::ti_fdc_device(const machine_config &mconfig, const char *tag, dev m_address(0), m_DRQ(0), m_IRQ(0), - m_lastval(0), + m_crulatch(*this, "crulatch"), m_DVENA(0), m_inDsrArea(false), m_WAITena(false), @@ -246,67 +246,57 @@ READ8Z_MEMBER(ti_fdc_device::crureadz) WRITE8_MEMBER(ti_fdc_device::cruwrite) { if ((offset & 0xff00)==m_cru_base) - { - int bit = (offset >> 1) & 0x07; - switch (bit) - { - case 0: - // (De)select the card. Indicated by a LED on the board. - m_selected = (data!=0); - if (TRACE_CRU) logerror("tifdc: Map DSR (bit 0) = %d\n", m_selected); - break; - - case 1: - // Activate motor - if (data==1 && m_lastval==0) - { // On rising edge, set motor_running for 4.23s - if (TRACE_CRU) logerror("tifdc: trigger motor (bit 1)\n"); - set_floppy_motors_running(true); - } - m_lastval = data; - break; - - case 2: - // Set disk ready/hold (bit 2) - // 0: ignore IRQ and DRQ - // 1: TMS9900 is stopped until IRQ or DRQ are set - // OR the motor stops rotating - rotates for 4.23s after write - // to CRU bit 1 - m_WAITena = (data != 0); - if (TRACE_CRU) logerror("tifdc: arm wait state logic (bit 2) = %d\n", data); - break; - - case 3: - // Load disk heads (HLT pin) (bit 3). Not implemented. - if (TRACE_CRU) logerror("tifdc: set head load (bit 3) = %d\n", data); - break; - - case 4: - m_DSEL = (data != 0)? (m_DSEL | 0x01) : (m_DSEL & 0xfe); - set_drive(); - break; - case 5: - m_DSEL = (data != 0)? (m_DSEL | 0x02) : (m_DSEL & 0xfd); - set_drive(); - break; - case 6: - m_DSEL = (data != 0)? (m_DSEL | 0x04) : (m_DSEL & 0xfb); - set_drive(); - break; - - case 7: - // Select side of disk (bit 7) - m_SIDSEL = (data==1)? ASSERT_LINE : CLEAR_LINE; - if (TRACE_CRU) logerror("tifdc: set side (bit 7) = %d\n", data); - if (m_current != NONE) m_floppy[m_current]->ss_w(data); - break; - - default: - break; - } + m_crulatch->write_bit((offset >> 1) & 0x07, BIT(data, 0)); +} + +WRITE_LINE_MEMBER(ti_fdc_device::dskpgena_w) +{ + // (De)select the card. Indicated by a LED on the board. + m_selected = state; + if (TRACE_CRU) logerror("tifdc: Map DSR (bit 0) = %d\n", m_selected); +} + +WRITE_LINE_MEMBER(ti_fdc_device::kaclk_w) +{ + // Activate motor + if (state) + { // On rising edge, set motor_running for 4.23s + if (TRACE_CRU) logerror("tifdc: trigger motor (bit 1)\n"); + set_floppy_motors_running(true); } } +WRITE_LINE_MEMBER(ti_fdc_device::waiten_w) +{ + // Set disk ready/hold (bit 2) + // 0: ignore IRQ and DRQ + // 1: TMS9900 is stopped until IRQ or DRQ are set + // OR the motor stops rotating - rotates for 4.23s after write + // to CRU bit 1 + m_WAITena = state; + if (TRACE_CRU) logerror("tifdc: arm wait state logic (bit 2) = %d\n", state); +} + +WRITE_LINE_MEMBER(ti_fdc_device::hlt_w) +{ + // Load disk heads (HLT pin) (bit 3). Not implemented. + if (TRACE_CRU) logerror("tifdc: set head load (bit 3) = %d\n", state); +} + +WRITE_LINE_MEMBER(ti_fdc_device::dsel_w) +{ + m_DSEL = m_crulatch->q4_r() | (m_crulatch->q5_r() << 1) | (m_crulatch->q6_r() << 2); + set_drive(); +} + +WRITE_LINE_MEMBER(ti_fdc_device::sidsel_w) +{ + // Select side of disk (bit 7) + m_SIDSEL = state ? ASSERT_LINE : CLEAR_LINE; + if (TRACE_CRU) logerror("tifdc: set side (bit 7) = %d\n", state); + if (m_current != NONE) m_floppy[m_current]->ss_w(state); +} + void ti_fdc_device::set_drive() { switch (m_DSEL) @@ -390,7 +380,6 @@ void ti_fdc_device::device_start() save_item(NAME(m_address)); save_item(NAME(m_DRQ)); save_item(NAME(m_IRQ)); - save_item(NAME(m_lastval)); save_item(NAME(m_DVENA)); save_item(NAME(m_inDsrArea)); save_item(NAME(m_WAITena)); @@ -403,7 +392,6 @@ void ti_fdc_device::device_start() void ti_fdc_device::device_reset() { logerror("tifdc: TI FDC reset\n"); - m_lastval = 0; if (m_genmod) { m_select_mask = 0x1fe000; @@ -471,6 +459,16 @@ MACHINE_CONFIG_MEMBER( ti_fdc_device::device_add_mconfig ) MCFG_FLOPPY_DRIVE_SOUND(true) MCFG_FLOPPY_DRIVE_ADD("2", tifdc_floppies, nullptr, ti_fdc_device::floppy_formats) MCFG_FLOPPY_DRIVE_SOUND(true) + + MCFG_DEVICE_ADD("crulatch", LS259, 0) // U23 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ti_fdc_device, dskpgena_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(ti_fdc_device, kaclk_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(ti_fdc_device, waiten_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(ti_fdc_device, hlt_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ti_fdc_device, dsel_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ti_fdc_device, dsel_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(ti_fdc_device, dsel_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ti_fdc_device, sidsel_w)) MACHINE_CONFIG_END const tiny_rom_entry *ti_fdc_device::device_rom_region() const diff --git a/src/devices/bus/ti99/peb/ti_fdc.h b/src/devices/bus/ti99/peb/ti_fdc.h index a5c3d16f04d..c53e5a03ffc 100644 --- a/src/devices/bus/ti99/peb/ti_fdc.h +++ b/src/devices/bus/ti99/peb/ti_fdc.h @@ -17,6 +17,7 @@ #pragma once #include "peribox.h" +#include "machine/74259.h" #include "machine/wd_fdc.h" #include "imagedev/floppy.h" @@ -48,8 +49,15 @@ protected: private: DECLARE_FLOPPY_FORMATS( floppy_formats ); - DECLARE_WRITE_LINE_MEMBER( fdc_irq_w ); - DECLARE_WRITE_LINE_MEMBER( fdc_drq_w ); + DECLARE_WRITE_LINE_MEMBER(fdc_irq_w); + DECLARE_WRITE_LINE_MEMBER(fdc_drq_w); + + DECLARE_WRITE_LINE_MEMBER(dskpgena_w); + DECLARE_WRITE_LINE_MEMBER(kaclk_w); + DECLARE_WRITE_LINE_MEMBER(waiten_w); + DECLARE_WRITE_LINE_MEMBER(hlt_w); + DECLARE_WRITE_LINE_MEMBER(dsel_w); + DECLARE_WRITE_LINE_MEMBER(sidsel_w); // For debugger access void debug_read(offs_t offset, uint8_t* value); @@ -69,8 +77,8 @@ private: // Holds the status of the DRQ and IRQ lines. int m_DRQ, m_IRQ; - // Needed for triggering the motor monoflop - uint8_t m_lastval; + // Latched CRU outputs + required_device<ls259_device> m_crulatch; // Signal DVENA. When true, makes some drive turning. int m_DVENA; diff --git a/src/devices/bus/ti99/peb/ti_rs232.cpp b/src/devices/bus/ti99/peb/ti_rs232.cpp index b5d622bb36e..59e442f2ee5 100644 --- a/src/devices/bus/ti99/peb/ti_rs232.cpp +++ b/src/devices/bus/ti99/peb/ti_rs232.cpp @@ -131,6 +131,7 @@ namespace bus { namespace ti99 { namespace peb { ti_rs232_pio_device::ti_rs232_pio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, TI99_RS232, tag, owner, clock), device_ti99_peribox_card_interface(mconfig, *this), + m_crulatch(*this, "crulatch"), m_piodev(nullptr), m_dsrrom(nullptr), m_pio_direction_in(false), @@ -327,86 +328,89 @@ WRITE8_MEMBER(ti_rs232_pio_device::cruwrite) return; } - device_image_interface *image = dynamic_cast<device_image_interface *>(m_piodev); - int bit = (offset & 0x00ff)>>1; - switch (bit) - { - case 0: - m_selected = (data!=0); - break; + m_crulatch->write_bit(bit, data); + } +} - case 1: - m_pio_direction_in = (data!=0); - break; +WRITE_LINE_MEMBER(ti_rs232_pio_device::selected_w) +{ + m_selected = state; +} - case 2: - if ((data!=0) != m_pio_handshakeout) - { - m_pio_handshakeout = (data!=0); - if (m_pio_write && m_pio_writable && (!m_pio_direction_in)) - { /* PIO in output mode */ - if (!m_pio_handshakeout) - { /* write data strobe */ - /* write data and acknowledge */ - uint8_t buf = m_pio_out_buffer; - int ret = image->fwrite(&buf, 1); - if (ret) - m_pio_handshakein = 1; - } - else - { - /* end strobe */ - /* we can write some data: set receiver ready */ - m_pio_handshakein = 0; - } - } - if ((!m_pio_write) && m_pio_readable /*&& pio_direction_in*/) - { /* PIO in input mode */ - if (!m_pio_handshakeout) - { /* receiver ready */ - /* send data and strobe */ - uint8_t buf; - if (image->fread(&buf, 1)) - m_pio_in_buffer = buf; - m_pio_handshakein = 0; - } - else - { - /* data acknowledge */ - /* we can send some data: set transmitter ready */ - m_pio_handshakein = 1; - } - } - } - break; - - case 3: - m_pio_spareout = (data!=0); - break; - - case 4: - m_flag0 = (data!=0); - break; - - case 5: - // Set the CTS line for RS232/1 - if (TRACE_LINES) logerror("(1/3) Setting CTS* via CRU to %d\n", data); - output_line_state(0, tms9902_device::CTS, (data==0)? tms9902_device::CTS : 0); - break; - - case 6: - // Set the CTS line for RS232/2 - if (TRACE_LINES) logerror("(2/4) Setting CTS* via CRU to %d\n", data); - output_line_state(1, tms9902_device::CTS, (data==0)? tms9902_device::CTS : 0); - break; - - case 7: - m_led = (data!=0); - break; +WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_direction_in_w) +{ + m_pio_direction_in = state; +} + +WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_handshake_out_w) +{ + device_image_interface *image = dynamic_cast<device_image_interface *>(m_piodev); + + m_pio_handshakeout = state; + if (m_pio_write && m_pio_writable && (!m_pio_direction_in)) + { /* PIO in output mode */ + if (!m_pio_handshakeout) + { /* write data strobe */ + /* write data and acknowledge */ + uint8_t buf = m_pio_out_buffer; + int ret = image->fwrite(&buf, 1); + if (ret) + m_pio_handshakein = 1; + } + else + { + /* end strobe */ + /* we can write some data: set receiver ready */ + m_pio_handshakein = 0; } - return; } + if ((!m_pio_write) && m_pio_readable /*&& pio_direction_in*/) + { /* PIO in input mode */ + if (!m_pio_handshakeout) + { /* receiver ready */ + /* send data and strobe */ + uint8_t buf; + if (image->fread(&buf, 1)) + m_pio_in_buffer = buf; + m_pio_handshakein = 0; + } + else + { + /* data acknowledge */ + /* we can send some data: set transmitter ready */ + m_pio_handshakein = 1; + } + } +} + +WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_spareout_w) +{ + m_pio_spareout = state; +} + +WRITE_LINE_MEMBER(ti_rs232_pio_device::flag0_w) +{ + m_flag0 = state; +} + +WRITE_LINE_MEMBER(ti_rs232_pio_device::cts0_w) +{ + // Set the CTS line for RS232/1 + if (TRACE_LINES) logerror("(1/3) Setting CTS* via CRU to %d\n", state); + output_line_state(0, tms9902_device::CTS, state ? 0 : tms9902_device::CTS); +} + +WRITE_LINE_MEMBER(ti_rs232_pio_device::cts1_w) +{ + // Set the CTS line for RS232/2 + if (TRACE_LINES) logerror("(2/4) Setting CTS* via CRU to %d\n", state); + output_line_state(1, tms9902_device::CTS, state ? 0 : tms9902_device::CTS); +} + +WRITE_LINE_MEMBER(ti_rs232_pio_device::led_w) +{ + m_led = state; } /* @@ -1150,6 +1154,16 @@ MACHINE_CONFIG_MEMBER( ti_rs232_pio_device::device_add_mconfig ) MCFG_DEVICE_ADD("serdev0", TI99_RS232_DEV, 0) MCFG_DEVICE_ADD("serdev1", TI99_RS232_DEV, 0) MCFG_DEVICE_ADD("piodev", TI99_PIO_DEV, 0) + + MCFG_DEVICE_ADD("crulatch", LS259, 0) // U12 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ti_rs232_pio_device, selected_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(ti_rs232_pio_device, pio_direction_in_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(ti_rs232_pio_device, pio_handshake_out_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(ti_rs232_pio_device, pio_spareout_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ti_rs232_pio_device, flag0_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ti_rs232_pio_device, cts0_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(ti_rs232_pio_device, cts1_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ti_rs232_pio_device, led_w)) MACHINE_CONFIG_END const tiny_rom_entry *ti_rs232_pio_device::device_rom_region() const diff --git a/src/devices/bus/ti99/peb/ti_rs232.h b/src/devices/bus/ti99/peb/ti_rs232.h index d6ef84c45b9..425120b3488 100644 --- a/src/devices/bus/ti99/peb/ti_rs232.h +++ b/src/devices/bus/ti99/peb/ti_rs232.h @@ -16,6 +16,7 @@ #pragma once #include "peribox.h" +#include "machine/74259.h" #include "machine/tms9902.h" namespace bus { namespace ti99 { namespace peb { @@ -45,14 +46,23 @@ protected: virtual ioport_constructor device_input_ports() const override; private: - DECLARE_WRITE_LINE_MEMBER( int0_callback ); - DECLARE_WRITE_LINE_MEMBER( int1_callback ); - DECLARE_WRITE_LINE_MEMBER( rcv0_callback ); - DECLARE_WRITE_LINE_MEMBER( rcv1_callback ); - DECLARE_WRITE8_MEMBER( xmit0_callback ); - DECLARE_WRITE8_MEMBER( xmit1_callback ); - DECLARE_WRITE8_MEMBER( ctrl0_callback ); - DECLARE_WRITE8_MEMBER( ctrl1_callback ); + DECLARE_WRITE_LINE_MEMBER(int0_callback); + DECLARE_WRITE_LINE_MEMBER(int1_callback); + DECLARE_WRITE_LINE_MEMBER(rcv0_callback); + DECLARE_WRITE_LINE_MEMBER(rcv1_callback); + DECLARE_WRITE8_MEMBER(xmit0_callback); + DECLARE_WRITE8_MEMBER(xmit1_callback); + DECLARE_WRITE8_MEMBER(ctrl0_callback); + DECLARE_WRITE8_MEMBER(ctrl1_callback); + + DECLARE_WRITE_LINE_MEMBER(selected_w); + DECLARE_WRITE_LINE_MEMBER(pio_direction_in_w); + DECLARE_WRITE_LINE_MEMBER(pio_handshake_out_w); + DECLARE_WRITE_LINE_MEMBER(pio_spareout_w); + DECLARE_WRITE_LINE_MEMBER(flag0_w); + DECLARE_WRITE_LINE_MEMBER(cts0_w); + DECLARE_WRITE_LINE_MEMBER(cts1_w); + DECLARE_WRITE_LINE_MEMBER(led_w); void incoming_dtr(int uartind, line_state value); void transmit_data(int uartind, uint8_t value); @@ -66,6 +76,8 @@ private: void output_exception(int uartind, int param, uint8_t value); void ctrl_callback(int uartind, int type, uint8_t data); + required_device<ls259_device> m_crulatch; + // UART chips tms9902_device* m_uart[2]; // Connected images (file or socket connection) that represent the diff --git a/src/devices/machine/74259.cpp b/src/devices/machine/74259.cpp new file mode 100644 index 00000000000..a15336c1e65 --- /dev/null +++ b/src/devices/machine/74259.cpp @@ -0,0 +1,391 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/********************************************************************** + + 74259/9334 8-Bit Addressable Latch + + The normal latch mode of this device provides a simple write-only + interface to up to 8 output lines. Its 3-bit address, 1-bit data + and active-low write enable inputs were commonly connected to the + bus lines of popular 8-bit microprocessors in the 1970s and 1980s. + + The device may alternately serve as an active-high 1-of-8 + demultiplexer when the asynchronous parallel clear input is held + low. The practical applications of this mode are more limited, and + the clear input is usually asserted only during master reset. + + The A0-A2 (or A,B,C) and D inputs may be sourced in various + permutations, but it seems reasonable to assume, as the emulation + here requires, that these four inputs should always be written + simultaneously, since modifying them independently of each other + while the latch is enabled for writing would cause additional and + probably undesired changes to outputs. + + The original TTL version of this device was introduced by Fairchild + in the early 1970s as 9334 in their 9300 MSI series, and second- + sourced by National Semiconductor as DM8334/DM9334 (the higher + number being used for the military-rated version). TI copied and + definitively renumbered many Fairchild MSI devices into their + standard 5400/7400 series. While Schottky and later versions almost + always use the 259 numbering (TI assigned SN74LS259 the alternative + name of TIM9906 when promoting it as a CRU output interface for the + TMS9900 family), older schematics sometimes suggest 9334 or DM8334 + as pin-compatible substitutes for 74LS259. + + Other addressable latch devices include: + - CD4099B: Part of RCA's standard CMOS logic series, this device + offers the same functions as 74259/9334, though its pins are + arranged rather differently. Like many CMOS devices in the 4000B + series and the CMOS addressable latches listed below, its reset + input is active high rather than active low, as is normal for + TTL devices. + - SN74256: A dual 4-bit latch with common control inputs and a + pinout similar to 74259, this device subtracts one of its + address lines and replaces it with a second data input which is + loaded in parallel. + - F4723B/4724B: These dual 4-bit (4723B) and 8-bit (4724B) latches + likely became part of the 4000B series when Fairchild introduced + their isoplanar CMOS line around 1974. They are pin-compatible + with 74256 and 74259 except for having active high clear inputs. + 4723B (originally 34723) might actually have preceded 74256, + since Fairchild's 1975 MOS CCD Data Book denies the existence of + a TTL counterpart. + - MC14599B: Motorola's moderately successful expansion of the + 4000B CMOS series includes this enhanced version of the CD4099B, + which has a bidirectional data pin and additional read/write and + chip select (active high) control inputs, allowing output bits + to be read back. + - NE590/591 Addressable Peripheral Drivers: Part of Signetics' + linear catalogue, these combine addressable latches with high + current drivers. NE590 has open collector Darlington outputs + (inverting logic) and is pin-compatible with 74LS259. NE591 uses + an extra chip select and sources outputs from a common collector + line independent of Vcc; it lacks the demultiplex mode. + +*********************************************************************** + + 74259 Function Table Latch Selection Table + + Inputs | Outputs Inputs | Output + /C /E | Qa Qn A2 A1 A0 | Addressed + ---------+---------- -----------+------------- + H L | D Qn L L L | Q0 + H H | Qa Qn L L H | Q1 + L L | Qa L L H L | Q2 + L H | L L L H H | Q3 + H L L | Q4 + Qa = output addressed H L H | Q5 + Qn = all other outputs H H L | Q6 + H H H | Q7 + +**********************************************************************/ + +#include "emu.h" +#include "74259.h" + +#define LOG_ALL_WRITES (0) +#define LOG_UNDEFINED_WRITES (0) +#define LOG_MYSTERY_BITS (0) + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +// device type definitions +DEFINE_DEVICE_TYPE(LS259, ls259_device, "ls259", "74LS259 Addressable Latch") +DEFINE_DEVICE_TYPE(HC259, hc259_device, "hc259", "74HC259 Addressable Latch") +DEFINE_DEVICE_TYPE(HCT259, hct259_device, "hct259", "74HCT259 Addressable Latch") +DEFINE_DEVICE_TYPE(F9334, f9334_device, "f9334", "Fairchild 9334 Addressable Latch") +DEFINE_DEVICE_TYPE(CD4099, cd4099_device, "cd4099", "CD4099B Addressable Latch") + +//************************************************************************** +// ADDRESSABLE LATCH DEVICE +//************************************************************************** + +addressable_latch_device::addressable_latch_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, type, tag, owner, clock), + m_q_out_cb{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}}, + m_parallel_out_cb(*this) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void addressable_latch_device::device_start() +{ + // resolve callbacks + for (devcb_write_line &cb : m_q_out_cb) + cb.resolve(); + m_parallel_out_cb.resolve(); + + // initial input state + m_address = 0; + m_data = false; + m_enable = false; + m_clear = false; + + // arbitrary initial output state + m_q = 0xff; + + save_item(NAME(m_address)); + save_item(NAME(m_data)); + save_item(NAME(m_enable)); + save_item(NAME(m_q)); + save_item(NAME(m_clear)); +} + +//------------------------------------------------- +// device_reset - reset the device +//------------------------------------------------- + +void addressable_latch_device::device_reset() +{ + // assume clear upon reset + clear_outputs(m_enable ? u8(m_data) << m_address : 0); +} + +//------------------------------------------------- +// write_bit - synchronously update one of the +// eight output lines with a new data bit +//------------------------------------------------- + +void addressable_latch_device::write_bit(offs_t offset, bool d) +{ + write_abcd(offset, d); + enable_w(0); + enable_w(1); +} + +//------------------------------------------------- +// write_abcd - update address select and data +// inputs without changing enable state +//------------------------------------------------- + +void addressable_latch_device::write_abcd(u8 a, bool d) +{ + m_address = a & 7; + m_data = d; + + if (m_enable) + { + if (m_clear) + clear_outputs(u8(m_data) << m_address); + else + update_bit(); + } +} + +//------------------------------------------------- +// enable_w - handle enable input (active low) +//------------------------------------------------- + +WRITE_LINE_MEMBER(addressable_latch_device::enable_w) +{ + m_enable = !state; + if (m_enable) + update_bit(); + else if (m_clear) + clear_outputs(0); +} + +//------------------------------------------------- +// update_bit - update one of the eight output +// lines with a new data bit +//------------------------------------------------- + +void addressable_latch_device::update_bit() +{ + // first verify that the selected bit is actually changing + if (BIT(m_q, m_address) == m_data) + return; + + if (!m_clear) + { + // update selected bit with new data + m_q = (m_q & ~(1 << m_address)) | (u8(m_data) << m_address); + } + else + { + // clear any other bit that was formerly set + clear_outputs(0); + m_q = u8(m_data) << m_address; + } + + // update output line via callback + if (!m_q_out_cb[m_address].isnull()) + m_q_out_cb[m_address](m_data); + + // update parallel output + if (!m_parallel_out_cb.isnull()) + m_parallel_out_cb(0, m_q, 1 << m_address); + + // do some logging + if (LOG_ALL_WRITES || (LOG_UNDEFINED_WRITES && m_q_out_cb[m_address].isnull() && m_parallel_out_cb.isnull())) + logerror("Q%d %s at %s\n", m_address, m_data ? "set" : "cleared", machine().describe_context()); +} + +//------------------------------------------------- +// write_d0 - bus-triggered write handler using +// LSB of data (or CRUOUT on TMS99xx) +//------------------------------------------------- + +WRITE8_MEMBER(addressable_latch_device::write_d0) +{ + if (LOG_MYSTERY_BITS && data != 0x00 && data != 0x01 && data != 0xff) + logerror("Mystery bits written to Q%d:%s%s%s%s%s%s%s\n", + offset, + BIT(data, 7) ? " D7" : "", + BIT(data, 6) ? " D6" : "", + BIT(data, 5) ? " D5" : "", + BIT(data, 4) ? " D4" : "", + BIT(data, 3) ? " D3" : "", + BIT(data, 2) ? " D2" : "", + BIT(data, 1) ? " D1" : ""); + + write_bit(offset, BIT(data, 0)); +} + +//------------------------------------------------- +// write_d7 - bus-triggered write handler using +// MSB of (8-bit) data +//------------------------------------------------- + +WRITE8_MEMBER(addressable_latch_device::write_d7) +{ + if (LOG_MYSTERY_BITS && data != 0x00 && data != 0x80 && data != 0xff) + logerror("Mystery bits written to Q%d:%s%s%s%s%s%s%s\n", + offset, + BIT(data, 6) ? " D6" : "", + BIT(data, 5) ? " D5" : "", + BIT(data, 4) ? " D4" : "", + BIT(data, 3) ? " D3" : "", + BIT(data, 2) ? " D2" : "", + BIT(data, 1) ? " D1" : "", + BIT(data, 0) ? " D0" : ""); + + write_bit(offset, BIT(data, 7)); +} + +//------------------------------------------------- +// write_a0 - write handler that uses lowest bit +// of address bus as data input (data on bus is +// ignored) +//------------------------------------------------- + +WRITE8_MEMBER(addressable_latch_device::write_a0) +{ + write_bit(offset >> 1, offset & 1); +} + +//------------------------------------------------- +// write_nibble - write handler using LSB of +// data as input and next three bits as address +// (offset is ignored) +//------------------------------------------------- + +WRITE8_MEMBER(addressable_latch_device::write_nibble) +{ + write_bit((data & 0x0e) >> 1, data & 0x01); +} + +//------------------------------------------------- +// clear - pulse clear line from bus write +//------------------------------------------------- + +WRITE8_MEMBER(addressable_latch_device::clear) +{ + clear_outputs(m_enable ? u8(m_data) << m_address : 0); +} + +//------------------------------------------------- +// q[0-7]_r - read individual output lines +//------------------------------------------------- + +READ_LINE_MEMBER(addressable_latch_device::q0_r) { return BIT(m_q, 0); } +READ_LINE_MEMBER(addressable_latch_device::q1_r) { return BIT(m_q, 1); } +READ_LINE_MEMBER(addressable_latch_device::q2_r) { return BIT(m_q, 2); } +READ_LINE_MEMBER(addressable_latch_device::q3_r) { return BIT(m_q, 3); } +READ_LINE_MEMBER(addressable_latch_device::q4_r) { return BIT(m_q, 4); } +READ_LINE_MEMBER(addressable_latch_device::q5_r) { return BIT(m_q, 5); } +READ_LINE_MEMBER(addressable_latch_device::q6_r) { return BIT(m_q, 6); } +READ_LINE_MEMBER(addressable_latch_device::q7_r) { return BIT(m_q, 7); } + +//------------------------------------------------- +// clear_w - handle clear/reset input +//------------------------------------------------- + +WRITE_LINE_MEMBER(addressable_latch_device::clear_w) +{ + m_clear = is_cmos() ? bool(state) : !state; + if (m_clear) + clear_outputs(m_enable ? u8(m_data) << m_address : 0); +} + +//------------------------------------------------- +// clear_outputs - clear all output lines +//------------------------------------------------- + +void addressable_latch_device::clear_outputs(u8 new_q) +{ + const u8 bits_changed = m_q ^ new_q; + if (bits_changed == 0) + return; + + m_q = new_q; + + // return any previously set output lines to clear state + for (int bit = 0; bit < 8; bit++) + if (BIT(bits_changed, bit) && !m_q_out_cb[bit].isnull()) + m_q_out_cb[bit](BIT(new_q, bit)); + + // update parallel output + if (!m_parallel_out_cb.isnull()) + m_parallel_out_cb(0, new_q, bits_changed); +} + +//************************************************************************** +// LS259 DEVICE +//************************************************************************** + +ls259_device::ls259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : addressable_latch_device(mconfig, LS259, tag, owner, clock) +{ +} + +//************************************************************************** +// HC259 DEVICE +//************************************************************************** + +hc259_device::hc259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : addressable_latch_device(mconfig, HC259, tag, owner, clock) +{ +} + +//************************************************************************** +// HCT259 DEVICE +//************************************************************************** + +hct259_device::hct259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : addressable_latch_device(mconfig, HCT259, tag, owner, clock) +{ +} + +//************************************************************************** +// F9334 DEVICE +//************************************************************************** + +f9334_device::f9334_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : addressable_latch_device(mconfig, F9334, tag, owner, clock) +{ +} + +//************************************************************************** +// CD4099 DEVICE +//************************************************************************** + +cd4099_device::cd4099_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : addressable_latch_device(mconfig, CD4099, tag, owner, clock) +{ +} diff --git a/src/devices/machine/74259.h b/src/devices/machine/74259.h new file mode 100644 index 00000000000..df84c94c0d0 --- /dev/null +++ b/src/devices/machine/74259.h @@ -0,0 +1,173 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/********************************************************************** + + 74259/9334 8-Bit Addressable Latch + +*********************************************************************** + ____ ____ + A0 1 |* \_/ | 16 Vcc + A1 2 | | 15 /C + A2 3 | | 14 /E + Q0 4 | SN74259 | 13 D + Q1 5 | F 9334 | 12 Q7 + Q2 6 | | 11 Q6 + Q3 7 | | 10 Q5 + GND 8 |___________| 9 Q4 + + ____ ____ + Q7 1 |* \_/ | 16 Vdd + RESET 2 | | 15 Q6 + DATA 3 | | 14 Q5 + WRITE DISABLE 4 | | 13 Q4 + A0 5 | CD4099B | 12 Q3 + A1 6 | | 11 Q2 + A2 7 | | 10 Q1 + Vss 8 |___________| 9 Q0 + +**********************************************************************/ + +#pragma once + +#ifndef DEVICES_MACHINE_74259_H +#define DEVICES_MACHINE_74259_H + +//************************************************************************** +// CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(_devcb) \ + devcb = &addressable_latch_device::set_q_out_cb(*device, 0, DEVCB_##_devcb); +#define MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(_devcb) \ + devcb = &addressable_latch_device::set_q_out_cb(*device, 1, DEVCB_##_devcb); +#define MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(_devcb) \ + devcb = &addressable_latch_device::set_q_out_cb(*device, 2, DEVCB_##_devcb); +#define MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(_devcb) \ + devcb = &addressable_latch_device::set_q_out_cb(*device, 3, DEVCB_##_devcb); +#define MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(_devcb) \ + devcb = &addressable_latch_device::set_q_out_cb(*device, 4, DEVCB_##_devcb); +#define MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(_devcb) \ + devcb = &addressable_latch_device::set_q_out_cb(*device, 5, DEVCB_##_devcb); +#define MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(_devcb) \ + devcb = &addressable_latch_device::set_q_out_cb(*device, 6, DEVCB_##_devcb); +#define MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(_devcb) \ + devcb = &addressable_latch_device::set_q_out_cb(*device, 7, DEVCB_##_devcb); + +#define MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(_devcb) \ + devcb = &addressable_latch_device::set_parallel_out_cb(*device, DEVCB_##_devcb); + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> addressable_latch_device + +class addressable_latch_device : public device_t +{ +public: + // construction/destruction + addressable_latch_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + + // static configuration + template<class Object> static devcb_base &set_q_out_cb(device_t &device, int bit, Object object) { return downcast<addressable_latch_device &>(device).m_q_out_cb[bit].set_callback(object); } + template<class Object> static devcb_base &set_parallel_out_cb(device_t &device, Object object) { return downcast<addressable_latch_device &>(device).m_parallel_out_cb.set_callback(object); } + + // data write handlers + void write_bit(offs_t offset, bool d); + void write_abcd(u8 a, bool d); + DECLARE_WRITE8_MEMBER(write_d0); + DECLARE_WRITE8_MEMBER(write_d7); + DECLARE_WRITE8_MEMBER(write_a0); + DECLARE_WRITE8_MEMBER(write_nibble); + DECLARE_WRITE8_MEMBER(clear); + + // read handlers + DECLARE_READ_LINE_MEMBER(q0_r); + DECLARE_READ_LINE_MEMBER(q1_r); + DECLARE_READ_LINE_MEMBER(q2_r); + DECLARE_READ_LINE_MEMBER(q3_r); + DECLARE_READ_LINE_MEMBER(q4_r); + DECLARE_READ_LINE_MEMBER(q5_r); + DECLARE_READ_LINE_MEMBER(q6_r); + DECLARE_READ_LINE_MEMBER(q7_r); + u8 output_state() const { return m_q; } + + // control inputs + DECLARE_WRITE_LINE_MEMBER(enable_w); + DECLARE_WRITE_LINE_MEMBER(clear_w); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + virtual bool is_cmos() const { return false; } + +private: + // internal helpers + void update_bit(); + void clear_outputs(u8 new_q); + + // device callbacks + devcb_write_line m_q_out_cb[8]; // output line callback array + devcb_write8 m_parallel_out_cb; // parallel output option + + // internal state + u8 m_address; // address input + bool m_data; // data bit input + u8 m_q; // latched output state + bool m_enable; // enable/load active state + bool m_clear; // clear/reset active state +}; + +// ======================> ls259_device + +class ls259_device : public addressable_latch_device +{ +public: + ls259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + +// ======================> hc259_device + +class hc259_device : public addressable_latch_device +{ +public: + hc259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + +// ======================> hct259_device + +class hct259_device : public addressable_latch_device +{ +public: + hct259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + +// ======================> f9334_device + +class f9334_device : public addressable_latch_device +{ +public: + f9334_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + +// ======================> cd4099_device + +class cd4099_device : public addressable_latch_device +{ +public: + cd4099_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + virtual bool is_cmos() const override { return true; } +}; + +// device type definition +DECLARE_DEVICE_TYPE(LS259, ls259_device) +DECLARE_DEVICE_TYPE(HC259, hc259_device) +DECLARE_DEVICE_TYPE(HCT259, hct259_device) +DECLARE_DEVICE_TYPE(F9334, f9334_device) +DECLARE_DEVICE_TYPE(CD4099, cd4099_device) + +#endif diff --git a/src/devices/machine/dm9334.cpp b/src/devices/machine/dm9334.cpp deleted file mode 100644 index b4693ad7545..00000000000 --- a/src/devices/machine/dm9334.cpp +++ /dev/null @@ -1,188 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -/***************************************************************************** - - (DM)9334 8-Bit Addressable Latch - -*****************************************************************************/ - -#include "emu.h" -#include "dm9334.h" - -DEFINE_DEVICE_TYPE(DM9334, dm9334_device, "dm9934", "NS [DM]9934 8-bit Addressable Latch") - -dm9334_device::dm9334_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, DM9334, tag, owner, clock) - , m_out_func(*this) - , m_q0_func(*this) - , m_q1_func(*this) - , m_q2_func(*this) - , m_q3_func(*this) - , m_q4_func(*this) - , m_q5_func(*this) - , m_q6_func(*this) - , m_q7_func(*this) - , m_e(0) - , m_c(0) - , m_d(0) - , m_a(0) - , m_out(0) -{ -} - -void dm9334_device::device_start() -{ - init(); - - save_item(NAME(m_e)); - save_item(NAME(m_c)); - save_item(NAME(m_d)); - save_item(NAME(m_a)); - save_item(NAME(m_out)); - - m_out_func.resolve_safe(); - m_q0_func.resolve_safe(); - m_q1_func.resolve_safe(); - m_q2_func.resolve_safe(); - m_q3_func.resolve_safe(); - m_q4_func.resolve_safe(); - m_q5_func.resolve_safe(); - m_q6_func.resolve_safe(); - m_q7_func.resolve_safe(); -} - -void dm9334_device::device_reset() -{ - init(); -} - -void dm9334_device::init() -{ - m_e = 0; - m_c = 0; - m_d = 0; - m_a = 0; - m_out = 0; -} - -void dm9334_device::tick() -{ - uint8_t last_out = m_out; - - mode_t mode = static_cast<mode_t>((m_e << 1) | m_c); - switch(mode) - { - case mode_t::CLEAR: - m_out = 0; - break; - - case mode_t::DEMUX: - m_out = (m_d << m_a); - break; - - case mode_t::MEMORY: - // Preserve previous state - break; - - case mode_t::LATCH: - m_out &= ~(1 << m_a); - m_out |= (m_d << m_a); - break; - } - - if (m_out != last_out) - { - m_out_func(m_out); - - for (int bit = 0; bit < 8; bit++) - { - if (BIT(m_out, bit) == BIT(last_out, bit)) - continue; - - switch(bit) - { - case 0: m_q0_func(BIT(m_out, bit)); break; - case 1: m_q1_func(BIT(m_out, bit)); break; - case 2: m_q2_func(BIT(m_out, bit)); break; - case 3: m_q3_func(BIT(m_out, bit)); break; - case 4: m_q4_func(BIT(m_out, bit)); break; - case 5: m_q5_func(BIT(m_out, bit)); break; - case 6: m_q6_func(BIT(m_out, bit)); break; - case 7: m_q7_func(BIT(m_out, bit)); break; - } - } - } -} - -WRITE_LINE_MEMBER( dm9334_device::e_w ) -{ - uint8_t last_e = m_e; - m_e = state & 1; - if (last_e != m_e) - tick(); -} - -WRITE_LINE_MEMBER( dm9334_device::c_w ) -{ - uint8_t last_c = m_c; - m_c = state & 1; - if (last_c != m_c) - tick(); -} - -WRITE_LINE_MEMBER( dm9334_device::d_w ) -{ - uint8_t last_d = m_d; - m_d = state & 1; - if (last_d != m_d) - tick(); -} - -WRITE_LINE_MEMBER( dm9334_device::a0_w ) -{ - uint8_t last_a = m_a; - m_a &= ~(1 << 0); - m_a |= (state & 1) << 0; - if (last_a != m_a) - tick(); -} - -WRITE_LINE_MEMBER( dm9334_device::a1_w ) -{ - uint8_t last_a = m_a; - m_a &= ~(1 << 1); - m_a |= (state & 1) << 1; - if (last_a != m_a) - tick(); -} - -WRITE_LINE_MEMBER( dm9334_device::a2_w ) -{ - uint8_t last_a = m_a; - m_a &= ~(1 << 2); - m_a |= (state & 1) << 2; - if (last_a != m_a) - tick(); -} - -WRITE8_MEMBER( dm9334_device::a_w ) -{ - uint8_t last_a = m_a; - m_a = data & 0x7; - if (last_a != m_a) - tick(); -} - -READ8_MEMBER( dm9334_device::output_r ) -{ - return m_out; -} - -READ_LINE_MEMBER( dm9334_device::q0_r ) { return BIT(m_out, 0); } -READ_LINE_MEMBER( dm9334_device::q1_r ) { return BIT(m_out, 1); } -READ_LINE_MEMBER( dm9334_device::q2_r ) { return BIT(m_out, 2); } -READ_LINE_MEMBER( dm9334_device::q3_r ) { return BIT(m_out, 3); } -READ_LINE_MEMBER( dm9334_device::q4_r ) { return BIT(m_out, 4); } -READ_LINE_MEMBER( dm9334_device::q5_r ) { return BIT(m_out, 5); } -READ_LINE_MEMBER( dm9334_device::q6_r ) { return BIT(m_out, 6); } -READ_LINE_MEMBER( dm9334_device::q7_r ) { return BIT(m_out, 7); } diff --git a/src/devices/machine/dm9334.h b/src/devices/machine/dm9334.h deleted file mode 100644 index cc71862e686..00000000000 --- a/src/devices/machine/dm9334.h +++ /dev/null @@ -1,182 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -/***************************************************************************** - - (DM)9334 8-Bit Addressable Latch - -****************************************************************************** - - Connection Diagram: - ___ ___ - A0 1 |* u | 16 Vcc - A1 2 | | 15 /C - A2 3 | | 14 /E - Q0 4 | | 13 D - Q1 5 | | 12 Q7 - Q2 6 | | 11 Q6 - Q3 7 | | 10 Q5 - GND 8 |_______| 9 Q4 - -*********************************************************************** - - Function Tables: - - /E /C Mode - L H Addressable Latch - H H Memory - L L Active High Eight - Channel Demultiplexer - H L Clear - - ___________________________________________________________________________________________ - | Inputs | Present Output States | | - |---------------------------|-------------------------------------------------| Mode | - | /C /E | D | A0 A1 A2 | Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 | | - |---------|---|-------------|-------------------------------------------------|-------------| - | L H | X | X X X | L L L L L L L L | Clear | - |---------|---|-------------|-------------------------------------------------|-------------| - | L L | L | L L L | L L L L L L L L | | - | L L | H | L L L | H L L L L L L L | | - | L L | L | H L L | L L L L L L L L | | - | L L | H | H L L | L H L L L L L L | | - | * * | * | * | * | Demultiplex | - | * * | * | * | * | | - | * * | * | * | * | | - | * * | * | * | * | | - | L L | H | H H H | L L L L L L L H | | - |---------|---|-------------|-------------------------------------------------|-------------| - | H H | X | X X X | Qn-1 | Memory | - |---------|---|-------------|-------------------------------------------------|-------------| - | H L | L | L L L | L Qn-1 Qn-1 Qn-1 | | - | H L | H | L L L | H Qn-1 Qn-1 | | - | H L | L | H L L | Qn-1 L Qn-1 | | - | H L | H | H L L | Qn-1 H Qn-1 | | - | * * | * | * | * | | - | * * | * | * | * | | - | * * | * | * | * | | - | H L | L | H H H | Qn-1 Qn-1 L | | - | H L | H | H H H | Qn-1 Qn-1 H | | - |---------|---|-------------|-------------------------------------------------|-------------| - - X = Don't Care Condition - L = Low Voltage Level - H = High Voltage Level - Qn-1 = Previous Output State - -**********************************************************************/ - -#ifndef MAME_MACHINE_DM9334_H -#define MAME_MACHINE_DM9334_H - -#pragma once - - -#define MCFG_DM9334_OUTPUT_CB(_devcb) \ - devcb = &dm9334_device::set_out_cb(*device, DEVCB_##_devcb); - -#define MCFG_DM9334_Q0_CB(_devcb) \ - devcb = &dm9334_device::set_q0_cb(*device, DEVCB_##_devcb); - -#define MCFG_DM9334_Q1_CB(_devcb) \ - devcb = &dm9334_device::set_q1_cb(*device, DEVCB_##_devcb); - -#define MCFG_DM9334_Q2_CB(_devcb) \ - devcb = &dm9334_device::set_q2_cb(*device, DEVCB_##_devcb); - -#define MCFG_DM9334_Q3_CB(_devcb) \ - devcb = &dm9334_device::set_q3_cb(*device, DEVCB_##_devcb); - -#define MCFG_DM9334_Q4_CB(_devcb) \ - devcb = &dm9334_device::set_q4_cb(*device, DEVCB_##_devcb); - -#define MCFG_DM9334_Q5_CB(_devcb) \ - devcb = &dm9334_device::set_q5_cb(*device, DEVCB_##_devcb); - -#define MCFG_DM9334_Q6_CB(_devcb) \ - devcb = &dm9334_device::set_q6_cb(*device, DEVCB_##_devcb); - -#define MCFG_DM9334_Q7_CB(_devcb) \ - devcb = &dm9334_device::set_q7_cb(*device, DEVCB_##_devcb); - -#define MCFG_DM9334_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, DM9334, 0) - -class dm9334_device : public device_t -{ -public: - // construction/destruction - dm9334_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - // static configuration helpers - template <class Object> static devcb_base &set_out_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_out_func.set_callback(std::forward<Object>(cb)); } - template <class Object> static devcb_base &set_q0_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q0_func.set_callback(std::forward<Object>(cb)); } - template <class Object> static devcb_base &set_q1_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q1_func.set_callback(std::forward<Object>(cb)); } - template <class Object> static devcb_base &set_q2_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q2_func.set_callback(std::forward<Object>(cb)); } - template <class Object> static devcb_base &set_q3_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q3_func.set_callback(std::forward<Object>(cb)); } - template <class Object> static devcb_base &set_q4_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q4_func.set_callback(std::forward<Object>(cb)); } - template <class Object> static devcb_base &set_q5_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q5_func.set_callback(std::forward<Object>(cb)); } - template <class Object> static devcb_base &set_q6_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q6_func.set_callback(std::forward<Object>(cb)); } - template <class Object> static devcb_base &set_q7_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q7_func.set_callback(std::forward<Object>(cb)); } - - DECLARE_WRITE_LINE_MEMBER( e_w ); - DECLARE_WRITE_LINE_MEMBER( c_w ); - DECLARE_WRITE_LINE_MEMBER( d_w ); - DECLARE_WRITE_LINE_MEMBER( a0_w ); - DECLARE_WRITE_LINE_MEMBER( a1_w ); - DECLARE_WRITE_LINE_MEMBER( a2_w ); - DECLARE_WRITE8_MEMBER( a_w ); - - DECLARE_READ8_MEMBER( output_r ); - DECLARE_READ_LINE_MEMBER( q0_r ); - DECLARE_READ_LINE_MEMBER( q1_r ); - DECLARE_READ_LINE_MEMBER( q2_r ); - DECLARE_READ_LINE_MEMBER( q3_r ); - DECLARE_READ_LINE_MEMBER( q4_r ); - DECLARE_READ_LINE_MEMBER( q5_r ); - DECLARE_READ_LINE_MEMBER( q6_r ); - DECLARE_READ_LINE_MEMBER( q7_r ); - - uint8_t get_output() const { return m_out; } - -protected: - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - -private: - enum class mode_t - { - DEMUX = 0x00, - LATCH = 0x01, - CLEAR = 0x02, - MEMORY = 0x03 - }; - - void init(); - void tick(); - - // callbacks - devcb_write_line m_out_func; - devcb_write_line m_q0_func; - devcb_write_line m_q1_func; - devcb_write_line m_q2_func; - devcb_write_line m_q3_func; - devcb_write_line m_q4_func; - devcb_write_line m_q5_func; - devcb_write_line m_q6_func; - devcb_write_line m_q7_func; - - // inputs - uint8_t m_e; // pin 14 - uint8_t m_c; // pin 15 - uint8_t m_d; // pin 13 - uint8_t m_a; // pins 1-3 from LSB to MSB - - // outputs - uint8_t m_out; // pins 4-7 and 9-12 from LSB to MSB -}; - -// device type definition -DECLARE_DEVICE_TYPE(DM9334, dm9334_device) - -#endif // MAME_MACHINE_DM9334_H diff --git a/src/devices/machine/wozfdc.cpp b/src/devices/machine/wozfdc.cpp index 1350ce4b126..df7570f7cd7 100644 --- a/src/devices/machine/wozfdc.cpp +++ b/src/devices/machine/wozfdc.cpp @@ -41,12 +41,22 @@ const tiny_rom_entry *wozfdc_device::device_rom_region() const return ROM_NAME( diskiing ); } +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +MACHINE_CONFIG_MEMBER( wozfdc_device::device_add_mconfig ) + MCFG_DEVICE_ADD("phaselatch", F9334, 0) // 9334Â on circuit diagram but 74LS259 in parts list; actual chip may vary + MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(wozfdc_device, set_phase)) +MACHINE_CONFIG_END + //************************************************************************** // LIVE DEVICE //************************************************************************** wozfdc_device::wozfdc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - device_t(mconfig, type, tag, owner, clock) + device_t(mconfig, type, tag, owner, clock), + m_phaselatch(*this, "phaselatch") { } @@ -75,7 +85,6 @@ void wozfdc_device::device_start() save_item(NAME(mode_write)); save_item(NAME(mode_load)); save_item(NAME(active)); - save_item(NAME(phases)); save_item(NAME(external_io_select)); save_item(NAME(cycles)); save_item(NAME(data_reg)); @@ -91,7 +100,6 @@ void wozfdc_device::device_reset() { floppy = nullptr; active = MODE_IDLE; - phases = 0x00; mode_write = false; mode_load = false; last_6502_write = 0x00; @@ -208,21 +216,16 @@ WRITE8_MEMBER(wozfdc_device::write) last_6502_write = data; } -void wozfdc_device::phase(int ph, bool on) +WRITE8_MEMBER(wozfdc_device::set_phase) { - if(on) - phases |= 1 << ph; - else - phases &= ~(1 << ph); - - if(floppy && active) - floppy->seek_phase_w(phases); + if (floppy && active) + floppy->seek_phase_w(data); } void wozfdc_device::control(int offset) { if(offset < 8) - phase(offset >> 1, offset & 1); + m_phaselatch->write_bit(offset >> 1, offset & 1); else switch(offset) { diff --git a/src/devices/machine/wozfdc.h b/src/devices/machine/wozfdc.h index beb076ee11c..13c3205416d 100644 --- a/src/devices/machine/wozfdc.h +++ b/src/devices/machine/wozfdc.h @@ -15,6 +15,7 @@ #include "imagedev/floppy.h" #include "formats/flopimg.h" +#include "machine/74259.h" //************************************************************************** // TYPE DEFINITIONS @@ -27,6 +28,7 @@ class wozfdc_device: public: // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; DECLARE_READ8_MEMBER(read); DECLARE_WRITE8_MEMBER(write); @@ -40,7 +42,7 @@ protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; void control(int offset); - void phase(int ph, bool on); + DECLARE_WRITE8_MEMBER(set_phase); uint64_t time_to_cycles(const attotime &tm); attotime cycles_to_time(uint64_t cycles); void a3_update_drive_sel(); @@ -55,6 +57,8 @@ protected: floppy_connector *floppy0, *floppy1, *floppy2, *floppy3; floppy_image_device *floppy; + required_device<addressable_latch_device> m_phaselatch; + uint64_t cycles; uint8_t data_reg, address; attotime write_start_time; @@ -66,7 +70,6 @@ protected: uint8_t last_6502_write; bool mode_write, mode_load; int active; - uint8_t phases; emu_timer *timer, *delay_timer; bool external_drive_select; bool external_io_select; diff --git a/src/devices/sound/namco.cpp b/src/devices/sound/namco.cpp index 363b03d21f0..04e73d03b81 100644 --- a/src/devices/sound/namco.cpp +++ b/src/devices/sound/namco.cpp @@ -263,9 +263,9 @@ uint32_t namco_audio_device::namco_update_one(stream_sample_t *buffer, int lengt 0x1f: ch 2 volume */ -WRITE8_MEMBER( namco_device::pacman_sound_enable_w ) +WRITE_LINE_MEMBER(namco_device::pacman_sound_enable_w) { - m_sound_enable = data; + m_sound_enable = state; } WRITE8_MEMBER( namco_device::pacman_sound_w ) @@ -491,9 +491,9 @@ WRITE8_MEMBER( namco_device::polepos_sound_w ) 0x3e ch 7 waveform select & frequency */ -void namco_15xx_device::mappy_sound_enable(int enable) +WRITE_LINE_MEMBER(namco_15xx_device::mappy_sound_enable) { - m_sound_enable = enable; + m_sound_enable = state; } WRITE8_MEMBER(namco_15xx_device::namco_15xx_w) diff --git a/src/devices/sound/namco.h b/src/devices/sound/namco.h index 82df64bdc24..d1ef231e66c 100644 --- a/src/devices/sound/namco.h +++ b/src/devices/sound/namco.h @@ -82,13 +82,13 @@ class namco_device : public namco_audio_device public: namco_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_WRITE8_MEMBER( pacman_sound_enable_w ); - DECLARE_WRITE8_MEMBER( pacman_sound_w ); + DECLARE_WRITE_LINE_MEMBER(pacman_sound_enable_w); + DECLARE_WRITE8_MEMBER(pacman_sound_w); void polepos_sound_enable(int enable); - DECLARE_READ8_MEMBER( polepos_sound_r ); - DECLARE_WRITE8_MEMBER( polepos_sound_w ); + DECLARE_READ8_MEMBER(polepos_sound_r); + DECLARE_WRITE8_MEMBER(polepos_sound_w); protected: virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; @@ -104,7 +104,7 @@ public: DECLARE_READ8_MEMBER( sharedram_r ); DECLARE_WRITE8_MEMBER( sharedram_w ); - void mappy_sound_enable(int enable); + DECLARE_WRITE_LINE_MEMBER(mappy_sound_enable); protected: virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; diff --git a/src/mame/audio/asteroid.cpp b/src/mame/audio/asteroid.cpp index 43900205d88..dcf5cde8b7a 100644 --- a/src/mame/audio/asteroid.cpp +++ b/src/mame/audio/asteroid.cpp @@ -48,28 +48,6 @@ static const discrete_555_cc_desc asteroid_thump_555cc = 0.8 // VBE 2N3906 (Si) }; -#define ASTEROID_SAUCER_SND_EN NODE_01 -#define ASTEROID_SAUCER_FIRE_EN NODE_02 -#define ASTEROID_SAUCER_SEL NODE_03 -#define ASTEROID_THRUST_EN NODE_04 -#define ASTEROID_SHIP_FIRE_EN NODE_05 -#define ASTEROID_LIFE_EN NODE_06 -#define ASTEROID_NOISE_RESET NODE_07 - -#define ASTEROID_THUMP_EN NODE_08 -#define ASTEROID_THUMP_DATA NODE_09 -#define ASTEROID_EXPLODE_DATA NODE_10 -#define ASTEROID_EXPLODE_PITCH NODE_11 - -#define ASTEROID_NOISE NODE_20 -#define ASTEROID_THUMP_SND NODE_21 -#define ASTEROID_SAUCER_SND NODE_22 -#define ASTEROID_LIFE_SND NODE_23 -#define ASTEROID_SAUCER_FIRE_SND NODE_24 -#define ASTEROID_SHIP_FIRE_SND NODE_25 -#define ASTEROID_EXPLODE_SND NODE_26 -#define ASTEROID_THRUST_SND NODE_27 - DISCRETE_SOUND_START(asteroid) /************************************************/ /* Asteroid Effects Relataive Gain Table */ @@ -308,17 +286,6 @@ WRITE8_MEMBER(asteroid_state::asteroid_thump_w) m_discrete->write(space, ASTEROID_THUMP_DATA, data & 0x0f); } -WRITE8_MEMBER(asteroid_state::asteroid_sounds_w) -{ - m_discrete->write(space, NODE_RELATIVE(ASTEROID_SAUCER_SND_EN, offset), data & 0x80); -} - -WRITE8_MEMBER(asteroid_state::astdelux_sounds_w) -{ - /* Only ever activates the thrusters in Astdelux */ - m_discrete->write(space, ASTEROID_THRUST_EN, data & 0x80); -} - WRITE8_MEMBER(asteroid_state::asteroid_noise_reset_w) { m_discrete->write(space, ASTEROID_NOISE_RESET, 0); diff --git a/src/mame/audio/avalnche.cpp b/src/mame/audio/avalnche.cpp index c4d6865b5ff..8040ea4c734 100644 --- a/src/mame/audio/avalnche.cpp +++ b/src/mame/audio/avalnche.cpp @@ -7,15 +7,6 @@ *************************************************************************/ #include "emu.h" #include "includes/avalnche.h" -#include "sound/discrete.h" - - -/* Avalanche Discrete Sound Input Nodes */ -#define AVALNCHE_AUD0_EN NODE_01 -#define AVALNCHE_AUD1_EN NODE_02 -#define AVALNCHE_AUD2_EN NODE_03 -#define AVALNCHE_SOUNDLVL_DATA NODE_04 -#define AVALNCHE_ATTRACT_EN NODE_05 /*************************************************************************** @@ -27,32 +18,6 @@ WRITE8_MEMBER(avalnche_state::avalnche_noise_amplitude_w) m_discrete->write(space, AVALNCHE_SOUNDLVL_DATA, data & 0x3f); } -WRITE8_MEMBER(avalnche_state::avalnche_attract_enable_w) -{ - m_discrete->write(space, AVALNCHE_ATTRACT_EN, data & 0x01); -} - -WRITE8_MEMBER(avalnche_state::avalnche_audio_w) -{ - int bit = data & 0x01; - - switch (offset & 0x07) - { - case 0x00: /* AUD0 */ - m_discrete->write(space, AVALNCHE_AUD0_EN, bit); - break; - - case 0x01: /* AUD1 */ - m_discrete->write(space, AVALNCHE_AUD1_EN, bit); - break; - - case 0x02: /* AUD2 */ - default: - m_discrete->write(space, AVALNCHE_AUD2_EN, bit); - break; - } -} - /*************************************************************************** Avalanche sound system analog emulation @@ -130,8 +95,16 @@ DISCRETE_SOUND_END Catch memory audio output handlers ***************************************************************************/ -WRITE8_MEMBER(avalnche_state::catch_audio_w) +WRITE_LINE_MEMBER(avalnche_state::catch_aud0_w) { /* Different from avalnche, it plays a sound (offset 0/1/2) on data bit 0 rising edge. There's no indication that the game silences sound, it's probably done automatically. */ } + +WRITE_LINE_MEMBER(avalnche_state::catch_aud1_w) +{ +} + +WRITE_LINE_MEMBER(avalnche_state::catch_aud2_w) +{ +} diff --git a/src/mame/audio/bsktball.cpp b/src/mame/audio/bsktball.cpp index 23b01226f70..3322c33dc92 100644 --- a/src/mame/audio/bsktball.cpp +++ b/src/mame/audio/bsktball.cpp @@ -23,11 +23,6 @@ WRITE8_MEMBER(bsktball_state::bsktball_note_w) m_discrete->write(space, BSKTBALL_NOTE_DATA, data); // Note } -WRITE8_MEMBER(bsktball_state::bsktball_noise_reset_w) -{ - m_discrete->write(space, BSKTBALL_NOISE_EN, offset & 0x01); -} - /************************************************************************/ /* bsktball Sound System Analog emulation */ diff --git a/src/mame/audio/canyon.cpp b/src/mame/audio/canyon.cpp index 99d502605ad..7e65dc0f6cd 100644 --- a/src/mame/audio/canyon.cpp +++ b/src/mame/audio/canyon.cpp @@ -28,18 +28,6 @@ WRITE8_MEMBER(canyon_state::canyon_explode_w) } -WRITE8_MEMBER(canyon_state::canyon_attract_w) -{ - m_discrete->write(space, NODE_RELATIVE(CANYON_ATTRACT1_EN, (offset & 0x01)), offset & 0x02); -} - - -WRITE8_MEMBER(canyon_state::canyon_whistle_w) -{ - m_discrete->write(space, NODE_RELATIVE(CANYON_WHISTLE1_EN, (offset & 0x01)), offset & 0x02); -} - - /************************************************************************/ /* canyon Sound System Analog emulation */ /************************************************************************/ diff --git a/src/mame/audio/cclimber.cpp b/src/mame/audio/cclimber.cpp index 9da3460cf17..ba6fe7bd70f 100644 --- a/src/mame/audio/cclimber.cpp +++ b/src/mame/audio/cclimber.cpp @@ -69,30 +69,35 @@ MACHINE_CONFIG_MEMBER( cclimber_audio_device::device_add_mconfig ) MACHINE_CONFIG_END -WRITE8_MEMBER( cclimber_audio_device::sample_select_w ) +WRITE8_MEMBER(cclimber_audio_device::sample_select_w) { m_sample_num = data; } -WRITE8_MEMBER( cclimber_audio_device::sample_rate_w ) +WRITE8_MEMBER(cclimber_audio_device::sample_rate_w) { /* calculate the sampling frequency */ m_sample_freq = SND_CLOCK / 4 / (256 - data); } -WRITE8_MEMBER( cclimber_audio_device::sample_volume_w ) +WRITE8_MEMBER(cclimber_audio_device::sample_volume_w) { m_sample_volume = data & 0x1f; /* range 0-31 */ } -WRITE8_MEMBER( cclimber_audio_device::sample_trigger_w ) +WRITE_LINE_MEMBER(cclimber_audio_device::sample_trigger_w) { - if (data == 0) + if (state == 0) return; play_sample(32 * m_sample_num,m_sample_freq,m_sample_volume); } +WRITE8_MEMBER(cclimber_audio_device::sample_trigger_w) +{ + sample_trigger_w(data != 0); +} + void cclimber_audio_device::play_sample(int start,int freq,int volume) { diff --git a/src/mame/audio/cclimber.h b/src/mame/audio/cclimber.h index e11b471ffe7..9e84673dee4 100644 --- a/src/mame/audio/cclimber.h +++ b/src/mame/audio/cclimber.h @@ -36,9 +36,10 @@ public: // construction/destruction cclimber_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_WRITE8_MEMBER( sample_trigger_w ); - DECLARE_WRITE8_MEMBER( sample_rate_w ); - DECLARE_WRITE8_MEMBER( sample_volume_w ); + DECLARE_WRITE_LINE_MEMBER(sample_trigger_w); + DECLARE_WRITE8_MEMBER(sample_trigger_w); + DECLARE_WRITE8_MEMBER(sample_rate_w); + DECLARE_WRITE8_MEMBER(sample_volume_w); protected: // device level overrides diff --git a/src/mame/audio/cinemat.cpp b/src/mame/audio/cinemat.cpp index 3d757eb92f1..66b491825d2 100644 --- a/src/mame/audio/cinemat.cpp +++ b/src/mame/audio/cinemat.cpp @@ -36,9 +36,6 @@ #define RISING_EDGE(bit, changed, val) (((changed) & (bit)) && ((val) & (bit))) #define FALLING_EDGE(bit, changed, val) (((changed) & (bit)) && !((val) & (bit))) -#define SOUNDVAL_RISING_EDGE(bit) RISING_EDGE(bit, bits_changed, sound_val) -#define SOUNDVAL_FALLING_EDGE(bit) FALLING_EDGE(bit, bits_changed, sound_val) - #define SHIFTREG_RISING_EDGE(bit) RISING_EDGE(bit, (m_last_shift ^ m_current_shift), m_current_shift) #define SHIFTREG_FALLING_EDGE(bit) FALLING_EDGE(bit, (m_last_shift ^ m_current_shift), m_current_shift) @@ -48,26 +45,6 @@ /************************************* * - * Generic sound write - * - *************************************/ - -WRITE8_MEMBER(cinemat_state::cinemat_sound_control_w) -{ - uint8_t oldval = m_sound_control; - - /* form an 8-bit value with the new bit */ - m_sound_control = (m_sound_control & ~(1 << offset)) | ((data & 1) << offset); - - /* if something changed, call the sound subroutine */ - if ((m_sound_control != oldval) && m_sound_handler) - (this->*m_sound_handler)(m_sound_control, m_sound_control ^ oldval); -} - - - -/************************************* - * * Generic sound init * *************************************/ @@ -75,7 +52,6 @@ WRITE8_MEMBER(cinemat_state::cinemat_sound_control_w) void cinemat_state::sound_start() { /* register for save states */ - save_item(NAME(m_sound_control)); save_item(NAME(m_current_shift)); save_item(NAME(m_last_shift)); save_item(NAME(m_last_shift2)); @@ -88,14 +64,8 @@ void cinemat_state::sound_start() } -void cinemat_state::generic_init(sound_func sound_handler) +void cinemat_state::sound_reset() { - /* set the sound handler */ - m_sound_handler = sound_handler; - - /* reset sound control */ - m_sound_control = 0x9f; - /* reset shift register values */ m_current_shift = 0xffff; m_last_shift = 0xffff; @@ -130,32 +100,44 @@ static const char *const spacewar_sample_names[] = nullptr }; -void cinemat_state::spacewar_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::spacewar_sound0_w) { /* Explosion - rising edge */ - if (SOUNDVAL_RISING_EDGE(0x01)) + if (state) m_samples->start(0, (machine().rand() & 1) ? 0 : 6); +} +WRITE_LINE_MEMBER(cinemat_state::spacewar_sound1_w) +{ /* Fire sound - rising edge */ - if (SOUNDVAL_RISING_EDGE(0x02)) + if (state) m_samples->start(1, (machine().rand() & 1) ? 1 : 7); +} +WRITE_LINE_MEMBER(cinemat_state::spacewar_sound2_w) +{ /* Player 1 thrust - 0=on, 1=off */ - if (SOUNDVAL_FALLING_EDGE(0x04)) + if (!state) m_samples->start(3, 3, true); - if (SOUNDVAL_RISING_EDGE(0x04)) + if (state) m_samples->stop(3); +} +WRITE_LINE_MEMBER(cinemat_state::spacewar_sound3_w) +{ /* Player 2 thrust - 0=on, 1-off */ - if (SOUNDVAL_FALLING_EDGE(0x08)) + if (!state) m_samples->start(4, 4, true); - if (SOUNDVAL_RISING_EDGE(0x08)) + if (state) m_samples->stop(4); +} +WRITE_LINE_MEMBER(cinemat_state::spacewar_sound4_w) +{ /* Mute - 0=off, 1=on */ - if (SOUNDVAL_FALLING_EDGE(0x10)) + if (!state) m_samples->start(2, 2, true); /* play idle sound */ - if (SOUNDVAL_RISING_EDGE(0x10)) + if (state) { int i; @@ -169,13 +151,13 @@ void cinemat_state::spacewar_sound_w(uint8_t sound_val, uint8_t bits_changed) } } -SOUND_RESET_MEMBER( cinemat_state, spacewar ) -{ - generic_init(&cinemat_state::spacewar_sound_w); -} - MACHINE_CONFIG_START( spacewar_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, spacewar) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, spacewar_sound0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, spacewar_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, spacewar_sound2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, spacewar_sound3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, spacewar_sound4_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -202,28 +184,32 @@ static const char *const barrier_sample_names[] = nullptr }; -void cinemat_state::barrier_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::barrier_sound0_w) { /* Player die - rising edge */ - if (SOUNDVAL_RISING_EDGE(0x01)) + if (state) m_samples->start(0, 0); +} +WRITE_LINE_MEMBER(cinemat_state::barrier_sound1_w) +{ /* Player move - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x02)) + if (!state) m_samples->start(1, 1); - - /* Enemy move - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x04)) - m_samples->start(2, 2); } -SOUND_RESET_MEMBER( cinemat_state, barrier ) +WRITE_LINE_MEMBER(cinemat_state::barrier_sound2_w) { - generic_init(&cinemat_state::barrier_sound_w); + /* Enemy move - falling edge */ + if (!state) + m_samples->start(2, 2); } MACHINE_CONFIG_START( barrier_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, barrier) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, barrier_sound0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, barrier_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, barrier_sound2_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -248,35 +234,39 @@ static const char *const speedfrk_sample_names[] = nullptr }; -void cinemat_state::speedfrk_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::speedfrk_sound3_w) { /* on the falling edge of bit 0x08, clock the inverse of bit 0x04 into the top of the shiftreg */ - if (SOUNDVAL_FALLING_EDGE(0x08)) + if (!state) { - m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((~sound_val << 13) & 1); + m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((~m_outlatch->q2_r() << 13) & 1); /* high 12 bits control the frequency - counts from value to $FFF, carry triggers */ /* another counter */ /* low 4 bits control the volume of the noise output (explosion?) */ } +} +WRITE_LINE_MEMBER(cinemat_state::speedfrk_sound4_w) +{ /* off-road - 1=on, 0=off */ - if (SOUNDVAL_RISING_EDGE(0x10)) + if (state) m_samples->start(0, 0, true); - if (SOUNDVAL_FALLING_EDGE(0x10)) + if (!state) m_samples->stop(0); - - /* start LED is controlled by bit 0x02 */ - output().set_led_value(0, ~sound_val & 0x02); } -SOUND_RESET_MEMBER( cinemat_state, speedfrk ) +WRITE_LINE_MEMBER(cinemat_state::speedfrk_start_led_w) { - generic_init(&cinemat_state::speedfrk_sound_w); + /* start LED is controlled by bit 0x02 */ + output().set_led_value(0, !state); } MACHINE_CONFIG_START( speedfrk_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, speedfrk) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, speedfrk_start_led_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, speedfrk_sound3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, speedfrk_sound4_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -306,46 +296,62 @@ static const char *const starhawk_sample_names[] = nullptr }; -void cinemat_state::starhawk_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::starhawk_sound0_w) { /* explosion - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x01)) + if (!state) m_samples->start(0, 0); +} +WRITE_LINE_MEMBER(cinemat_state::starhawk_sound1_w) +{ /* right laser - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x02)) + if (!state) m_samples->start(1, 1); +} +WRITE_LINE_MEMBER(cinemat_state::starhawk_sound2_w) +{ /* left laser - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x04)) + if (!state) m_samples->start(2, 2); +} +WRITE_LINE_MEMBER(cinemat_state::starhawk_sound3_w) +{ /* K - 0=on, 1=off */ - if (SOUNDVAL_FALLING_EDGE(0x08)) + if (!state) m_samples->start(3, 3, true); - if (SOUNDVAL_RISING_EDGE(0x08)) + if (state) m_samples->stop(3); +} +WRITE_LINE_MEMBER(cinemat_state::starhawk_sound4_w) +{ /* master - 0=on, 1=off */ - if (SOUNDVAL_FALLING_EDGE(0x10)) + if (!state) m_samples->start(4, 4, true); - if (SOUNDVAL_RISING_EDGE(0x10)) + if (state) m_samples->stop(4); +} +WRITE_LINE_MEMBER(cinemat_state::starhawk_sound7_w) +{ /* K exit - 1=on, 0=off */ - if (SOUNDVAL_RISING_EDGE(0x80)) + if (state) m_samples->start(3, 5, true); - if (SOUNDVAL_FALLING_EDGE(0x80)) + if (!state) m_samples->stop(3); } -SOUND_RESET_MEMBER( cinemat_state, starhawk ) -{ - generic_init(&cinemat_state::starhawk_sound_w); -} - MACHINE_CONFIG_START( starhawk_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, starhawk) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, starhawk_sound0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, starhawk_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, starhawk_sound2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, starhawk_sound3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, starhawk_sound4_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, starhawk_sound7_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -375,40 +381,56 @@ static const char *const sundance_sample_names[] = nullptr }; -void cinemat_state::sundance_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::sundance_sound0_w) { /* bong - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x01)) + if (!state) m_samples->start(0, 0); +} +WRITE_LINE_MEMBER(cinemat_state::sundance_sound1_w) +{ /* whoosh - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x02)) + if (!state) m_samples->start(1, 1); +} +WRITE_LINE_MEMBER(cinemat_state::sundance_sound2_w) +{ /* explosion - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x04)) + if (!state) m_samples->start(2, 2); +} +WRITE_LINE_MEMBER(cinemat_state::sundance_sound3_w) +{ /* ping - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x08)) + if (!state) m_samples->start(3, 3); +} +WRITE_LINE_MEMBER(cinemat_state::sundance_sound4_w) +{ /* ping - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x10)) + if (!state) m_samples->start(4, 4); - - /* hatch - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x80)) - m_samples->start(5, 5); } -SOUND_RESET_MEMBER( cinemat_state, sundance ) +WRITE_LINE_MEMBER(cinemat_state::sundance_sound7_w) { - generic_init(&cinemat_state::sundance_sound_w); + /* hatch - falling edge */ + if (!state) + m_samples->start(5, 5); } MACHINE_CONFIG_START( sundance_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, sundance) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, sundance_sound0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, sundance_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, sundance_sound2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, sundance_sound3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, sundance_sound4_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, sundance_sound7_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -438,13 +460,13 @@ static const char *const tailg_sample_names[] = nullptr }; -void cinemat_state::tailg_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::tailg_sound_w) { /* the falling edge of bit 0x10 clocks bit 0x08 into the mux selected by bits 0x07 */ - if (SOUNDVAL_FALLING_EDGE(0x10)) + if (!state) { /* update the shift register (actually just a simple mux) */ - m_current_shift = (m_current_shift & ~(1 << (sound_val & 7))) | (((sound_val >> 3) & 1) << (sound_val & 7)); + m_current_shift = (m_current_shift & ~(1 << (m_outlatch->output_state() & 7))) | (m_outlatch->q3_r() << (m_outlatch->output_state() & 7)); /* explosion - falling edge */ if (SHIFTREG_FALLING_EDGE(0x01)) @@ -484,13 +506,9 @@ void cinemat_state::tailg_sound_w(uint8_t sound_val, uint8_t bits_changed) } } -SOUND_RESET_MEMBER( cinemat_state, tailg ) -{ - generic_init(&cinemat_state::tailg_sound_w); -} - MACHINE_CONFIG_START( tailg_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, tailg) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, tailg_sound_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -519,40 +537,52 @@ static const char *const warrior_sample_names[] = nullptr }; -void cinemat_state::warrior_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::warrior_sound0_w) { /* normal level - 0=on, 1=off */ - if (SOUNDVAL_FALLING_EDGE(0x01)) + if (!state) m_samples->start(0, 0, true); - if (SOUNDVAL_RISING_EDGE(0x01)) + if (state) m_samples->stop(0); +} +WRITE_LINE_MEMBER(cinemat_state::warrior_sound1_w) +{ /* hi level - 0=on, 1=off */ - if (SOUNDVAL_FALLING_EDGE(0x02)) + if (!state) m_samples->start(1, 1, true); - if (SOUNDVAL_RISING_EDGE(0x02)) + if (state) m_samples->stop(1); +} +WRITE_LINE_MEMBER(cinemat_state::warrior_sound2_w) +{ /* explosion - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x04)) + if (!state) m_samples->start(2, 2); +} +WRITE_LINE_MEMBER(cinemat_state::warrior_sound3_w) +{ /* fall - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x08)) + if (!state) m_samples->start(3, 3); - - /* appear - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x10)) - m_samples->start(4, 4); } -SOUND_RESET_MEMBER( cinemat_state, warrior ) +WRITE_LINE_MEMBER(cinemat_state::warrior_sound4_w) { - generic_init(&cinemat_state::warrior_sound_w); + /* appear - falling edge */ + if (!state) + m_samples->start(4, 4); } MACHINE_CONFIG_START( warrior_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, warrior) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, warrior_sound0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, warrior_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, warrior_sound2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, warrior_sound3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, warrior_sound4_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -583,14 +613,17 @@ static const char *const armora_sample_names[] = nullptr }; -void cinemat_state::armora_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::armora_sound4_w) { /* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */ - if (SOUNDVAL_RISING_EDGE(0x10)) - m_current_shift = ((m_current_shift >> 1) & 0x7f) | (sound_val & 0x80); + if (state) + m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q7_r() << 7); +} +WRITE_LINE_MEMBER(cinemat_state::armora_sound0_w) +{ /* execute on the rising edge of bit 0x01 */ - if (SOUNDVAL_RISING_EDGE(0x01)) + if (state) { /* bits 0-4 control the tank sound speed */ @@ -613,34 +646,43 @@ void cinemat_state::armora_sound_w(uint8_t sound_val, uint8_t bits_changed) /* remember the previous value */ m_last_shift = m_current_shift; } +} +WRITE_LINE_MEMBER(cinemat_state::armora_sound1_w) +{ /* tank sound - 0=on, 1=off */ /* still not totally correct - should be multiple speeds based on remaining bits in shift reg */ - if (SOUNDVAL_FALLING_EDGE(0x02)) + if (!state) m_samples->start(4, 4, true); - if (SOUNDVAL_RISING_EDGE(0x02)) + if (state) m_samples->stop(4); +} +WRITE_LINE_MEMBER(cinemat_state::armora_sound2_w) +{ /* beep sound - 0=on, 1=off */ - if (SOUNDVAL_FALLING_EDGE(0x04)) + if (!state) m_samples->start(5, 5, true); - if (SOUNDVAL_RISING_EDGE(0x04)) + if (state) m_samples->stop(5); +} +WRITE_LINE_MEMBER(cinemat_state::armora_sound3_w) +{ /* chopper sound - 0=on, 1=off */ - if (SOUNDVAL_FALLING_EDGE(0x08)) + if (!state) m_samples->start(6, 6, true); - if (SOUNDVAL_RISING_EDGE(0x08)) + if (state) m_samples->stop(6); } -SOUND_RESET_MEMBER( cinemat_state, armora ) -{ - generic_init(&cinemat_state::armora_sound_w); -} - MACHINE_CONFIG_START( armora_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, armora) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, armora_sound0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, armora_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, armora_sound2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, armora_sound3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, armora_sound4_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -677,14 +719,17 @@ static const char *const ripoff_sample_names[] = nullptr }; -void cinemat_state::ripoff_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::ripoff_sound1_w) { /* on the rising edge of bit 0x02, clock bit 0x01 into the shift register */ - if (SOUNDVAL_RISING_EDGE(0x02)) - m_current_shift = ((m_current_shift >> 1) & 0x7f) | ((sound_val << 7) & 0x80); + if (state) + m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q0_r() << 7); +} +WRITE_LINE_MEMBER(cinemat_state::ripoff_sound2_w) +{ /* execute on the rising edge of bit 0x04 */ - if (SOUNDVAL_RISING_EDGE(0x04)) + if (state) { /* background - 0=on, 1=off, selected by bits 0x38 */ if ((((m_current_shift ^ m_last_shift) & 0x38) && !(m_current_shift & 0x04)) || SHIFTREG_FALLING_EDGE(0x04)) @@ -705,27 +750,36 @@ void cinemat_state::ripoff_sound_w(uint8_t sound_val, uint8_t bits_changed) /* remember the previous value */ m_last_shift = m_current_shift; } +} +WRITE_LINE_MEMBER(cinemat_state::ripoff_sound3_w) +{ /* torpedo - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x08)) + if (!state) m_samples->start(2, 2); +} +WRITE_LINE_MEMBER(cinemat_state::ripoff_sound4_w) +{ /* laser - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x10)) + if (!state) m_samples->start(3, 3); - - /* explosion - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x80)) - m_samples->start(4, 4); } -SOUND_RESET_MEMBER( cinemat_state, ripoff ) +WRITE_LINE_MEMBER(cinemat_state::ripoff_sound7_w) { - generic_init(&cinemat_state::ripoff_sound_w); + /* explosion - falling edge */ + if (!state) + m_samples->start(4, 4); } MACHINE_CONFIG_START( ripoff_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, ripoff) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, ripoff_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, ripoff_sound2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, ripoff_sound3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, ripoff_sound4_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, ripoff_sound7_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -757,16 +811,17 @@ static const char *const starcas_sample_names[] = nullptr }; -void cinemat_state::starcas_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::starcas_sound4_w) { - uint32_t target_pitch; - /* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */ - if (SOUNDVAL_RISING_EDGE(0x10)) - m_current_shift = ((m_current_shift >> 1) & 0x7f) | (sound_val & 0x80); + if (state) + m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q7_r() << 7); +} +WRITE_LINE_MEMBER(cinemat_state::starcas_sound0_w) +{ /* execute on the rising edge of bit 0x01 */ - if (SOUNDVAL_RISING_EDGE(0x01)) + if (state) { /* fireball - falling edge */ if (SHIFTREG_FALLING_EDGE(0x80)) @@ -795,7 +850,7 @@ void cinemat_state::starcas_sound_w(uint8_t sound_val, uint8_t bits_changed) m_samples->stop(4); /* latch the drone pitch */ - target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2); + u32 target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2); target_pitch = 0x5800 + (target_pitch << 12); /* once per frame slide the pitch toward the target */ @@ -812,27 +867,36 @@ void cinemat_state::starcas_sound_w(uint8_t sound_val, uint8_t bits_changed) /* remember the previous value */ m_last_shift = m_current_shift; } +} +WRITE_LINE_MEMBER(cinemat_state::starcas_sound1_w) +{ /* loud explosion - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x02)) + if (!state) m_samples->start(5, 5); +} +WRITE_LINE_MEMBER(cinemat_state::starcas_sound2_w) +{ /* soft explosion - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x04)) + if (!state) m_samples->start(6, 6); - - /* player fire - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x08)) - m_samples->start(7, 7); } -SOUND_RESET_MEMBER( cinemat_state, starcas ) +WRITE_LINE_MEMBER(cinemat_state::starcas_sound3_w) { - generic_init(&cinemat_state::starcas_sound_w); + /* player fire - falling edge */ + if (!state) + m_samples->start(7, 7); } MACHINE_CONFIG_START( starcas_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, starcas) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, starcas_sound0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, starcas_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, starcas_sound2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, starcas_sound3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, starcas_sound4_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -864,14 +928,17 @@ static const char *const solarq_sample_names[] = nullptr }; -void cinemat_state::solarq_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::solarq_sound4_w) { /* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */ - if (SOUNDVAL_RISING_EDGE(0x10)) - m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((sound_val << 8) & 0x8000); + if (state) + m_current_shift = ((m_current_shift >> 1) & 0x7fff) | (m_outlatch->q7_r() << 15); +} +WRITE_LINE_MEMBER(cinemat_state::solarq_sound1_w) +{ /* execute on the rising edge of bit 0x02 */ - if (SOUNDVAL_RISING_EDGE(0x02)) + if (state) { /* only the upper 8 bits matter */ m_current_shift >>= 8; @@ -929,9 +996,12 @@ void cinemat_state::solarq_sound_w(uint8_t sound_val, uint8_t bits_changed) /* remember the previous value */ m_last_shift = m_current_shift; } +} +WRITE_LINE_MEMBER(cinemat_state::solarq_sound0_w) +{ /* clock music data on the rising edge of bit 0x01 */ - if (SOUNDVAL_RISING_EDGE(0x01)) + if (state) { int freq, vol; @@ -954,13 +1024,11 @@ void cinemat_state::solarq_sound_w(uint8_t sound_val, uint8_t bits_changed) } } -SOUND_RESET_MEMBER( cinemat_state, solarq ) -{ - generic_init(&cinemat_state::solarq_sound_w); -} - MACHINE_CONFIG_START( solarq_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, solarq) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, solarq_sound0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, solarq_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, solarq_sound4_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -996,14 +1064,17 @@ static const char *const boxingb_sample_names[] = nullptr }; -void cinemat_state::boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::boxingb_sound4_w) { /* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */ - if (SOUNDVAL_RISING_EDGE(0x10)) - m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((sound_val << 8) & 0x8000); + if (state) + m_current_shift = ((m_current_shift >> 1) & 0x7fff) | (m_outlatch->q7_r() << 15); +} +WRITE_LINE_MEMBER(cinemat_state::boxingb_sound1_w) +{ /* execute on the rising edge of bit 0x02 */ - if (SOUNDVAL_RISING_EDGE(0x02)) + if (state) { /* only the upper 8 bits matter */ m_current_shift >>= 8; @@ -1045,9 +1116,12 @@ void cinemat_state::boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed) /* remember the previous value */ m_last_shift = m_current_shift; } +} +WRITE_LINE_MEMBER(cinemat_state::boxingb_sound0_w) +{ /* clock music data on the rising edge of bit 0x01 */ - if (SOUNDVAL_RISING_EDGE(0x01)) + if (state) { int freq, vol; @@ -1072,23 +1146,29 @@ void cinemat_state::boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed) /* remember the previous value */ m_last_shift2 = m_current_shift; } +} +WRITE_LINE_MEMBER(cinemat_state::boxingb_sound2_w) +{ /* bounce - rising edge */ - if (SOUNDVAL_RISING_EDGE(0x04)) + if (state) m_samples->start(10, 10); - - /* bell - falling edge */ - if (SOUNDVAL_RISING_EDGE(0x08)) - m_samples->start(11, 11); } -SOUND_RESET_MEMBER( cinemat_state, boxingb ) +WRITE_LINE_MEMBER(cinemat_state::boxingb_sound3_w) { - generic_init(&cinemat_state::boxingb_sound_w); + /* bell - falling edge */ + if (state) + m_samples->start(11, 11); } MACHINE_CONFIG_START( boxingb_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, boxingb) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, boxingb_sound0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, boxingb_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, boxingb_sound2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, boxingb_sound3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, boxingb_sound4_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1120,16 +1200,17 @@ static const char *const wotw_sample_names[] = nullptr }; -void cinemat_state::wotw_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::wotw_sound4_w) { - uint32_t target_pitch; - /* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */ - if (SOUNDVAL_RISING_EDGE(0x10)) - m_current_shift = ((m_current_shift >> 1) & 0x7f) | (sound_val & 0x80); + if (state) + m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q7_r() << 7); +} +WRITE_LINE_MEMBER(cinemat_state::wotw_sound0_w) +{ /* execute on the rising edge of bit 0x01 */ - if (SOUNDVAL_RISING_EDGE(0x01)) + if (state) { /* fireball - falling edge */ if (SHIFTREG_FALLING_EDGE(0x80)) @@ -1158,7 +1239,7 @@ void cinemat_state::wotw_sound_w(uint8_t sound_val, uint8_t bits_changed) m_samples->stop(4); /* latch the drone pitch */ - target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2); + u32 target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2); target_pitch = 0x10000 + (target_pitch << 12); /* once per frame slide the pitch toward the target */ @@ -1175,27 +1256,36 @@ void cinemat_state::wotw_sound_w(uint8_t sound_val, uint8_t bits_changed) /* remember the previous value */ m_last_shift = m_current_shift; } +} +WRITE_LINE_MEMBER(cinemat_state::wotw_sound1_w) +{ /* loud explosion - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x02)) + if (!state) m_samples->start(5, 5); +} +WRITE_LINE_MEMBER(cinemat_state::wotw_sound2_w) +{ /* soft explosion - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x04)) + if (!state) m_samples->start(6, 6); - - /* player fire - falling edge */ - if (SOUNDVAL_FALLING_EDGE(0x08)) - m_samples->start(7, 7); } -SOUND_RESET_MEMBER( cinemat_state, wotw ) +WRITE_LINE_MEMBER(cinemat_state::wotw_sound3_w) { - generic_init(&cinemat_state::wotw_sound_w); + /* player fire - falling edge */ + if (!state) + m_samples->start(7, 7); } MACHINE_CONFIG_START( wotw_sound ) - MCFG_SOUND_RESET_OVERRIDE(cinemat_state, wotw) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, wotw_sound0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, wotw_sound1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, wotw_sound2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, wotw_sound3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, wotw_sound4_w)) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1220,14 +1310,11 @@ TIMER_CALLBACK_MEMBER( cinemat_state::synced_sound_w ) } -void cinemat_state::demon_sound_w(uint8_t sound_val, uint8_t bits_changed) +WRITE_LINE_MEMBER(cinemat_state::demon_sound4_w) { - /* all inputs are inverted */ - sound_val = ~sound_val; - /* watch for a 0->1 edge on bit 4 ("shift in") to clock in the new data */ - if ((bits_changed & 0x10) && (sound_val & 0x10)) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(cinemat_state::synced_sound_w), this), sound_val & 0x0f); + if (state) + machine().scheduler().synchronize(timer_expired_delegate(FUNC(cinemat_state::synced_sound_w), this), ~m_outlatch->output_state() & 0x0f); } @@ -1270,7 +1357,7 @@ WRITE8_MEMBER(cinemat_state::sound_output_w) SOUND_RESET_MEMBER( cinemat_state, demon ) { /* generic init */ - generic_init(&cinemat_state::demon_sound_w); + sound_reset(); /* reset the FIFO */ m_sound_fifo_in = m_sound_fifo_out = 0; @@ -1321,6 +1408,9 @@ MACHINE_CONFIG_START( demon_sound ) MCFG_SOUND_RESET_OVERRIDE(cinemat_state, demon) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, demon_sound4_w)) + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1348,17 +1438,16 @@ MACHINE_CONFIG_END * *************************************/ -WRITE8_MEMBER(cinemat_state::qb3_sound_w) +WRITE_LINE_MEMBER(cinemat_state::qb3_sound4_w) { uint16_t rega = m_maincpu->state_int(ccpu_cpu_device::CCPU_A); - demon_sound_w(0x00 | (~rega & 0x0f), 0x10); + machine().scheduler().synchronize(timer_expired_delegate(FUNC(cinemat_state::synced_sound_w), this), ~rega & 0x0f); } SOUND_RESET_MEMBER( cinemat_state, qb3 ) { SOUND_RESET_CALL_MEMBER(demon); - m_maincpu->space(AS_IO).install_write_handler(0x04, 0x04, write8_delegate(FUNC(cinemat_state::qb3_sound_w),this)); /* this patch prevents the sound ROM from eating itself when command $0A is sent */ /* on a cube rotate */ @@ -1368,4 +1457,7 @@ SOUND_RESET_MEMBER( cinemat_state, qb3 ) MACHINE_CONFIG_DERIVED( qb3_sound, demon_sound ) MCFG_SOUND_RESET_OVERRIDE(cinemat_state, qb3) + + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, qb3_sound4_w)) MACHINE_CONFIG_END diff --git a/src/mame/audio/copsnrob.cpp b/src/mame/audio/copsnrob.cpp index cccd856a864..c5200a5d6ce 100644 --- a/src/mame/audio/copsnrob.cpp +++ b/src/mame/audio/copsnrob.cpp @@ -5,6 +5,7 @@ * Nov 2010, Derrick Renaud ************************************************************************/ #include "emu.h" +#include "speaker.h" #include "includes/copsnrob.h" #include "sound/discrete.h" @@ -589,7 +590,7 @@ DISCRETE_RESET(copsnrob_zings_555_astable) ************************************************/ -DISCRETE_SOUND_START(copsnrob) +static DISCRETE_SOUND_START(copsnrob) /************************************************ * Input register mapping @@ -687,57 +688,29 @@ DISCRETE_SOUND_START(copsnrob) DISCRETE_SOUND_END -WRITE8_MEMBER(copsnrob_state::copsnrob_misc_w) +WRITE_LINE_MEMBER(copsnrob_state::one_start_w) { - uint8_t latched_data = m_ic_h3_data; - uint8_t special_data = data & 0x01; - - /* ignore if no change */ - if (((latched_data >> offset) & 0x01) == special_data) - return; - - if (special_data) - latched_data |= 1 << offset; - else - latched_data &= ~(1 << offset); - - switch (offset) - { - case 0x00: - m_discrete->write(space, COPSNROB_MOTOR3_INV, special_data); - break; - - case 0x01: - m_discrete->write(space, COPSNROB_MOTOR2_INV, special_data); - break; - - case 0x02: - m_discrete->write(space, COPSNROB_MOTOR1_INV, special_data); - break; - - case 0x03: - m_discrete->write(space, COPSNROB_MOTOR0_INV, special_data); - break; - - case 0x04: - m_discrete->write(space, COPSNROB_SCREECH_INV, special_data); - break; - - case 0x05: - m_discrete->write(space, COPSNROB_CRASH_INV, special_data); - break; - - case 0x06: - /* One Start */ - output().set_led_value(0, !special_data); - break; - - case 0x07: - m_discrete->write(space, COPSNROB_AUDIO_ENABLE, special_data); - //machine().sound().system_mute(special_data); - break; + /* One Start */ + output().set_led_value(0, !state); +} - } - m_ic_h3_data = latched_data; -} +MACHINE_CONFIG_START( copsnrob_audio ) + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_SOUND_ADD("discrete", DISCRETE, 0) + MCFG_DISCRETE_INTF(copsnrob) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + MCFG_DEVICE_ADD("latch", F9334, 0) // H3 on audio board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR3_INV>)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR2_INV>)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR1_INV>)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR0_INV>)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_SCREECH_INV>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_CRASH_INV>)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(copsnrob_state, one_start_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_AUDIO_ENABLE>)) +MACHINE_CONFIG_END diff --git a/src/mame/audio/jedi.cpp b/src/mame/audio/jedi.cpp index 1e44c6c322d..70c8cc8fade 100644 --- a/src/mame/audio/jedi.cpp +++ b/src/mame/audio/jedi.cpp @@ -70,9 +70,9 @@ WRITE8_MEMBER(jedi_state::irq_ack_w) * *************************************/ -WRITE8_MEMBER(jedi_state::jedi_audio_reset_w) +WRITE_LINE_MEMBER(jedi_state::audio_reset_w) { - m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE); + m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE); } diff --git a/src/mame/audio/sprint8.cpp b/src/mame/audio/sprint8.cpp index 393652e760d..0294e94ca85 100644 --- a/src/mame/audio/sprint8.cpp +++ b/src/mame/audio/sprint8.cpp @@ -8,6 +8,8 @@ #include "emu.h" #include "includes/sprint8.h" +#include "speaker.h" + /* Discrete Sound Input Nodes */ #define SPRINT8_CRASH_EN NODE_01 @@ -294,23 +296,39 @@ DISCRETE_SOUND_START( sprint8 ) DISCRETE_TASK_END() DISCRETE_SOUND_END - -WRITE8_MEMBER(sprint8_state::crash_w) -{ - m_discrete->write(space, SPRINT8_CRASH_EN, data & 0x01); -} - -WRITE8_MEMBER(sprint8_state::screech_w) -{ - m_discrete->write(space, SPRINT8_SCREECH_EN, data & 0x01); -} - -WRITE8_MEMBER(sprint8_state::attract_w) -{ - m_discrete->write(space, SPRINT8_ATTRACT_EN, data & 0x01); -} - -WRITE8_MEMBER(sprint8_state::motor_w) -{ - m_discrete->write(space, NODE_RELATIVE(SPRINT8_MOTOR1_EN, offset & 0x07), data & 0x01); -} +MACHINE_CONFIG_START( sprint8_audio ) + /* sound hardware */ + /* the proper way is to hook up 4 speakers, but they are not really + * F/R/L/R speakers. Though you can pretend the 1-2 mix is the front. */ + MCFG_SPEAKER_ADD("speaker_1_2", 0.0, 0.0, 1.0) /* front */ + MCFG_SPEAKER_ADD("speaker_3_7", -0.2, 0.0, 1.0) /* left */ + MCFG_SPEAKER_ADD("speaker_5_6", 0.0, 0.0, -0.5) /* back */ + MCFG_SPEAKER_ADD("speaker_4_8", 0.2, 0.0, 1.0) /* right */ + + MCFG_SOUND_ADD("discrete", DISCRETE, 0) + MCFG_DISCRETE_INTF(sprint8) + MCFG_SOUND_ROUTE(0, "speaker_1_2", 1.0) + /* volumes on other channels defaulted to off, */ + /* user can turn them up if needed. */ + /* The game does not sound good with all channels mixed to stereo. */ + MCFG_SOUND_ROUTE(1, "speaker_3_7", 0.0) + MCFG_SOUND_ROUTE(2, "speaker_5_6", 0.0) + MCFG_SOUND_ROUTE(3, "speaker_4_8", 0.0) + + MCFG_DEVICE_ADD("latch", F9334, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(sprint8_state, int_reset_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_CRASH_EN>)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_SCREECH_EN>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(sprint8_state, team_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_ATTRACT_EN>)) + + MCFG_DEVICE_ADD("motor", F9334, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR1_EN>)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR2_EN>)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR3_EN>)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR4_EN>)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR5_EN>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR6_EN>)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR7_EN>)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR8_EN>)) +MACHINE_CONFIG_END diff --git a/src/mame/audio/subs.cpp b/src/mame/audio/subs.cpp index fe794e9f49a..40d58bdddfb 100644 --- a/src/mame/audio/subs.cpp +++ b/src/mame/audio/subs.cpp @@ -14,26 +14,6 @@ sub sound functions ***************************************************************************/ -WRITE8_MEMBER(subs_state::sonar1_w) -{ - m_discrete->write(space, SUBS_SONAR1_EN, offset & 0x01); -} - -WRITE8_MEMBER(subs_state::sonar2_w) -{ - m_discrete->write(space, SUBS_SONAR2_EN, offset & 0x01); -} - -WRITE8_MEMBER(subs_state::crash_w) -{ - m_discrete->write(space, SUBS_CRASH_EN, offset & 0x01); -} - -WRITE8_MEMBER(subs_state::explode_w) -{ - m_discrete->write(space, SUBS_EXPLODE_EN, offset & 0x01); -} - WRITE8_MEMBER(subs_state::noise_reset_w) { /* Pulse noise reset */ diff --git a/src/mame/audio/timeplt.cpp b/src/mame/audio/timeplt.cpp index 6030ddae87c..711a3878538 100644 --- a/src/mame/audio/timeplt.cpp +++ b/src/mame/audio/timeplt.cpp @@ -122,15 +122,22 @@ WRITE8_MEMBER( timeplt_audio_device::filter_w ) * *************************************/ -WRITE8_MEMBER( timeplt_audio_device::sh_irqtrigger_w ) +WRITE_LINE_MEMBER(timeplt_audio_device::sh_irqtrigger_w) { - if (m_last_irq_state == 0 && data) + if (m_last_irq_state == 0 && state) { /* setting bit 0 low then high triggers IRQ on the sound CPU */ m_soundcpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } - m_last_irq_state = data; + m_last_irq_state = state; +} + + +WRITE_LINE_MEMBER(timeplt_audio_device::mute_w) +{ + // controls pin 6 (DC audio mute) of LA4460 amplifier + machine().sound().system_mute(state); } diff --git a/src/mame/audio/timeplt.h b/src/mame/audio/timeplt.h index 98fab24a429..075dc50f163 100644 --- a/src/mame/audio/timeplt.h +++ b/src/mame/audio/timeplt.h @@ -14,9 +14,10 @@ class timeplt_audio_device : public device_t, public device_sound_interface public: timeplt_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_WRITE8_MEMBER( sh_irqtrigger_w ); - DECLARE_WRITE8_MEMBER( filter_w ); - DECLARE_READ8_MEMBER( portB_r ); + DECLARE_WRITE_LINE_MEMBER(sh_irqtrigger_w); + DECLARE_WRITE_LINE_MEMBER(mute_w); + DECLARE_WRITE8_MEMBER(filter_w); + DECLARE_READ8_MEMBER(portB_r); protected: // device-level overrides diff --git a/src/mame/drivers/ambush.cpp b/src/mame/drivers/ambush.cpp index 2becacfa56e..d870631d5af 100644 --- a/src/mame/drivers/ambush.cpp +++ b/src/mame/drivers/ambush.cpp @@ -45,6 +45,7 @@ #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/ay8910.h" #include "screen.h" @@ -61,6 +62,7 @@ public: ambush_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_gfxdecode(*this, "gfxdecode"), + m_outlatch(*this, "outlatch%u", 1), m_video_ram(*this, "video_ram"), m_sprite_ram(*this, "sprite_ram"), m_attribute_ram(*this, "attribute_ram"), @@ -80,21 +82,24 @@ public: TILE_GET_INFO_MEMBER(mariobl_char_tile_info); TILE_GET_INFO_MEMBER(dkong3abl_char_tile_info); - DECLARE_WRITE8_MEMBER(flip_screen_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_w); DECLARE_WRITE8_MEMBER(scroll_ram_w); - DECLARE_WRITE8_MEMBER(color_bank_w); + DECLARE_WRITE_LINE_MEMBER(color_bank_1_w); + DECLARE_WRITE_LINE_MEMBER(color_bank_2_w); DECLARE_MACHINE_START(ambush); DECLARE_MACHINE_START(mariobl); DECLARE_MACHINE_START(dkong3abl); - DECLARE_WRITE8_MEMBER(coin_counter_w); - DECLARE_WRITE8_MEMBER(unk_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); + DECLARE_WRITE8_MEMBER(output_latches_w); private: void register_save_states(); required_device<gfxdecode_device> m_gfxdecode; + optional_device_array<ls259_device, 2> m_outlatch; required_shared_ptr<uint8_t> m_video_ram; required_shared_ptr<uint8_t> m_sprite_ram; required_shared_ptr<uint8_t> m_attribute_ram; @@ -120,10 +125,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, ambush_state ) AM_RANGE(0xc200, 0xc3ff) AM_RAM AM_SHARE("sprite_ram") AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_SHARE("video_ram") AM_RANGE(0xc800, 0xc800) AM_READ_PORT("sw1") - AM_RANGE(0xcc00, 0xcc03) AM_WRITE(unk_w) - AM_RANGE(0xcc04, 0xcc04) AM_WRITE(flip_screen_w) - AM_RANGE(0xcc05, 0xcc05) AM_WRITE(color_bank_w) - AM_RANGE(0xcc07, 0xcc07) AM_WRITE(coin_counter_w) + AM_RANGE(0xcc00, 0xcc07) AM_WRITE(output_latches_w) ADDRESS_MAP_END static ADDRESS_MAP_START( main_portmap, AS_IO, 8, ambush_state ) @@ -145,8 +147,7 @@ static ADDRESS_MAP_START( bootleg_map, AS_PROGRAM, 8, ambush_state ) AM_RANGE(0x8000, 0x9fff) AM_ROM AM_RANGE(0xa000, 0xa000) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_RANGE(0xa100, 0xa100) AM_READ_PORT("sw1") - AM_RANGE(0xa204, 0xa204) AM_WRITE(coin_counter_w) - AM_RANGE(0xa206, 0xa206) AM_WRITE(color_bank_w) + AM_RANGE(0xa200, 0xa207) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE(0xb000, 0xbfff) AM_ROM AM_RANGE(0xe000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -508,9 +509,9 @@ uint32_t ambush_state::screen_update_bootleg(screen_device &screen, bitmap_ind16 return 0; } -WRITE8_MEMBER( ambush_state::flip_screen_w ) +WRITE_LINE_MEMBER(ambush_state::flip_screen_w) { - flip_screen_set(data); + flip_screen_set(state); } WRITE8_MEMBER( ambush_state::scroll_ram_w ) @@ -519,9 +520,14 @@ WRITE8_MEMBER( ambush_state::scroll_ram_w ) m_char_tilemap->set_scrolly(offset, data + 1); } -WRITE8_MEMBER( ambush_state::color_bank_w ) +WRITE_LINE_MEMBER(ambush_state::color_bank_1_w) { - m_color_bank = data & 0x03; + m_color_bank = (m_color_bank & 0x02) | (state ? 0x01 : 0x00); +} + +WRITE_LINE_MEMBER(ambush_state::color_bank_2_w) +{ + m_color_bank = (m_color_bank & 0x01) | (state ? 0x02 : 0x00); } @@ -651,15 +657,20 @@ MACHINE_START_MEMBER( ambush_state, dkong3abl ) m_char_tilemap->set_transparent_pen(0); } -WRITE8_MEMBER( ambush_state::coin_counter_w ) +WRITE_LINE_MEMBER(ambush_state::coin_counter_1_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(ambush_state::coin_counter_2_w) { - machine().bookkeeping().coin_counter_w(0, data & 0x01); - machine().bookkeeping().coin_counter_w(1, data & 0x02); + machine().bookkeeping().coin_counter_w(1, state); } -WRITE8_MEMBER( ambush_state::unk_w ) +WRITE8_MEMBER(ambush_state::output_latches_w) { - logerror("unk_w: %02x = %02x\n", offset, data); + m_outlatch[0]->write_bit(offset, BIT(data, 0)); + m_outlatch[1]->write_bit(offset, BIT(data, 1)); } @@ -673,6 +684,15 @@ static MACHINE_CONFIG_START( ambush ) MCFG_CPU_IO_MAP(main_portmap) MCFG_CPU_VBLANK_INT_DRIVER("screen", ambush_state, irq0_line_hold) + // addressable latches at 8B and 8C + MCFG_DEVICE_ADD("outlatch1", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ambush_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ambush_state, color_bank_1_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ambush_state, coin_counter_1_w)) + MCFG_DEVICE_ADD("outlatch2", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ambush_state, color_bank_2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ambush_state, coin_counter_2_w)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_MACHINE_START_OVERRIDE(ambush_state, ambush) @@ -703,6 +723,13 @@ static MACHINE_CONFIG_DERIVED( mariobl, ambush ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(bootleg_map) + // To be verified: do these bootlegs only have one LS259? + MCFG_DEVICE_REMOVE("outlatch1") + MCFG_DEVICE_REMOVE("outlatch2") + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ambush_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(ambush_state, color_bank_1_w)) + MCFG_MACHINE_START_OVERRIDE(ambush_state, mariobl) MCFG_SCREEN_MODIFY("screen") diff --git a/src/mame/drivers/apple2.cpp b/src/mame/drivers/apple2.cpp index cc75652792b..1e1bd38cea3 100644 --- a/src/mame/drivers/apple2.cpp +++ b/src/mame/drivers/apple2.cpp @@ -42,6 +42,7 @@ II Plus: RAM options reduced to 16/32/48 KB. #include "includes/apple2.h" #include "video/apple2.h" +#include "machine/74259.h" #include "machine/bankdev.h" #include "imagedev/flopdrv.h" @@ -112,7 +113,8 @@ public: m_sysconfig(*this, "a2_config"), m_speaker(*this, A2_SPEAKER_TAG), m_cassette(*this, A2_CASSETTE_TAG), - m_upperbank(*this, A2_UPPERBANK_TAG) + m_upperbank(*this, A2_UPPERBANK_TAG), + m_softlatch(*this, "softlatch") { } required_device<cpu_device> m_maincpu; @@ -128,6 +130,7 @@ public: required_device<speaker_sound_device> m_speaker; required_device<cassette_image_device> m_cassette; required_device<address_map_bank_device> m_upperbank; + required_device<addressable_latch_device> m_softlatch; TIMER_DEVICE_CALLBACK_MEMBER(apple2_interrupt); TIMER_DEVICE_CALLBACK_MEMBER(ay3600_repeat); @@ -143,6 +146,14 @@ public: DECLARE_WRITE8_MEMBER(ram_w); DECLARE_READ8_MEMBER(c000_r); DECLARE_WRITE8_MEMBER(c000_w); + DECLARE_WRITE_LINE_MEMBER(txt_w); + DECLARE_WRITE_LINE_MEMBER(mix_w); + DECLARE_WRITE_LINE_MEMBER(scr_w); + DECLARE_WRITE_LINE_MEMBER(res_w); + DECLARE_WRITE_LINE_MEMBER(an0_w); + DECLARE_WRITE_LINE_MEMBER(an1_w); + DECLARE_WRITE_LINE_MEMBER(an2_w); + DECLARE_WRITE_LINE_MEMBER(an3_w); DECLARE_READ8_MEMBER(c080_r); DECLARE_WRITE8_MEMBER(c080_w); DECLARE_READ8_MEMBER(c100_r); @@ -489,70 +500,11 @@ void napple2_state::do_io(address_space &space, int offset) m_speaker->level_w(m_speaker_state); break; - case 0x50: // graphics mode - machine().first_screen()->update_now(); - m_video->m_graphics = true; break; - - case 0x51: // text mode - machine().first_screen()->update_now(); - m_video->m_graphics = false; break; - - case 0x52: // no mix - machine().first_screen()->update_now(); - m_video->m_mix = false; break; - - case 0x53: // mixed mode - machine().first_screen()->update_now(); - m_video->m_mix = true; break; - - case 0x54: // set page 1 - machine().first_screen()->update_now(); - m_page2 = false; - m_video->m_page2 = false; - break; - - case 0x55: // set page 2 - machine().first_screen()->update_now(); - m_page2 = true; - m_video->m_page2 = true; - break; - - case 0x56: // select lo-res - machine().first_screen()->update_now(); - m_video->m_hires = false; break; - - case 0x57: // select hi-res - machine().first_screen()->update_now(); - m_video->m_hires = true; break; - - case 0x58: // AN0 off - m_an0 = false; break; - - case 0x59: // AN0 on - m_an0 = true; break; - - case 0x5a: // AN1 off - m_an1 = false; break; - - case 0x5b: // AN1 on - m_an1 = true; break; - - case 0x5c: // AN2 off - m_an2 = false; - m_video->m_an2 = false; + case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57: + case 0x58: case 0x59: case 0x5a: case 0x5b: case 0x5c: case 0x5d: case 0x5e: case 0x5f: + m_softlatch->write_bit((offset & 0x0e) >> 1, offset & 0x01); break; - case 0x5d: // AN2 on - m_an2 = true; - m_video->m_an2 = true; - break; - - case 0x5e: // AN3 off - m_an3 = false; break; - - case 0x5f: // AN3 on - m_an3 = true; break; - case 0x68: // IIgs STATE register, which ProDOS touches break; @@ -566,6 +518,56 @@ void napple2_state::do_io(address_space &space, int offset) } } +WRITE_LINE_MEMBER(napple2_state::txt_w) +{ + // select graphics or text mode + machine().first_screen()->update_now(); + m_video->m_graphics = !state; +} + +WRITE_LINE_MEMBER(napple2_state::mix_w) +{ + // select mixed mode or nomix + machine().first_screen()->update_now(); + m_video->m_mix = state; +} + +WRITE_LINE_MEMBER(napple2_state::scr_w) +{ + // select primary or secondary page + machine().first_screen()->update_now(); + m_page2 = state; + m_video->m_page2 = state; +} + +WRITE_LINE_MEMBER(napple2_state::res_w) +{ + // select lo-res or hi-res + machine().first_screen()->update_now(); + m_video->m_hires = state; +} + +WRITE_LINE_MEMBER(napple2_state::an0_w) +{ + m_an0 = state; +} + +WRITE_LINE_MEMBER(napple2_state::an1_w) +{ + m_an1 = state; +} + +WRITE_LINE_MEMBER(napple2_state::an2_w) +{ + m_an2 = state; + m_video->m_an2 = state; +} + +WRITE_LINE_MEMBER(napple2_state::an3_w) +{ + m_an3 = state; +} + READ8_MEMBER(napple2_state::c000_r) { switch (offset) @@ -1345,6 +1347,17 @@ static MACHINE_CONFIG_START( apple2_common ) MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8) MCFG_ADDRESS_MAP_BANK_STRIDE(0x3000) + /* soft switches */ + MCFG_DEVICE_ADD("softlatch", F9334, 0) // F14 (labeled 74LS259 on some boards and in the Apple ][ Reference Manual) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(napple2_state, txt_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(napple2_state, mix_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(napple2_state, scr_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(napple2_state, res_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(napple2_state, an0_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(napple2_state, an1_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(napple2_state, an2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(napple2_state, an3_w)) + /* keyboard controller */ MCFG_DEVICE_ADD(A2_KBDC_TAG, AY3600, 0) MCFG_AY3600_MATRIX_X0(IOPORT("X0")) diff --git a/src/mame/drivers/asteroid.cpp b/src/mame/drivers/asteroid.cpp index 27f846467f9..dc883abc49e 100644 --- a/src/mame/drivers/asteroid.cpp +++ b/src/mame/drivers/asteroid.cpp @@ -189,6 +189,7 @@ There is not a rev 03 known or dumped. An Asteroids rev 03 is not mentioned in a #include "includes/asteroid.h" #include "audio/llander.h" #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "machine/atari_vg.h" #include "machine/watchdog.h" #include "sound/discrete.h" @@ -209,9 +210,19 @@ There is not a rev 03 known or dumped. An Asteroids rev 03 is not mentioned in a * *************************************/ -WRITE8_MEMBER(asteroid_state::astdelux_coin_counter_w) +WRITE_LINE_MEMBER(asteroid_state::coin_counter_left_w) { - machine().bookkeeping().coin_counter_w(offset,data); + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(asteroid_state::coin_counter_center_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} + +WRITE_LINE_MEMBER(asteroid_state::coin_counter_right_w) +{ + machine().bookkeeping().coin_counter_w(2, state); } @@ -253,7 +264,7 @@ static ADDRESS_MAP_START( asteroid_map, AS_PROGRAM, 8, asteroid_state ) AM_RANGE(0x3400, 0x3400) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x3600, 0x3600) AM_WRITE(asteroid_explode_w) AM_RANGE(0x3a00, 0x3a00) AM_WRITE(asteroid_thump_w) - AM_RANGE(0x3c00, 0x3c05) AM_WRITE(asteroid_sounds_w) + AM_RANGE(0x3c00, 0x3c07) AM_DEVWRITE("audiolatch", ls259_device, write_d7) AM_RANGE(0x3e00, 0x3e00) AM_WRITE(asteroid_noise_reset_w) AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("vectorram") AM_REGION("maincpu", 0x4000) AM_RANGE(0x5000, 0x57ff) AM_ROM /* vector rom */ @@ -276,10 +287,7 @@ static ADDRESS_MAP_START( astdelux_map, AS_PROGRAM, 8, asteroid_state ) AM_RANGE(0x3400, 0x3400) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x3600, 0x3600) AM_WRITE(asteroid_explode_w) AM_RANGE(0x3a00, 0x3a00) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w) - AM_RANGE(0x3c00, 0x3c01) AM_WRITE(astdelux_led_w) - AM_RANGE(0x3c03, 0x3c03) AM_WRITE(astdelux_sounds_w) - AM_RANGE(0x3c04, 0x3c04) AM_WRITE(astdelux_bank_switch_w) - AM_RANGE(0x3c05, 0x3c07) AM_WRITE(astdelux_coin_counter_w) + AM_RANGE(0x3c00, 0x3c07) AM_DEVWRITE("audiolatch", ls259_device, write_d7) AM_RANGE(0x3e00, 0x3e00) AM_WRITE(asteroid_noise_reset_w) AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("vectorram") AM_REGION("maincpu", 0x4000) AM_RANGE(0x4800, 0x57ff) AM_ROM /* vector rom */ @@ -651,6 +659,14 @@ static MACHINE_CONFIG_START( asteroid ) MCFG_CPU_PROGRAM_MAP(asteroid_map) MCFG_CPU_PERIODIC_INT_DRIVER(asteroid_state, asteroid_interrupt, CLOCK_3KHZ/12) + MCFG_DEVICE_ADD("audiolatch", LS259, 0) // M10 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SAUCER_SND_EN>)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SAUCER_FIRE_EN>)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SAUCER_SEL>)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_THRUST_EN>)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SHIP_FIRE_EN>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_LIFE_EN>)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -686,6 +702,17 @@ static MACHINE_CONFIG_DERIVED( astdelux, asteroid ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(astdelux_map) + MCFG_DEVICE_MODIFY("audiolatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(asteroid_state, start1_led_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(asteroid_state, start2_led_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) + // Q3 still activates the thrusters + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("ram1")) + MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("ram2")) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(asteroid_state, coin_counter_left_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(asteroid_state, coin_counter_center_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(asteroid_state, coin_counter_right_w)) + MCFG_ATARIVGEAROM_ADD("earom") /* sound hardware */ @@ -707,6 +734,8 @@ static MACHINE_CONFIG_DERIVED( llander, asteroid ) MCFG_CPU_PROGRAM_MAP(llander_map) MCFG_CPU_PERIODIC_INT_DRIVER(asteroid_state, llander_interrupt, (double)MASTER_CLOCK/4096/12) + MCFG_DEVICE_REMOVE("audiolatch") + MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ/12/6) MCFG_SCREEN_VISIBLE_AREA(522, 1566, 270, 1070) diff --git a/src/mame/drivers/atarisy1.cpp b/src/mame/drivers/atarisy1.cpp index 2776b61bd0a..675c0cdd6c7 100644 --- a/src/mame/drivers/atarisy1.cpp +++ b/src/mame/drivers/atarisy1.cpp @@ -197,7 +197,6 @@ RoadBlasters (aka Future Vette):005* #include "machine/atarigen.h" #include "machine/6522via.h" #include "machine/watchdog.h" -#include "sound/ym2151.h" #include "sound/pokey.h" #include "video/atarimo.h" #include "speaker.h" @@ -240,6 +239,13 @@ MACHINE_RESET_MEMBER(atarisy1_state,atarisy1) } +WRITE_LINE_MEMBER(atarisy1_state::music_reset_w) +{ + // reset the YM2151 and YM3012 + if (!state) + m_ymsnd->reset(); +} + /************************************* * @@ -411,13 +417,31 @@ READ8_MEMBER(atarisy1_state::via_pb_r) /************************************* * - * Sound LED handlers + * LED and coin counter handlers * *************************************/ -WRITE8_MEMBER(atarisy1_state::led_w) +WRITE_LINE_MEMBER(atarisy1_state::led_1_w) +{ + machine().output().set_led_value(0, !state); +} + + +WRITE_LINE_MEMBER(atarisy1_state::led_2_w) +{ + machine().output().set_led_value(1, !state); +} + + +WRITE_LINE_MEMBER(atarisy1_state::coin_counter_right_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + + +WRITE_LINE_MEMBER(atarisy1_state::coin_counter_left_w) { - output().set_led_value(offset, ~data & 1); + machine().bookkeeping().coin_counter_w(1, state); } @@ -468,7 +492,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, atarisy1_state ) AM_RANGE(0x1800, 0x1801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x1810, 0x1810) AM_DEVREADWRITE("soundcomm", atari_sound_comm_device, sound_command_r, sound_response_w) AM_RANGE(0x1820, 0x1820) AM_READ(switch_6502_r) - AM_RANGE(0x1824, 0x1825) AM_WRITE(led_w) + AM_RANGE(0x1820, 0x1827) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE(0x1870, 0x187f) AM_DEVREADWRITE("pokey", pokey_device, read, write) AM_RANGE(0x4000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -723,6 +747,13 @@ static MACHINE_CONFIG_START( atarisy1 ) MCFG_ATARI_EEPROM_2804_ADD("eeprom") + MCFG_DEVICE_ADD("outlatch", LS259, 0) // 15H (TTL) or 14F (LSI) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(atarisy1_state, music_reset_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(atarisy1_state, led_1_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(atarisy1_state, led_2_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(atarisy1_state, coin_counter_right_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(atarisy1_state, coin_counter_left_w)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_TIMER_DRIVER_ADD("joystick_timer", atarisy1_state, delayed_joystick_int) diff --git a/src/mame/drivers/avalnche.cpp b/src/mame/drivers/avalnche.cpp index a4960480e4d..a91f4fa5ec4 100644 --- a/src/mame/drivers/avalnche.cpp +++ b/src/mame/drivers/avalnche.cpp @@ -33,6 +33,7 @@ #include "emu.h" #include "includes/avalnche.h" #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/discrete.h" #include "screen.h" @@ -87,9 +88,9 @@ uint32_t avalnche_state::screen_update_avalnche(screen_device &screen, bitmap_rg * *************************************/ -WRITE8_MEMBER(avalnche_state::avalance_video_invert_w) +WRITE_LINE_MEMBER(avalnche_state::video_invert_w) { - m_avalance_video_inverted = data & 0x01; + m_avalance_video_inverted = state; } WRITE8_MEMBER(avalnche_state::catch_coin_counter_w) @@ -98,19 +99,19 @@ WRITE8_MEMBER(avalnche_state::catch_coin_counter_w) machine().bookkeeping().coin_counter_w(1, data & 2); } -WRITE8_MEMBER(avalnche_state::avalance_credit_1_lamp_w) +WRITE_LINE_MEMBER(avalnche_state::credit_1_lamp_w) { - output().set_led_value(0, data & 1); + output().set_led_value(0, state); } -WRITE8_MEMBER(avalnche_state::avalance_credit_2_lamp_w) +WRITE_LINE_MEMBER(avalnche_state::credit_2_lamp_w) { - output().set_led_value(1, data & 1); + output().set_led_value(1, state); } -WRITE8_MEMBER(avalnche_state::avalance_start_lamp_w) +WRITE_LINE_MEMBER(avalnche_state::start_lamp_w) { - output().set_led_value(2, data & 1); + output().set_led_value(2, state); } static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, avalnche_state ) @@ -121,12 +122,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, avalnche_state ) AM_RANGE(0x2002, 0x2002) AM_MIRROR(0x0ffc) AM_READ_PORT("PADDLE") AM_RANGE(0x2003, 0x2003) AM_MIRROR(0x0ffc) AM_READNOP AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x0fff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x4000, 0x4000) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_1_lamp_w) - AM_RANGE(0x4001, 0x4001) AM_MIRROR(0x0ff8) AM_WRITE(avalnche_attract_enable_w) - AM_RANGE(0x4002, 0x4002) AM_MIRROR(0x0ff8) AM_WRITE(avalance_video_invert_w) - AM_RANGE(0x4003, 0x4003) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_2_lamp_w) - AM_RANGE(0x4004, 0x4006) AM_MIRROR(0x0ff8) AM_WRITE(avalnche_audio_w) - AM_RANGE(0x4007, 0x4007) AM_MIRROR(0x0ff8) AM_WRITE(avalance_start_lamp_w) + AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x0ff8) AM_DEVWRITE("latch", f9334_device, write_d0) AM_RANGE(0x5000, 0x5000) AM_MIRROR(0x0fff) AM_WRITE(avalnche_noise_amplitude_w) AM_RANGE(0x6000, 0x7fff) AM_ROM ADDRESS_MAP_END @@ -139,12 +135,7 @@ static ADDRESS_MAP_START( catch_map, AS_PROGRAM, 8, avalnche_state ) AM_RANGE(0x2002, 0x2002) AM_MIRROR(0x0ffc) AM_READ_PORT("PADDLE") AM_RANGE(0x2003, 0x2003) AM_MIRROR(0x0ffc) AM_READNOP AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x0fff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x4000, 0x4000) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_1_lamp_w) -// AM_RANGE(0x4001, 0x4001) AM_MIRROR(0x0ff8) AM_WRITE(avalnche_attract_enable_w) /* It is attract_enable just like avalnche, but not hooked up yet. */ - AM_RANGE(0x4002, 0x4002) AM_MIRROR(0x0ff8) AM_WRITE(avalance_video_invert_w) - AM_RANGE(0x4003, 0x4003) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_2_lamp_w) - AM_RANGE(0x4004, 0x4006) AM_MIRROR(0x0ff8) AM_WRITE(catch_audio_w) - AM_RANGE(0x4007, 0x4007) AM_MIRROR(0x0ff8) AM_WRITE(avalance_start_lamp_w) + AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x0ff8) AM_DEVWRITE("latch", f9334_device, write_d0) AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x0fff) AM_WRITE(catch_coin_counter_w) AM_RANGE(0x7000, 0x7fff) AM_ROM ADDRESS_MAP_END @@ -243,7 +234,6 @@ void avalnche_state::machine_start() void avalnche_state::machine_reset() { - m_avalance_video_inverted = 0; } static MACHINE_CONFIG_START( avalnche ) @@ -269,6 +259,16 @@ static MACHINE_CONFIG_START( avalnche ) MCFG_SOUND_ADD("discrete", DISCRETE, 0) MCFG_DISCRETE_INTF(avalnche) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_DEVICE_ADD("latch", F9334, 0) // F8 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(avalnche_state, credit_1_lamp_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_ATTRACT_EN>)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(avalnche_state, video_invert_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(avalnche_state, credit_2_lamp_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_AUD0_EN>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_AUD1_EN>)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_AUD2_EN>)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(avalnche_state, start_lamp_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( catch, avalnche ) @@ -281,6 +281,11 @@ static MACHINE_CONFIG_DERIVED( catch, avalnche ) MCFG_DEVICE_REMOVE("discrete") MCFG_DEVICE_REMOVE("mono") + MCFG_DEVICE_MODIFY("latch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // It is attract_enable just like avalnche, but not hooked up yet. + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(avalnche_state, catch_aud0_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(avalnche_state, catch_aud1_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(avalnche_state, catch_aud2_w)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/bagman.cpp b/src/mame/drivers/bagman.cpp index 872bd79cdde..de3d13f4cae 100644 --- a/src/mame/drivers/bagman.cpp +++ b/src/mame/drivers/bagman.cpp @@ -73,14 +73,11 @@ DIP locations verified for: void bagman_state::machine_start() { + m_video_enable = true; + save_item(NAME(m_irq_mask)); save_item(NAME(m_columnvalue)); -} - -MACHINE_START_MEMBER(bagman_state, bagman) -{ - bagman_state::machine_start(); - save_item(NAME(m_ls259_buf)); + save_item(NAME(m_video_enable)); } MACHINE_START_MEMBER(bagman_state, squaitsa) @@ -96,39 +93,34 @@ MACHINE_START_MEMBER(bagman_state, squaitsa) WRITE8_MEMBER(bagman_state::ls259_w) { pal16r6_w(space, offset,data); /*this is just a simulation*/ + m_tmslatch->write_bit(offset, data & 1); +} - if (m_ls259_buf[offset] != (data&1) ) - { - m_ls259_buf[offset] = data&1; - - switch (offset) - { - case 0: - case 1: - case 2: - m_tmsprom->bit_w(space, 0, 7 - ((m_ls259_buf[0]<<2) | (m_ls259_buf[1]<<1) | (m_ls259_buf[2]<<0))); - break; - case 3: - m_tmsprom->enable_w(m_ls259_buf[offset]); - break; - case 4: - m_tmsprom->rom_csq_w(space, 0, m_ls259_buf[offset]); - break; - case 5: - m_tmsprom->rom_csq_w(space, 1, m_ls259_buf[offset]); - break; - } - } +WRITE_LINE_MEMBER(bagman_state::tmsprom_bit_w) +{ + m_tmsprom->bit_w(machine().dummy_space(), 0, 7 - ((m_tmslatch->q0_r()<<2) | (m_tmslatch->q1_r()<<1) | (m_tmslatch->q2_r()<<0))); +} + +WRITE_LINE_MEMBER(bagman_state::tmsprom_csq0_w) +{ + m_tmsprom->rom_csq_w(machine().dummy_space(), 0, state); } -WRITE8_MEMBER(bagman_state::coincounter_w) +WRITE_LINE_MEMBER(bagman_state::tmsprom_csq1_w) { - machine().bookkeeping().coin_counter_w(offset,data); + m_tmsprom->rom_csq_w(machine().dummy_space(), 1, state); } -WRITE8_MEMBER(bagman_state::irq_mask_w) +WRITE_LINE_MEMBER(bagman_state::coin_counter_w) { - m_irq_mask = data & 1; + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(bagman_state::irq_mask_w) +{ + m_irq_mask = state; + if (!state) + m_maincpu->set_input_line(0, CLEAR_LINE); } static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bagman_state ) @@ -138,21 +130,16 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bagman_state ) AM_RANGE(0x9800, 0x9bff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram") AM_RANGE(0x9c00, 0x9fff) AM_WRITENOP /* written to, but unused */ AM_RANGE(0xa000, 0xa000) AM_READ(pal16r6_r) - //AM_RANGE(0xa800, 0xa805) AM_READ(bagman_ls259_r) /*just for debugging purposes*/ - AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITE(flipscreen_w) - AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_SHARE("video_enable") + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xc000, 0xffff) AM_ROM /* Super Bagman only */ AM_RANGE(0x9800, 0x981f) AM_WRITEONLY AM_SHARE("spriteram") /* hidden portion of color RAM */ /* here only to initialize the pointer, */ /* writes are handled by colorram_w */ - AM_RANGE(0xa800, 0xa805) AM_WRITE(ls259_w) /* TMS5110 driving state machine */ - AM_RANGE(0xa004, 0xa004) AM_WRITE(coincounter_w) + AM_RANGE(0xa800, 0xa807) AM_WRITE(ls259_w) /* TMS5110 driving state machine */ AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_RANGE(0xb800, 0xb800) AM_READNOP /* looks like watchdog from schematics */ #if 0 - AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* ???? */ AM_RANGE(0xb000, 0xb000) AM_WRITENOP /* ???? */ AM_RANGE(0xb800, 0xb800) AM_WRITENOP /* ???? */ #endif @@ -169,17 +156,9 @@ static ADDRESS_MAP_START( pickin_map, AS_PROGRAM, 8, bagman_state ) /* here only to initialize the pointer, */ /* writes are handled by colorram_w */ AM_RANGE(0x9c00, 0x9fff) AM_WRITENOP /* written to, but unused */ - AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITE(flipscreen_w) - AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_SHARE("video_enable") - AM_RANGE(0xa004, 0xa004) AM_WRITE(coincounter_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xa800, 0xa800) AM_READ_PORT("DSW") - - AM_RANGE(0xa005, 0xa005) AM_WRITENOP /* ???? */ - AM_RANGE(0xa006, 0xa006) AM_WRITENOP /* ???? */ - AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* ???? */ - /* guess */ AM_RANGE(0xb000, 0xb000) AM_DEVWRITE("ay2", ay8910_device, address_w) AM_RANGE(0xb800, 0xb800) AM_DEVREADWRITE("ay2", ay8910_device, data_r, data_w) @@ -457,8 +436,8 @@ READ8_MEMBER(bagman_state::dial_input_p2_r) INTERRUPT_GEN_MEMBER(bagman_state::vblank_irq) { - if(m_irq_mask) - device.execute().set_input_line(0, HOLD_LINE); + if (m_irq_mask) + device.execute().set_input_line(0, ASSERT_LINE); } @@ -470,7 +449,14 @@ static MACHINE_CONFIG_START( bagman ) MCFG_CPU_IO_MAP(main_portmap) MCFG_CPU_VBLANK_INT_DRIVER("screen", bagman_state, vblank_irq) - MCFG_MACHINE_START_OVERRIDE(bagman_state, bagman) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 8H + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, flipscreen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, flipscreen_y_w)) + // video enable register not available on earlier hardware revision(s) + // Bagman is supposed to have glitches during screen transitions + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, coin_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ???? /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -509,6 +495,19 @@ static MACHINE_CONFIG_START( bagman ) MCFG_TMS5110_M0_CB(DEVWRITELINE("tmsprom", tmsprom_device, m0_w)) MCFG_TMS5110_DATA_CB(DEVREADLINE("tmsprom", tmsprom_device, data_r)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_DEVICE_ADD("tmslatch", LS259, 0) // 7H + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, tmsprom_bit_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, tmsprom_bit_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, tmsprom_bit_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("tmsprom", tmsprom_device, enable_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, tmsprom_csq0_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(bagman_state, tmsprom_csq1_w)) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( sbagman, bagman ) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bagman_state, video_enable_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_START( pickin ) @@ -519,6 +518,16 @@ static MACHINE_CONFIG_START( pickin ) MCFG_CPU_IO_MAP(main_portmap) MCFG_CPU_VBLANK_INT_DRIVER("screen", bagman_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, flipscreen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, flipscreen_y_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bagman_state, video_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, coin_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ???? + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // ???? + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ???? + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(BAGMAN_HCLK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) @@ -569,6 +578,16 @@ static MACHINE_CONFIG_START( botanic ) MCFG_CPU_IO_MAP(main_portmap) MCFG_CPU_VBLANK_INT_DRIVER("screen", bagman_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, flipscreen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, flipscreen_y_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bagman_state, video_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, coin_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ???? + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // ???? + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ???? + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(BAGMAN_HCLK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) @@ -1014,25 +1033,17 @@ ROM_START( squaitsa ) ROM_LOAD( "mmi6331.3r", 0x0020, 0x0020,CRC(86c1e7db) SHA1(5c974b51d770a555ddab5c23f03a666c6f286cbf) ) ROM_END -DRIVER_INIT_MEMBER(bagman_state,bagman) -{ - /* Unmap video enable register, not available on earlier hardware revision(s) - Bagman is supposed to have glitches during screen transitions */ - m_maincpu->space(AS_PROGRAM).unmap_write(0xa003, 0xa003); - *m_video_enable = 1; -} - -GAME( 1982, bagman, 0, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation", "Bagman", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, bagnard, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation", "Le Bagnard (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, bagnarda, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation", "Le Bagnard (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, bagnardi, bagman, bagman, bagman, bagman_state, bagman, ROT90, "Valadon Automation (Itisa license)", "Le Bagnard (Itisa, Spain)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, bagmans, bagman, bagman, bagmans, bagman_state, bagman, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, bagmans2, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, bagmanj, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation (Taito license)", "Bagman (Taito)", MACHINE_SUPPORTS_SAVE ) // title screen actually doesn't mention Valadon, only Stern and Taito +GAME( 1982, bagman, 0, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation", "Bagman", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, bagnard, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation", "Le Bagnard (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, bagnarda, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation", "Le Bagnard (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, bagnardi, bagman, bagman, bagman, bagman_state, 0, ROT90, "Valadon Automation (Itisa license)", "Le Bagnard (Itisa, Spain)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, bagmans, bagman, bagman, bagmans, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, bagmans2, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, bagmanj, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation (Taito license)", "Bagman (Taito)", MACHINE_SUPPORTS_SAVE ) // title screen actually doesn't mention Valadon, only Stern and Taito -GAME( 1984, sbagman, 0, bagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation", "Super Bagman", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, sbagmans, sbagman, bagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Super Bagman (Stern Electronics)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, sbagman, 0, sbagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation", "Super Bagman", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, sbagmans, sbagman, sbagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Super Bagman (Stern Electronics)", MACHINE_SUPPORTS_SAVE ) GAME( 1983, pickin, 0, pickin, pickin, bagman_state, 0, ROT270, "Valadon Automation", "Pickin'", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/bsktball.cpp b/src/mame/drivers/bsktball.cpp index acd4c6a3776..a563d6000c2 100644 --- a/src/mame/drivers/bsktball.cpp +++ b/src/mame/drivers/bsktball.cpp @@ -28,6 +28,7 @@ #include "emu.h" #include "cpu/m6502/m6502.h" #include "includes/bsktball.h" +#include "machine/74259.h" #include "sound/discrete.h" #include "screen.h" #include "speaker.h" @@ -83,13 +84,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bsktball_state ) AM_RANGE(0x0803, 0x0803) AM_READ_PORT("DSW") AM_RANGE(0x1000, 0x1000) AM_WRITENOP /* Timer Reset */ AM_RANGE(0x1010, 0x1010) AM_WRITE(bsktball_bounce_w) /* Crowd Amp / Bounce */ - AM_RANGE(0x1022, 0x1023) AM_WRITENOP /* Coin Counter */ - AM_RANGE(0x1024, 0x1025) AM_WRITE(bsktball_led1_w) /* LED 1 */ - AM_RANGE(0x1026, 0x1027) AM_WRITE(bsktball_led2_w) /* LED 2 */ - AM_RANGE(0x1028, 0x1029) AM_WRITE(bsktball_ld1_w) /* LD 1 */ - AM_RANGE(0x102a, 0x102b) AM_WRITE(bsktball_ld2_w) /* LD 2 */ - AM_RANGE(0x102c, 0x102d) AM_WRITE(bsktball_noise_reset_w) /* Noise Reset */ - AM_RANGE(0x102e, 0x102f) AM_WRITE(bsktball_nmion_w) /* NMI On */ + AM_RANGE(0x1020, 0x102f) AM_DEVWRITE("outlatch", f9334_device, write_a0) AM_RANGE(0x1030, 0x1030) AM_WRITE(bsktball_note_w) /* Music Ckt Note Dvsr */ AM_RANGE(0x1800, 0x1bbf) AM_RAM_WRITE(bsktball_videoram_w) AM_SHARE("videoram") /* DISPLAY */ AM_RANGE(0x1bc0, 0x1bff) AM_RAM AM_SHARE("motion") @@ -229,7 +224,6 @@ void bsktball_state::machine_start() void bsktball_state::machine_reset() { - m_nmi_on = 0; // m_i256v = 0; m_ld1 = 0; m_ld2 = 0; @@ -251,6 +245,14 @@ static MACHINE_CONFIG_START( bsktball ) MCFG_CPU_PROGRAM_MAP(main_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", bsktball_state, bsktball_scanline, "screen", 0, 1) + MCFG_DEVICE_ADD("outlatch", F9334, 0) // M6 + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // Coin Counter + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bsktball_state, led1_w)) // LED 1 + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bsktball_state, led2_w)) // LED 2 + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bsktball_state, ld1_w)) // LD 1 + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(bsktball_state, ld2_w)) // LD 2 + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<BSKTBALL_NOISE_EN>)) // Noise Reset + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(bsktball_state, nmion_w)) // NMI On /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/canyon.cpp b/src/mame/drivers/canyon.cpp index ae1ba4e12da..dbef9201d42 100644 --- a/src/mame/drivers/canyon.cpp +++ b/src/mame/drivers/canyon.cpp @@ -95,9 +95,20 @@ READ8_MEMBER(canyon_state::canyon_options_r) * *************************************/ -WRITE8_MEMBER(canyon_state::canyon_led_w) +WRITE8_MEMBER(canyon_state::output_latch_w) { - output().set_led_value(offset & 0x01, offset & 0x02); + // ADR1 = D, ADR8 = A2, ADR7 = A1, ADR0 = A0 + m_outlatch->write_bit((offset & 0x180) >> 6 | BIT(offset, 0), BIT(offset, 1)); +} + +WRITE_LINE_MEMBER(canyon_state::led1_w) +{ + output().set_led_value(0, state); +} + +WRITE_LINE_MEMBER(canyon_state::led2_w) +{ + output().set_led_value(1, state); } @@ -115,9 +126,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, canyon_state ) AM_RANGE(0x0400, 0x0401) AM_WRITE(canyon_motor_w) AM_RANGE(0x0500, 0x0500) AM_WRITE(canyon_explode_w) AM_RANGE(0x0501, 0x0501) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* watchdog, disabled in service mode */ - AM_RANGE(0x0600, 0x0603) AM_WRITE(canyon_whistle_w) - AM_RANGE(0x0680, 0x0683) AM_WRITE(canyon_led_w) - AM_RANGE(0x0700, 0x0703) AM_WRITE(canyon_attract_w) + AM_RANGE(0x0600, 0x0603) AM_SELECT(0x0180) AM_WRITE(output_latch_w) AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(canyon_videoram_w) AM_SHARE("videoram") AM_RANGE(0x1000, 0x17ff) AM_READ(canyon_switches_r) AM_WRITENOP /* sloppy code writes here */ AM_RANGE(0x1800, 0x1fff) AM_READ(canyon_options_r) @@ -245,6 +254,14 @@ static MACHINE_CONFIG_START( canyon ) MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", canyon_state, nmi_line_pulse) + MCFG_DEVICE_ADD("outlatch", F9334, 0) // C7 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_WHISTLE1_EN>)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_WHISTLE2_EN>)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(canyon_state, led1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(canyon_state, led2_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_ATTRACT1_EN>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_ATTRACT2_EN>)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp index f9327dce9ad..459e12f2299 100644 --- a/src/mame/drivers/cclimber.cpp +++ b/src/mame/drivers/cclimber.cpp @@ -285,10 +285,9 @@ READ8_MEMBER(cclimber_state::yamato_p1_r) } -WRITE8_MEMBER(cclimber_state::toprollr_rombank_w) +WRITE_LINE_MEMBER(cclimber_state::toprollr_rombank_w) { - m_toprollr_rombank &= ~(1 << offset); - m_toprollr_rombank |= (data & 1) << offset; + m_toprollr_rombank = m_mainlatch->q5_r() | (m_mainlatch->q6_r() << 1); if (m_toprollr_rombank < 3) { membank("bank1")->set_entry(m_toprollr_rombank); @@ -296,6 +295,7 @@ WRITE8_MEMBER(cclimber_state::toprollr_rombank_w) } } +#ifdef UNUSED_FUNCTION MACHINE_RESET_MEMBER(cclimber_state,cclimber) { /* Disable interrupts, River Patrol / Silver Land needs this otherwise returns bad RAM on POST */ @@ -303,11 +303,11 @@ MACHINE_RESET_MEMBER(cclimber_state,cclimber) m_toprollr_rombank = 0; } +#endif - -WRITE8_MEMBER(cclimber_state::nmi_mask_w) +WRITE_LINE_MEMBER(cclimber_state::nmi_mask_w) { - m_nmi_mask = data & 1; + m_nmi_mask = state; } @@ -335,10 +335,8 @@ static ADDRESS_MAP_START( cclimber_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl") AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */ AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen") - AM_RANGE(0xa003, 0xa003) AM_WRITE(nmi_mask_w) //used by Crazy Kong Bootleg with alt levels and speed up - AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM") @@ -363,9 +361,8 @@ static ADDRESS_MAP_START( cannonb_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl") AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */ AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITE(cannonb_flip_screen_w) AM_SHARE("flip_screen") - AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM") @@ -380,10 +377,8 @@ static ADDRESS_MAP_START( swimmer_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x9880, 0x989f) AM_WRITEONLY AM_SHARE("spriteram") AM_RANGE(0x98fc, 0x98ff) AM_WRITEONLY AM_SHARE("bigspritectrl") AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen") - AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_SHARE("sidebg_enable") - AM_RANGE(0xa004, 0xa004) AM_WRITEONLY AM_SHARE("palettebank") + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P1") AM_WRITE(swimmer_sh_soundlatch_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW1") AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW2") AM_WRITEONLY AM_SHARE("bgcolor") @@ -410,8 +405,8 @@ static ADDRESS_MAP_START( yamato_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl") AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */ AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen") + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_RANGE(0xb800, 0xb800) AM_READ_PORT("COIN") @@ -433,10 +428,8 @@ static ADDRESS_MAP_START( toprollr_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x9880, 0x995f) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x99dc, 0x99df) AM_RAM AM_SHARE("bigspritectrl") AM_RANGE(0x9c00, 0x9fff) AM_RAM AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen") - AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w) - AM_RANGE(0xa005, 0xa006) AM_WRITE(toprollr_rombank_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM") @@ -457,9 +450,8 @@ static ADDRESS_MAP_START( bagmanf_map, AS_PROGRAM, 8, cclimber_state ) AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl") // wrong AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("colorram") AM_RANGE(0x9c00, 0x9fff) AM_RAM /* not used, but initialized */ - AM_RANGE(0xa000, 0xa000) AM_READ(bagmanf_a000_r) AM_WRITE(nmi_mask_w) - AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen") - AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w) + AM_RANGE(0xa000, 0xa000) AM_READ(bagmanf_a000_r) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xa800, 0xa800) AM_READNOP AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w) AM_RANGE(0xb800, 0xb800) AM_READNOP @@ -1109,7 +1101,10 @@ static MACHINE_CONFIG_START( root ) MCFG_CPU_IO_MAP(cclimber_portmap) MCFG_CPU_VBLANK_INT_DRIVER("screen", cclimber_state, vblank_irq) - MCFG_MACHINE_RESET_OVERRIDE(cclimber_state,cclimber) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cclimber_state, flip_screen_y_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1129,6 +1124,8 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( cclimber, root ) + MCFG_DEVICE_MODIFY("mainlatch") // 7J on CCG-1 + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("cclimber_audio", cclimber_audio_device, sample_trigger_w)) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("speaker") @@ -1141,6 +1138,11 @@ static MACHINE_CONFIG_DERIVED( cclimberx, cclimber ) MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( ckongb, cclimber ) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w)) //used by Crazy Kong Bootleg with alt levels and speed up +MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( cannonb, cclimber ) @@ -1148,6 +1150,11 @@ static MACHINE_CONFIG_DERIVED( cannonb, cclimber ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(cannonb_map) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w)) + MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(cclimber_state, flip_screen_y_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // not used + /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", cannonb) MACHINE_CONFIG_END @@ -1204,6 +1211,9 @@ static MACHINE_CONFIG_DERIVED( toprollr, cclimber ) MCFG_SEGACRPT_SET_NUMBANKS(3) MCFG_SEGACRPT_SET_BANKSIZE(0x6000) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cclimber_state, toprollr_rombank_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cclimber_state, toprollr_rombank_w)) /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", toprollr) @@ -1224,6 +1234,13 @@ static MACHINE_CONFIG_START( swimmer ) MCFG_CPU_PROGRAM_MAP(swimmer_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", cclimber_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cclimber_state, flip_screen_y_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cclimber_state, sidebg_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cclimber_state, palette_bank_w)) + MCFG_CPU_ADD("audiocpu", Z80,XTAL_4MHz/2) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(swimmer_audio_map) MCFG_CPU_IO_MAP(swimmer_audio_portmap) @@ -2657,7 +2674,7 @@ GAME( 1981, ckongpt2, 0, cclimber, ckong, cclimber_state, 0, GAME( 1981, ckongpt2a, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "Falcon", "Crazy Kong Part II (set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, ckongpt2j, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "Falcon", "Crazy Kong Part II (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, ckongpt2jeu, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "bootleg (Jeutel)", "Crazy Kong Part II (Jeutel bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, ckongpt2b, ckongpt2, cclimber, ckongb, cclimber_state, ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, ckongpt2b, ckongpt2, ckongb, ckongb, cclimber_state, ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE ) // see bagman.cpp for parent GAME( 1982, bagmanf, bagman, bagmanf, bagmanf, cclimber_state, 0, ROT270, "bootleg", "Le Bagnard (bootleg on Crazy Kong hardware)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/centiped.cpp b/src/mame/drivers/centiped.cpp index ef519422deb..bd54516c152 100644 --- a/src/mame/drivers/centiped.cpp +++ b/src/mame/drivers/centiped.cpp @@ -419,6 +419,7 @@ each direction to assign the boundries. #include "cpu/m6502/m6502.h" #include "cpu/s2650/s2650.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "machine/atari_vg.h" #include "sound/sn76496.h" @@ -568,15 +569,15 @@ READ8_MEMBER(centiped_state::milliped_IN2_r) return data; } -WRITE8_MEMBER(centiped_state::input_select_w) +WRITE_LINE_MEMBER(centiped_state::input_select_w) { - m_dsw_select = (~data >> 7) & 1; + m_dsw_select = !state; } /* used P2 controls if 1, P1 controls if 0 */ -WRITE8_MEMBER(centiped_state::control_select_w) +WRITE_LINE_MEMBER(centiped_state::control_select_w) { - m_control_select = (data >> 7) & 1; + m_control_select = state; } @@ -616,9 +617,27 @@ READ8_MEMBER(centiped_state::bullsdrt_data_port_r) * *************************************/ -WRITE8_MEMBER(centiped_state::led_w) +WRITE_LINE_MEMBER(centiped_state::led_1_w) { - output().set_led_value(offset, ~data & 0x80); + output().set_led_value(0, !state); +} + + +WRITE_LINE_MEMBER(centiped_state::led_2_w) +{ + output().set_led_value(1, !state); +} + + +WRITE_LINE_MEMBER(centiped_state::led_3_w) +{ + output().set_led_value(2, !state); +} + + +WRITE_LINE_MEMBER(centiped_state::led_4_w) +{ + output().set_led_value(3, !state); } @@ -628,15 +647,27 @@ READ8_MEMBER(centiped_state::caterplr_unknown_r) } -WRITE8_MEMBER(centiped_state::coin_count_w) +WRITE_LINE_MEMBER(centiped_state::coin_counter_left_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + + +WRITE_LINE_MEMBER(centiped_state::coin_counter_center_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} + + +WRITE_LINE_MEMBER(centiped_state::coin_counter_right_w) { - machine().bookkeeping().coin_counter_w(offset, data); + machine().bookkeeping().coin_counter_w(2, state); } -WRITE8_MEMBER(centiped_state::bullsdrt_coin_count_w) +WRITE_LINE_MEMBER(centiped_state::bullsdrt_coin_count_w) { - machine().bookkeeping().coin_counter_w(0, data); + machine().bookkeeping().coin_counter_w(0, state); } @@ -663,9 +694,7 @@ static ADDRESS_MAP_START( centiped_base_map, AS_PROGRAM, 8, centiped_state ) AM_RANGE(0x1680, 0x1680) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w) AM_RANGE(0x1700, 0x173f) AM_DEVREAD("earom", atari_vg_earom_device, read) AM_RANGE(0x1800, 0x1800) AM_WRITE(irq_ack_w) - AM_RANGE(0x1c00, 0x1c02) AM_WRITE(coin_count_w) - AM_RANGE(0x1c03, 0x1c04) AM_WRITE(led_w) - AM_RANGE(0x1c07, 0x1c07) AM_WRITE(centiped_flip_screen_w) + AM_RANGE(0x1c00, 0x1c07) AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x2000, 0x2000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x2000, 0x3fff) AM_ROM ADDRESS_MAP_END @@ -697,9 +726,7 @@ static ADDRESS_MAP_START( centipdb_map, AS_PROGRAM, 8, centiped_state ) AM_RANGE(0x1680, 0x1680) AM_MIRROR(0x4000) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w) AM_RANGE(0x1700, 0x173f) AM_MIRROR(0x4000) AM_DEVREAD("earom", atari_vg_earom_device, read) AM_RANGE(0x1800, 0x1800) AM_MIRROR(0x4000) AM_WRITE(irq_ack_w) - AM_RANGE(0x1c00, 0x1c02) AM_MIRROR(0x4000) AM_WRITE(coin_count_w) - AM_RANGE(0x1c03, 0x1c04) AM_MIRROR(0x4000) AM_WRITE(led_w) - AM_RANGE(0x1c07, 0x1c07) AM_MIRROR(0x4000) AM_WRITE(centiped_flip_screen_w) + AM_RANGE(0x1c00, 0x1c07) AM_MIRROR(0x4000) AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x2000, 0x27ff) AM_ROM AM_RANGE(0x2800, 0x3fff) AM_MIRROR(0x4000) AM_ROM AM_RANGE(0x6000, 0x67ff) AM_ROM @@ -752,11 +779,7 @@ static ADDRESS_MAP_START( milliped_map, AS_PROGRAM, 8, centiped_state ) AM_RANGE(0x2011, 0x2011) AM_READ_PORT("IN3") AM_RANGE(0x2030, 0x2030) AM_DEVREAD("earom", atari_vg_earom_device, read) AM_RANGE(0x2480, 0x249f) AM_WRITE(milliped_paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0x2500, 0x2502) AM_WRITE(coin_count_w) - AM_RANGE(0x2503, 0x2504) AM_WRITE(led_w) - AM_RANGE(0x2505, 0x2505) AM_WRITE(input_select_w) /* TBEN */ - AM_RANGE(0x2506, 0x2506) AM_WRITE(centiped_flip_screen_w) - AM_RANGE(0x2507, 0x2507) AM_WRITE(control_select_w) /* CNTRLSEL */ + AM_RANGE(0x2500, 0x2507) AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x2600, 0x2600) AM_WRITE(irq_ack_w) AM_RANGE(0x2680, 0x2680) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x2700, 0x2700) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w) @@ -800,11 +823,7 @@ static ADDRESS_MAP_START( multiped_map, AS_PROGRAM, 8, centiped_state ) AM_RANGE(0x2011, 0x2011) AM_READ_PORT("IN3") AM_RANGE(0x2030, 0x2030) AM_READNOP AM_RANGE(0x2480, 0x249f) AM_WRITE(milliped_paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0x2500, 0x2502) AM_WRITE(coin_count_w) - AM_RANGE(0x2503, 0x2504) AM_WRITE(led_w) - AM_RANGE(0x2505, 0x2505) AM_WRITE(input_select_w) - AM_RANGE(0x2506, 0x2506) AM_WRITE(centiped_flip_screen_w) - AM_RANGE(0x2507, 0x2507) AM_WRITE(control_select_w) + AM_RANGE(0x2500, 0x2507) AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x2600, 0x2600) AM_WRITE(irq_ack_w) AM_RANGE(0x2680, 0x2680) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x2700, 0x2700) AM_WRITENOP @@ -875,8 +894,7 @@ static ADDRESS_MAP_START( warlords_map, AS_PROGRAM, 8, centiped_state ) AM_RANGE(0x0c01, 0x0c01) AM_READ_PORT("IN1") AM_RANGE(0x1000, 0x100f) AM_DEVREADWRITE("pokey", pokey_device, read, write) AM_RANGE(0x1800, 0x1800) AM_WRITE(irq_ack_w) - AM_RANGE(0x1c00, 0x1c02) AM_WRITE(coin_count_w) - AM_RANGE(0x1c03, 0x1c06) AM_WRITE(led_w) + AM_RANGE(0x1c00, 0x1c07) AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x5000, 0x7fff) AM_ROM ADDRESS_MAP_END @@ -903,10 +921,7 @@ static ADDRESS_MAP_START( mazeinv_map, AS_PROGRAM, 8, centiped_state ) AM_RANGE(0x2020, 0x2020) AM_READ(mazeinv_input_r) AM_RANGE(0x2030, 0x2030) AM_DEVREAD("earom", atari_vg_earom_device, read) AM_RANGE(0x2480, 0x249f) AM_WRITE(mazeinv_paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0x2500, 0x2502) AM_WRITE(coin_count_w) - AM_RANGE(0x2503, 0x2504) AM_WRITE(led_w) - AM_RANGE(0x2505, 0x2505) AM_WRITE(input_select_w) - AM_RANGE(0x2506, 0x2506) AM_WRITE(centiped_flip_screen_w) + AM_RANGE(0x2500, 0x2507) AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x2580, 0x2583) AM_WRITE(mazeinv_input_select_w) AM_RANGE(0x2600, 0x2600) AM_WRITE(irq_ack_w) AM_RANGE(0x2680, 0x2680) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) @@ -933,9 +948,7 @@ static ADDRESS_MAP_START( bullsdrt_map, AS_PROGRAM, 8, centiped_state ) AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x6000) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w) AM_RANGE(0x1300, 0x1300) AM_MIRROR(0x6000) AM_READ_PORT("DSW2") AM_RANGE(0x1400, 0x140f) AM_MIRROR(0x6000) AM_WRITE(centiped_paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0x1481, 0x1481) AM_MIRROR(0x6000) AM_WRITE(bullsdrt_coin_count_w) - AM_RANGE(0x1483, 0x1484) AM_MIRROR(0x6000) AM_WRITE(led_w) - AM_RANGE(0x1487, 0x1487) AM_MIRROR(0x6000) AM_WRITE(centiped_flip_screen_w) + AM_RANGE(0x1480, 0x1487) AM_MIRROR(0x6000) AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x1500, 0x1500) AM_MIRROR(0x6000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x1580, 0x1580) AM_MIRROR(0x6000) AM_NOP AM_RANGE(0x1800, 0x1bbf) AM_MIRROR(0x6000) AM_WRITE(centiped_videoram_w) AM_SHARE("videoram") @@ -1692,6 +1705,13 @@ static MACHINE_CONFIG_START( centiped_base ) MCFG_ATARIVGEAROM_ADD("earom") + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(centiped_state, coin_counter_left_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(centiped_state, coin_counter_center_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(centiped_state, coin_counter_right_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(centiped_state, led_1_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(centiped_state, led_2_w)) + MCFG_WATCHDOG_ADD("watchdog") /* timer */ @@ -1716,6 +1736,9 @@ static MACHINE_CONFIG_DERIVED( centiped, centiped_base ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(centiped_map) + MCFG_DEVICE_MODIFY("outlatch") // M10 + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w)) + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1732,6 +1755,9 @@ static MACHINE_CONFIG_DERIVED( caterplr, centiped_base ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(caterplr_map) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w)) + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1747,6 +1773,9 @@ static MACHINE_CONFIG_DERIVED( centipdb, centiped_base ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(centipdb_map) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w)) + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1763,6 +1792,9 @@ static MACHINE_CONFIG_DERIVED( magworm, centiped_base ) MCFG_CPU_PROGRAM_MAP(magworm_map) MCFG_MACHINE_RESET_OVERRIDE(centiped_state,magworm) + MCFG_DEVICE_MODIFY("outlatch") // 12A + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w)) + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1772,12 +1804,17 @@ static MACHINE_CONFIG_DERIVED( magworm, centiped_base ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( milliped, centiped ) +static MACHINE_CONFIG_DERIVED( milliped, centiped_base ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(milliped_map) + MCFG_DEVICE_MODIFY("outlatch") // 12E + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(centiped_state, input_select_w)) // TBEN + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(centiped_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, control_select_w)) // CNTRLSEL + /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", milliped) MCFG_PALETTE_MODIFY("palette") @@ -1788,7 +1825,9 @@ static MACHINE_CONFIG_DERIVED( milliped, centiped ) MCFG_SCREEN_UPDATE_DRIVER(centiped_state, screen_update_milliped) /* sound hardware */ - MCFG_SOUND_REPLACE("pokey", POKEY, 12096000/8) + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_DEVICE_ADD("pokey", POKEY, 12096000/8) MCFG_POKEY_ALLPOT_R_CB(IOPORT("DSW1")) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) @@ -1809,12 +1848,17 @@ static MACHINE_CONFIG_DERIVED( multiped, milliped ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( warlords, centiped ) +static MACHINE_CONFIG_DERIVED( warlords, centiped_base ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(warlords_map) + // these extra LEDs also appear on Centipede schematics + MCFG_DEVICE_MODIFY("outlatch") // P9 + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(centiped_state, led_3_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(centiped_state, led_4_w)) + /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", warlords) MCFG_PALETTE_MODIFY("palette") @@ -1826,7 +1870,9 @@ static MACHINE_CONFIG_DERIVED( warlords, centiped ) MCFG_SCREEN_UPDATE_DRIVER(centiped_state, screen_update_warlords) /* sound hardware */ - MCFG_SOUND_REPLACE("pokey", POKEY, 12096000/8) + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_DEVICE_ADD("pokey", POKEY, 12096000/8) MCFG_POKEY_POT0_R_CB(IOPORT("PADDLE0")) MCFG_POKEY_POT1_R_CB(IOPORT("PADDLE1")) MCFG_POKEY_POT2_R_CB(IOPORT("PADDLE2")) @@ -1840,6 +1886,10 @@ static MACHINE_CONFIG_DERIVED( mazeinv, milliped ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(mazeinv_map) + + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) + MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_UPDATE_DRIVER(centiped_state, screen_update_centiped) MACHINE_CONFIG_END @@ -1855,6 +1905,12 @@ static MACHINE_CONFIG_START( bullsdrt ) MCFG_ATARIVGEAROM_ADD("earom") + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(centiped_state, bullsdrt_coin_count_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(centiped_state, led_1_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(centiped_state, led_2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/champbas.cpp b/src/mame/drivers/champbas.cpp index c30c85745c4..112356e9e6c 100644 --- a/src/mame/drivers/champbas.cpp +++ b/src/mame/drivers/champbas.cpp @@ -81,6 +81,7 @@ TODO: #include "emu.h" #include "includes/champbas.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" @@ -102,9 +103,9 @@ CUSTOM_INPUT_MEMBER(champbas_state::watchdog_bit2) return (0x10 - m_watchdog->get_vblank_counter()) >> 2 & 1; } -WRITE8_MEMBER(champbas_state::irq_enable_w) +WRITE_LINE_MEMBER(champbas_state::irq_enable_w) { - m_irq_mask = data & 1; + m_irq_mask = state; if (!m_irq_mask) m_maincpu->set_input_line(0, CLEAR_LINE); @@ -123,15 +124,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(champbas_state::exctsccr_sound_irq) * *************************************/ -WRITE8_MEMBER(champbas_state::mcu_switch_w) +WRITE_LINE_MEMBER(champbas_state::mcu_switch_w) { // switch shared RAM between CPU and MCU bus - m_alpha_8201->bus_dir_w(data & 1); + m_alpha_8201->bus_dir_w(state); } -WRITE8_MEMBER(champbas_state::mcu_start_w) +WRITE_LINE_MEMBER(champbas_state::mcu_start_w) { - m_alpha_8201->mcu_start_w(data & 1); + m_alpha_8201->mcu_start_w(state); } /* champbja another protection */ @@ -190,14 +191,7 @@ static ADDRESS_MAP_START( champbas_map, AS_PROGRAM, 8, champbas_state ) AM_RANGE(0xa080, 0xa080) AM_MIRROR(0x0020) AM_READ_PORT("DSW") AM_RANGE(0xa0c0, 0xa0c0) AM_READ_PORT("SYSTEM") - AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_enable_w) - AM_RANGE(0xa001, 0xa001) AM_WRITENOP // !WORK board output (no use?) - AM_RANGE(0xa002, 0xa002) AM_WRITE(gfxbank_w) - AM_RANGE(0xa003, 0xa003) AM_WRITE(flipscreen_w) - AM_RANGE(0xa004, 0xa004) AM_WRITE(palette_bank_w) - AM_RANGE(0xa005, 0xa005) AM_WRITENOP // n.c. - AM_RANGE(0xa006, 0xa006) AM_WRITENOP // no MCU - AM_RANGE(0xa007, 0xa007) AM_WRITENOP // no MCU + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xa060, 0xa06f) AM_WRITEONLY AM_SHARE("spriteram") AM_RANGE(0xa080, 0xa080) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) @@ -207,8 +201,6 @@ ADDRESS_MAP_END // base map + ALPHA-8x0x protection static ADDRESS_MAP_START( champbasj_map, AS_PROGRAM, 8, champbas_state ) AM_RANGE(0x6000, 0x63ff) AM_DEVREADWRITE("alpha_8201", alpha_8201_device, ext_ram_r, ext_ram_w) - AM_RANGE(0xa006, 0xa006) AM_WRITE(mcu_start_w) - AM_RANGE(0xa007, 0xa007) AM_WRITE(mcu_switch_w) AM_IMPORT_FROM( champbas_map ) ADDRESS_MAP_END @@ -231,25 +223,16 @@ static ADDRESS_MAP_START( champbb2_map, AS_PROGRAM, 8, champbas_state ) AM_IMPORT_FROM( champbasj_map ) ADDRESS_MAP_END -// talbot -static ADDRESS_MAP_START( talbot_map, AS_PROGRAM, 8, champbas_state ) - AM_RANGE(0xa002, 0xa002) AM_WRITENOP // no gfxbank - AM_RANGE(0xa004, 0xa004) AM_WRITENOP // no palettebank - AM_IMPORT_FROM( champbasj_map ) -ADDRESS_MAP_END - // more sprites in exctsccr static ADDRESS_MAP_START( exctsccr_map, AS_PROGRAM, 8, champbas_state ) AM_RANGE(0x7000, 0x7001) AM_UNMAP // aysnd is controlled by audiocpu AM_RANGE(0x7c00, 0x7fff) AM_RAM - AM_RANGE(0xa004, 0xa004) AM_WRITENOP // no palettebank AM_RANGE(0xa040, 0xa04f) AM_WRITEONLY AM_SHARE("spriteram2") AM_IMPORT_FROM( champbasj_map ) ADDRESS_MAP_END // exctsccrb static ADDRESS_MAP_START( exctsccrb_map, AS_PROGRAM, 8, champbas_state ) - AM_RANGE(0xa004, 0xa004) AM_WRITENOP // no palettebank AM_RANGE(0xa040, 0xa04f) AM_WRITEONLY AM_SHARE("spriteram2") AM_IMPORT_FROM( champbasj_map ) ADDRESS_MAP_END @@ -524,9 +507,19 @@ static MACHINE_CONFIG_START( talbot ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6) - MCFG_CPU_PROGRAM_MAP(talbot_map) + MCFG_CPU_PROGRAM_MAP(champbasj_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // no gfxbank + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // no palettebank + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c. + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w)) + MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL_18_432MHz/6/8) MCFG_QUANTUM_PERFECT_CPU("alpha_8201:mcu") @@ -564,6 +557,16 @@ static MACHINE_CONFIG_START( champbas ) MCFG_CPU_PROGRAM_MAP(champbas_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 9D; 8G on Champion Baseball II Double Board Configuration + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(champbas_state, gfxbank_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(champbas_state, palette_bank_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c. + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // no MCU + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // no MCU + MCFG_CPU_ADD("audiocpu", Z80, XTAL_18_432MHz/6) MCFG_CPU_PROGRAM_MAP(champbas_sound_map) @@ -603,6 +606,10 @@ static MACHINE_CONFIG_DERIVED( champbasj, champbas ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(champbasj_map) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w)) + MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL_18_432MHz/6/8) // note: 8302 rom on champbb2 (same device!) MCFG_QUANTUM_PERFECT_CPU("alpha_8201:mcu") MACHINE_CONFIG_END @@ -636,6 +643,16 @@ static MACHINE_CONFIG_START( exctsccr ) MCFG_CPU_PROGRAM_MAP(exctsccr_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(champbas_state, gfxbank_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // no palettebank + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c. + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w)) + MCFG_CPU_ADD("audiocpu", Z80, XTAL_14_31818MHz/4 ) MCFG_CPU_PROGRAM_MAP(exctsccr_sound_map) MCFG_CPU_IO_MAP(exctsccr_sound_io_map) @@ -697,6 +714,16 @@ static MACHINE_CONFIG_START( exctsccrb ) MCFG_CPU_PROGRAM_MAP(exctsccrb_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(champbas_state, gfxbank_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // no palettebank + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c. + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w)) + MCFG_CPU_ADD("audiocpu", Z80, XTAL_18_432MHz/6) MCFG_CPU_PROGRAM_MAP(champbas_sound_map) diff --git a/src/mame/drivers/changela.cpp b/src/mame/drivers/changela.cpp index 3d34527dea0..8f156361f56 100644 --- a/src/mame/drivers/changela.cpp +++ b/src/mame/drivers/changela.cpp @@ -14,6 +14,7 @@ Tomasz Slanina #include "includes/changela.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/ay8910.h" #include "speaker.h" @@ -132,24 +133,29 @@ READ8_MEMBER(changela_state::changela_2d_r) return (ioport("IN1")->read() & 0x20) | gas | (v8 << 4); } -WRITE8_MEMBER(changela_state::mcu_pc_0_w) +WRITE_LINE_MEMBER(changela_state::mcu_pc_0_w) { - m_mcu->pc_w(space, 0, 0xfe | (data & 0x01)); + m_mcu->pc_w(machine().dummy_space(), 0, 0xfe | state); } -WRITE8_MEMBER(changela_state::changela_collision_reset_0) +WRITE_LINE_MEMBER(changela_state::collision_reset_0_w) { - m_collision_reset = data & 0x01; + m_collision_reset = state; } -WRITE8_MEMBER(changela_state::changela_collision_reset_1) +WRITE_LINE_MEMBER(changela_state::collision_reset_1_w) { - m_tree_collision_reset = data & 0x01; + m_tree_collision_reset = state; } -WRITE8_MEMBER(changela_state::changela_coin_counter_w) +WRITE_LINE_MEMBER(changela_state::coin_counter_1_w) { - machine().bookkeeping().coin_counter_w(offset, data); + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(changela_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } @@ -172,14 +178,11 @@ static ADDRESS_MAP_START( changela_map, AS_PROGRAM, 8, changela_state ) AM_RANGE(0xd010, 0xd011) AM_DEVREADWRITE("ay2", ay8910_device, data_r, address_data_w) /* LS259 - U44 */ - AM_RANGE(0xd020, 0xd020) AM_WRITE(changela_collision_reset_0) - AM_RANGE(0xd021, 0xd022) AM_WRITE(changela_coin_counter_w) -//AM_RANGE(0xd023, 0xd023) AM_WRITENOP + AM_RANGE(0xd020, 0xd027) AM_DEVWRITE("outlatch", ls259_device, write_d0) /* LS139 - U24 */ - AM_RANGE(0xd024, 0xd024) AM_READWRITE(changela_24_r, mcu_pc_0_w) - AM_RANGE(0xd025, 0xd025) AM_READWRITE(changela_25_r, changela_collision_reset_1) - AM_RANGE(0xd026, 0xd026) AM_WRITENOP + AM_RANGE(0xd024, 0xd024) AM_READ(changela_24_r) + AM_RANGE(0xd025, 0xd025) AM_READ(changela_25_r) AM_RANGE(0xd028, 0xd028) AM_READ(mcu_r) AM_RANGE(0xd02c, 0xd02c) AM_READ(changela_2c_r) AM_RANGE(0xd02d, 0xd02d) AM_READ(changela_2d_r) @@ -419,6 +422,13 @@ static MACHINE_CONFIG_START( changela ) MCFG_M68705_PORTC_W_CB(WRITE8(changela_state, changela_68705_port_c_w)) MCFG_CPU_VBLANK_INT_DRIVER("screen", changela_state, chl_mcu_irq) + MCFG_DEVICE_ADD("outlatch", LS259, 0) // U44 on Sound I/O Board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(changela_state, collision_reset_0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(changela_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(changela_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(changela_state, mcu_pc_0_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(changela_state, collision_reset_1_w)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/cinemat.cpp b/src/mame/drivers/cinemat.cpp index 0915588d3db..bfe709854a6 100644 --- a/src/mame/drivers/cinemat.cpp +++ b/src/mame/drivers/cinemat.cpp @@ -120,19 +120,17 @@ READ8_MEMBER(cinemat_state::coin_input_r) * *************************************/ -WRITE8_MEMBER(cinemat_state::coin_reset_w) +WRITE_LINE_MEMBER(cinemat_state::coin_reset_w) { /* on the rising edge of a coin reset, clear the coin_detected flag */ - if (m_coin_last_reset != data && data != 0) + if (state) m_coin_detected = 0; - m_coin_last_reset = data; } -WRITE8_MEMBER(cinemat_state::mux_select_w) +WRITE_LINE_MEMBER(cinemat_state::mux_select_w) { - m_mux_select = data; - cinemat_sound_control_w(space, 0x07, data); + m_mux_select = state; } @@ -272,7 +270,7 @@ READ8_MEMBER(cinemat_state::qb3_frame_r) } -WRITE8_MEMBER(cinemat_state::qb3_ram_bank_w) +WRITE_LINE_MEMBER(cinemat_state::qb3_ram_bank_w) { membank("bank1")->set_entry(m_maincpu->state_int(ccpu_cpu_device::CCPU_P) & 3); } @@ -321,9 +319,7 @@ static ADDRESS_MAP_START( io_map, AS_IO, 8, cinemat_state ) AM_RANGE(0x10, 0x16) AM_READ(switches_r) AM_RANGE(0x17, 0x17) AM_READ(coin_input_r) - AM_RANGE(0x05, 0x05) AM_WRITE(coin_reset_w) - AM_RANGE(0x06, 0x06) AM_WRITE(cinemat_vector_control_w) - AM_RANGE(0x00, 0x07) AM_WRITE(cinemat_sound_control_w) + AM_RANGE(0x00, 0x07) AM_DEVWRITE("outlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -968,6 +964,10 @@ static MACHINE_CONFIG_START( cinemat_nojmi_4k ) MCFG_CPU_DATA_MAP(data_map) MCFG_CPU_IO_MAP(io_map) + MCFG_DEVICE_ADD("outlatch", LS259, 0) // 7J on CCG-1 + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cinemat_state, coin_reset_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cinemat_state, vector_control_w)) + /* video hardware */ MCFG_VECTOR_ADD("vector") MCFG_SCREEN_ADD("screen", VECTOR) @@ -1048,6 +1048,9 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( tailg, cinemat_nojmi_8k ) MCFG_FRAGMENT_ADD(tailg_sound) + + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, mux_select_w)) MACHINE_CONFIG_END @@ -1082,6 +1085,9 @@ static MACHINE_CONFIG_DERIVED( boxingb, cinemat_jmi_32k ) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_VISIBLE_AREA(0, 1024, 0, 788) MCFG_VIDEO_START_OVERRIDE(cinemat_state,cinemat_color) + + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, mux_select_w)) MACHINE_CONFIG_END @@ -1112,6 +1118,9 @@ static MACHINE_CONFIG_DERIVED( qb3, cinemat_jmi_32k ) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_VISIBLE_AREA(0, 1120, 0, 780) MCFG_VIDEO_START_OVERRIDE(cinemat_state,cinemat_qb3color) + + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, qb3_ram_bank_w)) MACHINE_CONFIG_END @@ -1434,23 +1443,15 @@ DRIVER_INIT_MEMBER(cinemat_state,sundance) } -DRIVER_INIT_MEMBER(cinemat_state,tailg) -{ - m_maincpu->space(AS_IO).install_write_handler(0x07, 0x07, write8_delegate(FUNC(cinemat_state::mux_select_w),this)); -} - - DRIVER_INIT_MEMBER(cinemat_state,boxingb) { m_maincpu->space(AS_IO).install_read_handler(0x0c, 0x0f, read8_delegate(FUNC(cinemat_state::boxingb_dial_r),this)); - m_maincpu->space(AS_IO).install_write_handler(0x07, 0x07, write8_delegate(FUNC(cinemat_state::mux_select_w),this)); } DRIVER_INIT_MEMBER(cinemat_state,qb3) { m_maincpu->space(AS_IO).install_read_handler(0x0f, 0x0f, read8_delegate(FUNC(cinemat_state::qb3_frame_r),this)); - m_maincpu->space(AS_IO).install_write_handler(0x00, 0x00, write8_delegate(FUNC(cinemat_state::qb3_ram_bank_w),this)); membank("bank1")->configure_entries(0, 4, m_rambase, 0x100*2); } @@ -1469,7 +1470,7 @@ GAMEL(1979, barrier, 0, barrier, barrier, cinemat_state, 0, ORIE GAME( 1979, speedfrk, 0, speedfrk, speedfrk, cinemat_state, speedfrk, ORIENTATION_FLIP_Y, "Vectorbeam", "Speed Freak", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1979, starhawk, 0, starhawk, starhawk, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Star Hawk", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAMEL(1979, sundance, 0, sundance, sundance, cinemat_state, sundance, ORIENTATION_FLIP_X ^ ROT270, "Cinematronics", "Sundance", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_sundance ) -GAMEL(1979, tailg, 0, tailg, tailg, cinemat_state, tailg, ORIENTATION_FLIP_Y, "Cinematronics", "Tailgunner", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_tailg ) +GAMEL(1979, tailg, 0, tailg, tailg, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Tailgunner", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_tailg ) GAME( 1979, warrior, 0, warrior, warrior, cinemat_state, 0, ORIENTATION_FLIP_Y, "Vectorbeam", "Warrior", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAMEL(1980, armora, 0, armora, armora, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Armor Attack", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_armora ) GAMEL(1980, armorap, armora, armora, armora, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Armor Attack (prototype)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_armora ) diff --git a/src/mame/drivers/cloak.cpp b/src/mame/drivers/cloak.cpp index ecaba50da9f..71ead7ea5dc 100644 --- a/src/mame/drivers/cloak.cpp +++ b/src/mame/drivers/cloak.cpp @@ -43,7 +43,7 @@ 3200-327F: (W) Color RAM, Address bit 6 becomes the 9th bit of color RAM 3800: (W) Right Coin Counter - 3801: (W) Left Coint Counter + 3801: (W) Left Coin Counter 3803: (W) Cocktail Output 3806: (W) Start 2 LED 3807: (W) Start 1 LED @@ -121,6 +121,7 @@ #include "cpu/m6502/m6502.h" #include "sound/pokey.h" +#include "machine/74259.h" #include "machine/nvram.h" #include "machine/watchdog.h" #include "speaker.h" @@ -132,14 +133,24 @@ * *************************************/ -WRITE8_MEMBER(cloak_state::cloak_led_w) +WRITE_LINE_MEMBER(cloak_state::start_led_1_w) { - output().set_led_value(1 - offset, ~data & 0x80); + output().set_led_value(0, !state); } -WRITE8_MEMBER(cloak_state::cloak_coin_counter_w) +WRITE_LINE_MEMBER(cloak_state::start_led_2_w) { - machine().bookkeeping().coin_counter_w(1 - offset, data & 0x80); + output().set_led_value(1, !state); +} + +WRITE_LINE_MEMBER(cloak_state::coin_counter_l_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(cloak_state::coin_counter_r_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } WRITE8_MEMBER(cloak_state::cloak_custom_w) @@ -183,10 +194,7 @@ static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8, cloak_state ) AM_RANGE(0x2f00, 0x2fff) AM_NOP AM_RANGE(0x3000, 0x30ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x3200, 0x327f) AM_WRITE(cloak_paletteram_w) - AM_RANGE(0x3800, 0x3801) AM_WRITE(cloak_coin_counter_w) - AM_RANGE(0x3803, 0x3803) AM_WRITE(cloak_flipscreen_w) - AM_RANGE(0x3805, 0x3805) AM_WRITENOP // ??? - AM_RANGE(0x3806, 0x3807) AM_WRITE(cloak_led_w) + AM_RANGE(0x3800, 0x3807) AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x3a00, 0x3a00) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x3c00, 0x3c00) AM_WRITE(cloak_irq_reset_0_w) AM_RANGE(0x3e00, 0x3e00) AM_WRITE(cloak_nvram_enable_w) @@ -328,6 +336,14 @@ static MACHINE_CONFIG_START( cloak ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("outlatch", LS259, 0) // 10B + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cloak_state, coin_counter_r_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cloak_state, coin_counter_l_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cloak_state, cocktail_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ??? + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cloak_state, start_led_2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cloak_state, start_led_1_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/cloud9.cpp b/src/mame/drivers/cloud9.cpp index 3137af7189d..b0dff16b242 100644 --- a/src/mame/drivers/cloud9.cpp +++ b/src/mame/drivers/cloud9.cpp @@ -216,15 +216,27 @@ WRITE8_MEMBER(cloud9_state::irq_ack_w) } -WRITE8_MEMBER(cloud9_state::cloud9_led_w) +WRITE_LINE_MEMBER(cloud9_state::led1_w) { - output().set_led_value(offset, ~data & 0x80); + output().set_led_value(0, !state); } -WRITE8_MEMBER(cloud9_state::cloud9_coin_counter_w) +WRITE_LINE_MEMBER(cloud9_state::led2_w) { - machine().bookkeeping().coin_counter_w(offset, data & 0x80); + output().set_led_value(1, !state); +} + + +WRITE_LINE_MEMBER(cloud9_state::coin1_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + + +WRITE_LINE_MEMBER(cloud9_state::coin2_counter_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } @@ -272,9 +284,8 @@ static ADDRESS_MAP_START( cloud9_map, AS_PROGRAM, 8, cloud9_state ) AM_RANGE(0x5400, 0x547f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x5480, 0x54ff) AM_WRITE(irq_ack_w) AM_RANGE(0x5500, 0x557f) AM_RAM_WRITE(cloud9_paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0x5580, 0x5587) AM_MIRROR(0x0078) AM_WRITE(cloud9_video_control_w) - AM_RANGE(0x5600, 0x5601) AM_MIRROR(0x0078) AM_WRITE(cloud9_coin_counter_w) - AM_RANGE(0x5602, 0x5603) AM_MIRROR(0x0078) AM_WRITE(cloud9_led_w) + AM_RANGE(0x5580, 0x5587) AM_MIRROR(0x0078) AM_DEVWRITE("videolatch", ls259_device, write_d7) // video control registers + AM_RANGE(0x5600, 0x5607) AM_MIRROR(0x0078) AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x5680, 0x56ff) AM_WRITE(nvram_store_w) AM_RANGE(0x5700, 0x577f) AM_WRITE(nvram_recall_w) AM_RANGE(0x5800, 0x5800) AM_MIRROR(0x007e) AM_READ_PORT("IN0") @@ -410,6 +421,12 @@ static MACHINE_CONFIG_START( cloud9 ) MCFG_CPU_ADD("maincpu", M6502, MASTER_CLOCK/8) MCFG_CPU_PROGRAM_MAP(cloud9_map) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cloud9_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cloud9_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cloud9_state, led1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cloud9_state, led2_w)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) @@ -427,6 +444,8 @@ static MACHINE_CONFIG_START( cloud9 ) MCFG_SCREEN_UPDATE_DRIVER(cloud9_state, screen_update_cloud9) MCFG_SCREEN_PALETTE("palette") + MCFG_DEVICE_ADD("videolatch", LS259, 0) + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/clshroad.cpp b/src/mame/drivers/clshroad.cpp index 211921ebc71..5eb316ab9f2 100644 --- a/src/mame/drivers/clshroad.cpp +++ b/src/mame/drivers/clshroad.cpp @@ -31,6 +31,7 @@ TODO: #include "audio/wiping.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "screen.h" #include "speaker.h" @@ -58,19 +59,14 @@ READ8_MEMBER(clshroad_state::input_r) // irq/reset controls like in wiping.cpp -WRITE8_MEMBER(clshroad_state::subcpu_reset_w) +WRITE_LINE_MEMBER(clshroad_state::main_irq_mask_w) { - m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE); + m_main_irq_mask = state; } -WRITE8_MEMBER(clshroad_state::main_irq_mask_w) +WRITE_LINE_MEMBER(clshroad_state::sound_irq_mask_w) { - m_main_irq_mask = data & 1; -} - -WRITE8_MEMBER(clshroad_state::sound_irq_mask_w) -{ - m_sound_irq_mask = data & 1; + m_sound_irq_mask = state; } @@ -80,9 +76,7 @@ static ADDRESS_MAP_START( clshroad_map, AS_PROGRAM, 8, clshroad_state ) AM_RANGE(0x9600, 0x97ff) AM_RAM AM_SHARE("share1") AM_RANGE(0x9800, 0x9dff) AM_RAM AM_RANGE(0x9e00, 0x9fff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0xa000, 0xa000) AM_WRITE(subcpu_reset_w) - AM_RANGE(0xa001, 0xa001) AM_WRITE(main_irq_mask_w) - AM_RANGE(0xa004, 0xa004) AM_WRITE(flipscreen_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xa100, 0xa107) AM_READ(input_r) AM_RANGE(0xa800, 0xafff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // Layer 1 AM_RANGE(0xb000, 0xb003) AM_WRITEONLY AM_SHARE("vregs") // Scroll @@ -93,7 +87,7 @@ static ADDRESS_MAP_START( clshroad_sound_map, AS_PROGRAM, 8, clshroad_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x4000, 0x7fff) AM_DEVWRITE("custom", wiping_sound_device, sound_w) AM_RANGE(0x9600, 0x97ff) AM_RAM AM_SHARE("share1") - AM_RANGE(0xa003, 0xa003) AM_WRITE(sound_irq_mask_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -287,6 +281,12 @@ static MACHINE_CONFIG_START( firebatl ) MCFG_CPU_PROGRAM_MAP(clshroad_sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(clshroad_state, main_irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(clshroad_state, sound_irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(clshroad_state, flipscreen_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -322,6 +322,12 @@ static MACHINE_CONFIG_START( clshroad ) //MCFG_CPU_VBLANK_INT_DRIVER("screen", clshroad_state, irq0_line_hold) /* IRQ, no NMI */ MCFG_CPU_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 60) /* periodic interrupt, don't know about the frequency */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // never writes here? + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(clshroad_state, main_irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(clshroad_state, sound_irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(clshroad_state, flipscreen_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/copsnrob.cpp b/src/mame/drivers/copsnrob.cpp index 8d6fab5b159..fb9be71f90f 100644 --- a/src/mame/drivers/copsnrob.cpp +++ b/src/mame/drivers/copsnrob.cpp @@ -60,7 +60,6 @@ Added Dip locations according to manual. #include "includes/copsnrob.h" #include "cpu/m6502/m6502.h" -#include "speaker.h" #include "copsnrob.lh" @@ -94,7 +93,7 @@ WRITE8_MEMBER(copsnrob_state::copsnrob_misc2_w) static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, copsnrob_state ) ADDRESS_MAP_GLOBAL_MASK(0x1fff) AM_RANGE(0x0000, 0x01ff) AM_RAM - AM_RANGE(0x0500, 0x0507) AM_WRITE(copsnrob_misc_w) + AM_RANGE(0x0500, 0x0507) AM_DEVWRITE("latch", f9334_device, write_d0) AM_RANGE(0x0600, 0x0600) AM_WRITEONLY AM_SHARE("trucky") AM_RANGE(0x0700, 0x07ff) AM_WRITEONLY AM_SHARE("truckram") AM_RANGE(0x0800, 0x08ff) AM_RAM AM_SHARE("bulletsram") @@ -265,13 +264,7 @@ static MACHINE_CONFIG_START( copsnrob ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", copsnrob) MCFG_PALETTE_ADD_MONOCHROME("palette") - /* sound hardware */ - MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - - MCFG_SOUND_ADD("discrete", DISCRETE, 0) - MCFG_DISCRETE_INTF(copsnrob) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + MCFG_FRAGMENT_ADD(copsnrob_audio) MACHINE_CONFIG_END diff --git a/src/mame/drivers/cortex.cpp b/src/mame/drivers/cortex.cpp index 628f58b0307..a92bb5ddf7b 100644 --- a/src/mame/drivers/cortex.cpp +++ b/src/mame/drivers/cortex.cpp @@ -25,6 +25,7 @@ #include "emu.h" #include "cpu/tms9900/tms9995.h" +#include "machine/74259.h" #include "video/tms9928a.h" class cortex_state : public driver_device @@ -51,8 +52,9 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( cortex_io, AS_IO, 8, cortex_state ) ADDRESS_MAP_UNMAP_HIGH - //AM_RANGE(0x0000, 0x000f) AM_READWRITE(pio_r,pio_w) - //AM_RANGE(0x0010, 0x001f) AM_READ(keyboard_r) + AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0030) AM_DEVWRITE("control", ls259_device, write_a0) + //AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0020) AM_READ(pio_r) + //AM_RANGE(0x0010, 0x001f) AM_MIRROR(0x0020) AM_READ(keyboard_r) //AM_RANGE(0x0080, 0x00bf) AM_READWRITE(rs232_r,rs232_w) //AM_RANGE(0x0180, 0x01bf) AM_READWRITE(cass_r,cass_w) //AM_RANGE(0x0800, 0x080f) AM_WRITE(cent_data_w) @@ -81,6 +83,15 @@ static MACHINE_CONFIG_START( cortex ) // No lines connected yet MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, cortex_mem, cortex_io) + MCFG_DEVICE_ADD("control", LS259, 0) // IC64 + //MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cortex_state, basic_led_w)) + //MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cortex_state, keyboard_ack_w)) + //MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cortex_state, ebus_int_ack_w)) + //MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cortex_state, ebus_to_en_w)) + //MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cortex_state, disk_size_w)) + //MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cortex_state, eprom_on_off_w)) + //MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cortex_state, bell_en_w)) + /* video hardware */ MCFG_DEVICE_ADD( "tms9928a", TMS9929A, XTAL_10_738635MHz / 2 ) MCFG_TMS9928A_VRAM_SIZE(0x4000) diff --git a/src/mame/drivers/crgolf.cpp b/src/mame/drivers/crgolf.cpp index cbfc7c691a4..8396adabafc 100644 --- a/src/mame/drivers/crgolf.cpp +++ b/src/mame/drivers/crgolf.cpp @@ -93,6 +93,7 @@ protected or a snippet should do the aforementioned string copy. #include "includes/crgolf.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "sound/msm5205.h" #include "screen.h" @@ -128,6 +129,10 @@ void crgolf_state::machine_start() save_item(NAME(m_sound_to_main_data)); save_item(NAME(m_sample_offset)); save_item(NAME(m_sample_count)); + save_item(NAME(m_color_select)); + save_item(NAME(m_screen_flip)); + save_item(NAME(m_screena_enable)); + save_item(NAME(m_screenb_enable)); } @@ -290,10 +295,34 @@ WRITE8_MEMBER(crgolf_state::crgolfhi_sample_w) } } -WRITE8_MEMBER(crgolf_state::screen_select_w) + +WRITE_LINE_MEMBER(crgolf_state::color_select_w) +{ + m_color_select = state; +} + + +WRITE_LINE_MEMBER(crgolf_state::screen_flip_w) +{ + m_screen_flip = state; +} + + +WRITE_LINE_MEMBER(crgolf_state::screen_select_w) +{ + m_vrambank->set_bank(state); +} + + +WRITE_LINE_MEMBER(crgolf_state::screena_enable_w) +{ + m_screena_enable = state; +} + + +WRITE_LINE_MEMBER(crgolf_state::screenb_enable_w) { -// if (data & 0xfe) printf("vram_page_select_w %02x\n", data); - m_vrambank->set_bank(data & 0x1); + m_screenb_enable = state; } @@ -308,11 +337,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, crgolf_state ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x4000, 0x5fff) AM_RAM AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1") - AM_RANGE(0x8003, 0x8003) AM_WRITEONLY AM_SHARE("color_select") - AM_RANGE(0x8004, 0x8004) AM_WRITEONLY AM_SHARE("screen_flip") - AM_RANGE(0x8005, 0x8005) AM_WRITE( screen_select_w ) - AM_RANGE(0x8006, 0x8006) AM_WRITEONLY AM_SHARE("screenb_enable") - AM_RANGE(0x8007, 0x8007) AM_WRITEONLY AM_SHARE("screena_enable") + AM_RANGE(0x8000, 0x8007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x8800, 0x8800) AM_READWRITE(sound_to_main_r, main_to_sound_w) AM_RANGE(0x9000, 0x9000) AM_WRITE(rom_bank_select_w) AM_RANGE(0xa000, 0xffff) AM_DEVICE("vrambank", address_map_bank_device, amap8) @@ -357,13 +382,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mastrglf_io, AS_IO, 8, crgolf_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - - AM_RANGE(0x03, 0x03) AM_WRITEONLY AM_SHARE("color_select") - AM_RANGE(0x04, 0x04) AM_WRITEONLY AM_SHARE("screen_flip") - AM_RANGE(0x05, 0x05) AM_WRITE( screen_select_w ) - AM_RANGE(0x06, 0x06) AM_WRITEONLY AM_SHARE("screenb_enable") - AM_RANGE(0x07, 0x07) AM_WRITEONLY AM_SHARE("screena_enable") - + AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // AM_RANGE(0x20, 0x20) AM_WRITE( main_to_sound_w ) AM_RANGE(0x40, 0x40) AM_WRITE( main_to_sound_w ) AM_RANGE(0xa0, 0xa0) AM_READ( sound_to_main_r ) @@ -505,6 +524,13 @@ static MACHINE_CONFIG_START( crgolf ) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 1H + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(crgolf_state, color_select_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(crgolf_state, screen_flip_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(crgolf_state, screen_select_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(crgolf_state, screenb_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(crgolf_state, screena_enable_w)) + MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0) MCFG_DEVICE_PROGRAM_MAP(vrambank_map) MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp index 551e2e4f2ef..00c703222d6 100644 --- a/src/mame/drivers/ddenlovr.cpp +++ b/src/mame/drivers/ddenlovr.cpp @@ -4264,10 +4264,7 @@ static ADDRESS_MAP_START( htengoku_io_map, AS_IO, 8, ddenlovr_state ) AM_RANGE( 0xc4, 0xc4 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen AM_RANGE( 0xc5, 0xc5 ) AM_WRITE(dynax_blit_dest_w) // Destination Layer AM_RANGE( 0xc6, 0xc6 ) AM_WRITE(htengoku_blit_romregion_w) // Blitter ROM bank - AM_RANGE( 0xe0, 0xe0 ) AM_WRITE(yarunara_flipscreen_w) - AM_RANGE( 0xe1, 0xe1 ) AM_WRITE(yarunara_layer_half_w) // half of the interleaved layer to write to - AM_RANGE( 0xe2, 0xe2 ) AM_WRITE(yarunara_layer_half2_w) // - AM_RANGE( 0xe5, 0xe5 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack + AM_RANGE( 0xe0, 0xe7 ) AM_WRITE(yarunara_mainlatch_w) ADDRESS_MAP_END /*************************************************************************** @@ -4296,6 +4293,12 @@ static MACHINE_CONFIG_START( htengoku ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w)) // half of the interleaved layer to write to + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w)) // + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blitter_ack_w)) // Blitter IRQ Ack + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/destroyr.cpp b/src/mame/drivers/destroyr.cpp index 16b073f793e..2536265cba0 100644 --- a/src/mame/drivers/destroyr.cpp +++ b/src/mame/drivers/destroyr.cpp @@ -14,6 +14,7 @@ TODO: #include "emu.h" #include "cpu/m6800/m6800.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "screen.h" @@ -68,7 +69,8 @@ public: DECLARE_WRITE8_MEMBER(misc_w); DECLARE_WRITE8_MEMBER(cursor_load_w); DECLARE_WRITE8_MEMBER(interrupt_ack_w); - DECLARE_WRITE8_MEMBER(output_w); + DECLARE_WRITE_LINE_MEMBER(led0_w); + DECLARE_WRITE_LINE_MEMBER(led1_w); DECLARE_READ8_MEMBER(input_r); DECLARE_READ8_MEMBER(scanline_r); @@ -244,37 +246,15 @@ WRITE8_MEMBER(destroyr_state::interrupt_ack_w) } -WRITE8_MEMBER(destroyr_state::output_w) +WRITE_LINE_MEMBER(destroyr_state::led0_w) { - if (offset & 8) misc_w(space, 8, data); + output().set_led_value(0, state); +} - else switch (offset & 7) - { - case 0: - output().set_led_value(0, data & 1); - break; - case 1: - output().set_led_value(1, data & 1); /* no second LED present on cab */ - break; - case 2: - /* bit 0 => songate */ - break; - case 3: - /* bit 0 => launch */ - break; - case 4: - /* bit 0 => explosion */ - break; - case 5: - /* bit 0 => sonar */ - break; - case 6: - /* bit 0 => high explosion */ - break; - case 7: - /* bit 0 => low explosion */ - break; - } + +WRITE_LINE_MEMBER(destroyr_state::led1_w) +{ + output().set_led_value(1, state); /* no second LED present on cab */ } @@ -308,7 +288,9 @@ READ8_MEMBER(destroyr_state::scanline_r) static ADDRESS_MAP_START( destroyr_map, AS_PROGRAM, 8, destroyr_state ) ADDRESS_MAP_GLOBAL_MASK(0x7fff) AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0xf00) AM_RAM - AM_RANGE(0x1000, 0x1fff) AM_READWRITE(input_r, output_w) + AM_RANGE(0x1000, 0x1000) AM_MIRROR(0xffe) AM_READ(input_r) + AM_RANGE(0x1000, 0x1007) AM_MIRROR(0xff0) AM_DEVWRITE("outlatch", f9334_device, write_d0) + AM_RANGE(0x1008, 0x1008) AM_MIRROR(0xff7) AM_WRITE(misc_w) AM_RANGE(0x2000, 0x2fff) AM_READ_PORT("IN2") AM_RANGE(0x3000, 0x30ff) AM_MIRROR(0xf00) AM_WRITEONLY AM_SHARE("alpha_nuram") AM_RANGE(0x4000, 0x401f) AM_MIRROR(0xfe0) AM_WRITEONLY AM_SHARE("major_obj_ram") @@ -497,6 +479,16 @@ static MACHINE_CONFIG_START( destroyr ) MCFG_CPU_PROGRAM_MAP(destroyr_map) MCFG_CPU_PERIODIC_INT_DRIVER(destroyr_state, irq0_line_assert, 4*60) + MCFG_DEVICE_ADD("outlatch", F9334, 0) // F8 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(destroyr_state, led0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(destroyr_state, led1_w)) + // Q2 => songate + // Q3 => launch + // Q4 => explosion + // Q5 => sonar + // Q6 => high explosion + // Q7 => low explosion + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/dragrace.cpp b/src/mame/drivers/dragrace.cpp index 663c2687ebc..376589d611e 100644 --- a/src/mame/drivers/dragrace.cpp +++ b/src/mame/drivers/dragrace.cpp @@ -9,6 +9,7 @@ #include "emu.h" #include "includes/dragrace.h" #include "cpu/m6800/m6800.h" +#include "machine/74259.h" #include "sound/discrete.h" #include "speaker.h" @@ -38,82 +39,34 @@ TIMER_DEVICE_CALLBACK_MEMBER(dragrace_state::dragrace_frame_callback) } -void dragrace_state::dragrace_update_misc_flags( address_space &space ) +WRITE8_MEMBER(dragrace_state::speed1_w) { - /* 0x0900 = set 3SPEED1 0x00000001 - * 0x0901 = set 4SPEED1 0x00000002 - * 0x0902 = set 5SPEED1 0x00000004 - * 0x0903 = set 6SPEED1 0x00000008 - * 0x0904 = set 7SPEED1 0x00000010 - * 0x0905 = set EXPLOSION1 0x00000020 - * 0x0906 = set SCREECH1 0x00000040 - * 0x0920 - 0x0927 = clear 0x0900 - 0x0907 - - * 0x0909 = set KLEXPL1 0x00000200 - * 0x090b = set MOTOR1 0x00000800 - * 0x090c = set ATTRACT 0x00001000 - * 0x090d = set LOTONE 0x00002000 - * 0x090f = set Player 1 Start Lamp 0x00008000 - * 0x0928 - 0x092f = clear 0x0908 - 0x090f - - * 0x0910 = set 3SPEED2 0x00010000 - * 0x0911 = set 4SPEED2 0x00020000 - * 0x0912 = set 5SPEED2 0x00040000 - * 0x0913 = set 6SPEED2 0x00080000 - * 0x0914 = set 7SPEED2 0x00100000 - * 0x0915 = set EXPLOSION2 0x00200000 - * 0x0916 = set SCREECH2 0x00400000 - * 0x0930 = clear 0x0910 - 0x0917 - - * 0x0919 = set KLEXPL2 0x02000000 - * 0x091b = set MOTOR2 0x08000000 - * 0x091d = set HITONE 0x20000000 - * 0x091f = set Player 2 Start Lamp 0x80000000 - * 0x0938 = clear 0x0918 - 0x091f - */ - output().set_led_value(0, m_misc_flags & 0x00008000); - output().set_led_value(1, m_misc_flags & 0x80000000); - - m_discrete->write(space, DRAGRACE_MOTOR1_DATA, ~m_misc_flags & 0x0000001f); // Speed1 data* - m_discrete->write(space, DRAGRACE_EXPLODE1_EN, (m_misc_flags & 0x00000020) ? 1: 0); // Explosion1 enable - m_discrete->write(space, DRAGRACE_SCREECH1_EN, (m_misc_flags & 0x00000040) ? 1: 0); // Screech1 enable - m_discrete->write(space, DRAGRACE_KLEXPL1_EN, (m_misc_flags & 0x00000200) ? 1: 0); // KLEXPL1 enable - m_discrete->write(space, DRAGRACE_MOTOR1_EN, (m_misc_flags & 0x00000800) ? 1: 0); // Motor1 enable - - m_discrete->write(space, DRAGRACE_MOTOR2_DATA, (~m_misc_flags & 0x001f0000) >> 0x10); // Speed2 data* - m_discrete->write(space, DRAGRACE_EXPLODE2_EN, (m_misc_flags & 0x00200000) ? 1: 0); // Explosion2 enable - m_discrete->write(space, DRAGRACE_SCREECH2_EN, (m_misc_flags & 0x00400000) ? 1: 0); // Screech2 enable - m_discrete->write(space, DRAGRACE_KLEXPL2_EN, (m_misc_flags & 0x02000000) ? 1: 0); // KLEXPL2 enable - m_discrete->write(space, DRAGRACE_MOTOR2_EN, (m_misc_flags & 0x08000000) ? 1: 0); // Motor2 enable - - m_discrete->write(space, DRAGRACE_ATTRACT_EN, (m_misc_flags & 0x00001000) ? 1: 0); // Attract enable - m_discrete->write(space, DRAGRACE_LOTONE_EN, (m_misc_flags & 0x00002000) ? 1: 0); // LoTone enable - m_discrete->write(space, DRAGRACE_HITONE_EN, (m_misc_flags & 0x20000000) ? 1: 0); // HiTone enable + unsigned freq = ~data & 0x1f; + m_discrete->write(machine().dummy_space(), DRAGRACE_MOTOR1_DATA, freq); // the tachometers are driven from the same frequency generator that creates the engine sound - output().set_value("tachometer", ~m_misc_flags & 0x0000001f); - output().set_value("tachometer2", (~m_misc_flags & 0x001f0000) >> 0x10); + output().set_value("tachometer", freq); } -WRITE8_MEMBER(dragrace_state::dragrace_misc_w) +WRITE8_MEMBER(dragrace_state::speed2_w) { - /* Set/clear individual bit */ - uint32_t mask = 1 << offset; - if (data & 0x01) - m_misc_flags |= mask; - else - m_misc_flags &= (~mask); - logerror("Set %#6x, Mask=%#10x, Flag=%#10x, Data=%x\n", 0x0900 + offset, mask, m_misc_flags, data & 0x01); - dragrace_update_misc_flags(space); + unsigned freq = ~data & 0x1f; + m_discrete->write(machine().dummy_space(), DRAGRACE_MOTOR2_DATA, freq); + + // the tachometers are driven from the same frequency generator that creates the engine sound + output().set_value("tachometer2", freq); +} + +WRITE_LINE_MEMBER(dragrace_state::p1_start_w) +{ + // set Player 1 Start Lamp + output().set_led_value(0, state); } -WRITE8_MEMBER(dragrace_state::dragrace_misc_clear_w) +WRITE_LINE_MEMBER(dragrace_state::p2_start_w) { - /* Clear 8 bits */ - uint32_t mask = 0xff << (((offset >> 3) & 0x03) * 8); - m_misc_flags &= (~mask); - logerror("Clear %#6x, Mask=%#10x, Flag=%#10x, Data=%x\n", 0x0920 + offset, mask, m_misc_flags, data & 0x01); - dragrace_update_misc_flags(space); + // set Player 2 Start Lamp + output().set_led_value(1, state); } READ8_MEMBER(dragrace_state::dragrace_input_r) @@ -168,8 +121,14 @@ READ8_MEMBER(dragrace_state::dragrace_scanline_r) static ADDRESS_MAP_START( dragrace_map, AS_PROGRAM, 8, dragrace_state ) AM_RANGE(0x0080, 0x00ff) AM_RAM AM_RANGE(0x0800, 0x083f) AM_READ(dragrace_input_r) - AM_RANGE(0x0900, 0x091f) AM_WRITE(dragrace_misc_w) - AM_RANGE(0x0920, 0x093f) AM_WRITE(dragrace_misc_clear_w) + AM_RANGE(0x0900, 0x0907) AM_DEVWRITE("latch_f5", addressable_latch_device, write_d0) + AM_RANGE(0x0908, 0x090f) AM_DEVWRITE("latch_a5", addressable_latch_device, write_d0) + AM_RANGE(0x0910, 0x0917) AM_DEVWRITE("latch_h5", addressable_latch_device, write_d0) + AM_RANGE(0x0918, 0x091f) AM_DEVWRITE("latch_e5", addressable_latch_device, write_d0) + AM_RANGE(0x0920, 0x0927) AM_DEVWRITE("latch_f5", addressable_latch_device, clear) + AM_RANGE(0x0928, 0x092f) AM_DEVWRITE("latch_a5", addressable_latch_device, clear) + AM_RANGE(0x0930, 0x0937) AM_DEVWRITE("latch_h5", addressable_latch_device, clear) + AM_RANGE(0x0938, 0x093f) AM_DEVWRITE("latch_e5", addressable_latch_device, clear) AM_RANGE(0x0a00, 0x0aff) AM_WRITEONLY AM_SHARE("playfield_ram") AM_RANGE(0x0b00, 0x0bff) AM_WRITEONLY AM_SHARE("position_ram") AM_RANGE(0x0c00, 0x0c00) AM_READ(dragrace_steering_r) @@ -314,13 +273,11 @@ PALETTE_INIT_MEMBER(dragrace_state, dragrace) void dragrace_state::machine_start() { - save_item(NAME(m_misc_flags)); save_item(NAME(m_gear)); } void dragrace_state::machine_reset() { - m_misc_flags = 0; m_gear[0] = 0; m_gear[1] = 0; } @@ -356,6 +313,29 @@ static MACHINE_CONFIG_START( dragrace ) MCFG_DISCRETE_INTF(dragrace) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + MCFG_DEVICE_ADD("latch_f5", F9334, 0) // F5 + MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(dragrace_state, speed1_w)) MCFG_DEVCB_MASK(0x1f) // set 3SPEED1-7SPEED1 + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_EXPLODE1_EN>)) // Explosion1 enable + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_SCREECH1_EN>)) // Screech1 enable + + MCFG_DEVICE_ADD("latch_a5", F9334, 0) // A5 + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_KLEXPL1_EN>)) // KLEXPL1 enable + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_MOTOR1_EN>)) // Motor1 enable + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_ATTRACT_EN>)) // Attract enable + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_LOTONE_EN>)) // LoTone enable + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dragrace_state, p1_start_w)) + + MCFG_DEVICE_ADD("latch_h5", F9334, 0) // H5 + MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(dragrace_state, speed2_w)) MCFG_DEVCB_MASK(0x1f) // set 3SPEED2-7SPEED2 + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_EXPLODE2_EN>)) // Explosion2 enable + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_SCREECH2_EN>)) // Screech2 enable + + MCFG_DEVICE_ADD("latch_e5", F9334, 0) // E5 + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_KLEXPL2_EN>)) // KLEXPL2 enable + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_MOTOR2_EN>)) // Motor2 enable + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_HITONE_EN>)) // HiTone enable + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dragrace_state, p2_start_w)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/dynax.cpp b/src/mame/drivers/dynax.cpp index cce92ef04ba..ea69eb4b402 100644 --- a/src/mame/drivers/dynax.cpp +++ b/src/mame/drivers/dynax.cpp @@ -116,8 +116,9 @@ WRITE8_MEMBER(dynax_state::dynax_vblank_ack_w) sprtmtch_update_irq(); } -WRITE8_MEMBER(dynax_state::dynax_blitter_ack_w) +WRITE_LINE_MEMBER(dynax_state::blitter_ack_w) { + // probably not exactly how this works m_blitter_irq = 0; sprtmtch_update_irq(); } @@ -152,15 +153,15 @@ WRITE8_MEMBER(dynax_state::jantouki_vblank_ack_w) jantouki_update_irq(); } -WRITE8_MEMBER(dynax_state::jantouki_blitter_ack_w) +WRITE_LINE_MEMBER(dynax_state::jantouki_blitter_ack_w) { - m_blitter_irq = data; + m_blitter_irq = state; jantouki_update_irq(); } -WRITE8_MEMBER(dynax_state::jantouki_blitter2_ack_w) +WRITE_LINE_MEMBER(dynax_state::jantouki_blitter2_ack_w) { - m_blitter2_irq = data; + m_blitter2_irq = state; jantouki_update_irq(); } @@ -212,14 +213,14 @@ WRITE_LINE_MEMBER(dynax_state::jantouki_sound_callback) Sports Match ***************************************************************************/ -WRITE8_MEMBER(dynax_state::dynax_coincounter_0_w) +WRITE_LINE_MEMBER(dynax_state::coincounter_0_w) { - machine().bookkeeping().coin_counter_w(0, data); + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(dynax_state::dynax_coincounter_1_w) +WRITE_LINE_MEMBER(dynax_state::coincounter_1_w) { - machine().bookkeeping().coin_counter_w(1, data); + machine().bookkeeping().coin_counter_w(1, state); } READ8_MEMBER(dynax_state::ret_ff) @@ -286,12 +287,6 @@ WRITE8_MEMBER(dynax_state::hnoridur_rombank_w) } -WRITE8_MEMBER(dynax_state::hnoridur_palbank_w) -{ - m_palbank = data & 0x0f; - dynax_blit_palbank_w(space, 0, data); -} - WRITE8_MEMBER(dynax_state::hnoridur_palette_w) { switch (m_hnoridur_bank) @@ -428,6 +423,11 @@ WRITE8_MEMBER(dynax_state::adpcm_reset_w) m_msm->reset_w(~data & 1); } +WRITE_LINE_MEMBER(dynax_state::adpcm_reset_kludge_w) +{ + m_resetkludge = state; +} + MACHINE_RESET_MEMBER(dynax_state,adpcm) { /* start with the MSM5205 reset */ @@ -435,16 +435,6 @@ MACHINE_RESET_MEMBER(dynax_state,adpcm) m_msm->reset_w(1); } -WRITE8_MEMBER(dynax_state::yarunara_layer_half_w) -{ - hanamai_layer_half_w(space, 0, data >> 1); -} - -WRITE8_MEMBER(dynax_state::yarunara_layer_half2_w) -{ - hnoridur_layer_half2_w(space, 0, data >> 1); -} - static ADDRESS_MAP_START( cdracula_mem_map, AS_PROGRAM, 8, dynax_state ) AM_RANGE( 0x0000, 0xbfff ) AM_ROM AM_RANGE( 0xc000, 0xffff ) AM_RAM @@ -537,13 +527,7 @@ static ADDRESS_MAP_START( hanamai_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x6c, 0x6c ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes (Low Bits) AM_RANGE( 0x6d, 0x6d ) AM_WRITE(dynax_blit_palette23_w) // AM_RANGE( 0x6e, 0x6e ) AM_WRITE(dynax_blit_backpen_w) // Background Color - AM_RANGE( 0x70, 0x70 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset - AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen - AM_RANGE( 0x72, 0x72 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters - AM_RANGE( 0x73, 0x73 ) AM_WRITE(dynax_coincounter_1_w) // - AM_RANGE( 0x74, 0x74 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack - AM_RANGE( 0x76, 0x76 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit) - AM_RANGE( 0x77, 0x77 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to + AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE( 0x78, 0x79 ) AM_DEVREADWRITE("ym2203", ym2203_device, read, write) // 2 x DSW AM_RANGE( 0x7a, 0x7b ) AM_DEVWRITE("aysnd", ay8912_device, address_data_w) // AY8912 // AM_RANGE( 0x7c, 0x7c ) AM_WRITENOP // CRT Controller @@ -584,12 +568,8 @@ static ADDRESS_MAP_START( hnoridur_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x55, 0x55 ) AM_WRITENOP // ? VBlank IRQ Ack AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff) // ? - AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen - AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to - AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w) // - AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack - AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters - AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w) // + AM_RANGE( 0x60, 0x67 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("outlatch", ls259_device, write_d0) ADDRESS_MAP_END /*************************************************************************** @@ -601,14 +581,14 @@ WRITE8_MEMBER(dynax_state::hjingi_bank_w) m_hnoridur_bank = data; } -WRITE8_MEMBER(dynax_state::hjingi_lockout_w) +WRITE_LINE_MEMBER(dynax_state::hjingi_lockout_w) { - machine().bookkeeping().coin_lockout_w(0, (~data) & 0x01); + machine().bookkeeping().coin_lockout_w(0, !state); } -WRITE8_MEMBER(dynax_state::hjingi_hopper_w) +WRITE_LINE_MEMBER(dynax_state::hjingi_hopper_w) { - m_hopper = data & 0x01; + m_hopper = state; } uint8_t dynax_state::hjingi_hopper_bit() @@ -672,16 +652,10 @@ static ADDRESS_MAP_START( hjingi_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff) // Blitter Busy - AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack - AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen - AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to - AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w) // + AM_RANGE( 0x60, 0x67 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // Flip screen, layer half select, etc. - AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters - AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w) // - AM_RANGE( 0x72, 0x72 ) AM_WRITE(hjingi_hopper_w) // Hopper - AM_RANGE( 0x73, 0x73 ) AM_WRITE(hjingi_lockout_w) // Coin Lockout + AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("outlatch", ls259_device, write_d0) // Coin Counters, Hopper, Coin Lockout AM_RANGE( 0x80, 0x80 ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select ADDRESS_MAP_END @@ -760,14 +734,9 @@ WRITE8_MEMBER(dynax_state::yarunara_rombank_w) m_hnoridur_bank = data; } -WRITE8_MEMBER(dynax_state::yarunara_flipscreen_w) +WRITE8_MEMBER(dynax_state::yarunara_mainlatch_w) { - dynax_flipscreen_w(space, 0, BIT(data, 1)); -} - -WRITE8_MEMBER(dynax_state::yarunara_flipscreen_inv_w) -{ - dynax_flipscreen_w(space, 0, !BIT(data, 1)); + m_mainlatch->write_bit(offset, BIT(data, 1)); } WRITE8_MEMBER(dynax_state::yarunara_blit_romregion_w) @@ -799,12 +768,7 @@ static ADDRESS_MAP_START( yarunara_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x4b, 0x4b ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack AM_RANGE( 0x4c, 0x4c ) AM_READ_PORT("DSW0") // DSW 1 AM_RANGE( 0x4f, 0x4f ) AM_READ_PORT("DSW1") // DSW 2 - AM_RANGE( 0x50, 0x50 ) AM_WRITE(yarunara_flipscreen_w) - AM_RANGE( 0x51, 0x51 ) AM_WRITE(yarunara_layer_half_w) // half of the interleaved layer to write to - AM_RANGE( 0x52, 0x52 ) AM_WRITE(yarunara_layer_half2_w) // - // 53 ? - // 54 ? - AM_RANGE( 0x57, 0x57 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack + AM_RANGE( 0x50, 0x57 ) AM_WRITE(yarunara_mainlatch_w) AM_RANGE( 0x68, 0x68 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen AM_RANGE( 0x69, 0x69 ) AM_WRITE(dynax_blit_dest_w) // Destination Layer AM_RANGE( 0x6a, 0x6a ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes @@ -845,12 +809,8 @@ static ADDRESS_MAP_START( mcnpshnt_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x54, 0x54 ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff) // ? - AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen - AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to - AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w) // - AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack - AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters - AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w) // + AM_RANGE( 0x60, 0x67 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) + AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("outlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -872,12 +832,7 @@ static ADDRESS_MAP_START( sprtmtch_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x35, 0x35 ) AM_WRITE(dynax_blit_palette23_w) // AM_RANGE( 0x36, 0x36 ) AM_WRITE(dynax_blit_backpen_w) // Background Color AM_RANGE( 0x37, 0x37 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack -// AM_RANGE( 0x40, 0x40 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset - AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen - AM_RANGE( 0x42, 0x42 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters - AM_RANGE( 0x43, 0x43 ) AM_WRITE(dynax_coincounter_1_w) // - AM_RANGE( 0x44, 0x44 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack - AM_RANGE( 0x45, 0x45 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit) + AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -888,12 +843,7 @@ static ADDRESS_MAP_START( mjfriday_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x01, 0x01 ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes (Low Bits) AM_RANGE( 0x02, 0x02 ) AM_WRITE(dynax_rombank_w) // BANK ROM Select AM_RANGE( 0x03, 0x03 ) AM_WRITE(dynax_blit_backpen_w) // Background Color - AM_RANGE( 0x10, 0x11 ) AM_WRITE(mjdialq2_blit_dest_w) // Destination Layer - AM_RANGE( 0x12, 0x12 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit) - AM_RANGE( 0x13, 0x13 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen - AM_RANGE( 0x14, 0x14 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters - AM_RANGE( 0x15, 0x15 ) AM_WRITE(dynax_coincounter_1_w) // - AM_RANGE( 0x16, 0x17 ) AM_WRITE(mjdialq2_layer_enable_w) // Layers Enable + AM_RANGE( 0x10, 0x17 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE( 0x41, 0x47 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter // AM_RANGE( 0x50, 0x50 ) AM_WRITENOP // CRT Controller // AM_RANGE( 0x51, 0x51 ) AM_WRITENOP // CRT Controller @@ -924,11 +874,8 @@ static ADDRESS_MAP_START( nanajign_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x16, 0x16 ) AM_READ_PORT("DSW2") // DSW3 // AM_RANGE( 0x20, 0x21 ) AM_WRITENOP // CRT Controller AM_RANGE( 0x31, 0x37 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter - AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counter - AM_RANGE( 0x50, 0x50 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen - AM_RANGE( 0x51, 0x51 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to - AM_RANGE( 0x52, 0x52 ) AM_WRITE(hnoridur_layer_half2_w) // - AM_RANGE( 0x57, 0x57 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack + AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("outlatch", ls259_device, write_d0) // Coin Counter + AM_RANGE( 0x50, 0x57 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_extra_scrolly_w) // screen scroll Y AM_RANGE( 0x6a, 0x6a ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select @@ -988,11 +935,7 @@ static ADDRESS_MAP_START( jantouki_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x54, 0x54 ) AM_READ_PORT("COINS") // Coins AM_RANGE( 0x55, 0x55 ) AM_READ_PORT("DSW0") // DSW1 AM_RANGE( 0x56, 0x56 ) AM_READ_PORT("DSW1") // DSW2 - AM_RANGE( 0x58, 0x58 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counter - AM_RANGE( 0x5b, 0x5b ) AM_WRITE(dynax_blit2_palbank_w) // Layers Palettes (High Bit) - AM_RANGE( 0x5d, 0x5d ) AM_WRITE(dynax_blit_palbank_w) // - AM_RANGE( 0x5e, 0x5e ) AM_WRITE(jantouki_blitter_ack_w) // Blitter IRQ Ack - AM_RANGE( 0x5f, 0x5f ) AM_WRITE(jantouki_blitter2_ack_w) // Blitter 2 IRQ Ack + AM_RANGE( 0x58, 0x5f ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_blit_palette67_w) // Layers Palettes (Low Bits) AM_RANGE( 0x61, 0x61 ) AM_WRITE(dynax_blit_palette45_w) // AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_blit_palette23_w) // @@ -1076,8 +1019,7 @@ static ADDRESS_MAP_START( mjelctrn_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x11, 0x12 ) AM_WRITE(mjelctrn_blitter_ack_w) //? // AM_RANGE( 0x20, 0x20 ) AM_WRITENOP // CRT Controller // AM_RANGE( 0x21, 0x21 ) AM_WRITENOP // CRT Controller - AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters - AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_coincounter_1_w) // + AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_extra_scrolly_w) // screen scroll Y // AM_RANGE( 0x64, 0x64 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X @@ -1090,10 +1032,7 @@ static ADDRESS_MAP_START( mjelctrn_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x84, 0x84 ) AM_READ(mjelctrn_dsw_r) // DSW8 x 4 AM_RANGE( 0x85, 0x85 ) AM_READ_PORT("SW1") // DSW2 AM_RANGE( 0xa1, 0xa7 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter - AM_RANGE( 0xc0, 0xc0 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen - AM_RANGE( 0xc1, 0xc1 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to - AM_RANGE( 0xc2, 0xc2 ) AM_WRITE(hnoridur_layer_half2_w) // -// c3,c4 seem to be related to wrap around enable + AM_RANGE( 0xc0, 0xc7 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE( 0xe0, 0xe0 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen AM_RANGE( 0xe1, 0xe1 ) AM_WRITE(dynax_blit_dest_w) // Destination Layer AM_RANGE( 0xe2, 0xe2 ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes @@ -1121,11 +1060,7 @@ static ADDRESS_MAP_START( mjembase_io_map, AS_IO, 8, dynax_state ) // AM_RANGE( 0x40, 0x40 ) AM_WRITENOP // CRT Controller // AM_RANGE( 0x41, 0x41 ) AM_WRITENOP // CRT Controller AM_RANGE( 0x61, 0x67 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter - AM_RANGE( 0x80, 0x80 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen - AM_RANGE( 0x81, 0x81 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to - AM_RANGE( 0x82, 0x82 ) AM_WRITE(hnoridur_layer_half2_w) // - AM_RANGE( 0x83, 0x83 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters - AM_RANGE( 0x84, 0x84 ) AM_WRITE(dynax_coincounter_1_w) // + AM_RANGE( 0x80, 0x87 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE( 0xa0, 0xa0 ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select AM_RANGE( 0xc0, 0xc0 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen AM_RANGE( 0xc1, 0xc1 ) AM_WRITE(mjembase_blit_dest_w) // Destination Layer @@ -1351,15 +1286,15 @@ void dynax_state::tenkai_show_6c() // popmessage("%02x %02x", m_tenkai_6c, m_tenkai_70); } -WRITE8_MEMBER(dynax_state::tenkai_6c_w) +WRITE_LINE_MEMBER(dynax_state::tenkai_6c_w) { - m_tenkai_6c = data; + m_tenkai_6c = state; tenkai_show_6c(); } -WRITE8_MEMBER(dynax_state::tenkai_70_w) +WRITE_LINE_MEMBER(dynax_state::tenkai_70_w) { - m_tenkai_70 = data; + m_tenkai_70 = state; tenkai_show_6c(); } @@ -1374,6 +1309,11 @@ WRITE8_MEMBER(dynax_state::tenkai_blit_romregion_w) logerror("%04x: unmapped romregion=%02X\n", space.device().safe_pc(), data); } +WRITE8_MEMBER(dynax_state::tenkai_mainlatch_w) +{ + m_mainlatch->write_bit(offset >> 2, BIT(data, 1)); +} + static ADDRESS_MAP_START( tenkai_map, AS_PROGRAM, 8, dynax_state ) AM_RANGE( 0x0000, 0x5fff ) AM_ROM AM_RANGE( 0x6000, 0x6fff ) AM_RAM @@ -1390,12 +1330,7 @@ static ADDRESS_MAP_START( tenkai_map, AS_PROGRAM, 8, dynax_state ) AM_RANGE( 0x10050, 0x10050 ) AM_WRITE(tenkai_priority_w) // layer priority and enable AM_RANGE( 0x10054, 0x10054 ) AM_WRITE(dynax_blit_backpen_w) // Background Color AM_RANGE( 0x10058, 0x10058 ) AM_WRITE(tenkai_blit_romregion_w) // Blitter ROM bank - AM_RANGE( 0x10060, 0x10060 ) AM_WRITE(yarunara_flipscreen_inv_w) // Flip Screen - AM_RANGE( 0x10064, 0x10064 ) AM_WRITE(yarunara_layer_half_w) // half of the interleaved layer to write to - AM_RANGE( 0x10068, 0x10068 ) AM_WRITE(yarunara_layer_half2_w) // - AM_RANGE( 0x1006c, 0x1006c ) AM_WRITE(tenkai_6c_w) // ? - AM_RANGE( 0x10070, 0x10070 ) AM_WRITE(tenkai_70_w) // ? - AM_RANGE( 0x1007c, 0x1007c ) AM_WRITENOP // IRQ Ack? (0,2) + AM_RANGE( 0x10060, 0x1007f ) AM_WRITE(tenkai_mainlatch_w) AM_RANGE( 0x100c0, 0x100c0 ) AM_WRITE(tenkai_ipsel_w) AM_RANGE( 0x100c1, 0x100c1 ) AM_WRITE(tenkai_ip_w) AM_RANGE( 0x100c2, 0x100c3 ) AM_READ(tenkai_ip_r) @@ -1488,18 +1423,9 @@ WRITE8_MEMBER(dynax_state::gekisha_8000_w) case 0x8003: dynax_blit_backpen_w(space, offset - 0x03, data); return; - case 0x8010: - case 0x8011: mjdialq2_blit_dest_w(space, offset - 0x10, data); return; - - case 0x8012: dynax_blit_palbank_w(space, offset - 0x12, data); return; - - case 0x8013: dynax_flipscreen_w(space, offset - 0x13, data); return; - - case 0x8014: dynax_coincounter_0_w(space, offset - 0x14, data); return; - case 0x8015: dynax_coincounter_1_w(space, offset - 0x15, data); return; - - case 0x8016: - case 0x8017: mjdialq2_layer_enable_w(space, offset - 0x16, data); return; + case 0x8010: case 0x8011: case 0x8012: case 0x8013: + case 0x8014: case 0x8015: case 0x8016: case 0x8017: + m_mainlatch->write_bit(offset & 7, BIT(data, 0)); return; case 0x8020: case 0x8021: gekisha_hopper_w(space, offset - 0x20, data); return; @@ -1569,9 +1495,7 @@ static ADDRESS_MAP_START( cdracula_io_map, AS_IO, 8, dynax_state ) AM_RANGE( 0x35, 0x35 ) AM_WRITE(dynax_blit_palette23_w) // AM_RANGE( 0x36, 0x36 ) AM_WRITE(dynax_blit_backpen_w) // Background Color AM_RANGE( 0x37, 0x37 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack - AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen - AM_RANGE( 0x44, 0x44 ) AM_WRITE(jantouki_blitter_ack_w) // Blitter IRQ Ack - AM_RANGE( 0x45, 0x45 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit) + AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE( 0x60, 0x60 ) AM_READ_PORT("DSW2") AM_RANGE( 0x61, 0x61 ) AM_READ_PORT("DSW1") AM_RANGE( 0x6b, 0x6b ) AM_WRITE(cdracula_sound_rombank_w) // OKI Bank @@ -4381,6 +4305,11 @@ static MACHINE_CONFIG_START( cdracula ) // MCFG_NVRAM_ADD_0FILL("nvram") // no battery + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) // Flip Screen + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, jantouki_blitter_ack_w)) // Blitter IRQ Ack + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blit_palbank_w)) // Layers Palettes (High Bit) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(58.56) @@ -4420,6 +4349,16 @@ static MACHINE_CONFIG_START( hanamai ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT // MSM5205 reset + MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(dynax_state, adpcm_reset_kludge_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) // Flip Screen + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) // Coin Counters + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, coincounter_1_w)) // + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, blitter_ack_w)) // Blitter IRQ Ack + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, blit_palbank_w)) // Layers Palettes (High Bit) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, layer_half_w)) // half of the interleaved layer to write to + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -4474,6 +4413,16 @@ static MACHINE_CONFIG_START( hnoridur ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC25 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, blitter_ack_w)) + + MCFG_DEVICE_ADD("outlatch", LS259, 0) // IC61 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, coincounter_1_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -4521,6 +4470,18 @@ static MACHINE_CONFIG_START( hjingi ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, blitter_ack_w)) + + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, coincounter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, hjingi_hopper_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, hjingi_lockout_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -4568,6 +4529,13 @@ static MACHINE_CONFIG_START( sprtmtch ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // UF12 on Intergirl + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, coincounter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, blitter_ack_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blit_palbank_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -4613,6 +4581,16 @@ static MACHINE_CONFIG_START( mjfriday ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC15 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest1_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest0_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, blit_palbank_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, coincounter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer1_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer0_enable_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -4677,6 +4655,8 @@ static MACHINE_CONFIG_DERIVED( yarunara, hnoridur ) MCFG_NVRAM_REPLACE_0FILL("nvram") + MCFG_DEVICE_REMOVE("outlatch") // ??? + MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 8, 256-1-8-1) @@ -4752,6 +4732,13 @@ static MACHINE_CONFIG_START( jantouki ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) // Coin Counter + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, blit2_palbank_w)) // Layers Palettes (High Bit) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blit_palbank_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, jantouki_blitter_ack_w)) // Blitter IRQ Ack + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, jantouki_blitter2_ack_w)) // Blitter 2 IRQ Ack + /* video hardware */ MCFG_PALETTE_ADD("palette", 512) MCFG_PALETTE_INIT_OWNER(dynax_state,sprtmtch) // static palette @@ -4830,6 +4817,12 @@ static MACHINE_CONFIG_DERIVED( mjelctrn, hnoridur ) MCFG_CPU_IO_MAP(mjelctrn_io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", dynax_state, mjelctrn_vblank_interrupt) /* IM 2 needs a vector on the data bus */ + MCFG_DEVICE_REPLACE("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w)) + // Q3, Q4 seem to be related to wrap around enable + MCFG_VIDEO_START_OVERRIDE(dynax_state,mjelctrn) MACHINE_CONFIG_END @@ -4839,6 +4832,13 @@ static MACHINE_CONFIG_DERIVED( mjembase, hnoridur ) MCFG_CPU_IO_MAP(mjembase_io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", dynax_state, mjelctrn_vblank_interrupt) /* IM 2 needs a vector on the data bus */ + MCFG_DEVICE_REPLACE("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, coincounter_1_w)) + MCFG_VIDEO_START_OVERRIDE(dynax_state,mjembase) MACHINE_CONFIG_END @@ -4954,6 +4954,14 @@ static MACHINE_CONFIG_START( tenkai ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 10C on Ougon no Pai + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, tenkai_6c_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, tenkai_70_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // IRQ Ack? + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -4989,6 +4997,11 @@ static MACHINE_CONFIG_DERIVED( majrjhdx, tenkai ) MCFG_PALETTE_INIT_OWNER(dynax_state,sprtmtch) // static palette MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( mjreach, tenkai ) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) // not inverted +MACHINE_CONFIG_END + /*************************************************************************** Mahjong Gekisha ***************************************************************************/ @@ -5025,6 +5038,16 @@ static MACHINE_CONFIG_START( gekisha ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest1_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest0_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, blit_palbank_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, coincounter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer1_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer0_enable_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -6834,11 +6857,6 @@ ROM_START( mjreach ) ROM_RELOAD( 0x80000, 0x80000 ) ROM_END -DRIVER_INIT_MEMBER(dynax_state,mjreach) -{ - m_maincpu->space(AS_PROGRAM).install_write_handler(0x10060, 0x10060, write8_delegate(FUNC(dynax_state::yarunara_flipscreen_w),this)); -} - /*************************************************************************** Mahjong Tenkaigen @@ -7512,7 +7530,7 @@ GAME( 1991, tenkaicb, tenkai, tenkai, tenkai, dynax_state, 0, ROT0, GAME( 1991, tenkaie, tenkai, tenkai, tenkai, dynax_state, 0, ROT0, "Dynax", "Mahjong Tenkaigen (set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, ougonpai, 0, tenkai, tenkai, dynax_state, 0, ROT0, "Dynax", "Mahjong Ougon No Pai", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 1991, ougonpaib,ougonpai, tenkai, tenkai, dynax_state, 0, ROT0, "bootleg", "Mahjong Ougon No Pai (bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1994, mjreach, 0, tenkai, mjreach, dynax_state, mjreach, ROT0, "bootleg / Dynax", "Mahjong Reach (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, mjreach, 0, mjreach, mjreach, dynax_state, 0, ROT0, "bootleg / Dynax", "Mahjong Reach (bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1994, cdracula, 0, cdracula, cdracula, dynax_state, 0, ROT0, "Yun Sung (Escape license)","Castle Of Dracula", MACHINE_SUPPORTS_SAVE ) // not a dynax board GAME( 1995, shpeng, 0, sprtmtch, drgpunch, dynax_state, 0, ROT0, "WSAC Systems?", "Sea Hunter Penguin", MACHINE_NO_COCKTAIL | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // not a dynax board. proms? GAME( 1995, intrgirl, 0, sprtmtch, drgpunch, dynax_state, 0, ROT0, "Barko", "Intergirl", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // not a dynax board. diff --git a/src/mame/drivers/equites.cpp b/src/mame/drivers/equites.cpp index 60f52720f88..822e809ae85 100644 --- a/src/mame/drivers/equites.cpp +++ b/src/mame/drivers/equites.cpp @@ -592,7 +592,7 @@ CUSTOM_INPUT_MEMBER(equites_state::gekisou_unknown_bit_r) WRITE16_MEMBER(equites_state::gekisou_unknown_bit_w) { - // data bit is A16 (offset) + // data bit is A17 (offset) m_gekisou_unknown_bit = (offset == 0) ? 0 : 1;; } @@ -605,6 +605,12 @@ READ16_MEMBER(equites_state::equites_spriteram_kludge_r) return m_spriteram[0]; } +WRITE8_MEMBER(equites_state::mainlatch_w) +{ + // data bit is A17; address bits are A16(?)-A14 (offset is shifted by 1 here) + m_mainlatch->write_bit((offset & 0xe000) >> 13, BIT(offset, 16)); +} + READ8_MEMBER(equites_state::mcu_ram_r) { if (m_fakemcu == nullptr) @@ -621,20 +627,18 @@ WRITE8_MEMBER(equites_state::mcu_ram_w) m_mcuram[offset] = data; } -WRITE16_MEMBER(equites_state::mcu_start_w) +WRITE_LINE_MEMBER(equites_state::mcu_start_w) { - // data bit is A16 (offset) if (m_fakemcu == nullptr) - m_alpha_8201->mcu_start_w(offset != 0); + m_alpha_8201->mcu_start_w(state != 0); else - m_fakemcu->set_input_line(INPUT_LINE_HALT, (offset != 0) ? ASSERT_LINE : CLEAR_LINE); + m_fakemcu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE); } -WRITE16_MEMBER(equites_state::mcu_switch_w) +WRITE_LINE_MEMBER(equites_state::mcu_switch_w) { - // data bit is A16 (offset) if (m_fakemcu == nullptr) - m_alpha_8201->bus_dir_w(offset == 0); + m_alpha_8201->bus_dir_w(state == 0); } @@ -653,9 +657,7 @@ static ADDRESS_MAP_START( equites_map, AS_PROGRAM, 16, equites_state ) AM_RANGE(0x100000, 0x1001ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x140000, 0x1407ff) AM_READWRITE8(mcu_ram_r, mcu_ram_w, 0x00ff) AM_RANGE(0x180000, 0x180001) AM_READ_PORT("IN1") AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) - AM_RANGE(0x184000, 0x184001) AM_SELECT(0x020000) AM_WRITE(equites_flipw_w) - AM_RANGE(0x188000, 0x188001) AM_SELECT(0x020000) AM_WRITE(mcu_start_w) - AM_RANGE(0x18c000, 0x18c001) AM_SELECT(0x020000) AM_WRITE(mcu_switch_w) + AM_RANGE(0x180000, 0x180001) AM_SELECT(0x03c000) AM_WRITE8(mainlatch_w, 0xff00) AM_RANGE(0x1c0000, 0x1c0001) AM_READ_PORT("IN0") AM_WRITE(equites_scrollreg_w) AM_RANGE(0x380000, 0x380001) AM_WRITE8(equites_bgcolor_w, 0xff00) AM_RANGE(0x780000, 0x780001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) @@ -675,10 +677,7 @@ static ADDRESS_MAP_START( splndrbt_map, AS_PROGRAM, 16, equites_state ) AM_RANGE(0x080000, 0x080001) AM_READ_PORT("IN0") AM_RANGE(0x0c0000, 0x0c0001) AM_READ_PORT("IN1") AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x020000) AM_WRITE8(equites_bgcolor_w, 0xff00) // note: addressmask does not apply here - AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x020000) AM_WRITE8(equites_flipb_w, 0x00ff) - AM_RANGE(0x0c4000, 0x0c4001) AM_SELECT(0x020000) AM_WRITE(mcu_start_w) - AM_RANGE(0x0c8000, 0x0c8001) AM_SELECT(0x020000) AM_WRITE(mcu_switch_w) - AM_RANGE(0x0cc000, 0x0cc001) AM_SELECT(0x020000) AM_WRITE(splndrbt_selchar_w) + AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x03c000) AM_WRITE8(mainlatch_w, 0x00ff) AM_RANGE(0x100000, 0x100001) AM_WRITE(splndrbt_bg_scrollx_w) AM_RANGE(0x140000, 0x140001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(splndrbt_bg_scrolly_w) @@ -1130,7 +1129,6 @@ void equites_state::machine_start() void equites_state::machine_reset() { - flip_screen_set(0); } @@ -1141,6 +1139,11 @@ static MACHINE_CONFIG_START( equites ) MCFG_CPU_PROGRAM_MAP(equites_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", equites_state, equites_scanline, "screen", 0, 1) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(equites_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(equites_state, mcu_start_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(equites_state, mcu_switch_w)) + MCFG_FRAGMENT_ADD(common_sound) MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, 4000000/8) // 8303 or 8304 (same device!) @@ -1186,6 +1189,12 @@ static MACHINE_CONFIG_START( splndrbt ) MCFG_CPU_PROGRAM_MAP(splndrbt_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", equites_state, splndrbt_scanline, "screen", 0, 1) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(equites_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(equites_state, mcu_start_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(equites_state, mcu_switch_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(equites_state, splndrbt_selchar_w)) + MCFG_FRAGMENT_ADD(common_sound) MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, 4000000/8) // 8303 or 8304 (same device!) diff --git a/src/mame/drivers/fastfred.cpp b/src/mame/drivers/fastfred.cpp index 07b2bf5e9ca..23060bee542 100644 --- a/src/mame/drivers/fastfred.cpp +++ b/src/mame/drivers/fastfred.cpp @@ -14,6 +14,7 @@ #include "includes/fastfred.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" @@ -143,9 +144,9 @@ MACHINE_START_MEMBER(fastfred_state,imago) m_gfxdecode->gfx(1)->set_source(m_imago_sprites); } -WRITE8_MEMBER(fastfred_state::imago_dma_irq_w) +WRITE_LINE_MEMBER(fastfred_state::imago_dma_irq_w) { - m_maincpu->set_input_line(0, data & 1 ? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); } WRITE8_MEMBER(fastfred_state::imago_sprites_bank_w) @@ -176,9 +177,9 @@ READ8_MEMBER(fastfred_state::imago_sprites_offset_r) return 0xff; //not really used } -WRITE8_MEMBER(fastfred_state::nmi_mask_w) +WRITE_LINE_MEMBER(fastfred_state::nmi_mask_w) { - m_nmi_mask = data & 1; + m_nmi_mask = state; } WRITE8_MEMBER(fastfred_state::sound_nmi_mask_w) @@ -196,15 +197,7 @@ static ADDRESS_MAP_START( fastfred_map, AS_PROGRAM, 8, fastfred_state ) AM_RANGE(0xe000, 0xe000) AM_READ_PORT("BUTTONS") AM_WRITEONLY AM_SHARE("bgcolor") AM_RANGE(0xe800, 0xe800) AM_READ_PORT("JOYS") AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW") AM_WRITENOP - AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w) - AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w) - AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w) - AM_RANGE(0xf004, 0xf004) AM_WRITE(fastfred_charbank1_w) - AM_RANGE(0xf005, 0xf005) AM_WRITE(fastfred_charbank2_w) - AM_RANGE(0xf006, 0xf006) AM_WRITE(fastfred_flip_screen_x_w) - AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w) - AM_RANGE(0xf116, 0xf116) AM_WRITE(fastfred_flip_screen_x_w) - AM_RANGE(0xf117, 0xf117) AM_WRITE(fastfred_flip_screen_y_w) + AM_RANGE(0xf000, 0xf007) AM_MIRROR(0x07f8) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE(0xf800, 0xf800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END @@ -221,16 +214,7 @@ static ADDRESS_MAP_START( jumpcoas_map, AS_PROGRAM, 8, fastfred_state ) AM_RANGE(0xe801, 0xe801) AM_READ_PORT("DSW2") AM_RANGE(0xe802, 0xe802) AM_READ_PORT("BUTTONS") AM_RANGE(0xe803, 0xe803) AM_READ_PORT("JOYS") - AM_RANGE(0xf000, 0xf000) AM_WRITENOP // Unused, but initialized - AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w) - AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w) - AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w) - AM_RANGE(0xf004, 0xf004) AM_WRITE(fastfred_charbank1_w) - AM_RANGE(0xf005, 0xf005) AM_WRITE(fastfred_charbank2_w) - AM_RANGE(0xf006, 0xf006) AM_WRITE(fastfred_flip_screen_x_w) - AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w) - AM_RANGE(0xf116, 0xf116) AM_WRITE(fastfred_flip_screen_x_w) - AM_RANGE(0xf117, 0xf117) AM_WRITE(fastfred_flip_screen_y_w) + AM_RANGE(0xf000, 0xf007) AM_MIRROR(0x07f8) AM_DEVWRITE("outlatch", ls259_device, write_d0) //AM_RANGE(0xf800, 0xf800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) // Why doesn't this work??? AM_RANGE(0xf800, 0xf801) AM_READNOP AM_DEVWRITE("ay8910.1", ay8910_device, address_data_w) ADDRESS_MAP_END @@ -250,14 +234,8 @@ static ADDRESS_MAP_START( imago_map, AS_PROGRAM, 8, fastfred_state ) AM_RANGE(0xd860, 0xd8ff) AM_RAM // Unused, but initialized AM_RANGE(0xe000, 0xe000) AM_READ_PORT("BUTTONS") AM_RANGE(0xe800, 0xe800) AM_READ_PORT("JOYS") - AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW") AM_WRITENOP // writes 1 when level starts, 0 when game over - AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w) - AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w) - AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w) - AM_RANGE(0xf004, 0xf004) AM_WRITE(imago_dma_irq_w) - AM_RANGE(0xf005, 0xf005) AM_WRITE(imago_charbank_w) - AM_RANGE(0xf006, 0xf006) AM_WRITE(fastfred_flip_screen_x_w) - AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w) + AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW") + AM_RANGE(0xf000, 0xf007) AM_MIRROR(0x07f8) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE(0xf400, 0xf400) AM_WRITENOP // writes 0 or 2 AM_RANGE(0xf401, 0xf401) AM_WRITE(imago_sprites_bank_w) AM_RANGE(0xf800, 0xf800) AM_READNOP AM_DEVWRITE("soundlatch", generic_latch_8_device, write) @@ -659,6 +637,15 @@ static MACHINE_CONFIG_START( fastfred ) MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(fastfred_state, sound_timer_irq, 4*60) + MCFG_DEVICE_ADD("outlatch", LS259, 0) // "Control Signal Latch" at D10 + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(fastfred_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(fastfred_state, colorbank1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(fastfred_state, colorbank2_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(fastfred_state, charbank1_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(fastfred_state, charbank2_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(fastfred_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(fastfred_state, flip_screen_y_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -711,6 +698,11 @@ static MACHINE_CONFIG_DERIVED( imago, fastfred ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(imago_map) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // writes 1 when level starts, 0 when game over + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(fastfred_state, imago_dma_irq_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(fastfred_state, imago_charbank_w)) + MCFG_MACHINE_START_OVERRIDE(fastfred_state,imago) /* video hardware */ diff --git a/src/mame/drivers/firefox.cpp b/src/mame/drivers/firefox.cpp index c53c0be9c8f..35ac97cee5a 100644 --- a/src/mame/drivers/firefox.cpp +++ b/src/mame/drivers/firefox.cpp @@ -33,6 +33,7 @@ but requires a special level III player for proper control. Video: CAV. Audio: A #include "cpu/m6502/m6502.h" #include "sound/pokey.h" #include "sound/tms5220.h" +#include "machine/74259.h" #include "machine/ldvp931.h" #include "machine/6532riot.h" #include "machine/gen_latch.h" @@ -77,10 +78,11 @@ public: DECLARE_READ8_MEMBER(firefox_disc_status_r); DECLARE_READ8_MEMBER(firefox_disc_data_r); DECLARE_WRITE8_MEMBER(firefox_disc_read_w); - DECLARE_WRITE8_MEMBER(firefox_disc_lock_w); - DECLARE_WRITE8_MEMBER(audio_enable_w); - DECLARE_WRITE8_MEMBER(firefox_disc_reset_w); - DECLARE_WRITE8_MEMBER(firefox_disc_write_w); + DECLARE_WRITE_LINE_MEMBER(firefox_disc_lock_w); + DECLARE_WRITE_LINE_MEMBER(audio_enable_left_w); + DECLARE_WRITE_LINE_MEMBER(audio_enable_right_w); + DECLARE_WRITE_LINE_MEMBER(firefox_disc_reset_w); + DECLARE_WRITE_LINE_MEMBER(firefox_disc_write_w); DECLARE_WRITE8_MEMBER(firefox_disc_data_w); DECLARE_WRITE8_MEMBER(tileram_w); DECLARE_WRITE8_MEMBER(tile_palette_w); @@ -88,21 +90,23 @@ public: DECLARE_WRITE8_MEMBER(firefox_objram_bank_w); DECLARE_READ8_MEMBER(sound_to_main_r); DECLARE_WRITE8_MEMBER(main_to_sound_w); - DECLARE_WRITE8_MEMBER(sound_reset_w); + DECLARE_WRITE_LINE_MEMBER(sound_reset_w); DECLARE_READ8_MEMBER(main_to_sound_r); DECLARE_WRITE8_MEMBER(sound_to_main_w); DECLARE_READ8_MEMBER(adc_r); DECLARE_WRITE8_MEMBER(adc_select_w); DECLARE_WRITE8_MEMBER(nvram_w); DECLARE_READ8_MEMBER(nvram_r); - DECLARE_WRITE8_MEMBER(novram_recall_w); - DECLARE_WRITE8_MEMBER(novram_store_w); DECLARE_WRITE8_MEMBER(rom_bank_w); DECLARE_WRITE8_MEMBER(main_irq_clear_w); DECLARE_WRITE8_MEMBER(main_firq_clear_w); DECLARE_WRITE8_MEMBER(self_reset_w); - DECLARE_WRITE8_MEMBER(led_w); - DECLARE_WRITE8_MEMBER(firefox_coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(led0_w); + DECLARE_WRITE_LINE_MEMBER(led1_w); + DECLARE_WRITE_LINE_MEMBER(led2_w); + DECLARE_WRITE_LINE_MEMBER(led3_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w); DECLARE_CUSTOM_INPUT_MEMBER(mainflag_r); DECLARE_CUSTOM_INPUT_MEMBER(soundflag_r); DECLARE_READ8_MEMBER(riot_porta_r); @@ -180,25 +184,30 @@ WRITE8_MEMBER(firefox_state::firefox_disc_read_w) m_n_disc_read_data = m_laserdisc->data_r(); } -WRITE8_MEMBER(firefox_state::firefox_disc_lock_w) +WRITE_LINE_MEMBER(firefox_state::firefox_disc_lock_w) { - m_n_disc_lock = data & 0x80; + m_n_disc_lock = state; } -WRITE8_MEMBER(firefox_state::audio_enable_w) +WRITE_LINE_MEMBER(firefox_state::audio_enable_left_w) { - m_laserdisc->set_output_gain(~offset & 1, (data & 0x80) ? 1.0 : 0.0); + m_laserdisc->set_output_gain(0, state ? 1.0 : 0.0); } -WRITE8_MEMBER(firefox_state::firefox_disc_reset_w) +WRITE_LINE_MEMBER(firefox_state::audio_enable_right_w) { - m_laserdisc->reset_w((data & 0x80) ? CLEAR_LINE : ASSERT_LINE); + m_laserdisc->set_output_gain(1, state ? 1.0 : 0.0); +} + +WRITE_LINE_MEMBER(firefox_state::firefox_disc_reset_w) +{ + m_laserdisc->reset_w(state ? CLEAR_LINE : ASSERT_LINE); } /* active low on dbb7 */ -WRITE8_MEMBER(firefox_state::firefox_disc_write_w) +WRITE_LINE_MEMBER(firefox_state::firefox_disc_write_w) { - if ( ( data & 0x80 ) == 0 ) + if (state == 0) m_laserdisc->data_w(m_n_disc_data); } @@ -339,10 +348,10 @@ WRITE8_MEMBER(firefox_state::main_to_sound_w) m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); } -WRITE8_MEMBER(firefox_state::sound_reset_w) +WRITE_LINE_MEMBER(firefox_state::sound_reset_w) { - m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE); - if ((data & 0x80) != 0) + m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE); + if (state != 0) m_sound_to_main_flag = m_main_to_sound_flag = 0; } @@ -440,18 +449,6 @@ READ8_MEMBER(firefox_state::nvram_r) return (m_nvram_1c->read(space, offset) << 4) | (m_nvram_1d->read(space, offset) & 0x0f); } -WRITE8_MEMBER(firefox_state::novram_recall_w) -{ - m_nvram_1c->recall(data & 0x80); - m_nvram_1d->recall(data & 0x80); -} - -WRITE8_MEMBER(firefox_state::novram_store_w) -{ - m_nvram_1c->store(data & 0x80); - m_nvram_1d->store(data & 0x80); -} - /************************************* @@ -488,14 +485,34 @@ WRITE8_MEMBER(firefox_state::self_reset_w) * *************************************/ -WRITE8_MEMBER(firefox_state::led_w) +WRITE_LINE_MEMBER(firefox_state::led0_w) +{ + output().set_led_value(0, !state); +} + +WRITE_LINE_MEMBER(firefox_state::led1_w) { - output().set_led_value(offset, ( data & 0x80 ) == 0 ); + output().set_led_value(1, !state); } -WRITE8_MEMBER(firefox_state::firefox_coin_counter_w) +WRITE_LINE_MEMBER(firefox_state::led2_w) { - machine().bookkeeping().coin_counter_w(offset, data & 0x80 ); + output().set_led_value(2, !state); +} + +WRITE_LINE_MEMBER(firefox_state::led3_w) +{ + output().set_led_value(3, !state); +} + +WRITE_LINE_MEMBER(firefox_state::coin_counter_right_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(firefox_state::coin_counter_left_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } @@ -549,15 +566,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, firefox_state ) AM_RANGE(0x4218, 0x4218) AM_MIRROR(0x0047) AM_WRITE(firefox_disc_read_w) /* DSKREAD */ AM_RANGE(0x4220, 0x4223) AM_MIRROR(0x0044) AM_WRITE(adc_select_w) /* ADCSTART */ AM_RANGE(0x4230, 0x4230) AM_MIRROR(0x0047) AM_WRITE(self_reset_w) /* AMUCK */ - AM_RANGE(0x4280, 0x4280) AM_MIRROR(0x0040) AM_WRITE(novram_recall_w) /* LATCH0 -> NVRECALL */ - AM_RANGE(0x4281, 0x4281) AM_MIRROR(0x0040) AM_WRITE(sound_reset_w) /* LATCH0 -> RSTSOUND */ - AM_RANGE(0x4282, 0x4282) AM_MIRROR(0x0040) AM_WRITE(novram_store_w) /* LATCH0 -> NVRSTORE */ - AM_RANGE(0x4283, 0x4283) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_lock_w) /* LATCH0 -> LOCK */ - AM_RANGE(0x4284, 0x4285) AM_MIRROR(0x0040) AM_WRITE(audio_enable_w) /* LATCH0 -> SWDSKR, SWDSKL */ - AM_RANGE(0x4286, 0x4286) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_reset_w) /* LATCH0 -> RSTDSK */ - AM_RANGE(0x4287, 0x4287) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_write_w) /* LATCH0 -> WRDSK */ - AM_RANGE(0x4288, 0x4289) AM_MIRROR(0x0040) AM_WRITE(firefox_coin_counter_w) /* LATCH1 -> COIN COUNTERR, COUNTERL */ - AM_RANGE(0x428c, 0x428f) AM_MIRROR(0x0040) AM_WRITE(led_w) /* LATCH1 -> LEDs */ + AM_RANGE(0x4280, 0x4287) AM_MIRROR(0x0040) AM_DEVWRITE("latch0", ls259_device, write_d7) + AM_RANGE(0x4288, 0x428f) AM_MIRROR(0x0040) AM_DEVWRITE("latch1", ls259_device, write_d7) AM_RANGE(0x4290, 0x4290) AM_MIRROR(0x0047) AM_WRITE(rom_bank_w) /* WRTREG */ AM_RANGE(0x4298, 0x4298) AM_MIRROR(0x0047) AM_WRITE(main_to_sound_w) /* WRSOUND */ AM_RANGE(0x42a0, 0x42a0) AM_MIRROR(0x0047) AM_WRITE(firefox_disc_data_w) /* DSKLATCH */ @@ -723,6 +733,26 @@ static MACHINE_CONFIG_START( firefox ) MCFG_QUANTUM_TIME(attotime::from_hz(60000)) + MCFG_DEVICE_ADD("latch0", LS259, 0) // 7F + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("nvram_1c", x2212_device, recall)) // NVRECALL + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("nvram_1d", x2212_device, recall)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(firefox_state, sound_reset_w)) // RSTSOUND + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("nvram_1c", x2212_device, store)) // NVRSTORE + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("nvram_1d", x2212_device, store)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(firefox_state, firefox_disc_lock_w)) // LOCK + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(firefox_state, audio_enable_right_w)) // SWDSKR + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(firefox_state, audio_enable_left_w)) // SWDSKL + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(firefox_state, firefox_disc_reset_w)) // RSTDSK + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(firefox_state, firefox_disc_write_w)) // WRDSK + + MCFG_DEVICE_ADD("latch1", LS259, 0) // 1F + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(firefox_state, coin_counter_right_w)) // COIN COUNTERR + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(firefox_state, coin_counter_left_w)) // COIN COUNTERL + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(firefox_state, led0_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(firefox_state, led1_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(firefox_state, led2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(firefox_state, led3_w)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_TIME_INIT(attotime::from_hz((double)MASTER_XTAL/8/16/16/16/16)) diff --git a/src/mame/drivers/flyball.cpp b/src/mame/drivers/flyball.cpp index 2947cf7eee8..d04bec5c1b5 100644 --- a/src/mame/drivers/flyball.cpp +++ b/src/mame/drivers/flyball.cpp @@ -20,6 +20,7 @@ TODO: #include "emu.h" #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "screen.h" #define MASTER_CLOCK XTAL_12_096MHz @@ -42,6 +43,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_outlatch(*this, "outlatch"), m_playfield_ram(*this, "playfield_ram") { } /* devices */ @@ -49,6 +51,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<f9334_device> m_outlatch; /* memory pointers */ required_shared_ptr<uint8_t> m_playfield_ram; @@ -79,6 +82,7 @@ public: DECLARE_WRITE8_MEMBER(pitcher_vert_w); DECLARE_WRITE8_MEMBER(pitcher_horz_w); DECLARE_WRITE8_MEMBER(misc_w); + DECLARE_WRITE_LINE_MEMBER(lamp_w); TILEMAP_MAPPER_MEMBER(get_memory_offset); TILE_GET_INFO_MEMBER(get_tile_info); @@ -273,29 +277,13 @@ WRITE8_MEMBER(flyball_state::pitcher_horz_w) WRITE8_MEMBER(flyball_state::misc_w) { - int bit = ~data & 1; + // address and data lines passed through inverting buffers + m_outlatch->write_d0(space, ~offset, ~data); +} - switch (offset) - { - case 0: - output().set_led_value(0, bit); - break; - case 1: - /* crowd very loud */ - break; - case 2: - /* footstep off-on */ - break; - case 3: - /* crowd off-on */ - break; - case 4: - /* crowd soft-loud */ - break; - case 5: - /* bat hit */ - break; - } +WRITE_LINE_MEMBER(flyball_state::lamp_w) +{ + output().set_led_value(0, state); } @@ -468,6 +456,14 @@ static MACHINE_CONFIG_START( flyball ) MCFG_CPU_PROGRAM_MAP(flyball_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", flyball_state, nmi_line_pulse) + MCFG_DEVICE_ADD("outlatch", F9334, 0) // F7 + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(flyball_state, lamp_w)) // 1 player lamp + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // crowd very loud + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // footstep off-on + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // crowd off-on + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // crowd soft-loud + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // bat hit + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/freekick.cpp b/src/mame/drivers/freekick.cpp index d07c7ce2dac..70fe32113ff 100644 --- a/src/mame/drivers/freekick.cpp +++ b/src/mame/drivers/freekick.cpp @@ -45,6 +45,7 @@ TODO: #include "includes/freekick.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/i8255.h" #include "machine/mc8123.h" #include "sound/sn76496.h" @@ -58,27 +59,38 @@ TODO: * *************************************/ -WRITE8_MEMBER(freekick_state::flipscreen_xy_w) +WRITE_LINE_MEMBER(freekick_state::flipscreen_x_w) { - /* flip Y/X could be the other way round... */ - if (offset) - flip_screen_y_set(~data & 1); - else - flip_screen_x_set(~data & 1); + flip_screen_x_set(!state); +} + +WRITE_LINE_MEMBER(freekick_state::flipscreen_y_w) +{ + flip_screen_y_set(!state); +} + +WRITE_LINE_MEMBER(freekick_state::flipscreen_w) +{ + flip_screen_set(!state); } -WRITE8_MEMBER(freekick_state::flipscreen_w) + +WRITE_LINE_MEMBER(freekick_state::coin1_w) { - flip_screen_set(~data & 1); + machine().bookkeeping().coin_counter_w(0, state); } +WRITE_LINE_MEMBER(freekick_state::coin2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} -WRITE8_MEMBER(freekick_state::coin_w) +WRITE_LINE_MEMBER(freekick_state::spinner_select_w) { - machine().bookkeeping().coin_counter_w(offset, data & 1); + m_spinner = state; } -WRITE8_MEMBER(freekick_state::spinner_select_w) +WRITE8_MEMBER(freekick_state::gigas_spinner_select_w) { m_spinner = data & 1; } @@ -95,9 +107,9 @@ WRITE8_MEMBER(freekick_state::pbillrd_bankswitch_w) m_bank1d->set_entry(data & 1); } -WRITE8_MEMBER(freekick_state::nmi_enable_w) +WRITE_LINE_MEMBER(freekick_state::nmi_enable_w) { - m_nmi_en = data & 1; + m_nmi_en = state; } INTERRUPT_GEN_MEMBER(freekick_state::freekick_irqgen) @@ -184,10 +196,8 @@ static ADDRESS_MAP_START( omega_map, AS_PROGRAM, 8, freekick_state ) AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(freek_videoram_w) AM_SHARE("videoram") AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xd900, 0xdfff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") AM_WRITE(flipscreen_w) - AM_RANGE(0xe002, 0xe003) AM_WRITE(coin_w) - AM_RANGE(0xe004, 0xe004) AM_WRITE(nmi_enable_w) - AM_RANGE(0xe005, 0xe005) AM_WRITENOP + AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") + AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE(0xe800, 0xe800) AM_READ_PORT("IN1") AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW1") AM_WRITENOP //bankswitch ? AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSW2") @@ -205,9 +215,7 @@ static ADDRESS_MAP_START( pbillrd_map, AS_PROGRAM, 8, freekick_state ) AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xd900, 0xdfff) AM_RAM AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") - AM_RANGE(0xe000, 0xe001) AM_WRITE(flipscreen_xy_w) - AM_RANGE(0xe002, 0xe003) AM_WRITE(coin_w) - AM_RANGE(0xe004, 0xe004) AM_WRITE(nmi_enable_w) + AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE(0xe800, 0xe800) AM_READ_PORT("IN1") AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW1") AM_WRITE(pbillrd_bankswitch_w) AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSW2") @@ -229,13 +237,11 @@ static ADDRESS_MAP_START( freekick_map, AS_PROGRAM, 8, freekick_state ) AM_RANGE(0xe800, 0xe8ff) AM_RAM AM_SHARE("spriteram") // sprites AM_RANGE(0xec00, 0xec03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) AM_RANGE(0xf000, 0xf003) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) - AM_RANGE(0xf800, 0xf800) AM_READ_PORT("IN0") AM_WRITE(flipscreen_w) + AM_RANGE(0xf800, 0xf800) AM_READ_PORT("IN0") AM_RANGE(0xf801, 0xf801) AM_READ_PORT("IN1") AM_RANGE(0xf802, 0xf802) AM_READNOP //MUST return bit 0 = 0, otherwise game resets AM_RANGE(0xf803, 0xf803) AM_READ(spinner_r) - AM_RANGE(0xf802, 0xf803) AM_WRITE(coin_w) - AM_RANGE(0xf804, 0xf804) AM_WRITE(nmi_enable_w) - AM_RANGE(0xf806, 0xf806) AM_WRITE(spinner_select_w) + AM_RANGE(0xf800, 0xf807) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE(0xfc00, 0xfc00) AM_DEVWRITE("sn1", sn76489a_device, write) AM_RANGE(0xfc01, 0xfc01) AM_DEVWRITE("sn2", sn76489a_device, write) AM_RANGE(0xfc02, 0xfc02) AM_DEVWRITE("sn3", sn76489a_device, write) @@ -248,10 +254,8 @@ static ADDRESS_MAP_START( gigas_map, AS_PROGRAM, 8, freekick_state ) AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(freek_videoram_w) AM_SHARE("videoram") AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xd900, 0xdfff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") AM_WRITE(flipscreen_w) - AM_RANGE(0xe002, 0xe003) AM_WRITE(coin_w) - AM_RANGE(0xe004, 0xe004) AM_WRITE(nmi_enable_w) - AM_RANGE(0xe005, 0xe005) AM_WRITENOP + AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") + AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE(0xe800, 0xe800) AM_READ_PORT("IN1") AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW1") AM_WRITENOP //bankswitch ? AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSW2") @@ -263,19 +267,19 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( omega_io_map, AS_IO, 8, freekick_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, spinner_select_w) + AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, gigas_spinner_select_w) AM_RANGE(0x01, 0x01) AM_READ_PORT("DSW3") ADDRESS_MAP_END static ADDRESS_MAP_START( gigas_io_map, AS_IO, 8, freekick_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, spinner_select_w) + AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, gigas_spinner_select_w) AM_RANGE(0x01, 0x01) AM_READNOP //unused dip 3 ADDRESS_MAP_END static ADDRESS_MAP_START( oigas_io_map, AS_IO, 8, freekick_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, spinner_select_w) + AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, gigas_spinner_select_w) AM_RANGE(0x01, 0x01) AM_READNOP //unused dip 3 AM_RANGE(0x02, 0x02) AM_READ(oigas_2_r) AM_RANGE(0x03, 0x03) AM_READ(oigas_3_r) @@ -682,7 +686,6 @@ MACHINE_RESET_MEMBER(freekick_state,freekick) { m_romaddr = 0; m_spinner = 0; - m_nmi_en = 0; m_ff_data = 0; machine().bookkeeping().coin_counter_w(0, 0); @@ -722,6 +725,13 @@ static MACHINE_CONFIG_START( omega ) MCFG_CPU_PERIODIC_INT_DRIVER(freekick_state, irq0_line_hold, 120) // measured on PCB MCFG_CPU_VBLANK_INT_DRIVER("screen", freekick_state, freekick_irqgen) + MCFG_DEVICE_ADD("outlatch", LS259, 0) // 3M + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(freekick_state, coin1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(freekick_state, coin2_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(freekick_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ??? + // video hardware MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL_18_432MHz/3, 768/2, 0, 512/2, 263, 0+16, 224+16) // unknown divisor @@ -755,6 +765,11 @@ static MACHINE_CONFIG_START( base ) MCFG_CPU_PERIODIC_INT_DRIVER(freekick_state, irq0_line_hold, 120) // measured on PCB MCFG_CPU_VBLANK_INT_DRIVER("screen", freekick_state, freekick_irqgen) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(freekick_state, coin1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(freekick_state, coin2_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(freekick_state, nmi_enable_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL_12MHz/2, 768/2, 0, 512/2, 263, 0+16, 224+16) @@ -781,8 +796,11 @@ static MACHINE_CONFIG_START( base ) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( pbillrd, base ) + MCFG_DEVICE_MODIFY("outlatch") // 10K + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(freekick_state, flipscreen_y_w)) + /* flip Y/X could be the other way round... */ - /* basic machine hardware */ MCFG_MACHINE_START_OVERRIDE(freekick_state,pbillrd) MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick) MACHINE_CONFIG_END @@ -802,6 +820,10 @@ static MACHINE_CONFIG_DERIVED( freekick, base ) MCFG_CPU_PROGRAM_MAP(freekick_map) MCFG_CPU_IO_MAP(freekick_io_map) + MCFG_DEVICE_MODIFY("outlatch") // 5C + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(freekick_state, spinner_select_w)) + MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick) MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick) @@ -828,6 +850,10 @@ static MACHINE_CONFIG_DERIVED( gigas, base ) MCFG_CPU_IO_MAP(gigas_io_map) MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ??? + MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick) MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick) @@ -846,6 +872,10 @@ static MACHINE_CONFIG_DERIVED( gigasm, base ) MCFG_CPU_PERIODIC_INT_DRIVER(freekick_state, irq0_line_hold, 120) // measured on PCB MCFG_CPU_VBLANK_INT_DRIVER("screen", freekick_state, freekick_irqgen) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ??? + MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick) MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick) diff --git a/src/mame/drivers/funkybee.cpp b/src/mame/drivers/funkybee.cpp index 797346192a7..5ac5f5bf1dd 100644 --- a/src/mame/drivers/funkybee.cpp +++ b/src/mame/drivers/funkybee.cpp @@ -77,6 +77,7 @@ Stephh's notes (based on the games Z80 code and some tests) : #include "includes/funkybee.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "screen.h" #include "speaker.h" @@ -88,9 +89,14 @@ READ8_MEMBER(funkybee_state::funkybee_input_port_0_r) return ioport("IN0")->read(); } -WRITE8_MEMBER(funkybee_state::funkybee_coin_counter_w) +WRITE_LINE_MEMBER(funkybee_state::coin_counter_1_w) { - machine().bookkeeping().coin_counter_w(offset, data); + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(funkybee_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } static ADDRESS_MAP_START( funkybee_map, AS_PROGRAM, 8, funkybee_state ) @@ -99,9 +105,7 @@ static ADDRESS_MAP_START( funkybee_map, AS_PROGRAM, 8, funkybee_state ) AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(funkybee_videoram_w) AM_SHARE("videoram") AM_RANGE(0xc000, 0xdfff) AM_RAM_WRITE(funkybee_colorram_w) AM_SHARE("colorram") AM_RANGE(0xe000, 0xe000) AM_WRITE(funkybee_scroll_w) - AM_RANGE(0xe800, 0xe800) AM_WRITE(funkybee_flipscreen_w) - AM_RANGE(0xe802, 0xe803) AM_WRITE(funkybee_coin_counter_w) - AM_RANGE(0xe805, 0xe805) AM_WRITE(funkybee_gfx_bank_w) + AM_RANGE(0xe800, 0xe807) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xf000, 0xf000) AM_READNOP /* IRQ Ack */ AM_RANGE(0xf800, 0xf800) AM_READ(funkybee_input_port_0_r) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0xf801, 0xf801) AM_READ_PORT("IN1") @@ -275,10 +279,7 @@ GFXDECODE_END void funkybee_state::machine_start() { save_item(NAME(m_gfx_bank)); -} -void funkybee_state::machine_reset() -{ m_gfx_bank = 0; } @@ -290,6 +291,12 @@ static MACHINE_CONFIG_START( funkybee ) MCFG_CPU_IO_MAP(io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", funkybee_state, irq0_line_hold) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(funkybee_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(funkybee_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(funkybee_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(funkybee_state, gfx_bank_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/gaelco.cpp b/src/mame/drivers/gaelco.cpp index b316ed27026..71c59008556 100644 --- a/src/mame/drivers/gaelco.cpp +++ b/src/mame/drivers/gaelco.cpp @@ -44,19 +44,29 @@ WRITE8_MEMBER(gaelco_state::bigkarnk_sound_command_w) m_audiocpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE); } -WRITE8_MEMBER(gaelco_state::bigkarnk_coin_w) +WRITE8_MEMBER(gaelco_state::output_latch_w) { - switch ((offset >> 3)) - { - case 0x00: /* Coin Lockouts */ - case 0x01: - machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01); - break; - case 0x02: /* Coin Counters */ - case 0x03: - machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01); - break; - } + m_outlatch->write_bit(offset >> 3, BIT(data, 0)); +} + +WRITE_LINE_MEMBER(gaelco_state::coin1_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(0, state); +} + +WRITE_LINE_MEMBER(gaelco_state::coin2_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(1, state); +} + +WRITE_LINE_MEMBER(gaelco_state::coin1_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(gaelco_state::coin2_counter_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } WRITE8_MEMBER(gaelco_state::OKIM6295_bankswitch_w) @@ -120,8 +130,8 @@ static ADDRESS_MAP_START( bigkarnk_map, AS_PROGRAM, 16, gaelco_state ) AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1") AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2") AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SERVICE") + AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(output_latch_w, 0x00ff) /* Coin Counters + Coin Lockout */ AM_RANGE(0x70000e, 0x70000f) AM_WRITE8(bigkarnk_sound_command_w, 0x00ff) /* Triggers a FIRQ on the sound CPU */ - AM_RANGE(0x70000a, 0x70003b) AM_WRITE8(bigkarnk_coin_w, 0x00ff) /* Coin Counters + Coin Lockout */ AM_RANGE(0xff8000, 0xffffff) AM_RAM /* Work RAM */ ADDRESS_MAP_END @@ -163,6 +173,7 @@ static ADDRESS_MAP_START( squash_map, AS_PROGRAM, 16, gaelco_state ) AM_RANGE(0x700002, 0x700003) AM_READ_PORT("DSW1") AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1") AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2") + AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(output_latch_w, 0x00ff) AM_RANGE(0x70000c, 0x70000d) AM_WRITE8(OKIM6295_bankswitch_w, 0x00ff) AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status register */ AM_RANGE(0xff0000, 0xffffff) AM_RAM /* Work RAM */ @@ -180,6 +191,7 @@ static ADDRESS_MAP_START( thoop_map, AS_PROGRAM, 16, gaelco_state ) AM_RANGE(0x700002, 0x700003) AM_READ_PORT("DSW1") AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1") AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2") + AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(output_latch_w, 0x00ff) AM_RANGE(0x70000c, 0x70000d) AM_WRITE8(OKIM6295_bankswitch_w, 0x00ff) AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status register */ AM_RANGE(0xff0000, 0xffffff) AM_RAM /* Work RAM */ @@ -510,6 +522,11 @@ static MACHINE_CONFIG_START( bigkarnk ) MCFG_QUANTUM_TIME(attotime::from_hz(600)) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco_state, coin1_lockout_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco_state, coin2_lockout_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco_state, coin2_counter_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -578,6 +595,12 @@ static MACHINE_CONFIG_START( squash ) MCFG_QUANTUM_TIME(attotime::from_hz(600)) + MCFG_DEVICE_ADD("outlatch", LS259, 0) // B8 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco_state, coin1_lockout_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco_state, coin2_lockout_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // used /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -611,6 +634,12 @@ static MACHINE_CONFIG_START( thoop ) MCFG_QUANTUM_TIME(attotime::from_hz(600)) + MCFG_DEVICE_ADD("outlatch", LS259, 0) // B8 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco_state, coin1_lockout_w)) // not inverted + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco_state, coin2_lockout_w)) // not inverted + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // used /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/gaelco2.cpp b/src/mame/drivers/gaelco2.cpp index d236f395108..be85ce0b6f4 100644 --- a/src/mame/drivers/gaelco2.cpp +++ b/src/mame/drivers/gaelco2.cpp @@ -90,7 +90,7 @@ static ADDRESS_MAP_START( maniacsq_map, AS_PROGRAM, 16, gaelco2_state ) AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DSW #2 + Input 2P */ AM_RANGE(0x30004a, 0x30004b) AM_WRITENOP /* Sound muting? */ AM_RANGE(0x320000, 0x320001) AM_READ_PORT("COIN") /* COINSW + SERVICESW */ - AM_RANGE(0x500000, 0x500001) AM_WRITE(gaelco2_coin_w) /* Coin lockout + counters */ + AM_RANGE(0x500000, 0x500001) AM_WRITE(alighunt_coin_w) /* Coin lockout + counters */ AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */ AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM */ ADDRESS_MAP_END @@ -272,10 +272,7 @@ static ADDRESS_MAP_START( bang_map, AS_PROGRAM, 16, bang_state ) AM_RANGE(0x218008, 0x218009) AM_WRITENOP /* CLR INT Video */ AM_RANGE(0x300000, 0x300001) AM_READ_PORT("P1") AM_RANGE(0x300002, 0x300003) AM_READNOP /* Random number generator? */ - AM_RANGE(0x300000, 0x300003) AM_WRITE(gaelco2_coin2_w) /* Coin Counters */ - AM_RANGE(0x300008, 0x300009) AM_WRITE(gaelco2_eeprom_data_w) /* EEPROM data */ - AM_RANGE(0x30000a, 0x30000b) AM_WRITE(gaelco2_eeprom_sk_w) /* EEPROM serial clock */ - AM_RANGE(0x30000c, 0x30000d) AM_WRITE(gaelco2_eeprom_cs_w) /* EEPROM chip select */ + AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE8("mainlatch", ls259_device, write_d0, 0x00ff) /* Coin Counters & serial EEPROM */ AM_RANGE(0x300010, 0x300011) AM_READ_PORT("P2") AM_RANGE(0x300020, 0x300021) AM_READ_PORT("COIN") AM_RANGE(0x310000, 0x310001) AM_READ(p1_gun_x) AM_WRITE(bang_clr_gun_int_w) /* Gun 1P X */ /* CLR INT Gun */ @@ -324,6 +321,13 @@ static MACHINE_CONFIG_START( bang ) MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) /* EEPROM data */ + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) /* EEPROM serial clock */ + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) /* EEPROM chip select */ + /* video hardware */ MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") @@ -472,7 +476,7 @@ static ADDRESS_MAP_START( alighunt_map, AS_PROGRAM, 16, gaelco2_state ) AM_RANGE(0x300000, 0x300001) AM_READ_PORT("IN0") /* DSW #1 + Input 1P */ AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DSW #2 + Input 2P */ AM_RANGE(0x320000, 0x320001) AM_READ_PORT("COIN") /* COINSW + SERVICESW */ - AM_RANGE(0x500000, 0x500001) AM_WRITE(gaelco2_coin_w) /* Coin lockout + counters */ + AM_RANGE(0x500000, 0x500001) AM_WRITE(alighunt_coin_w) /* Coin lockout + counters */ AM_RANGE(0x500006, 0x500007) AM_WRITENOP /* ??? */ AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */ AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */ @@ -689,7 +693,7 @@ static ADDRESS_MAP_START( touchgo_map, AS_PROGRAM, 16, gaelco2_state ) AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DSW #2 + Input 2P */ AM_RANGE(0x300004, 0x300005) AM_READ_PORT("IN2") /* COINSW + Input 3P */ AM_RANGE(0x300006, 0x300007) AM_READ_PORT("IN3") /* SERVICESW + Input 4P */ - AM_RANGE(0x500000, 0x50001f) AM_WRITE(touchgo_coin_w) /* Coin counters */ + AM_RANGE(0x500000, 0x500001) AM_SELECT(0x0038) AM_WRITE(wrally2_latch_w) /* Coin counters */ AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */ AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */ ADDRESS_MAP_END @@ -809,6 +813,12 @@ static MACHINE_CONFIG_START( touchgo ) MCFG_CPU_PROGRAM_MAP(touchgo_map) MCFG_CPU_VBLANK_INT_DRIVER("lscreen", gaelco2_state, irq6_line_hold) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC6 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco2_state, coin3_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco2_state, coin4_counter_w)) + /* video hardware */ MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") MCFG_GFXDECODE_ADD("gfxdecode", "palette", 0x0400000) @@ -1003,10 +1013,7 @@ static ADDRESS_MAP_START( snowboar_map, AS_PROGRAM, 16, gaelco2_state ) AM_RANGE(0x212000, 0x213fff) AM_RAM /* Extra RAM */ AM_RANGE(0x218004, 0x218009) AM_RAM AM_SHARE("vregs") /* Video Registers */ AM_RANGE(0x300000, 0x300001) AM_READ_PORT("P1") - AM_RANGE(0x300000, 0x300003) AM_WRITE(gaelco2_coin2_w) /* Coin Counters */ - AM_RANGE(0x300008, 0x300009) AM_WRITE(gaelco2_eeprom_data_w) /* EEPROM data */ - AM_RANGE(0x30000a, 0x30000b) AM_WRITE(gaelco2_eeprom_sk_w) /* EEPROM serial clock */ - AM_RANGE(0x30000c, 0x30000d) AM_WRITE(gaelco2_eeprom_cs_w) /* EEPROM chip select */ + AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE8("mainlatch", ls259_device, write_d0, 0x00ff) /* Coin Counters & serial EEPROM */ AM_RANGE(0x300010, 0x300011) AM_READ_PORT("P2") AM_RANGE(0x300020, 0x300021) AM_READ_PORT("COIN") AM_RANGE(0x310000, 0x31ffff) AM_READWRITE(snowboar_protection_r,snowboar_protection_w) AM_SHARE("snowboar_prot") /* Protection */ @@ -1054,6 +1061,13 @@ static MACHINE_CONFIG_START( snowboar ) MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) /* EEPROM data */ + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) /* EEPROM serial clock */ + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) /* EEPROM chip select */ + /* video hardware */ MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") @@ -1187,9 +1201,7 @@ static ADDRESS_MAP_START( wrally2_map, AS_PROGRAM, 16, wrally2_state ) AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DIPSW #1 */ AM_RANGE(0x300004, 0x300005) AM_READ_PORT("IN2") /* Inputs 2P + COINSW */ AM_RANGE(0x300006, 0x300007) AM_READ_PORT("IN3") /* SERVICESW */ - AM_RANGE(0x400000, 0x400011) AM_WRITE(wrally2_coin_w) /* Coin Counters */ - AM_RANGE(0x400028, 0x400029) AM_WRITE(wrally2_adc_clk) /* ADCs clock-in line */ - AM_RANGE(0x400030, 0x400031) AM_WRITE(wrally2_adc_cs) /* ADCs chip select line */ + AM_RANGE(0x400000, 0x400001) AM_SELECT(0x0038) AM_WRITE(wrally2_latch_w) /* Coin counters, etc. */ AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */ AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */ ADDRESS_MAP_END @@ -1293,6 +1305,12 @@ static MACHINE_CONFIG_START( wrally2 ) MCFG_DEVICE_ADD("gaelco_ds5002fp", GAELCO_DS5002FP, XTAL_24MHz / 2) MCFG_DEVICE_ADDRESS_MAP(0, mcu_hostmem_map) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(wrally2_state, wrally2_adc_clk)) /* ADCs clock-in line */ + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(wrally2_state, wrally2_adc_cs)) /* ADCs chip select line */ + MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") /* video hardware */ diff --git a/src/mame/drivers/gaelco3d.cpp b/src/mame/drivers/gaelco3d.cpp index b76431df0d3..09cd7b6922e 100644 --- a/src/mame/drivers/gaelco3d.cpp +++ b/src/mame/drivers/gaelco3d.cpp @@ -253,16 +253,6 @@ WRITE16_MEMBER(gaelco3d_state::irq_ack_w) m_maincpu->set_input_line(2, CLEAR_LINE); } -WRITE32_MEMBER(gaelco3d_state::irq_ack32_w) -{ - if (mem_mask == 0xffff0000) - irq_ack_w(space, offset, data, mem_mask >> 16); - else if (ACCESSING_BITS_0_7) - m_serial->tr_w(space, 0, data & 0x01); - else - logerror("%06X:irq_ack_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); -} - /************************************* * @@ -290,52 +280,6 @@ READ16_MEMBER(gaelco3d_state::eeprom_data_r) return result; } -READ32_MEMBER(gaelco3d_state::eeprom_data32_r) -{ - if (ACCESSING_BITS_16_31) - return (eeprom_data_r(space, 0, mem_mask >> 16) << 16) | 0xffff; - else if (ACCESSING_BITS_0_7) - { - uint8_t data = m_serial->data_r(space,0); - if (LOG) - logerror("%06X:read(%02X) = %08X & %08X\n", m_maincpu->pc(), offset, data, mem_mask); - return data | 0xffffff00; - } - else - logerror("%06X:read(%02X) = mask %08X\n", m_maincpu->pc(), offset, mem_mask); - - return 0xffffffff; -} - - -WRITE16_MEMBER(gaelco3d_state::eeprom_data_w) -{ - if (ACCESSING_BITS_0_7) - { - m_eeprom->di_write(data & 0x01); - } - else if (mem_mask != 0xffff) - logerror("write mask: %08x data %08x\n", mem_mask, data); -} - - -WRITE16_MEMBER(gaelco3d_state::eeprom_clock_w) -{ - if (ACCESSING_BITS_0_7) - { - m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); - } -} - - -WRITE16_MEMBER(gaelco3d_state::eeprom_cs_w) -{ - if (ACCESSING_BITS_0_7) - { - m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); - } -} - /************************************* @@ -403,46 +347,29 @@ CUSTOM_INPUT_MEMBER(gaelco3d_state::analog_bit_r) } -WRITE16_MEMBER(gaelco3d_state::analog_port_clock_w) +WRITE_LINE_MEMBER(gaelco3d_state::analog_port_clock_w) { /* a zero/one combo is written here to clock the next analog port bit */ - if (ACCESSING_BITS_0_7) + if (!state) { - if (!(data & 0xff)) - { - m_analog_ports[0] <<= 1; - m_analog_ports[1] <<= 1; - m_analog_ports[2] <<= 1; - m_analog_ports[3] <<= 1; - } - } - else - { - if (LOG) - logerror("%06X:analog_port_clock_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); + m_analog_ports[0] <<= 1; + m_analog_ports[1] <<= 1; + m_analog_ports[2] <<= 1; + m_analog_ports[3] <<= 1; } } -WRITE16_MEMBER(gaelco3d_state::analog_port_latch_w) +WRITE_LINE_MEMBER(gaelco3d_state::analog_port_latch_w) { /* a zero is written here to read the analog ports, and a one is written when finished */ - if (ACCESSING_BITS_0_7) - { - if (!(data & 0xff)) - { - m_analog_ports[0] = m_analog[0].read_safe(0); - m_analog_ports[1] = m_analog[1].read_safe(0); - m_analog_ports[2] = m_analog[2].read_safe(0); - m_analog_ports[3] = m_analog[3].read_safe(0); - } - } - else + if (!state) { - if (LOG) - logerror("%06X:analog_port_latch_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); + m_analog_ports[0] = m_analog[0].read_safe(0); + m_analog_ports[1] = m_analog[1].read_safe(0); + m_analog_ports[2] = m_analog[2].read_safe(0); + m_analog_ports[3] = m_analog[3].read_safe(0); } - } @@ -481,31 +408,30 @@ WRITE8_MEMBER(gaelco3d_state::tms_iack_w) * *************************************/ -WRITE16_MEMBER(gaelco3d_state::tms_reset_w) +WRITE_LINE_MEMBER(gaelco3d_state::tms_reset_w) { /* this is set to 0 while data is uploaded, then set to $ffff after it is done */ /* it does not ever appear to be touched after that */ if (LOG) - logerror("%06X:tms_reset_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); - m_tms->set_input_line(INPUT_LINE_RESET, (data == 0xffff) ? CLEAR_LINE : ASSERT_LINE); + logerror("%06X:tms_reset_w = %d\n", m_maincpu->pc(), state); + m_tms->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE); } -WRITE16_MEMBER(gaelco3d_state::tms_irq_w) +WRITE_LINE_MEMBER(gaelco3d_state::tms_irq_w) { /* this is written twice, 0,1, in quick succession */ /* done after uploading, and after modifying the comm area */ if (LOG) - logerror("%06X:tms_irq_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); - if (ACCESSING_BITS_0_7) - m_tms->set_input_line(0, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE); + logerror("%06X:tms_irq_w = %d\n", m_maincpu->pc(), state); + m_tms->set_input_line(0, state ? CLEAR_LINE : ASSERT_LINE); } -WRITE16_MEMBER(gaelco3d_state::tms_control3_w) +WRITE_LINE_MEMBER(gaelco3d_state::tms_control3_w) { if (LOG) - logerror("%06X:tms_control3_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); + logerror("%06X:tms_control3_w = %d\n", m_maincpu->pc(), state); } @@ -708,31 +634,22 @@ WRITE32_MEMBER(gaelco3d_state::adsp_tx_callback) *************************************/ -WRITE32_MEMBER(gaelco3d_state::radikalb_lamp_w) +WRITE_LINE_MEMBER(gaelco3d_state::radikalb_lamp_w) { /* arbitrary data written */ - if (ACCESSING_BITS_0_7) - logerror("%06X:unknown_127_w = %02X\n", space.device().safe_pc(), data & 0xff); - else - logerror("%06X:unknown_127_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); + logerror("%06X:unknown_127_w = %d\n", m_maincpu->pc(), state); } -WRITE32_MEMBER(gaelco3d_state::unknown_137_w) +WRITE_LINE_MEMBER(gaelco3d_state::unknown_137_w) { /* only written $00 or $ff */ - if (ACCESSING_BITS_0_7) - logerror("%06X:unknown_137_w = %02X\n", space.device().safe_pc(), data & 0xff); - else - logerror("%06X:unknown_137_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); + logerror("%06X:unknown_137_w = %d\n", m_maincpu->pc(), state); } -WRITE32_MEMBER(gaelco3d_state::unknown_13a_w) +WRITE_LINE_MEMBER(gaelco3d_state::unknown_13a_w) { /* only written $0000 or $0001 */ - if (ACCESSING_BITS_0_15) - logerror("%06X:unknown_13a_w = %04X\n", space.device().safe_pc(), data & 0xffff); - else - logerror("%06X:unknown_13a_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); + logerror("%06X:unknown_13a_w = %04X\n", m_maincpu->pc(), state); } @@ -743,6 +660,16 @@ WRITE32_MEMBER(gaelco3d_state::unknown_13a_w) * *************************************/ +WRITE8_MEMBER(gaelco3d_state::mainlatch_68000_w) +{ + m_mainlatch->write_bit(offset >> 2, BIT(data, 0)); +} + +WRITE8_MEMBER(gaelco3d_state::outlatch_68000_w) +{ + m_outlatch->write_bit(offset >> 3, BIT(data, 0)); +} + static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, gaelco3d_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x1fffff) AM_ROM @@ -753,27 +680,26 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, gaelco3d_state ) AM_RANGE(0x51003c, 0x51003d) AM_READ_PORT("IN3") AM_RANGE(0x510040, 0x510041) AM_WRITE(sound_data_w) AM_RANGE(0x510042, 0x510043) AM_READ(sound_status_r) - AM_RANGE(0x510100, 0x510101) AM_READ(eeprom_data_r) - AM_RANGE(0x510100, 0x510101) AM_WRITE(irq_ack_w) - AM_RANGE(0x510102, 0x510103) AM_DEVWRITE8("serial", gaelco_serial_device, tr_w, 0x00ff) + AM_RANGE(0x510100, 0x510101) AM_READWRITE(eeprom_data_r, irq_ack_w) AM_RANGE(0x510102, 0x510103) AM_DEVREAD8("serial", gaelco_serial_device, data_r, 0x00ff) + AM_RANGE(0x510102, 0x510103) AM_SELECT(0x000038) AM_WRITE8(mainlatch_68000_w, 0x00ff) AM_RANGE(0x510104, 0x510105) AM_DEVWRITE8("serial", gaelco_serial_device, data_w, 0x00ff) - AM_RANGE(0x51010a, 0x51010b) AM_DEVWRITE8("serial", gaelco_serial_device, rts_w, 0x00ff) - AM_RANGE(0x510110, 0x510113) AM_WRITE(eeprom_data_w) - AM_RANGE(0x510116, 0x510117) AM_WRITE(tms_control3_w) - AM_RANGE(0x510118, 0x51011b) AM_WRITE(eeprom_clock_w) - AM_RANGE(0x510120, 0x510123) AM_WRITE(eeprom_cs_w) - AM_RANGE(0x51012a, 0x51012b) AM_WRITE(tms_reset_w) - AM_RANGE(0x510132, 0x510133) AM_WRITE(tms_irq_w) - AM_RANGE(0x510146, 0x510147) AM_DEVWRITE8("serial", gaelco_serial_device, irq_enable, 0x00ff) - AM_RANGE(0x510156, 0x510157) AM_WRITE(analog_port_clock_w) - AM_RANGE(0x510166, 0x510167) AM_WRITE(analog_port_latch_w) - AM_RANGE(0x510176, 0x510177) AM_DEVWRITE8("serial", gaelco_serial_device, unknown_w, 0x00ff) + AM_RANGE(0x510106, 0x510107) AM_SELECT(0x000070) AM_WRITE8(outlatch_68000_w, 0x00ff) AM_RANGE(0xfe7f80, 0xfe7fff) AM_WRITE(tms_comm_w) AM_SHARE("tms_comm_base") AM_RANGE(0xfe0000, 0xfeffff) AM_RAM AM_SHARE("m68k_ram_base") ADDRESS_MAP_END +WRITE8_MEMBER(gaelco3d_state::mainlatch_68020_w) +{ + m_mainlatch->write_bit(offset >> 1, BIT(data, 0)); +} + +WRITE8_MEMBER(gaelco3d_state::outlatch_68020_w) +{ + m_outlatch->write_bit(offset >> 2, BIT(data, 0)); +} + static ADDRESS_MAP_START( main020_map, AS_PROGRAM, 32, gaelco3d_state ) AM_RANGE(0x000000, 0x1fffff) AM_ROM AM_RANGE(0x400000, 0x40ffff) AM_RAM_WRITE(gaelco3d_paletteram_020_w) AM_SHARE("paletteram") @@ -783,23 +709,11 @@ static ADDRESS_MAP_START( main020_map, AS_PROGRAM, 32, gaelco3d_state ) AM_RANGE(0x51003c, 0x51003f) AM_READ_PORT("IN3") AM_RANGE(0x510040, 0x510043) AM_READ16(sound_status_r, 0x0000ffff) AM_RANGE(0x510040, 0x510043) AM_WRITE16(sound_data_w, 0xffff0000) - AM_RANGE(0x510100, 0x510103) AM_READ(eeprom_data32_r) - AM_RANGE(0x510100, 0x510103) AM_WRITE(irq_ack32_w) + AM_RANGE(0x510100, 0x510103) AM_READWRITE16(eeprom_data_r, irq_ack_w, 0xffff0000) + AM_RANGE(0x510100, 0x510103) AM_DEVREAD8("serial", gaelco_serial_device, data_r, 0x000000ff) + AM_RANGE(0x510100, 0x510103) AM_SELECT(0x000038) AM_WRITE8(mainlatch_68020_w, 0x000000ff) AM_RANGE(0x510104, 0x510107) AM_DEVWRITE8("serial", gaelco_serial_device, data_w, 0x00ff0000) - AM_RANGE(0x510108, 0x51010b) AM_DEVWRITE8("serial", gaelco_serial_device, rts_w, 0x000000ff) - AM_RANGE(0x510110, 0x510113) AM_WRITE16(eeprom_data_w, 0x0000ffff) - AM_RANGE(0x510114, 0x510117) AM_WRITE16(tms_control3_w, 0x0000ffff) - AM_RANGE(0x510118, 0x51011b) AM_WRITE16(eeprom_clock_w, 0x0000ffff) - AM_RANGE(0x510120, 0x510123) AM_WRITE16(eeprom_cs_w, 0x0000ffff) - AM_RANGE(0x510124, 0x510127) AM_WRITE(radikalb_lamp_w) - AM_RANGE(0x510128, 0x51012b) AM_WRITE16(tms_reset_w, 0x0000ffff) - AM_RANGE(0x510130, 0x510133) AM_WRITE16(tms_irq_w, 0x0000ffff) - AM_RANGE(0x510134, 0x510137) AM_WRITE(unknown_137_w) - AM_RANGE(0x510138, 0x51013b) AM_WRITE(unknown_13a_w) - AM_RANGE(0x510144, 0x510147) AM_DEVWRITE8("serial", gaelco_serial_device, irq_enable, 0x000000ff) - AM_RANGE(0x510154, 0x510157) AM_WRITE16(analog_port_clock_w, 0x0000ffff) - AM_RANGE(0x510164, 0x510167) AM_WRITE16(analog_port_latch_w, 0x0000ffff) - AM_RANGE(0x510174, 0x510177) AM_DEVWRITE8("serial", gaelco_serial_device, unknown_w, 0x000000ff) + AM_RANGE(0x510104, 0x510107) AM_SELECT(0x000070) AM_WRITE8(outlatch_68020_w, 0x000000ff) AM_RANGE(0xfe7f80, 0xfe7fff) AM_WRITE16(tms_comm_w, 0xffffffff) AM_SHARE("tms_comm_base") AM_RANGE(0xfe0000, 0xfeffff) AM_RAM AM_SHARE("m68k_ram_base") ADDRESS_MAP_END @@ -967,7 +881,6 @@ static MACHINE_CONFIG_START( gaelco3d ) MCFG_CPU_PROGRAM_MAP(adsp_program_map) MCFG_CPU_DATA_MAP(adsp_data_map) - MCFG_EEPROM_SERIAL_93C66_ADD("eeprom") MCFG_QUANTUM_TIME(attotime::from_hz(6000)) @@ -977,6 +890,25 @@ static MACHINE_CONFIG_START( gaelco3d ) MCFG_DEVICE_ADD("serial", GAELCO_SERIAL, 0) MCFG_GAELCO_SERIAL_IRQ_HANDLER(WRITELINE(gaelco3d_state, ser_irq)) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC5 on bottom board next to EEPROM + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, tr_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, rts_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gaelco3d_state, tms_reset_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(gaelco3d_state, tms_irq_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(gaelco3d_state, unknown_13a_w)) + + MCFG_DEVICE_ADD("outlatch", LS259, 0) // IC2 on top board near edge connector + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco3d_state, tms_control3_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco3d_state, radikalb_lamp_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco3d_state, unknown_137_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, irq_enable)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gaelco3d_state, analog_port_clock_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(gaelco3d_state, analog_port_latch_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, unknown_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/galaga.cpp b/src/mame/drivers/galaga.cpp index c97daa9e8bd..463a0131641 100644 --- a/src/mame/drivers/galaga.cpp +++ b/src/mame/drivers/galaga.cpp @@ -520,27 +520,27 @@ Line up the LS32 so pin 7 is in line with Z80 pin 29 Atach the 2 chips to the top of the Z80 with some glue Connect like this.... -LS32 pin 1 tied to Z80 pin 22 -LS32 pin 2 tied to Z80 pin 19 +LS32 pin 1 tied to Z80 pin 22 (WR) +LS32 pin 2 tied to Z80 pin 19 (MREQ) LS32 pin 3,4 tied together -LS32 pin 5 tied to Z80 pin 4 +LS32 pin 5 tied to Z80 pin 4 (A14) LS32 pin 6 tied to pin 10 LS32 LS32 pin 7 tied to Z80 pin 29 (GND) LS32 pin 8 tied to LS259 pin 14 -LS32 pin 9 tied to Z80 pin 5 +LS32 pin 9 tied to Z80 pin 5 (A15) LS32 pins 11, 12, 13 have NC LS32 pin 14 tied to Z80 pin 11 (+5V) -LS259 pin 1 tied to Z80 pin 30 -LS259 pin 2 tied to Z80 pin 31 -LS259 pin 3 tied to Z80 pin 32 +LS259 pin 1 tied to Z80 pin 30 (A0) +LS259 pin 2 tied to Z80 pin 31 (A1) +LS259 pin 3 tied to Z80 pin 32 (A2) LS259 pin 4 to ROM 8 (as above) LS259 pins 5, 6, 7 have NC LS259 pin 8 tied to Z80 pin 29 (GND) LS259 pins 9, 10, 11, 12 have NC -LS259 pin 13 tied to Z80 pin 14 -LS259 pin 15 tied to Z80 pin 26 -LS259 pin 16 tied to Z80 pin 11 +LS259 pin 13 tied to Z80 pin 14 (D0) +LS259 pin 15 tied to Z80 pin 26 (RESET) +LS259 pin 16 tied to Z80 pin 11 (+5V) @@ -734,57 +734,28 @@ READ8_MEMBER(galaga_state::bosco_dsw_r) return bit0 | (bit1 << 1); } -WRITE8_MEMBER(galaga_state::galaga_flip_screen_w) +WRITE_LINE_MEMBER(galaga_state::flip_screen_w) { - flip_screen_set(data & 1); + flip_screen_set(state); } -WRITE8_MEMBER(bosco_state::bosco_flip_screen_w) +WRITE_LINE_MEMBER(galaga_state::irq1_clear_w) { - flip_screen_set(~data & 1); + m_main_irq_mask = state; + if (!m_main_irq_mask) + m_maincpu->set_input_line(0, CLEAR_LINE); } +WRITE_LINE_MEMBER(galaga_state::irq2_clear_w) +{ + m_sub_irq_mask = state; + if (!m_sub_irq_mask) + m_subcpu->set_input_line(0, CLEAR_LINE); +} -WRITE8_MEMBER(galaga_state::bosco_latch_w) +WRITE_LINE_MEMBER(galaga_state::nmion_w) { - switch (offset) - { - case 0x00: /* IRQ1 */ - m_main_irq_mask = data & 1; - if (!m_main_irq_mask) - m_maincpu->set_input_line(0, CLEAR_LINE); - break; - - case 0x01: /* IRQ2 */ - m_sub_irq_mask = data & 1; - if (!m_sub_irq_mask) - m_subcpu->set_input_line(0, CLEAR_LINE); - break; - - case 0x02: /* NMION */ - m_sub2_nmi_mask = !(data & 1); - break; - - case 0x03: /* RESET */ - m_subcpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE); - m_subcpu2->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE); - break; - - case 0x04: /* n.c. */ - break; - - case 0x05: /* MOD 0 (xevious: n.c.) */ - m_custom_mod = (m_custom_mod & ~0x01) | ((data & 1) << 0); - break; - - case 0x06: /* MOD 1 (xevious: n.c.) */ - m_custom_mod = (m_custom_mod & ~0x02) | ((data & 1) << 1); - break; - - case 0x07: /* MOD 2 (xevious: n.c.) */ - m_custom_mod = (m_custom_mod & ~0x04) | ((data & 1) << 2); - break; - } + m_sub2_nmi_mask = !state; } CUSTOM_INPUT_MEMBER(digdug_state::shifted_port_r){ return ioport((const char *)param)->read() >> 4; } @@ -823,12 +794,6 @@ READ8_MEMBER(galaga_state::namco_52xx_si_r) return 0; } -READ8_MEMBER(galaga_state::custom_mod_r) -{ - /* MOD0-2 is connected to K1-3; K0 is left unconnected */ - return m_custom_mod << 1; -} - TIMER_CALLBACK_MEMBER(galaga_state::cpu3_interrupt_callback) { int scanline = param; @@ -849,28 +814,13 @@ MACHINE_START_MEMBER(galaga_state,galaga) { /* create the interrupt timer */ m_cpu3_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(galaga_state::cpu3_interrupt_callback),this)); - m_custom_mod = 0; - save_item(NAME(m_custom_mod)); save_item(NAME(m_main_irq_mask)); save_item(NAME(m_sub_irq_mask)); save_item(NAME(m_sub2_nmi_mask)); } -void galaga_state::bosco_latch_reset() -{ - address_space &space = m_maincpu->space(AS_PROGRAM); - int i; - - /* Reset all latches */ - for (i = 0;i < 8;i++) - bosco_latch_w(space,i,0); -} - MACHINE_RESET_MEMBER(galaga_state,galaga) { - /* Reset all latches */ - bosco_latch_reset(); - m_cpu3_interrupt_timer->adjust(m_screen->time_until_pos(64), 64); } @@ -886,7 +836,7 @@ static ADDRESS_MAP_START( bosco_map, AS_PROGRAM, 8, bosco_state ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */ AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r) AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */ + AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0) AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx_0", namco_06xx_device, data_r, data_w) AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx_0", namco_06xx_device, ctrl_r, ctrl_w) @@ -899,8 +849,7 @@ static ADDRESS_MAP_START( bosco_map, AS_PROGRAM, 8, bosco_state ) AM_RANGE(0x9820, 0x9820) AM_WRITE(bosco_scrolly_w) AM_RANGE(0x9830, 0x9830) AM_WRITEONLY AM_SHARE("starcontrol") AM_RANGE(0x9840, 0x9840) AM_WRITE(bosco_starclr_w) - AM_RANGE(0x9870, 0x9870) AM_WRITE(bosco_flip_screen_w) - AM_RANGE(0x9874, 0x9875) AM_WRITEONLY AM_SHARE("bosco_starblink") + AM_RANGE(0x9870, 0x9877) AM_DEVWRITE("videolatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -908,7 +857,7 @@ static ADDRESS_MAP_START( galaga_map, AS_PROGRAM, 8, galaga_state ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */ AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r) AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */ + AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0) AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w) AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w) @@ -916,8 +865,12 @@ static ADDRESS_MAP_START( galaga_map, AS_PROGRAM, 8, galaga_state ) AM_RANGE(0x8800, 0x8bff) AM_RAM AM_SHARE("galaga_ram1") AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("galaga_ram2") AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("galaga_ram3") - AM_RANGE(0xa000, 0xa005) AM_WRITEONLY AM_SHARE("starcontrol") - AM_RANGE(0xa007, 0xa007) AM_WRITE(galaga_flip_screen_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("videolatch", ls259_device, write_d0) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( gatsbee_main_map, AS_PROGRAM, 8, galaga_state ) + AM_RANGE(0x0000, 0x0007) AM_MIRROR(0x3ff8) AM_DEVWRITE("extralatch", ls259_device, write_d0) + AM_IMPORT_FROM(galaga_map) ADDRESS_MAP_END @@ -925,7 +878,7 @@ static ADDRESS_MAP_START( xevious_map, AS_PROGRAM, 8, xevious_state ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */ AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r) AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */ + AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0) AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w) AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w) @@ -945,7 +898,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( digdug_map, AS_PROGRAM, 8, digdug_state ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */ AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */ + AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0) AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w) AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w) @@ -954,7 +907,7 @@ static ADDRESS_MAP_START( digdug_map, AS_PROGRAM, 8, digdug_state ) AM_RANGE(0x8800, 0x8bff) AM_RAM AM_SHARE("digdug_objram") /* work RAM + sprite registers */ AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("digdug_posram") /* work RAM + sprite registers */ AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("digdug_flpram") /* work RAM + sprite registers */ - AM_RANGE(0xa000, 0xa007) AM_READNOP AM_WRITE(digdug_PORT_w) /* video latches (spurious reads when setting latch bits) */ + AM_RANGE(0xa000, 0xa007) AM_READNOP AM_DEVWRITE("videolatch", ls259_device, write_d0) /* video latches (spurious reads when setting latch bits) */ AM_RANGE(0xb800, 0xb83f) AM_DEVREADWRITE("earom", atari_vg_earom_device, read, write) /* non volatile memory data */ AM_RANGE(0xb840, 0xb840) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w) /* non volatile memory control */ ADDRESS_MAP_END @@ -1619,6 +1572,13 @@ static MACHINE_CONFIG_START( bosco ) MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(bosco_map) + MCFG_DEVICE_ADD("misclatch", LS259, 0) // 3C on CPU board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_NAMCO_50XX_ADD("50xx_1", MASTER_CLOCK/6/2) /* 1.536 MHz */ MCFG_NAMCO_50XX_ADD("50xx_2", MASTER_CLOCK/6/2) /* 1.536 MHz */ MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */ @@ -1657,6 +1617,12 @@ static MACHINE_CONFIG_START( bosco ) MCFG_NAMCO_06XX_WRITE_0_CB(DEVWRITE8("50xx_2", namco_50xx_device, write)) MCFG_NAMCO_06XX_WRITE_1_CB(DEVWRITE8("52xx", namco_52xx_device, write)) + MCFG_DEVICE_ADD("videolatch", LS259, 0) // 1B on video board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, flip_screen_w)) MCFG_DEVCB_INVERT + // Q4-Q5 to 05XX for starfield blink + //MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITE("50xx_2", namco_50xx_device, reset_w)) + //MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITE("52xx", namco_52xx_device, reset_w)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ @@ -1704,6 +1670,13 @@ static MACHINE_CONFIG_START( galaga ) MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(galaga_map) + MCFG_DEVICE_ADD("misclatch", LS259, 0) // 3C on CPU board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */ MCFG_NAMCO_51XX_INPUT_0_CB(IOPORT("IN0L")) MCFG_NAMCO_51XX_INPUT_1_CB(IOPORT("IN0H")) @@ -1722,6 +1695,10 @@ static MACHINE_CONFIG_START( galaga ) MCFG_NAMCO_06XX_WRITE_0_CB(DEVWRITE8("51xx", namco_51xx_device, write)) MCFG_NAMCO_06XX_WRITE_3_CB(DEVWRITE8("54xx", namco_54xx_device, write)) + MCFG_DEVICE_ADD("videolatch", LS259, 0) // 5K on video board + // Q0-Q5 to 05XX for starfield control + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(galaga_state, flip_screen_w)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ @@ -1775,6 +1752,14 @@ static MACHINE_CONFIG_DERIVED( galagab, galaga ) MCFG_DEVICE_REMOVE("discrete") MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( gatsbee, galaga ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(gatsbee_main_map) + + MCFG_DEVICE_ADD("extralatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, gatsbee_bank_w)) +MACHINE_CONFIG_END + static MACHINE_CONFIG_START( xevious ) /* basic machine hardware */ @@ -1789,6 +1774,13 @@ static MACHINE_CONFIG_START( xevious ) MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(xevious_map) + MCFG_DEVICE_ADD("misclatch", LS259, 0) // 5K + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_NAMCO_50XX_ADD("50xx", MASTER_CLOCK/6/2) /* 1.536 MHz */ MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */ @@ -1889,6 +1881,14 @@ static MACHINE_CONFIG_START( digdug ) MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */ MCFG_CPU_PROGRAM_MAP(digdug_map) + MCFG_DEVICE_ADD("misclatch", LS259, 0) // 8R + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + // Q5-Q7 also used (see below) + MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */ MCFG_NAMCO_51XX_INPUT_0_CB(IOPORT("IN0L")) MCFG_NAMCO_51XX_INPUT_1_CB(IOPORT("IN0H")) @@ -1898,7 +1898,10 @@ static MACHINE_CONFIG_START( digdug ) MCFG_NAMCO_51XX_OUTPUT_1_CB(WRITE8(galaga_state,out_1)) MCFG_NAMCO_53XX_ADD("53xx", MASTER_CLOCK/6/2) /* 1.536 MHz */ - MCFG_NAMCO_53XX_K_CB(READ8(galaga_state,custom_mod_r)) + MCFG_NAMCO_53XX_K_CB(DEVREADLINE("misclatch", ls259_device, q7_r)) MCFG_DEVCB_BIT(3) // MOD 2 = K3 + MCFG_DEVCB_CHAIN_INPUT(DEVREADLINE("misclatch", ls259_device, q6_r)) MCFG_DEVCB_BIT(2) // MOD 1 = K2 + MCFG_DEVCB_CHAIN_INPUT(DEVREADLINE("misclatch", ls259_device, q5_r)) MCFG_DEVCB_BIT(1) // MOD 0 = K1 + // K0 is left unconnected MCFG_NAMCO_53XX_INPUT_0_CB(IOPORT("DSWA")) MCFG_NAMCO_53XX_INPUT_1_CB(IOPORT("DSWA_HI")) MCFG_NAMCO_53XX_INPUT_2_CB(IOPORT("DSWB")) @@ -1911,6 +1914,12 @@ static MACHINE_CONFIG_START( digdug ) MCFG_NAMCO_06XX_READ_1_CB(DEVREAD8("53xx", namco_53xx_device, read)) MCFG_NAMCO_06XX_READ_REQUEST_1_CB(DEVWRITELINE("53xx", namco_53xx_device, read_request)) + MCFG_DEVICE_ADD("videolatch", LS259, 0) // 5R + MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(digdug_state, bg_select_w)) MCFG_DEVCB_MASK(0x33) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(digdug_state, tx_color_mode_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(digdug_state, bg_disable_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(digdug_state, flip_screen_w)) + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ /* synchronization of the CPUs */ MCFG_MACHINE_START_OVERRIDE(galaga_state,galaga) @@ -3412,14 +3421,6 @@ DRIVER_INIT_MEMBER(galaga_state,galaga) } } -DRIVER_INIT_MEMBER(galaga_state,gatsbee) -{ - DRIVER_INIT_CALL(galaga); - - /* Gatsbee has a larger character ROM, we need a handler for banking */ - m_maincpu->space(AS_PROGRAM).install_write_handler(0x1000, 0x1000, write8_delegate(FUNC(galaga_state::gatsbee_bank_w),this)); -} - DRIVER_INIT_MEMBER(xevious_state,xevious) { @@ -3496,7 +3497,7 @@ GAME( 1982, digsid, digdug, digdug, digdug, digdug_state, 0, ROT90 /* Bootlegs with replacement I/O chips */ GAME( 1982, gallag, galaga, galagab, galaga, galaga_state, galaga, ROT90, "bootleg", "Gallag", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1984, gatsbee, galaga, galagab, gatsbee, galaga_state, gatsbee, ROT90, "hack (Uchida)", "Gatsbee", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1984, gatsbee, galaga, gatsbee, gatsbee, galaga_state, galaga, ROT90, "hack (Uchida)", "Gatsbee", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1981, nebulbee, galaga, galagab, galaga, galaga_state, galaga, ROT90, "bootleg", "Nebulous Bee", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) GAME( 1982, xevios, xevious, xevious, xevious, xevious_state, xevios, ROT90, "bootleg", "Xevios", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/gauntlet.cpp b/src/mame/drivers/gauntlet.cpp index 58defd05dff..2c87c17f7c4 100644 --- a/src/mame/drivers/gauntlet.cpp +++ b/src/mame/drivers/gauntlet.cpp @@ -190,12 +190,10 @@ WRITE16_MEMBER(gauntlet_state::sound_reset_w) if ((oldword ^ m_sound_reset_val) & 1) { m_audiocpu->set_input_line(INPUT_LINE_RESET, (m_sound_reset_val & 1) ? CLEAR_LINE : ASSERT_LINE); + m_soundctl->clear_w(m_sound_reset_val & 1); m_soundcomm->sound_cpu_reset(); if (m_sound_reset_val & 1) { - m_ym2151->reset(); - m_tms5220->reset(); - m_tms5220->set_unscaled_clock(ATARI_CLOCK_14MHz/2 / 11); m_ym2151->set_output_gain(ALL_OUTPUTS, 0.0f); m_pokey->set_output_gain(ALL_OUTPUTS, 0.0f); m_tms5220->set_output_gain(ALL_OUTPUTS, 0.0f); @@ -231,27 +229,28 @@ READ8_MEMBER(gauntlet_state::switch_6502_r) * *************************************/ -WRITE8_MEMBER(gauntlet_state::sound_ctl_w) +WRITE_LINE_MEMBER(gauntlet_state::ym2151_reset_w) { - switch (offset & 7) - { - case 0: /* music reset, bit D7, low reset */ - if (((data>>7)&1) == 0) m_ym2151->reset(); - break; - - case 1: /* speech write, bit D7, active low */ - m_tms5220->wsq_w(data >> 7); - break; - - case 2: /* speech reset, bit D7, active low */ - m_tms5220->rsq_w(data >> 7); - break; - - case 3: /* speech squeak, bit D7 */ - data = 5 | ((data >> 6) & 2); - m_tms5220->set_unscaled_clock(ATARI_CLOCK_14MHz/2 / (16 - data)); - break; - } + if (state == 0) + m_ym2151->reset(); +} + +WRITE_LINE_MEMBER(gauntlet_state::speech_squeak_w) +{ + uint8_t data = 5 | (state ? 2 : 0); + m_tms5220->set_unscaled_clock(ATARI_CLOCK_14MHz/2 / (16 - data)); +} + +WRITE_LINE_MEMBER(gauntlet_state::coin_counter_left_w) +{ + // coins 1 & 2 combined + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(gauntlet_state::coin_counter_right_w) +{ + // coins 3 & 4 combined + machine().bookkeeping().coin_counter_w(1, state); } @@ -325,7 +324,8 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, gauntlet_state ) AM_RANGE(0x1000, 0x100f) AM_MIRROR(0x27c0) AM_DEVWRITE("soundcomm", atari_sound_comm_device, sound_response_w) AM_RANGE(0x1010, 0x101f) AM_MIRROR(0x27c0) AM_DEVREAD("soundcomm", atari_sound_comm_device, sound_command_r) AM_RANGE(0x1020, 0x102f) AM_MIRROR(0x27c0) AM_READ_PORT("COIN") AM_WRITE(mixer_w) - AM_RANGE(0x1030, 0x103f) AM_MIRROR(0x27c0) AM_READWRITE(switch_6502_r, sound_ctl_w) + AM_RANGE(0x1030, 0x1030) AM_MIRROR(0x27cf) AM_READ(switch_6502_r) + AM_RANGE(0x1030, 0x1037) AM_MIRROR(0x27c8) AM_DEVWRITE("soundctl", ls259_device, write_d7) AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x27c0) AM_DEVREADWRITE("pokey", pokey_device, read, write) AM_RANGE(0x1810, 0x1811) AM_MIRROR(0x27ce) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x1820, 0x182f) AM_MIRROR(0x27c0) AM_DEVWRITE("tms", tms5220_device, data_w) @@ -544,6 +544,14 @@ static MACHINE_CONFIG_START( gauntlet_base ) MCFG_SOUND_ADD("tms", TMS5220C, ATARI_CLOCK_14MHz/2/11) /* potentially ATARI_CLOCK_14MHz/2/9 as well */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80) + + MCFG_DEVICE_ADD("soundctl", LS259, 0) // 16T/U + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gauntlet_state, ym2151_reset_w)) // music reset, low reset + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("tms", tms5220_device, wsq_w)) // speech write, active low + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("tms", tms5220_device, rsq_w)) // speech reset, active low + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gauntlet_state, speech_squeak_w)) // speech squeak, low = 650 Hz + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(gauntlet_state, coin_counter_right_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gauntlet_state, coin_counter_left_w)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/gladiatr.cpp b/src/mame/drivers/gladiatr.cpp index cf0f79247f2..076e64d772a 100644 --- a/src/mame/drivers/gladiatr.cpp +++ b/src/mame/drivers/gladiatr.cpp @@ -195,6 +195,7 @@ TODO: #include "cpu/mcs48/mcs48.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/clock.h" #include "machine/nvram.h" @@ -205,12 +206,6 @@ TODO: #include "speaker.h" -WRITE8_MEMBER(gladiatr_state::gladiatr_bankswitch_w) -{ - // ROM bankswitching - membank("bank1")->set_entry(data & 0x01); -} - MACHINE_RESET_MEMBER(gladiatr_state,gladiator) { // 6809 bank memory set @@ -258,9 +253,9 @@ READ8_MEMBER(gladiatr_state::gladiator_cpu_sound_command_r) return m_soundlatch->read(space,0); } -WRITE8_MEMBER(gladiatr_state::gladiatr_flipscreen_w) +WRITE_LINE_MEMBER(gladiatr_state::flipscreen_w) { - flip_screen_set(data & 1); + flip_screen_set(state); } @@ -512,12 +507,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( gladiatr_cpu1_io, AS_IO, 8, gladiatr_state ) -// ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0xc000, 0xc000) AM_WRITE(spritebuffer_w) - AM_RANGE(0xc001, 0xc001) AM_WRITE(gladiatr_spritebank_w) - AM_RANGE(0xc002, 0xc002) AM_WRITE(gladiatr_bankswitch_w) AM_RANGE(0xc004, 0xc004) AM_WRITE(gladiatr_irq_patch_w) /* !!! patch to 2nd CPU IRQ !!! */ - AM_RANGE(0xc007, 0xc007) AM_WRITE(gladiatr_flipscreen_w) + AM_RANGE(0xc000, 0xc007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xc09e, 0xc09f) AM_DEVREADWRITE("ucpu", upi41_cpu_device, upi41_master_r, upi41_master_w) AM_RANGE(0xc0bf, 0xc0bf) AM_NOP // watchdog_reset_w doesn't work ADDRESS_MAP_END @@ -529,7 +520,7 @@ static ADDRESS_MAP_START( gladiatr_cpu2_io, AS_IO, 8, gladiatr_state ) AM_RANGE(0x40, 0x40) AM_NOP // WRITE(sub_irq_ack_w) AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("cctl", upi41_cpu_device, upi41_master_r, upi41_master_w) AM_RANGE(0x80, 0x81) AM_DEVREADWRITE("ccpu", upi41_cpu_device, upi41_master_r, upi41_master_w) - AM_RANGE(0xa0, 0xa7) AM_NOP // filters on sound output + AM_RANGE(0xa0, 0xa7) AM_DEVWRITE("filtlatch", ls259_device, write_d0) AM_RANGE(0xe0, 0xe0) AM_WRITE(gladiator_cpu_sound_command_w) ADDRESS_MAP_END @@ -751,6 +742,13 @@ static MACHINE_CONFIG_START( gladiatr ) MCFG_MACHINE_RESET_OVERRIDE(gladiatr_state,gladiator) MCFG_NVRAM_ADD_0FILL("nvram") // NEC uPD449 CMOS SRAM + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 5L on main board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gladiatr_state, spritebuffer_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gladiatr_state, spritebank_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(MEMBANK("bank1")) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) // shadowed by aforementioned hack + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(gladiatr_state, flipscreen_w)) + MCFG_DEVICE_ADD("cctl", I8741, XTAL_12MHz/2) /* verified on pcb */ MCFG_MCS48_PORT_T0_IN_CB(IOPORT("COINS")) MCFG_DEVCB_RSHIFT(3) MCFG_MCS48_PORT_T1_IN_CB(IOPORT("COINS")) MCFG_DEVCB_RSHIFT(2) @@ -815,6 +813,8 @@ static MACHINE_CONFIG_START( gladiatr ) MCFG_SOUND_ADD("msm", MSM5205, XTAL_455kHz) /* verified on pcb */ MCFG_MSM5205_PRESCALER_SELECTOR(SEX_4B) /* vclk input mode */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) + + MCFG_DEVICE_ADD("filtlatch", LS259, 0) // 9R - filters on sound output MACHINE_CONFIG_END diff --git a/src/mame/drivers/glass.cpp b/src/mame/drivers/glass.cpp index 525ff786db8..f9be235f380 100644 --- a/src/mame/drivers/glass.cpp +++ b/src/mame/drivers/glass.cpp @@ -79,19 +79,27 @@ WRITE16_MEMBER(glass_state::OKIM6295_bankswitch_w) WRITE16_MEMBER(glass_state::coin_w) { - switch (offset >> 3) - { - case 0x00: /* Coin Lockouts */ - case 0x01: - machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01); - break; - case 0x02: /* Coin Counters */ - case 0x03: - machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01); - break; - case 0x04: /* Sound Muting (if bit 0 == 1, sound output stream = 0) */ - break; - } + m_outlatch->write_bit(offset >> 3, BIT(data, 0)); +} + +WRITE_LINE_MEMBER(glass_state::coin1_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(0, !state); +} + +WRITE_LINE_MEMBER(glass_state::coin2_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(1, !state); +} + +WRITE_LINE_MEMBER(glass_state::coin1_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(glass_state::coin2_counter_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } @@ -113,9 +121,9 @@ static ADDRESS_MAP_START( glass_map, AS_PROGRAM, 16, glass_state ) AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1") AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2") AM_RANGE(0x700008, 0x700009) AM_WRITE(blitter_w) // serial blitter + AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE(coin_w) // Coin Counters/Lockout AM_RANGE(0x70000c, 0x70000d) AM_WRITE(OKIM6295_bankswitch_w) // OKI6295 bankswitch AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) // OKI6295 status register - AM_RANGE(0x70000a, 0x70004b) AM_WRITE(coin_w) // Coin Counters/Lockout AM_RANGE(0xfec000, 0xfeffff) AM_RAM AM_SHARE("shareram") // Work RAM (partially shared with DS5002FP) ADDRESS_MAP_END @@ -226,6 +234,13 @@ static MACHINE_CONFIG_START( glass ) MCFG_CPU_PROGRAM_MAP(glass_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", glass_state, interrupt) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(glass_state, coin1_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(glass_state, coin2_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(glass_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(glass_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // Sound Muting (if bit 0 == 1, sound output stream = 0) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/gng.cpp b/src/mame/drivers/gng.cpp index 6428b72f815..6dd73d4a42c 100644 --- a/src/mame/drivers/gng.cpp +++ b/src/mame/drivers/gng.cpp @@ -27,8 +27,8 @@ Notes: #include "cpu/z80/z80.h" #include "cpu/m6809/m6809.h" +#include "machine/74259.h" #include "machine/gen_latch.h" -#include "sound/2203intf.h" #include "screen.h" #include "speaker.h" @@ -41,9 +41,23 @@ WRITE8_MEMBER(gng_state::gng_bankswitch_w) membank("bank1")->set_entry((data & 0x03)); } -WRITE8_MEMBER(gng_state::gng_coin_counter_w) +WRITE_LINE_MEMBER(gng_state::coin_counter_1_w) { - machine().bookkeeping().coin_counter_w(offset, data); + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(gng_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} + +WRITE_LINE_MEMBER(gng_state::ym_reset_w) +{ + if (!state) + { + m_ym[0]->reset(); + m_ym[1]->reset(); + } } static ADDRESS_MAP_START( gng_map, AS_PROGRAM, 8, gng_state ) @@ -62,9 +76,7 @@ static ADDRESS_MAP_START( gng_map, AS_PROGRAM, 8, gng_state ) AM_RANGE(0x3b08, 0x3b09) AM_WRITE(gng_bgscrollx_w) AM_RANGE(0x3b0a, 0x3b0b) AM_WRITE(gng_bgscrolly_w) AM_RANGE(0x3c00, 0x3c00) AM_NOP /* watchdog? */ - AM_RANGE(0x3d00, 0x3d00) AM_WRITE(gng_flipscreen_w) -// { 0x3d01, 0x3d01, reset sound cpu? - AM_RANGE(0x3d02, 0x3d03) AM_WRITE(gng_coin_counter_w) + AM_RANGE(0x3d00, 0x3d07) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x3e00, 0x3e00) AM_WRITE(gng_bankswitch_w) AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank1") AM_RANGE(0x6000, 0xffff) AM_ROM @@ -353,6 +365,12 @@ static MACHINE_CONFIG_START( gng ) MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(gng_state, irq0_line_hold, 4*60) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 9B on A board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gng_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(gng_state, ym_reset_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gng_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gng_state, coin_counter_2_w)) /* video hardware */ MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") diff --git a/src/mame/drivers/gomoku.cpp b/src/mame/drivers/gomoku.cpp index 492e70594d0..1bc20a04129 100644 --- a/src/mame/drivers/gomoku.cpp +++ b/src/mame/drivers/gomoku.cpp @@ -44,6 +44,12 @@ READ8_MEMBER(gomoku_state::input_port_r) } +WRITE8_MEMBER(gomoku_state::gomoku_latch_w) +{ + m_latch->write_bit(offset, BIT(data, 1)); +} + + static ADDRESS_MAP_START( gomoku_map, AS_PROGRAM, 8, gomoku_state ) AM_RANGE(0x0000, 0x47ff) AM_ROM AM_RANGE(0x4800, 0x4fff) AM_RAM @@ -52,10 +58,7 @@ static ADDRESS_MAP_START( gomoku_map, AS_PROGRAM, 8, gomoku_state ) AM_RANGE(0x5800, 0x58ff) AM_RAM_WRITE(gomoku_bgram_w) AM_SHARE("bgram") AM_RANGE(0x6000, 0x601f) AM_DEVWRITE("gomoku", gomoku_sound_device, sound1_w) AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("gomoku", gomoku_sound_device, sound2_w) - AM_RANGE(0x7000, 0x7000) AM_WRITENOP - AM_RANGE(0x7001, 0x7001) AM_WRITE(gomoku_flipscreen_w) - AM_RANGE(0x7002, 0x7002) AM_WRITE(gomoku_bg_dispsw_w) - AM_RANGE(0x7003, 0x7007) AM_WRITENOP + AM_RANGE(0x7000, 0x7007) AM_WRITE(gomoku_latch_w) AM_RANGE(0x7800, 0x7807) AM_READ(input_port_r) AM_RANGE(0x7800, 0x7800) AM_WRITENOP ADDRESS_MAP_END @@ -129,6 +132,11 @@ static MACHINE_CONFIG_START( gomoku ) MCFG_CPU_PROGRAM_MAP(gomoku_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", gomoku_state, irq0_line_hold) + MCFG_DEVICE_ADD("latch", LS259, 0) // 7J + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gomoku_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gomoku_state, bg_dispsw_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // start LED? + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/gridlee.cpp b/src/mame/drivers/gridlee.cpp index 9e72dedd806..1cb226e6ab6 100644 --- a/src/mame/drivers/gridlee.cpp +++ b/src/mame/drivers/gridlee.cpp @@ -270,24 +270,30 @@ READ8_MEMBER(gridlee_state::random_num_r) * *************************************/ -WRITE8_MEMBER(gridlee_state::led_0_w) +WRITE8_MEMBER(gridlee_state::latch_w) { - output().set_led_value(0, data & 1); - logerror("LED 0 %s\n", (data & 1) ? "on" : "off"); + m_latch->write_bit(offset >> 4, data); } -WRITE8_MEMBER(gridlee_state::led_1_w) +WRITE_LINE_MEMBER(gridlee_state::led_0_w) { - output().set_led_value(1, data & 1); - logerror("LED 1 %s\n", (data & 1) ? "on" : "off"); + output().set_led_value(0, state); + logerror("LED 0 %s\n", state ? "on" : "off"); } -WRITE8_MEMBER(gridlee_state::gridlee_coin_counter_w) +WRITE_LINE_MEMBER(gridlee_state::led_1_w) { - machine().bookkeeping().coin_counter_w(0, data & 1); - logerror("coin counter %s\n", (data & 1) ? "on" : "off"); + output().set_led_value(1, state); + logerror("LED 1 %s\n", state ? "on" : "off"); +} + + +WRITE_LINE_MEMBER(gridlee_state::coin_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); + logerror("coin counter %s\n", state ? "on" : "off"); } @@ -302,11 +308,7 @@ WRITE8_MEMBER(gridlee_state::gridlee_coin_counter_w) static ADDRESS_MAP_START( cpu1_map, AS_PROGRAM, 8, gridlee_state ) AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x0800, 0x7fff) AM_RAM_WRITE(gridlee_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x9000, 0x9000) AM_WRITE(led_0_w) - AM_RANGE(0x9010, 0x9010) AM_WRITE(led_1_w) - AM_RANGE(0x9020, 0x9020) AM_WRITE(gridlee_coin_counter_w) -/* { 0x9060, 0x9060, unknown - only written to at startup */ - AM_RANGE(0x9070, 0x9070) AM_WRITE(gridlee_cocktail_flip_w) + AM_RANGE(0x9000, 0x9000) AM_SELECT(0x0070) AM_WRITE(latch_w) AM_RANGE(0x9200, 0x9200) AM_WRITE(gridlee_palette_select_w) AM_RANGE(0x9380, 0x9380) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x9500, 0x9501) AM_READ(analog_port_r) @@ -420,6 +422,13 @@ static MACHINE_CONFIG_START( gridlee ) MCFG_WATCHDOG_ADD("watchdog") + MCFG_DEVICE_ADD("latch", LS259, 0) // type can only be guessed + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gridlee_state, led_0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gridlee_state, led_1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gridlee_state, coin_counter_w)) + // Q6 unknown - only written to at startup + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(gridlee_state, cocktail_flip_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(GRIDLEE_PIXEL_CLOCK, GRIDLEE_HTOTAL, GRIDLEE_HBEND, GRIDLEE_HBSTART, GRIDLEE_VTOTAL, GRIDLEE_VBEND, GRIDLEE_VBSTART) diff --git a/src/mame/drivers/gyruss.cpp b/src/mame/drivers/gyruss.cpp index 27af1c3f08a..40912651b04 100644 --- a/src/mame/drivers/gyruss.cpp +++ b/src/mame/drivers/gyruss.cpp @@ -64,6 +64,7 @@ and 1 SFX channel controlled by an 8039: #include "cpu/m6809/m6809.h" #include "cpu/mcs48/mcs48.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/konami1.h" #include "sound/ay8910.h" @@ -161,9 +162,9 @@ WRITE8_MEMBER(gyruss_state::gyruss_i8039_irq_w) m_audiocpu_2->set_input_line(0, ASSERT_LINE); } -WRITE8_MEMBER(gyruss_state::master_nmi_mask_w) +WRITE_LINE_MEMBER(gyruss_state::master_nmi_mask_w) { - m_master_nmi_mask = data & 1; + m_master_nmi_mask = state; if (!m_master_nmi_mask) m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } @@ -175,6 +176,16 @@ WRITE8_MEMBER(gyruss_state::slave_irq_mask_w) m_subcpu->set_input_line(0, CLEAR_LINE); } +WRITE_LINE_MEMBER(gyruss_state::coin_counter_1_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(gyruss_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} + static ADDRESS_MAP_START( main_cpu1_map, AS_PROGRAM, 8, gyruss_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x83ff) AM_RAM AM_SHARE("colorram") @@ -187,8 +198,7 @@ static ADDRESS_MAP_START( main_cpu1_map, AS_PROGRAM, 8, gyruss_state ) AM_RANGE(0xc0c0, 0xc0c0) AM_READ_PORT("P2") AM_RANGE(0xc0e0, 0xc0e0) AM_READ_PORT("DSW1") AM_RANGE(0xc100, 0xc100) AM_READ_PORT("DSW3") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) - AM_RANGE(0xc180, 0xc180) AM_WRITE(master_nmi_mask_w) - AM_RANGE(0xc185, 0xc185) AM_WRITEONLY AM_SHARE("flipscreen") + AM_RANGE(0xc180, 0xc187) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( main_cpu2_map, AS_PROGRAM, 8, gyruss_state ) @@ -484,6 +494,12 @@ static MACHINE_CONFIG_START( gyruss ) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 3C + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gyruss_state, master_nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gyruss_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gyruss_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gyruss_state, flipscreen_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) diff --git a/src/mame/drivers/hnayayoi.cpp b/src/mame/drivers/hnayayoi.cpp index d80111e02ad..12bc4ec803e 100644 --- a/src/mame/drivers/hnayayoi.cpp +++ b/src/mame/drivers/hnayayoi.cpp @@ -44,6 +44,8 @@ TODO: #include "cpu/z80/z80.h" #include "sound/2203intf.h" #include "sound/msm5205.h" +#include "machine/74259.h" +#include "machine/clock.h" #include "machine/nvram.h" #include "screen.h" #include "speaker.h" @@ -81,19 +83,25 @@ WRITE8_MEMBER(hnayayoi_state::adpcm_data_w) m_msm->data_w(data); } -WRITE8_MEMBER(hnayayoi_state::adpcm_vclk_w) + +WRITE_LINE_MEMBER(hnayayoi_state::coin_counter_w) { - m_msm->vclk_w(data & 1); + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(hnayayoi_state::adpcm_reset_w) + +WRITE_LINE_MEMBER(hnayayoi_state::nmi_enable_w) { - m_msm->reset_w(data & 1); + m_nmi_enable = state; + if (!state) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } -WRITE8_MEMBER(hnayayoi_state::adpcm_reset_inv_w) + +WRITE_LINE_MEMBER(hnayayoi_state::nmi_clock_w) { - m_msm->reset_w(~data & 1); + if (m_nmi_enable) + m_maincpu->set_input_line(INPUT_LINE_NMI, state); } @@ -113,8 +121,7 @@ static ADDRESS_MAP_START( hnayayoi_io_map, AS_IO, 8, hnayayoi_state ) // AM_RANGE(0x09, 0x09) AM_WRITENOP // CRT Controller AM_RANGE(0x0a, 0x0a) AM_WRITE(dynax_blitter_rev1_start_w) AM_RANGE(0x0c, 0x0c) AM_WRITE(dynax_blitter_rev1_clear_w) - AM_RANGE(0x23, 0x23) AM_WRITE(adpcm_vclk_w) - AM_RANGE(0x24, 0x24) AM_WRITE(adpcm_reset_w) + AM_RANGE(0x20, 0x27) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x40, 0x40) AM_WRITE(keyboard_w) AM_RANGE(0x41, 0x41) AM_READ(keyboard_0_r) AM_RANGE(0x42, 0x42) AM_READ(keyboard_1_r) @@ -135,8 +142,7 @@ static ADDRESS_MAP_START( hnfubuki_map, AS_PROGRAM, 8, hnayayoi_state ) // AM_RANGE(0xff09, 0xff09) AM_WRITENOP // CRT Controller AM_RANGE(0xff0a, 0xff0a) AM_WRITE(dynax_blitter_rev1_start_w) AM_RANGE(0xff0c, 0xff0c) AM_WRITE(dynax_blitter_rev1_clear_w) - AM_RANGE(0xff23, 0xff23) AM_WRITE(adpcm_vclk_w) - AM_RANGE(0xff24, 0xff24) AM_WRITE(adpcm_reset_inv_w) + AM_RANGE(0xff20, 0xff27) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xff40, 0xff40) AM_WRITE(keyboard_w) AM_RANGE(0xff41, 0xff41) AM_READ(keyboard_0_r) AM_RANGE(0xff42, 0xff42) AM_READ(keyboard_1_r) @@ -165,8 +171,7 @@ static ADDRESS_MAP_START( untoucha_io_map, AS_IO, 8, hnayayoi_state ) AM_RANGE(0x1a, 0x1f) AM_WRITE(dynax_blitter_rev1_param_w) AM_RANGE(0x20, 0x20) AM_WRITE(dynax_blitter_rev1_clear_w) AM_RANGE(0x28, 0x28) AM_WRITE(dynax_blitter_rev1_start_w) - AM_RANGE(0x31, 0x31) AM_WRITE(adpcm_vclk_w) - AM_RANGE(0x32, 0x32) AM_WRITE(adpcm_reset_inv_w) + AM_RANGE(0x30, 0x37) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x50, 0x50) AM_DEVWRITE("ymsnd", ym2203_device, write_port_w) AM_RANGE(0x51, 0x51) AM_DEVREAD("ymsnd", ym2203_device, read_port_r) // AM_RANGE(0x52, 0x52) AM_WRITENOP // CRT Controller @@ -519,13 +524,11 @@ void hnayayoi_state::machine_start() save_item(NAME(m_blit_dest)); save_item(NAME(m_blit_src)); save_item(NAME(m_keyb)); + save_item(NAME(m_nmi_enable)); } void hnayayoi_state::machine_reset() { - /* start with the MSM5205 reset */ - m_msm->reset_w(1); - m_palbank = 0; m_blit_layer = 0; m_blit_dest = 0; @@ -541,11 +544,18 @@ static MACHINE_CONFIG_START( hnayayoi ) MCFG_CPU_PROGRAM_MAP(hnayayoi_map) MCFG_CPU_IO_MAP(hnayayoi_io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", hnayayoi_state, irq0_line_hold) - MCFG_CPU_PERIODIC_INT_DRIVER(hnayayoi_state, nmi_line_pulse, 8000) + MCFG_DEVICE_ADD("nmiclock", CLOCK, 8000) + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(hnayayoi_state, nmi_clock_w)) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(hnayayoi_state, coin_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, vclk_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w)) MCFG_DEVCB_INVERT + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -577,6 +587,10 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( hnfubuki, hnayayoi ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(hnfubuki_map) + MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_IO) + + MCFG_DEVICE_MODIFY("mainlatch") // D5 + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( untoucha, hnayayoi ) @@ -584,6 +598,12 @@ static MACHINE_CONFIG_DERIVED( untoucha, hnayayoi ) MCFG_CPU_PROGRAM_MAP(untoucha_map) MCFG_CPU_IO_MAP(untoucha_io_map) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("msm", msm5205_device, vclk_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // ? + MCFG_VIDEO_START_OVERRIDE(hnayayoi_state,untoucha) MACHINE_CONFIG_END diff --git a/src/mame/drivers/holeland.cpp b/src/mame/drivers/holeland.cpp index 64041b7d235..2de977c84e8 100644 --- a/src/mame/drivers/holeland.cpp +++ b/src/mame/drivers/holeland.cpp @@ -25,13 +25,17 @@ #include "speaker.h" +WRITE_LINE_MEMBER(holeland_state::coin_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + static ADDRESS_MAP_START( holeland_map, AS_PROGRAM, 8, holeland_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0xa000, 0xbfff) AM_ROM AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("speech", sp0256_device, ald_w) - AM_RANGE(0xc000, 0xc001) AM_WRITE(pal_offs_w) - AM_RANGE(0xc006, 0xc007) AM_WRITE(flipscreen_w) + AM_RANGE(0xc000, 0xc007) AM_DEVWRITE("latch", ls259_device, write_d0) AM_READNOP AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram") AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") AM_RANGE(0xf000, 0xf3ff) AM_RAM AM_SHARE("spriteram") @@ -44,7 +48,7 @@ static ADDRESS_MAP_START( crzrally_map, AS_PROGRAM, 8, holeland_state ) AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") AM_RANGE(0xe800, 0xebff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xf000, 0xf000) AM_WRITE(scroll_w) - AM_RANGE(0xf800, 0xf801) AM_WRITE(pal_offs_w) + AM_RANGE(0xf800, 0xf807) AM_DEVWRITE("latch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( io_map, AS_IO, 8, holeland_state ) @@ -276,6 +280,12 @@ static MACHINE_CONFIG_START( holeland ) MCFG_CPU_IO_MAP(io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", holeland_state, irq0_line_hold) + MCFG_DEVICE_ADD("latch", LS259, 0) // 3J + MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(holeland_state, pal_offs_w)) MCFG_DEVCB_MASK(0x03) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(holeland_state, coin_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(holeland_state, flipscreen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(holeland_state, flipscreen_y_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -353,6 +363,10 @@ static MACHINE_CONFIG_START( crzrally ) MCFG_NVRAM_ADD_1FILL("nvram") + MCFG_DEVICE_ADD("latch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(holeland_state, pal_offs_w)) MCFG_DEVCB_MASK(0x03) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(holeland_state, coin_counter_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/jedi.cpp b/src/mame/drivers/jedi.cpp index 18acb2347f7..1591d0809cb 100644 --- a/src/mame/drivers/jedi.cpp +++ b/src/mame/drivers/jedi.cpp @@ -114,6 +114,7 @@ #include "emu.h" #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "machine/nvram.h" #include "machine/watchdog.h" #include "includes/jedi.h" @@ -226,9 +227,15 @@ WRITE8_MEMBER(jedi_state::a2d_select_w) } -WRITE8_MEMBER(jedi_state::jedi_coin_counter_w) +WRITE_LINE_MEMBER(jedi_state::coin_counter_left_w) { - machine().bookkeeping().coin_counter_w(offset, data); + machine().bookkeeping().coin_counter_w(0, state); +} + + +WRITE_LINE_MEMBER(jedi_state::coin_counter_right_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } @@ -273,12 +280,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, jedi_state ) AM_RANGE(0x1d00, 0x1d00) AM_MIRROR(0x007f) AM_NOP /* write: NVRAM store */ AM_RANGE(0x1d80, 0x1d80) AM_MIRROR(0x007f) AM_READNOP AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x1e00, 0x1e00) AM_MIRROR(0x007f) AM_READNOP AM_WRITE(main_irq_ack_w) - AM_RANGE(0x1e80, 0x1e81) AM_MIRROR(0x0078) AM_READNOP AM_WRITE(jedi_coin_counter_w) - AM_RANGE(0x1e82, 0x1e83) AM_MIRROR(0x0078) AM_NOP /* write: LED control - not used */ - AM_RANGE(0x1e84, 0x1e84) AM_MIRROR(0x0078) AM_READNOP AM_WRITEONLY AM_SHARE("foreground_bank") - AM_RANGE(0x1e85, 0x1e85) AM_MIRROR(0x0078) AM_NOP - AM_RANGE(0x1e86, 0x1e86) AM_MIRROR(0x0078) AM_READNOP AM_WRITE(jedi_audio_reset_w) - AM_RANGE(0x1e87, 0x1e87) AM_MIRROR(0x0078) AM_READNOP AM_WRITEONLY AM_SHARE("video_off") + AM_RANGE(0x1e80, 0x1e87) AM_MIRROR(0x0078) AM_READNOP AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x1f00, 0x1f00) AM_MIRROR(0x007f) AM_READNOP AM_WRITE(jedi_audio_latch_w) AM_RANGE(0x1f80, 0x1f80) AM_MIRROR(0x007f) AM_READNOP AM_WRITE(rom_banksel_w) AM_RANGE(0x2000, 0x27ff) AM_RAM AM_SHARE("backgroundram") @@ -343,6 +345,15 @@ static MACHINE_CONFIG_START( jedi ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("outlatch", LS259, 0) // 14J + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(jedi_state, coin_counter_left_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(jedi_state, coin_counter_right_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // LED control - not used + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // LED control - not used + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(jedi_state, foreground_bank_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(jedi_state, audio_reset_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(jedi_state, video_off_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/joctronic.cpp b/src/mame/drivers/joctronic.cpp index e63ef294bfc..4ed1c533e81 100644 --- a/src/mame/drivers/joctronic.cpp +++ b/src/mame/drivers/joctronic.cpp @@ -1,11 +1,12 @@ // license:BSD-3-Clause -// copyright-holders:Ivan Vangelista +// copyright-holders:AJR // PINBALL // Skeleton driver for Joctronic pinballs. #include "emu.h" #include "cpu/z80/z80.h" #include "machine/74157.h" +#include "machine/74259.h" #include "machine/nvram.h" #include "machine/z80ctc.h" #include "sound/ay8910.h" @@ -23,6 +24,7 @@ public: , m_soundcpu(*this, "soundcpu") , m_oki(*this, "oki") , m_adpcm_select(*this, "adpcm_select") + , m_driver_latch(*this, "drivers%u", 1) , m_soundbank(*this, "soundbank") { } @@ -63,6 +65,7 @@ private: required_device<cpu_device> m_soundcpu; optional_device<msm5205_device> m_oki; optional_device<ls157_device> m_adpcm_select; + optional_device_array<hc259_device, 6> m_driver_latch; optional_memory_bank m_soundbank; u8 m_soundlatch; bool m_adpcm_toggle; @@ -124,7 +127,7 @@ static ADDRESS_MAP_START( maincpu_map, AS_PROGRAM, 8, joctronic_state ) AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x4000) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_RAM AM_SHARE("nvram") AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_READ(csin_r) // CSIN - AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0ff8) AM_WRITE(control_port_w) // PORTDS + AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0ff8) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // PORTDS AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0fc7) AM_WRITE(display_1_w) // CSD1 AM_RANGE(0xc008, 0xc008) AM_MIRROR(0x0fc7) AM_WRITE(display_2_w) // CSD2 AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x0fc7) AM_WRITE(display_3_w) // CSD3 @@ -159,7 +162,8 @@ WRITE8_MEMBER(joctronic_state::display_strobe_w) WRITE8_MEMBER(joctronic_state::drivers_w) { - logerror("drivers[%d] = $%02X\n", offset, data); + for (int i = 0; i < 6; ++i) + m_driver_latch[i]->write_bit(offset, BIT(data, i)); } WRITE8_MEMBER(joctronic_state::display_ck_w) @@ -171,7 +175,7 @@ static ADDRESS_MAP_START( slalom03_maincpu_map, AS_PROGRAM, 8, joctronic_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_RAM AM_SHARE("nvram") - AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_WRITE(control_port_w) // CSPORT + AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // CSPORT AM_RANGE(0xa008, 0xa008) AM_MIRROR(0x0fc7) AM_WRITE(display_strobe_w) // STROBE AM_RANGE(0xa010, 0xa017) AM_MIRROR(0x0fc0) AM_WRITE(drivers_w) AM_RANGE(0xa018, 0xa018) AM_MIRROR(0x0fc7) AM_WRITE(display_ck_w) // CKD @@ -326,6 +330,11 @@ static MACHINE_CONFIG_START( joctronic ) MCFG_NVRAM_ADD_0FILL("nvram") // 5516 + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC4 - exact type unknown + //MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(joctronic_state, display_select_w)) MCFG_DEVCB_MASK(0x07) + //MCFG_DEVCB_CHAIN_OUTPUT(WRITE8(joctronic_state, ls145_w)) MCFG_DEVCB_RSHIFT(4) + //MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(joctronic_state, display_reset_w)) + MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_12MHz/4) // 3 MHz MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) MCFG_Z80CTC_ZC0_CB(ASSERTLINE("soundcpu", INPUT_LINE_IRQ0)) // SINT @@ -362,10 +371,22 @@ static MACHINE_CONFIG_START( slalom03 ) MCFG_NVRAM_ADD_0FILL("nvram") // 5516 + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC6 - exact type unknown + //MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(joctronic_state, cont_w)) + //MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(joctronic_state, ls145_w)) MCFG_DEVCB_RSHIFT(3) MCFG_DEVCB_MASK(0x38) + //MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(joctronic_state, slalom03_reset_w)) + MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_12MHz/2) // 6 MHz MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) //MCFG_Z80CTC_ZC0_CB(ASSERTLINE("soundcpu", INPUT_LINE_IRQ0)) // SINT + MCFG_DEVICE_ADD("drivers1", HC259, 0) + MCFG_DEVICE_ADD("drivers2", HC259, 0) + MCFG_DEVICE_ADD("drivers3", HC259, 0) + MCFG_DEVICE_ADD("drivers4", HC259, 0) + MCFG_DEVICE_ADD("drivers5", HC259, 0) + MCFG_DEVICE_ADD("drivers6", HC259, 0) + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/jrpacman.cpp b/src/mame/drivers/jrpacman.cpp index 792915d0a79..caed76f7cf8 100644 --- a/src/mame/drivers/jrpacman.cpp +++ b/src/mame/drivers/jrpacman.cpp @@ -104,6 +104,7 @@ #include "includes/pacman.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "screen.h" #include "speaker.h" @@ -114,7 +115,7 @@ public: jrpacman_state(const machine_config &mconfig, device_type type, const char *tag) : pacman_state(mconfig, type, tag) { } DECLARE_WRITE8_MEMBER(jrpacman_interrupt_vector_w); - DECLARE_WRITE8_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); DECLARE_DRIVER_INIT(jrpacman); INTERRUPT_GEN_MEMBER(vblank_irq); }; @@ -127,9 +128,9 @@ WRITE8_MEMBER(jrpacman_state::jrpacman_interrupt_vector_w) m_maincpu->set_input_line(0, CLEAR_LINE); } -WRITE8_MEMBER(jrpacman_state::irq_mask_w) +WRITE_LINE_MEMBER(jrpacman_state::irq_mask_w) { - m_irq_mask = data & 1; + m_irq_mask = state; } /************************************* @@ -144,20 +145,14 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, jrpacman_state ) AM_RANGE(0x4800, 0x4fef) AM_RAM AM_RANGE(0x4ff0, 0x4fff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x5000, 0x503f) AM_READ_PORT("P1") - AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w) + AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("latch1", ls259_device, write_d0) AM_RANGE(0x5040, 0x507f) AM_READ_PORT("P2") AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x5060, 0x506f) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x5070, 0x5070) AM_WRITE(pengo_palettebank_w) - AM_RANGE(0x5071, 0x5071) AM_WRITE(pengo_colortablebank_w) - AM_RANGE(0x5073, 0x5073) AM_WRITE(jrpacman_bgpriority_w) - AM_RANGE(0x5074, 0x5074) AM_WRITE(jrpacman_charbank_w) - AM_RANGE(0x5075, 0x5075) AM_WRITE(jrpacman_spritebank_w) + AM_RANGE(0x5070, 0x5077) AM_DEVWRITE("latch2", ls259_device, write_d0) AM_RANGE(0x5080, 0x50bf) AM_READ_PORT("DSW") AM_RANGE(0x5080, 0x5080) AM_WRITE(jrpacman_scroll_w) - AM_RANGE(0x50c0, 0x50c0) AM_WRITENOP + AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x8000, 0xdfff) AM_ROM ADDRESS_MAP_END @@ -283,6 +278,21 @@ static MACHINE_CONFIG_START( jrpacman ) MCFG_CPU_IO_MAP(port_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", jrpacman_state, vblank_irq) + MCFG_DEVICE_ADD("latch1", LS259, 0) // 5P + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(jrpacman_state, irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(jrpacman_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(jrpacman_state, coin_counter_w)) + + MCFG_DEVICE_ADD("latch2", LS259, 0) // 1H + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(jrpacman_state, pengo_palettebank_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(jrpacman_state, pengo_colortablebank_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(jrpacman_state, jrpacman_bgpriority_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(jrpacman_state, jrpacman_charbank_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(jrpacman_state, jrpacman_spritebank_w)) + + MCFG_WATCHDOG_ADD("watchdog") + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60.606060) diff --git a/src/mame/drivers/junofrst.cpp b/src/mame/drivers/junofrst.cpp index 019af9dce2c..2b7d3878f1f 100644 --- a/src/mame/drivers/junofrst.cpp +++ b/src/mame/drivers/junofrst.cpp @@ -86,6 +86,7 @@ Blitter source graphics #include "cpu/m6809/m6809.h" #include "cpu/mcs48/mcs48.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/konami1.h" #include "machine/watchdog.h" @@ -123,9 +124,6 @@ public: DECLARE_WRITE8_MEMBER(sh_irqtrigger_w); DECLARE_WRITE8_MEMBER(i8039_irq_w); DECLARE_WRITE8_MEMBER(i8039_irqen_and_status_w); - DECLARE_WRITE8_MEMBER(flip_screen_w); - DECLARE_WRITE8_MEMBER(coincounter_w); - DECLARE_WRITE8_MEMBER(irq_enable_w); DECLARE_READ8_MEMBER(portA_r); DECLARE_WRITE8_MEMBER(portB_w); @@ -276,25 +274,6 @@ WRITE8_MEMBER(junofrst_state::i8039_irqen_and_status_w) } -WRITE8_MEMBER(junofrst_state::flip_screen_w) -{ - tutankhm_flip_screen_x_w(space, 0, data); - tutankhm_flip_screen_y_w(space, 0, data); -} - - -WRITE8_MEMBER(junofrst_state::coincounter_w) -{ - machine().bookkeeping().coin_counter_w(offset, data); -} - -WRITE8_MEMBER(junofrst_state::irq_enable_w) -{ - m_irq_enable = data & 1; - if (!m_irq_enable) - m_maincpu->set_input_line(0, CLEAR_LINE); -} - static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, junofrst_state ) AM_RANGE(0x0000, 0x7fff) AM_RAM AM_SHARE("videoram") AM_RANGE(0x8000, 0x800f) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") @@ -304,10 +283,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, junofrst_state ) AM_RANGE(0x8024, 0x8024) AM_READ_PORT("P1") AM_RANGE(0x8028, 0x8028) AM_READ_PORT("P2") AM_RANGE(0x802c, 0x802c) AM_READ_PORT("DSW1") - AM_RANGE(0x8030, 0x8030) AM_WRITE(irq_enable_w) - AM_RANGE(0x8031, 0x8032) AM_WRITE(coincounter_w) - AM_RANGE(0x8033, 0x8033) AM_WRITEONLY AM_SHARE("scroll") /* not used in Juno */ - AM_RANGE(0x8034, 0x8035) AM_WRITE(flip_screen_w) + AM_RANGE(0x8030, 0x8037) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x8040, 0x8040) AM_WRITE(sh_irqtrigger_w) AM_RANGE(0x8050, 0x8050) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x8060, 0x8060) AM_WRITE(bankselect_w) @@ -394,8 +370,6 @@ MACHINE_RESET_MEMBER(junofrst_state,junofrst) { m_i8039_status = 0; m_last_irq = 0; - m_flip_x = 0; - m_flip_y = 0; m_blitterdata[0] = 0; m_blitterdata[1] = 0; m_blitterdata[2] = 0; @@ -426,6 +400,14 @@ static MACHINE_CONFIG_START( junofrst ) MCFG_MCS48_PORT_P1_OUT_CB(DEVWRITE8("dac", dac_byte_interface, write)) MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(junofrst_state, i8039_irqen_and_status_w)) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B3 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(junofrst_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(junofrst_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(junofrst_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(junofrst_state, flip_screen_x_w)) // HFF + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(junofrst_state, flip_screen_y_w)) // VFLIP + MCFG_WATCHDOG_ADD("watchdog") MCFG_MACHINE_START_OVERRIDE(junofrst_state,junofrst) diff --git a/src/mame/drivers/kchamp.cpp b/src/mame/drivers/kchamp.cpp index 648373d5c6c..d48f417f27a 100644 --- a/src/mame/drivers/kchamp.cpp +++ b/src/mame/drivers/kchamp.cpp @@ -68,7 +68,7 @@ IO ports and memory map changes. Dip switches differ too. #include "includes/kchamp.h" #include "cpu/z80/z80.h" -#include "sound/ay8910.h" +#include "machine/74259.h" #include "sound/volt_reg.h" #include "screen.h" #include "speaker.h" @@ -78,17 +78,22 @@ IO ports and memory map changes. Dip switches differ too. * VS Version * ********************/ -WRITE8_MEMBER(kchamp_state::control_w) +WRITE_LINE_MEMBER(kchamp_state::nmi_enable_w) { - m_nmi_enable = data & 1; + m_nmi_enable = state; if (!m_nmi_enable) m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } -WRITE8_MEMBER(kchamp_state::sound_reset_w) +WRITE_LINE_MEMBER(kchamp_state::sound_reset_w) { - if (!(data & 1)) - m_audiocpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); + m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE); + if (!state) + { + m_ay[0]->reset(); + m_ay[1]->reset(); + sound_control_w(machine().dummy_space(), 0, 0); + } } WRITE8_MEMBER(kchamp_state::sound_control_w) @@ -115,9 +120,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( kchampvs_io_map, AS_IO, 8, kchamp_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") AM_WRITE(kchamp_flipscreen_w) - AM_RANGE(0x01, 0x01) AM_WRITE(control_w) - AM_RANGE(0x02, 0x02) AM_WRITE(sound_reset_w) + AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") + AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x40, 0x40) AM_READ_PORT("P2") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x80, 0x80) AM_READ_PORT("SYSTEM") AM_RANGE(0xc0, 0xc0) AM_READ_PORT("DSW") @@ -170,8 +174,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( kchamp_io_map, AS_IO, 8, kchamp_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x80, 0x80) AM_READ_PORT("DSW") AM_WRITE(kchamp_flipscreen_w) - AM_RANGE(0x81, 0x81) AM_WRITE(control_w) + AM_RANGE(0x80, 0x80) AM_READ_PORT("DSW") + AM_RANGE(0x80, 0x87) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x90, 0x90) AM_READ_PORT("P1") AM_RANGE(0x98, 0x98) AM_READ_PORT("P2") AM_RANGE(0xa0, 0xa0) AM_READ_PORT("SYSTEM") @@ -404,6 +408,11 @@ static MACHINE_CONFIG_START( kchampvs ) MCFG_CPU_IO_MAP(kchampvs_sound_io_map) /* irq's triggered from main cpu */ /* nmi's from msm5205 */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 8C + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(kchamp_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(kchamp_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(kchamp_state, sound_reset_w)) + MCFG_MACHINE_START_OVERRIDE(kchamp_state,kchampvs) /* video hardware */ @@ -460,6 +469,10 @@ static MACHINE_CONFIG_START( kchamp ) /* irq's triggered from main cpu */ /* nmi's from 125 Hz clock */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(kchamp_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(kchamp_state, nmi_enable_w)) + MCFG_MACHINE_START_OVERRIDE(kchamp_state,kchamp) /* video hardware */ diff --git a/src/mame/drivers/kyugo.cpp b/src/mame/drivers/kyugo.cpp index 6b40bfd7cc9..30d3cbc50d4 100644 --- a/src/mame/drivers/kyugo.cpp +++ b/src/mame/drivers/kyugo.cpp @@ -27,6 +27,7 @@ #include "includes/kyugo.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/ay8910.h" #include "screen.h" @@ -65,21 +66,14 @@ ADDRESS_MAP_END * *************************************/ -WRITE8_MEMBER(kyugo_state::kyugo_nmi_mask_w) +WRITE_LINE_MEMBER(kyugo_state::nmi_mask_w) { - m_nmi_mask = data & 1; -} - -WRITE8_MEMBER(kyugo_state::kyugo_sub_cpu_control_w) -{ - m_subcpu->set_input_line(INPUT_LINE_HALT, data ? CLEAR_LINE : ASSERT_LINE); + m_nmi_mask = state; } static ADDRESS_MAP_START( kyugo_main_portmap, AS_IO, 8, kyugo_state ) ADDRESS_MAP_GLOBAL_MASK(0x07) - AM_RANGE(0x00, 0x00) AM_WRITE(kyugo_nmi_mask_w) - AM_RANGE(0x01, 0x01) AM_WRITE(kyugo_flipscreen_w) - AM_RANGE(0x02, 0x02) AM_WRITE(kyugo_sub_cpu_control_w) + AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -499,11 +493,6 @@ void kyugo_state::machine_start() void kyugo_state::machine_reset() { - address_space &space = m_maincpu->space(AS_PROGRAM); - // must start with interrupts and sub CPU disabled - m_nmi_mask = 0; - kyugo_sub_cpu_control_w(space, 0, 0); - m_scroll_x_lo = 0; m_scroll_x_hi = 0; m_scroll_y = 0; @@ -533,6 +522,10 @@ static MACHINE_CONFIG_START( kyugo_base ) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(kyugo_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(kyugo_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/ladybug.cpp b/src/mame/drivers/ladybug.cpp index f525d94aa79..03810f42619 100644 --- a/src/mame/drivers/ladybug.cpp +++ b/src/mame/drivers/ladybug.cpp @@ -64,6 +64,7 @@ TODO: #include "includes/ladybug.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/sn76496.h" #include "screen.h" #include "speaker.h" @@ -78,7 +79,7 @@ static ADDRESS_MAP_START( ladybug_map, AS_PROGRAM, 8, ladybug_state ) AM_RANGE(0x9001, 0x9001) AM_READ_PORT("IN1") AM_RANGE(0x9002, 0x9002) AM_READ_PORT("DSW0") AM_RANGE(0x9003, 0x9003) AM_READ_PORT("DSW1") - AM_RANGE(0xa000, 0xa000) AM_WRITE(ladybug_flipscreen_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("videolatch", ls259_device, write_d0) AM_RANGE(0xb000, 0xbfff) AM_DEVWRITE("sn1", sn76489_device, write) AM_RANGE(0xc000, 0xcfff) AM_DEVWRITE("sn2", sn76489_device, write) AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(ladybug_videoram_w) AM_SHARE("videoram") @@ -535,6 +536,9 @@ static MACHINE_CONFIG_START( ladybug ) MCFG_PALETTE_INDIRECT_ENTRIES(32) MCFG_PALETTE_INIT_OWNER(ladybug_state,ladybug) + MCFG_DEVICE_ADD("videolatch", LS259, 0) // L5 on video board or H3 on single board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ladybug_state, flipscreen_w)) // no other outputs used + MCFG_VIDEO_START_OVERRIDE(ladybug_state,ladybug) /* sound hardware */ diff --git a/src/mame/drivers/liberatr.cpp b/src/mame/drivers/liberatr.cpp index 601fdc054a0..7ea048cddf6 100644 --- a/src/mame/drivers/liberatr.cpp +++ b/src/mame/drivers/liberatr.cpp @@ -168,15 +168,33 @@ void liberatr_state::machine_reset() * *************************************/ -WRITE8_MEMBER( liberatr_state::led_w ) +WRITE8_MEMBER(liberatr_state::output_latch_w) { - output().set_led_value(offset, ~data & 0x10); + m_outlatch->write_bit(offset, BIT(data, 4)); } -WRITE8_MEMBER( liberatr_state::coin_counter_w ) +WRITE_LINE_MEMBER(liberatr_state::start_led_1_w) { - machine().bookkeeping().coin_counter_w(offset ^ 0x01, data & 0x10); + output().set_led_value(0, !state); +} + + +WRITE_LINE_MEMBER(liberatr_state::start_led_2_w) +{ + output().set_led_value(1, !state); +} + + +WRITE_LINE_MEMBER(liberatr_state::coin_counter_left_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + + +WRITE_LINE_MEMBER(liberatr_state::coin_counter_right_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } @@ -187,17 +205,17 @@ WRITE8_MEMBER( liberatr_state::coin_counter_w ) * *************************************/ -WRITE8_MEMBER( liberatr_state::trackball_reset_w ) +WRITE_LINE_MEMBER(liberatr_state::trackball_reset_w) { /* on the rising edge of /ctrld, the /ld signal on the LS191 is released and the value of the switches */ /* input becomes the starting point for the trackball counters */ - if (((data ^ m_ctrld) & 0x10) && (data & 0x10)) + if (!m_ctrld && state) { uint8_t trackball = ioport("FAKE")->read(); uint8_t switches = ioport("IN0")->read(); m_trackball_offset = ((trackball & 0xf0) - (switches & 0xf0)) | ((trackball - switches) & 0x0f); } - m_ctrld = data & 0x10; + m_ctrld = state; } @@ -279,10 +297,7 @@ static ADDRESS_MAP_START( liberatr_map, AS_PROGRAM, 8, liberatr_state ) AM_RANGE(0x6600, 0x6600) AM_WRITE(earom_control_w) AM_RANGE(0x6800, 0x6800) AM_WRITEONLY AM_SHARE("planet_frame") AM_RANGE(0x6a00, 0x6a00) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x6c00, 0x6c01) AM_WRITE(led_w) - AM_RANGE(0x6c04, 0x6c04) AM_WRITE(trackball_reset_w) - AM_RANGE(0x6c05, 0x6c06) AM_WRITE(coin_counter_w) - AM_RANGE(0x6c07, 0x6c07) AM_WRITEONLY AM_SHARE("planet_select") + AM_RANGE(0x6c00, 0x6c07) AM_WRITE(output_latch_w) AM_RANGE(0x6e00, 0x6e3f) AM_WRITE(earom_w) AM_RANGE(0x7000, 0x701f) AM_DEVREADWRITE("pokey2", pokey_device, read, write) AM_RANGE(0x7800, 0x781f) AM_DEVREADWRITE("pokey1", pokey_device, read, write) @@ -312,10 +327,7 @@ static ADDRESS_MAP_START( liberat2_map, AS_PROGRAM, 8, liberatr_state ) AM_RANGE(0x4800, 0x483f) AM_READ(earom_r) AM_RANGE(0x4800, 0x4800) AM_WRITEONLY AM_SHARE("planet_frame") AM_RANGE(0x4a00, 0x4a00) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x4c00, 0x4c01) AM_WRITE(led_w) - AM_RANGE(0x4c04, 0x4c04) AM_WRITE(trackball_reset_w) - AM_RANGE(0x4c05, 0x4c06) AM_WRITE(coin_counter_w) - AM_RANGE(0x4c07, 0x4c07) AM_WRITEONLY AM_SHARE("planet_select") + AM_RANGE(0x4c00, 0x4c07) AM_WRITE(output_latch_w) AM_RANGE(0x4e00, 0x4e3f) AM_WRITE(earom_w) AM_RANGE(0x5000, 0x501f) AM_DEVREADWRITE("pokey2", pokey_device, read, write) AM_RANGE(0x5800, 0x581f) AM_DEVREADWRITE("pokey1", pokey_device, read, write) @@ -424,6 +436,16 @@ static MACHINE_CONFIG_START( liberatr ) MCFG_ER2055_ADD("earom") + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(liberatr_state, start_led_1_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(liberatr_state, start_led_2_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // TBSWP + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // SPARE + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(liberatr_state, trackball_reset_w)) // CTRLD + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(liberatr_state, coin_counter_right_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(liberatr_state, coin_counter_left_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(liberatr_state, planet_select_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/lisa.cpp b/src/mame/drivers/lisa.cpp index 05b196400dc..f92056d33ac 100644 --- a/src/mame/drivers/lisa.cpp +++ b/src/mame/drivers/lisa.cpp @@ -112,6 +112,16 @@ static MACHINE_CONFIG_START( lisa ) MCFG_QUANTUM_TIME(attotime::from_hz(60)) + MCFG_DEVICE_ADD("latch", LS259, 0) // U4E + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(lisa_state, diag1_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(lisa_state, diag2_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(lisa_state, seg1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(lisa_state, seg2_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(lisa_state, setup_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(lisa_state, sfmsk_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(lisa_state, vtmsk_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(lisa_state, hdmsk_w)) + MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/looping.cpp b/src/mame/drivers/looping.cpp index d3e82a0eacb..9f0e58c0e4a 100644 --- a/src/mame/drivers/looping.cpp +++ b/src/mame/drivers/looping.cpp @@ -58,6 +58,7 @@ L056-6 9A " " VLI-8-4 7A " #include "cpu/cop400/cop400.h" #include "cpu/tms9900/tms9995.h" #include "cpu/tms9900/tms9980a.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" @@ -115,7 +116,8 @@ public: m_dac(*this, "dac"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), - m_soundlatch(*this, "soundlatch") { } + m_soundlatch(*this, "soundlatch"), + m_watchdog(*this, "watchdog") { } /* memory pointers */ required_shared_ptr<uint8_t> m_videoram; @@ -126,33 +128,29 @@ public: /* tilemaps */ tilemap_t * m_bg_tilemap; - /* sound state */ - uint8_t m_sound[8]; - - int m_last; - - DECLARE_WRITE8_MEMBER(flip_screen_x_w); - DECLARE_WRITE8_MEMBER(flip_screen_y_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); DECLARE_WRITE8_MEMBER(looping_videoram_w); DECLARE_WRITE8_MEMBER(looping_colorram_w); - DECLARE_WRITE8_MEMBER(level2_irq_set); - DECLARE_WRITE8_MEMBER(main_irq_ack_w); - DECLARE_WRITE8_MEMBER(looping_souint_clr); + DECLARE_WRITE_LINE_MEMBER(level2_irq_set); + DECLARE_WRITE_LINE_MEMBER(main_irq_ack_w); + DECLARE_WRITE_LINE_MEMBER(watchdog_w); + DECLARE_WRITE_LINE_MEMBER(looping_souint_clr); DECLARE_WRITE8_MEMBER(looping_soundlatch_w); - DECLARE_WRITE8_MEMBER(ballon_enable_w); + DECLARE_WRITE_LINE_MEMBER(ballon_enable_w); DECLARE_WRITE8_MEMBER(out_0_w); DECLARE_WRITE8_MEMBER(out_2_w); DECLARE_READ8_MEMBER(adc_r); DECLARE_WRITE8_MEMBER(adc_w); - DECLARE_WRITE8_MEMBER(plr2_w); + DECLARE_WRITE_LINE_MEMBER(plr2_w); DECLARE_READ8_MEMBER(cop_unk_r); DECLARE_READ_LINE_MEMBER(cop_serial_r); DECLARE_WRITE8_MEMBER(cop_l_w); DECLARE_READ8_MEMBER(protection_r); DECLARE_WRITE_LINE_MEMBER(looping_spcint); DECLARE_WRITE8_MEMBER(looping_sound_sw); - DECLARE_WRITE8_MEMBER(ay_enable_w); - DECLARE_WRITE8_MEMBER(speech_enable_w); + DECLARE_WRITE_LINE_MEMBER(ay_enable_w); + DECLARE_WRITE_LINE_MEMBER(speech_enable_w); DECLARE_DRIVER_INIT(looping); TILE_GET_INFO_MEMBER(get_tile_info); virtual void machine_start() override; @@ -168,6 +166,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_device<generic_latch_8_device> m_soundlatch; + required_device<watchdog_timer_device> m_watchdog; }; @@ -248,16 +247,16 @@ void looping_state::video_start() * *************************************/ -WRITE8_MEMBER(looping_state::flip_screen_x_w) +WRITE_LINE_MEMBER(looping_state::flip_screen_x_w) { - flip_screen_x_set(~data & 0x01); + flip_screen_x_set(!state); m_bg_tilemap->set_scrollx(0, flip_screen() ? 128 : 0); } -WRITE8_MEMBER(looping_state::flip_screen_y_w) +WRITE_LINE_MEMBER(looping_state::flip_screen_y_w) { - flip_screen_y_set(~data & 0x01); + flip_screen_y_set(!state); m_bg_tilemap->set_scrollx(0, flip_screen() ? 128 : 0); } @@ -345,7 +344,6 @@ uint32_t looping_state::screen_update_looping(screen_device &screen, bitmap_ind1 void looping_state::machine_start() { - save_item(NAME(m_sound)); } void looping_state::machine_reset() @@ -366,25 +364,30 @@ INTERRUPT_GEN_MEMBER(looping_state::looping_interrupt) } -WRITE8_MEMBER(looping_state::level2_irq_set) +WRITE_LINE_MEMBER(looping_state::level2_irq_set) { - logerror("Level 2 int = %d\n", data); - if (!(data & 1)) + logerror("Level 2 int = %d\n", state); + if (state == 0) m_maincpu->set_input_line(INT_9995_INT1, ASSERT_LINE); } -WRITE8_MEMBER(looping_state::main_irq_ack_w) +WRITE_LINE_MEMBER(looping_state::main_irq_ack_w) { - if (data == 0) + if (state == 0) m_maincpu->set_input_line(INT_9995_INT1, CLEAR_LINE); } +WRITE_LINE_MEMBER(looping_state::watchdog_w) +{ + m_watchdog->watchdog_reset(); +} + -WRITE8_MEMBER(looping_state::looping_souint_clr) +WRITE_LINE_MEMBER(looping_state::looping_souint_clr) { - logerror("Soundint clr = %d\n", data); - if (data == 0) + logerror("Soundint clr = %d\n", state); + if (state == 0) m_audiocpu->set_input_line(0, CLEAR_LINE); } @@ -421,8 +424,7 @@ WRITE8_MEMBER(looping_state::looping_sound_sw) 0007 = AFA */ - m_sound[offset + 1] = data ^ 1; - m_dac->write(((m_sound[2] << 1) + m_sound[3]) * m_sound[7]); + m_dac->write(((BIT(~data, 2) << 1) + BIT(~data, 3)) * BIT(~data, 7)); } @@ -433,7 +435,7 @@ WRITE8_MEMBER(looping_state::looping_sound_sw) * *************************************/ -WRITE8_MEMBER(looping_state::ay_enable_w) +WRITE_LINE_MEMBER(looping_state::ay_enable_w) { device_t *device = machine().device("aysnd"); int output; @@ -441,24 +443,22 @@ WRITE8_MEMBER(looping_state::ay_enable_w) device_sound_interface *sound; device->interface(sound); for (output = 0; output < 3; output++) - sound->set_output_gain(output, (data & 1) ? 1.0 : 0.0); + sound->set_output_gain(output, state ? 1.0 : 0.0); } -WRITE8_MEMBER(looping_state::speech_enable_w) +WRITE_LINE_MEMBER(looping_state::speech_enable_w) { device_t *device = machine().device("tms"); device_sound_interface *sound; device->interface(sound); - sound->set_output_gain(0, (data & 1) ? 1.0 : 0.0); + sound->set_output_gain(0, state ? 1.0 : 0.0); } -WRITE8_MEMBER(looping_state::ballon_enable_w) +WRITE_LINE_MEMBER(looping_state::ballon_enable_w) { - if (m_last != data) - osd_printf_debug("ballon_enable_w = %d\n", data); - m_last = data; + osd_printf_debug("ballon_enable_w = %d\n", state); } @@ -475,7 +475,7 @@ WRITE8_MEMBER(looping_state::out_2_w){ osd_printf_debug("out2 = %02X\n", data); READ8_MEMBER(looping_state::adc_r){ osd_printf_debug("%04X:ADC read\n", space.device().safe_pc()); return 0xff; } WRITE8_MEMBER(looping_state::adc_w){ osd_printf_debug("%04X:ADC write = %02X\n", space.device().safe_pc(), data); } -WRITE8_MEMBER(looping_state::plr2_w) +WRITE_LINE_MEMBER(looping_state::plr2_w) { /* set to 1 after IDLE, cleared to 0 during processing */ /* is this an LED on the PCB? */ @@ -545,9 +545,7 @@ static ADDRESS_MAP_START( looping_map, AS_PROGRAM, 8, looping_state ) AM_RANGE(0x9840, 0x987f) AM_MIRROR(0x0700) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x9880, 0x98ff) AM_MIRROR(0x0700) AM_RAM - AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x07f8) AM_WRITE(level2_irq_set) - AM_RANGE(0xb006, 0xb006) AM_MIRROR(0x07f8) AM_WRITE(flip_screen_x_w) - AM_RANGE(0xb007, 0xb007) AM_MIRROR(0x07f8) AM_WRITE(flip_screen_y_w) + AM_RANGE(0xb000, 0xb007) AM_MIRROR(0x07f8) AM_DEVWRITE("videolatch", ls259_device, write_d0) AM_RANGE(0xe000, 0xefff) AM_RAM AM_RANGE(0xf800, 0xf800) AM_MIRROR(0x03fc) AM_READ_PORT("P1") AM_WRITE(out_0_w) /* /OUT0 */ @@ -557,14 +555,7 @@ static ADDRESS_MAP_START( looping_map, AS_PROGRAM, 8, looping_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( looping_io_map, AS_IO, 8, looping_state ) - /* 400 = A16 */ - /* 401 = A17 */ - /* 402 = COLOR 9 */ - AM_RANGE(0x403, 0x403) AM_WRITE(plr2_w) - /* 404 = C0 */ - /* 405 = C1 */ - AM_RANGE(0x406, 0x406) AM_WRITE(main_irq_ack_w) - AM_RANGE(0x407, 0x407) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) + AM_RANGE(0x400, 0x407) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -582,12 +573,8 @@ static ADDRESS_MAP_START( looping_sound_map, AS_PROGRAM, 8, looping_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( looping_sound_io_map, AS_IO, 8, looping_state ) - AM_RANGE(0x000, 0x000) AM_WRITE(looping_souint_clr) - AM_RANGE(0x001, 0x007) AM_WRITE(looping_sound_sw) - AM_RANGE(0x008, 0x008) AM_WRITE(ay_enable_w) - AM_RANGE(0x009, 0x009) AM_WRITE(speech_enable_w) - AM_RANGE(0x00a, 0x00a) AM_WRITE(ballon_enable_w) - AM_RANGE(0x00b, 0x00f) AM_NOP + AM_RANGE(0x000, 0x007) AM_DEVWRITE("sen0", ls259_device, write_d0) + AM_RANGE(0x008, 0x00f) AM_DEVWRITE("sen1", ls259_device, write_d0) ADDRESS_MAP_END @@ -638,6 +625,16 @@ static MACHINE_CONFIG_START( looping ) MCFG_COP400_READ_IN_CB(READ8(looping_state, cop_unk_r)) MCFG_COP400_READ_SI_CB(READLINE(looping_state, cop_serial_r)) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // C9 on CPU board + // Q0 = A16 + // Q1 = A17 + // Q2 = COLOR 9 + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(looping_state, plr2_w)) + // Q4 = C0 + // Q5 = C1 + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(looping_state, main_irq_ack_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(looping_state, watchdog_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -651,6 +648,11 @@ static MACHINE_CONFIG_START( looping ) MCFG_PALETTE_ADD("palette", 32) MCFG_PALETTE_INIT_OWNER(looping_state, looping) + MCFG_DEVICE_ADD("videolatch", LS259, 0) // E2 on video board + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(looping_state, level2_irq_set)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(looping_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(looping_state, flip_screen_y_w)) + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("speaker") @@ -667,6 +669,15 @@ static MACHINE_CONFIG_START( looping ) MCFG_SOUND_ADD("dac", DAC_2BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.15) // unknown DAC MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) MCFG_SOUND_ROUTE_EX(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE_EX(0, "dac", -1.0, DAC_VREF_NEG_INPUT) + + MCFG_DEVICE_ADD("sen0", LS259, 0) // B3 on sound board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(looping_state, looping_souint_clr)) + MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(looping_state, looping_sound_sw)) + + MCFG_DEVICE_ADD("sen1", LS259, 0) // A1 on sound board with outputs connected to 4016 at B1 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(looping_state, ay_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(looping_state, speech_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(looping_state, ballon_enable_w)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/m63.cpp b/src/mame/drivers/m63.cpp index f1f3e809424..2ebb5cae6ce 100644 --- a/src/mame/drivers/m63.cpp +++ b/src/mame/drivers/m63.cpp @@ -120,6 +120,7 @@ Dip locations verified for: #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/mcs48/mcs48.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "sound/ay8910.h" #include "sound/samples.h" @@ -182,10 +183,11 @@ public: DECLARE_WRITE8_MEMBER(m63_videoram_w); DECLARE_WRITE8_MEMBER(m63_colorram_w); DECLARE_WRITE8_MEMBER(m63_videoram2_w); - DECLARE_WRITE8_MEMBER(m63_palbank_w); - DECLARE_WRITE8_MEMBER(m63_flipscreen_w); - DECLARE_WRITE8_MEMBER(fghtbskt_flipscreen_w); - DECLARE_WRITE8_MEMBER(coin_w); + DECLARE_WRITE_LINE_MEMBER(pal_bank_w); + DECLARE_WRITE_LINE_MEMBER(m63_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(fghtbskt_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(coin1_w); + DECLARE_WRITE_LINE_MEMBER(coin2_w); DECLARE_WRITE8_MEMBER(snd_irq_w); DECLARE_WRITE8_MEMBER(snddata_w); DECLARE_WRITE8_MEMBER(p1_w); @@ -195,7 +197,7 @@ public: DECLARE_READ8_MEMBER(snddata_r); DECLARE_WRITE8_MEMBER(fghtbskt_samples_w); SAMPLES_START_CB_MEMBER(fghtbskt_sh_start); - DECLARE_WRITE8_MEMBER(nmi_mask_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); DECLARE_DRIVER_INIT(wilytowr); DECLARE_DRIVER_INIT(fghtbskt); TILE_GET_INFO_MEMBER(get_bg_tile_info); @@ -285,27 +287,21 @@ WRITE8_MEMBER(m63_state::m63_videoram2_w) m_fg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(m63_state::m63_palbank_w) +WRITE_LINE_MEMBER(m63_state::pal_bank_w) { - if (m_pal_bank != (data & 0x01)) - { - m_pal_bank = data & 0x01; - m_bg_tilemap->mark_all_dirty(); - } + m_pal_bank = state; + m_bg_tilemap->mark_all_dirty(); } -WRITE8_MEMBER(m63_state::m63_flipscreen_w) +WRITE_LINE_MEMBER(m63_state::m63_flipscreen_w) { - if (flip_screen() != (~data & 0x01)) - { - flip_screen_set(~data & 0x01); - machine().tilemap().mark_all_dirty(); - } + flip_screen_set(!state); + machine().tilemap().mark_all_dirty(); } -WRITE8_MEMBER(m63_state::fghtbskt_flipscreen_w) +WRITE_LINE_MEMBER(m63_state::fghtbskt_flipscreen_w) { - flip_screen_set(data); + flip_screen_set(state); m_fg_flag = flip_screen() ? TILE_FLIPX : 0; } @@ -388,9 +384,14 @@ uint32_t m63_state::screen_update_m63(screen_device &screen, bitmap_ind16 &bitma } -WRITE8_MEMBER(m63_state::coin_w) +WRITE_LINE_MEMBER(m63_state::coin1_w) { - machine().bookkeeping().coin_counter_w(offset, data & 0x01); + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(m63_state::coin2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } WRITE8_MEMBER(m63_state::snd_irq_w) @@ -458,9 +459,9 @@ WRITE8_MEMBER(m63_state::fghtbskt_samples_w) m_samples->start_raw(0, m_samplebuf.get() + ((data & 0xf0) << 8), 0x2000, 8000); } -WRITE8_MEMBER(m63_state::nmi_mask_w) +WRITE_LINE_MEMBER(m63_state::nmi_mask_w) { - m_nmi_mask = data & 1; + m_nmi_mask = state; } @@ -473,10 +474,7 @@ static ADDRESS_MAP_START( m63_map, AS_PROGRAM, 8, m63_state ) AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m63_videoram2_w) AM_SHARE("videoram2") AM_RANGE(0xe800, 0xebff) AM_RAM_WRITE(m63_videoram_w) AM_SHARE("videoram") AM_RANGE(0xec00, 0xefff) AM_RAM_WRITE(m63_colorram_w) AM_SHARE("colorram") - AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_mask_w) - AM_RANGE(0xf002, 0xf002) AM_WRITE(m63_flipscreen_w) - AM_RANGE(0xf003, 0xf003) AM_WRITE(m63_palbank_w) - AM_RANGE(0xf006, 0xf007) AM_WRITE(coin_w) + AM_RANGE(0xf000, 0xf007) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE(0xf800, 0xf800) AM_READ_PORT("P1") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xf801, 0xf801) AM_READ_PORT("P2") AM_WRITENOP /* continues game when in stop mode (cleared by NMI handler) */ AM_RANGE(0xf802, 0xf802) AM_READ_PORT("DSW1") @@ -501,14 +499,8 @@ static ADDRESS_MAP_START( fghtbskt_map, AS_PROGRAM, 8, m63_state ) AM_RANGE(0xf000, 0xf000) AM_WRITE(snd_irq_w) AM_RANGE(0xf001, 0xf001) AM_WRITENOP AM_RANGE(0xf002, 0xf002) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) - AM_RANGE(0xf800, 0xf800) AM_WRITENOP - AM_RANGE(0xf801, 0xf801) AM_WRITE(nmi_mask_w) - AM_RANGE(0xf802, 0xf802) AM_WRITE(fghtbskt_flipscreen_w) - AM_RANGE(0xf803, 0xf803) AM_WRITENOP - AM_RANGE(0xf804, 0xf804) AM_WRITENOP - AM_RANGE(0xf805, 0xf805) AM_WRITENOP - AM_RANGE(0xf806, 0xf806) AM_WRITENOP - AM_RANGE(0xf807, 0xf807) AM_WRITE(fghtbskt_samples_w) + AM_RANGE(0xf807, 0xf807) AM_WRITE(fghtbskt_samples_w) // FIXME + AM_RANGE(0xf800, 0xf807) AM_DEVWRITE("outlatch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( i8039_map, AS_PROGRAM, 8, m63_state ) @@ -756,6 +748,13 @@ static MACHINE_CONFIG_START( m63 ) MCFG_CPU_PROGRAM_MAP(m63_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", m63_state, vblank_irq) + MCFG_DEVICE_ADD("outlatch", LS259, 0) // probably chip at E7 obscured by pulldown resistor + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(m63_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(m63_state, m63_flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(m63_state, pal_bank_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(m63_state, coin1_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(m63_state, coin2_w)) + MCFG_CPU_ADD("soundcpu",I8039,XTAL_12MHz/4) /* ????? */ MCFG_CPU_PROGRAM_MAP(i8039_map) MCFG_CPU_IO_MAP(i8039_port_map) @@ -806,6 +805,11 @@ static MACHINE_CONFIG_START( fghtbskt ) MCFG_CPU_PROGRAM_MAP(fghtbskt_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", m63_state, vblank_irq) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(m63_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(m63_state, fghtbskt_flipscreen_w)) + //MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(m63_state, fghtbskt_samples_w)) + MCFG_CPU_ADD("soundcpu", I8039,XTAL_12MHz/4) /* ????? */ MCFG_CPU_PROGRAM_MAP(i8039_map) MCFG_CPU_IO_MAP(i8039_port_map) diff --git a/src/mame/drivers/mappy.cpp b/src/mame/drivers/mappy.cpp index 3a3ec8a7d28..084f95fb3cc 100644 --- a/src/mame/drivers/mappy.cpp +++ b/src/mame/drivers/mappy.cpp @@ -553,6 +553,7 @@ TODO: #include "cpu/m6809/m6809.h" #include "machine/74157.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/volt_reg.h" #include "speaker.h" @@ -581,160 +582,30 @@ TODO: /***************************************************************************/ -void mappy_state::common_latch_w(uint32_t offset) +WRITE_LINE_MEMBER(mappy_state::int_on_w) { - int bit = offset & 1; - - switch (offset & 0x0e) - { - case 0x00: /* INT ON 2 */ - m_sub_irq_mask = bit; - if (!bit) - m_subcpu->set_input_line(0, CLEAR_LINE); - break; - - case 0x02: /* INT ON */ - m_main_irq_mask = bit; - if (!bit) - m_maincpu->set_input_line(0, CLEAR_LINE); - break; - - case 0x04: /* n.c. */ - break; - - case 0x06: /* SOUND ON */ - m_namco_15xx->mappy_sound_enable(bit); - break; - - case 0x0a: /* SUB RESET */ - m_subcpu->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE); - break; - - case 0x0c: /* n.c. */ - break; - - case 0x0e: /* n.c. */ - break; - } -} - -WRITE8_MEMBER(mappy_state::superpac_latch_w) -{ - int bit = offset & 1; - - switch (offset & 0x0e) - { - case 0x08: /* 4 RESET */ - switch (m_type) - { - case GAME_SUPERPAC: - m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - m_namco56xx_2->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - break; - case GAME_PACNPAL: - m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - m_namco59xx->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - break; - case GAME_GROBDA: - m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - break; - } - break; - - default: - common_latch_w(offset); - break; - } -} - -WRITE8_MEMBER(mappy_state::phozon_latch_w) -{ - int bit = offset & 1; - - switch (offset & 0x0e) - { - case 0x04: - m_sub2_irq_mask = bit; - if (!bit) - m_subcpu2->set_input_line(0, CLEAR_LINE); - break; - - case 0x08: - m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - break; - - case 0x0c: - m_subcpu2->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE); - break; - - default: - common_latch_w(offset); - break; - } -} - -WRITE8_MEMBER(mappy_state::mappy_latch_w) -{ - int bit = offset & 1; - - switch (offset & 0x0e) - { - case 0x04: /* FLIP */ - flip_screen_set(bit); - break; - - case 0x08: /* 4 RESET */ - switch (m_type) - { - case GAME_MAPPY: - m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - m_namco58xx_2->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - break; - case GAME_DRUAGA: - case GAME_DIGDUG2: - m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - break; - case GAME_MOTOS: - m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - m_namco56xx_2->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE); - break; - } - break; - - default: - common_latch_w(offset); - break; - } + m_main_irq_mask = state; + if (!state) + m_maincpu->set_input_line(0, CLEAR_LINE); } -MACHINE_RESET_MEMBER(mappy_state,superpac) +WRITE_LINE_MEMBER(mappy_state::int_on_2_w) { - address_space &space = m_maincpu->space(AS_PROGRAM); - - /* Reset all latches */ - for (int i = 0; i < 0x10; i += 2) - superpac_latch_w(space, i, 0); + m_sub_irq_mask = state; + if (!state) + m_subcpu->set_input_line(0, CLEAR_LINE); } -MACHINE_RESET_MEMBER(mappy_state,phozon) +WRITE_LINE_MEMBER(mappy_state::int_on_3_w) { - address_space &space = m_maincpu->space(AS_PROGRAM); - - /* Reset all latches */ - for (int i = 0; i < 0x10; i += 2) - phozon_latch_w(space, i, 0); + m_sub2_irq_mask = state; + if (!state) + m_subcpu2->set_input_line(0, CLEAR_LINE); } -MACHINE_RESET_MEMBER(mappy_state,mappy) +WRITE_LINE_MEMBER(mappy_state::mappy_flip_w) { - address_space &space = m_maincpu->space(AS_PROGRAM); - - /* Reset all latches */ - for (int i = 0; i < 0x10; i += 2) - mappy_latch_w(space, i, 0); + flip_screen_set(state); } @@ -964,7 +835,7 @@ static ADDRESS_MAP_START( superpac_cpu1_map, AS_PROGRAM, 8, mappy_state ) AM_RANGE(0x4000, 0x43ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the sound CPU */ AM_RANGE(0x4800, 0x480f) AM_DEVREADWRITE("namcoio_1", namcoio_device, read, write) /* custom I/O chips interface */ AM_RANGE(0x4810, 0x481f) AM_DEVREADWRITE("namcoio_2", namcoio_device, read, write) /* custom I/O chips interface */ - AM_RANGE(0x5000, 0x500f) AM_WRITE(superpac_latch_w) /* various control bits */ + AM_RANGE(0x5000, 0x500f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */ AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0xa000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -975,7 +846,7 @@ static ADDRESS_MAP_START( phozon_cpu1_map, AS_PROGRAM, 8, mappy_state ) AM_RANGE(0x4000, 0x43ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the sound CPU */ AM_RANGE(0x4800, 0x480f) AM_DEVREADWRITE("namcoio_1", namcoio_device, read, write) /* custom I/O chips interface */ AM_RANGE(0x4810, 0x481f) AM_DEVREADWRITE("namcoio_2", namcoio_device, read, write) /* custom I/O chips interface */ - AM_RANGE(0x5000, 0x500f) AM_WRITE(phozon_latch_w) /* various control bits */ + AM_RANGE(0x5000, 0x500f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */ AM_RANGE(0x7000, 0x7000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM */ ADDRESS_MAP_END @@ -987,14 +858,14 @@ static ADDRESS_MAP_START( mappy_cpu1_map, AS_PROGRAM, 8, mappy_state ) AM_RANGE(0x4000, 0x43ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the sound CPU */ AM_RANGE(0x4800, 0x480f) AM_DEVREADWRITE("namcoio_1", namcoio_device, read, write) /* custom I/O chips interface */ AM_RANGE(0x4810, 0x481f) AM_DEVREADWRITE("namcoio_2", namcoio_device, read, write) /* custom I/O chips interface */ - AM_RANGE(0x5000, 0x500f) AM_WRITE(mappy_latch_w) /* various control bits */ + AM_RANGE(0x5000, 0x500f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */ AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM code (only a000-ffff in Mappy) */ ADDRESS_MAP_END static ADDRESS_MAP_START( superpac_cpu2_map, AS_PROGRAM, 8, mappy_state ) AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the main CPU (also sound registers) */ - AM_RANGE(0x2000, 0x200f) AM_WRITE(superpac_latch_w) /* various control bits */ + AM_RANGE(0x2000, 0x200f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */ AM_RANGE(0xe000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -1005,7 +876,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mappy_cpu2_map, AS_PROGRAM, 8, mappy_state ) AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the main CPU (also sound registers) */ - AM_RANGE(0x2000, 0x200f) AM_WRITE(mappy_latch_w) /* various control bits */ + AM_RANGE(0x2000, 0x200f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */ AM_RANGE(0xe000, 0xffff) AM_ROM /* ROM code */ ADDRESS_MAP_END @@ -1659,13 +1530,18 @@ static MACHINE_CONFIG_START( superpac_common ) MCFG_CPU_PROGRAM_MAP(superpac_cpu2_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, sub_vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2M on CPU board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mappy_state, int_on_2_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ /* synchronization of the CPUs */ MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy) - MCFG_MACHINE_RESET_OVERRIDE(mappy_state,superpac) /* video hardware */ MCFG_GFXDECODE_ADD("gfxdecode", "palette", superpac) @@ -1709,6 +1585,10 @@ static MACHINE_CONFIG_START( superpac ) MCFG_DEVICE_ADD("dipmux", LS157, 0) MCFG_74157_A_IN_CB(IOPORT("DSW2")) MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT MACHINE_CONFIG_END static MACHINE_CONFIG_START( pacnpal ) @@ -1735,6 +1615,10 @@ static MACHINE_CONFIG_START( pacnpal ) MCFG_DEVICE_ADD("dipmux", LS157, 0) MCFG_74157_A_IN_CB(IOPORT("DSW2")) MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco59xx_device, set_reset_line)) MCFG_DEVCB_INVERT MACHINE_CONFIG_END @@ -1762,6 +1646,10 @@ static MACHINE_CONFIG_START( grobda ) MCFG_74157_A_IN_CB(IOPORT("DSW2")) MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT + /* sound hardware */ MCFG_SOUND_ADD("dac", DAC_4BIT_BINARY_WEIGHTED, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.275) // alternate route to 15XX-related DAC? MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) @@ -1784,12 +1672,21 @@ static MACHINE_CONFIG_START( phozon ) MCFG_CPU_PROGRAM_MAP(phozon_cpu3_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, sub2_vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 5C + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mappy_state, int_on_2_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mappy_state, int_on_3_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ /* synchronization of the CPUs */ MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy) - MCFG_MACHINE_RESET_OVERRIDE(mappy_state,phozon) MCFG_DEVICE_ADD("namcoio_1", NAMCO_58XX, 0) MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS")) @@ -1841,12 +1738,18 @@ static MACHINE_CONFIG_START( mappy_common ) MCFG_CPU_PROGRAM_MAP(mappy_cpu2_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, sub_vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2M on CPU board + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mappy_state, int_on_2_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mappy_state, mappy_flip_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ /* synchronization of the CPUs */ MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy) - MCFG_MACHINE_RESET_OVERRIDE(mappy_state,mappy) /* video hardware */ MCFG_GFXDECODE_ADD("gfxdecode", "palette", mappy) @@ -1889,6 +1792,10 @@ static MACHINE_CONFIG_START( mappy ) MCFG_DEVICE_ADD("dipmux", LS157, 0) MCFG_74157_A_IN_CB(IOPORT("DSW2")) MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT MACHINE_CONFIG_END static MACHINE_CONFIG_START( digdug2 ) @@ -1917,6 +1824,10 @@ static MACHINE_CONFIG_START( digdug2 ) MCFG_DEVICE_ADD("dipmux", LS157, 0) MCFG_74157_A_IN_CB(IOPORT("DSW2")) MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( todruaga, digdug2 ) @@ -1951,6 +1862,10 @@ static MACHINE_CONFIG_START( motos ) MCFG_DEVICE_ADD("dipmux", LS157, 0) MCFG_74157_A_IN_CB(IOPORT("DSW2")) MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT MACHINE_CONFIG_END diff --git a/src/mame/drivers/marineb.cpp b/src/mame/drivers/marineb.cpp index 442bda78bb2..fc756bbbaaf 100644 --- a/src/mame/drivers/marineb.cpp +++ b/src/mame/drivers/marineb.cpp @@ -41,6 +41,7 @@ write #include "includes/marineb.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "screen.h" #include "speaker.h" @@ -53,26 +54,15 @@ void marineb_state::machine_reset() { m_palette_bank = 0; m_column_scroll = 0; - m_flipscreen_x = 0; - m_flipscreen_y = 0; - m_marineb_active_low_flipscreen = 0; -} - -MACHINE_RESET_MEMBER(marineb_state,springer) -{ - marineb_state::machine_reset(); - - m_marineb_active_low_flipscreen = 1; } void marineb_state::machine_start() { - save_item(NAME(m_marineb_active_low_flipscreen)); } -WRITE8_MEMBER(marineb_state::irq_mask_w) +WRITE_LINE_MEMBER(marineb_state::irq_mask_w) { - m_irq_mask = data & 1; + m_irq_mask = state; } static ADDRESS_MAP_START( marineb_map, AS_PROGRAM, 8, marineb_state ) @@ -84,9 +74,8 @@ static ADDRESS_MAP_START( marineb_map, AS_PROGRAM, 8, marineb_state ) AM_RANGE(0x9800, 0x9800) AM_WRITE(marineb_column_scroll_w) AM_RANGE(0x9a00, 0x9a00) AM_WRITE(marineb_palette_bank_0_w) AM_RANGE(0x9c00, 0x9c00) AM_WRITE(marineb_palette_bank_1_w) - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(irq_mask_w) - AM_RANGE(0xa001, 0xa001) AM_WRITE(marineb_flipscreen_y_w) - AM_RANGE(0xa002, 0xa002) AM_WRITE(marineb_flipscreen_x_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("outlatch", ls259_device, write_d0) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P1") AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM") AM_WRITENOP /* also watchdog */ @@ -545,6 +534,10 @@ static MACHINE_CONFIG_START( marineb ) MCFG_CPU_IO_MAP(marineb_io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", marineb_state, marineb_vblank_irq) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -580,7 +573,9 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( springer, marineb ) /* basic machine hardware */ - MCFG_MACHINE_RESET_OVERRIDE(marineb_state,springer) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w)) MCFG_DEVCB_INVERT /* video hardware */ MCFG_SCREEN_MODIFY("screen") @@ -634,7 +629,9 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bcruzm12, wanted ) /* basic machine hardware */ - MCFG_MACHINE_RESET_OVERRIDE(marineb_state,springer) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w)) MCFG_DEVCB_INVERT MACHINE_CONFIG_END /*************************************************************************** diff --git a/src/mame/drivers/mastboy.cpp b/src/mame/drivers/mastboy.cpp index 75b85362f78..dccdd914f9c 100644 --- a/src/mame/drivers/mastboy.cpp +++ b/src/mame/drivers/mastboy.cpp @@ -440,6 +440,7 @@ #include "cpu/z180/z180.h" #include "sound/saa1099.h" #include "sound/msm5205.h" +#include "machine/74259.h" #include "machine/eeprompar.h" #include "screen.h" #include "speaker.h" @@ -452,6 +453,7 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_msm(*this, "msm"), + m_outlatch(*this, "outlatch"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_earom(*this, "earom") , @@ -461,6 +463,7 @@ public: required_device<cpu_device> m_maincpu; required_device<msm5205_device> m_msm; + required_device<ls259_device> m_outlatch; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_device<eeprom_parallel_28xx_device> m_earom; @@ -475,22 +478,17 @@ public: int m_earom_enabled; int m_m5205_next; int m_m5205_part; - int m_m5205_sambit0; - int m_m5205_sambit1; DECLARE_READ8_MEMBER(banked_ram_r); DECLARE_WRITE8_MEMBER(banked_ram_w); DECLARE_WRITE8_MEMBER(bank_w); DECLARE_READ8_MEMBER(earom_r); DECLARE_WRITE8_MEMBER(earom_w); - DECLARE_WRITE8_MEMBER(earom_enable_w); - DECLARE_WRITE8_MEMBER(msm5205_sambit0_w); - DECLARE_WRITE8_MEMBER(msm5205_sambit1_w); + DECLARE_WRITE_LINE_MEMBER(earom_enable_w); DECLARE_WRITE8_MEMBER(msm5205_data_w); - DECLARE_WRITE8_MEMBER(irq0_ack_w); + DECLARE_WRITE_LINE_MEMBER(irq0_ack_w); DECLARE_READ8_MEMBER(port_38_read); DECLARE_READ8_MEMBER(nmi_read); - DECLARE_WRITE8_MEMBER(msm5205_reset_w); DECLARE_WRITE_LINE_MEMBER(adpcm_int); virtual void machine_start() override; @@ -647,40 +645,18 @@ WRITE8_MEMBER(mastboy_state::earom_w) // } } -WRITE8_MEMBER(mastboy_state::earom_enable_w) +WRITE_LINE_MEMBER(mastboy_state::earom_enable_w) { /* This is some kind of enable / disable control for backup memory (see Charles's notes) but I'm not sure how it works in practice, if we use it then it writes a lot of data with it disabled */ - m_earom_enabled = data&1; + m_earom_enabled = state; } /* MSM5205 Related */ -WRITE8_MEMBER(mastboy_state::msm5205_sambit0_w) -{ - m_m5205_sambit0 = data & 1; - m_msm->playmode_w((1 << 2) | (m_m5205_sambit1 << 1) | (m_m5205_sambit0) ); - - logerror("msm5205 samplerate bit 0, set to %02x\n",data); -} - -WRITE8_MEMBER(mastboy_state::msm5205_sambit1_w) -{ - m_m5205_sambit1 = data & 1; - - m_msm->playmode_w((1 << 2) | (m_m5205_sambit1 << 1) | (m_m5205_sambit0) ); - - logerror("msm5205 samplerate bit 0, set to %02x\n",data); -} - -WRITE8_MEMBER(mastboy_state::msm5205_reset_w) -{ - m_m5205_part = 0; - m_msm->reset_w(data & 1); -} - WRITE8_MEMBER(mastboy_state::msm5205_data_w) { + m_m5205_part = 0; m_m5205_next = data; } @@ -697,16 +673,15 @@ WRITE_LINE_MEMBER(mastboy_state::adpcm_int) /* Interrupt Handling */ -WRITE8_MEMBER(mastboy_state::irq0_ack_w) +WRITE_LINE_MEMBER(mastboy_state::irq0_ack_w) { - m_irq0_ack = data; - if ((data & 1) == 1) + if (state) m_maincpu->set_input_line(0, CLEAR_LINE); } INTERRUPT_GEN_MEMBER(mastboy_state::interrupt) { - if ((m_irq0_ack & 1) == 1) + if (m_outlatch->q0_r() == 1) { device.execute().set_input_line(0, ASSERT_LINE); } @@ -734,11 +709,7 @@ static ADDRESS_MAP_START( mastboy_map, AS_PROGRAM, 8, mastboy_state ) AM_RANGE(0xff820, 0xff827) AM_WRITE(bank_w) AM_RANGE(0xff828, 0xff829) AM_DEVWRITE("saa", saa1099_device, write) AM_RANGE(0xff830, 0xff830) AM_WRITE(msm5205_data_w) - AM_RANGE(0xff838, 0xff838) AM_WRITE(irq0_ack_w) - AM_RANGE(0xff839, 0xff839) AM_WRITE(msm5205_sambit0_w) - AM_RANGE(0xff83a, 0xff83a) AM_WRITE(msm5205_sambit1_w) - AM_RANGE(0xff83b, 0xff83b) AM_WRITE(msm5205_reset_w) - AM_RANGE(0xff83c, 0xff83c) AM_WRITE(earom_enable_w) + AM_RANGE(0xff838, 0xff83f) AM_DEVWRITE("outlatch", ls259_device, write_d0) AM_RANGE(0xffc00, 0xfffff) AM_RAM // Internal RAM ADDRESS_MAP_END @@ -887,8 +858,6 @@ void mastboy_state::machine_start() save_item(NAME(m_earom_enabled)); save_item(NAME(m_m5205_next)); save_item(NAME(m_m5205_part)); - save_item(NAME(m_m5205_sambit0)); - save_item(NAME(m_m5205_sambit1)); } void mastboy_state::machine_reset() @@ -898,10 +867,6 @@ void mastboy_state::machine_reset() memset( m_tileram, 0x00, 0x01000); memset( m_colram, 0x00, 0x00200); memset( m_vram, 0x00, 0x10000); - - m_m5205_part = 0; - m_msm->reset_w(1); - m_irq0_ack = 0; } @@ -914,6 +879,12 @@ static MACHINE_CONFIG_START( mastboy ) MCFG_EEPROM_2816_ADD("earom") + MCFG_DEVICE_ADD("outlatch", LS259, 0) // IC17 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mastboy_state, irq0_ack_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("msm", msm5205_device, s2_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("msm", msm5205_device, s1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mastboy_state, earom_enable_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/megazone.cpp b/src/mame/drivers/megazone.cpp index 85928fbea61..e6c1c69de28 100644 --- a/src/mame/drivers/megazone.cpp +++ b/src/mame/drivers/megazone.cpp @@ -15,6 +15,7 @@ To enter service mode, keep 1&2 pressed on reset #include "cpu/m6809/m6809.h" #include "cpu/mcs48/mcs48.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/konami1.h" #include "machine/watchdog.h" @@ -75,21 +76,24 @@ WRITE8_MEMBER(megazone_state::i8039_irqen_and_status_w) m_i8039_status = (data & 0x70) >> 4; } -WRITE8_MEMBER(megazone_state::megazone_coin_counter_w) +WRITE_LINE_MEMBER(megazone_state::coin_counter_1_w) { - machine().bookkeeping().coin_counter_w(1 - offset, data); /* 1-offset, because coin counters are in reversed order */ + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(megazone_state::irq_mask_w) +WRITE_LINE_MEMBER(megazone_state::coin_counter_2_w) { - m_irq_mask = data & 1; + machine().bookkeeping().coin_counter_w(1, state); +} + +WRITE_LINE_MEMBER(megazone_state::irq_mask_w) +{ + m_irq_mask = state; } static ADDRESS_MAP_START( megazone_map, AS_PROGRAM, 8, megazone_state ) - AM_RANGE(0x0000, 0x0001) AM_WRITE(megazone_coin_counter_w) /* coin counter 2, coin counter 1 */ - AM_RANGE(0x0005, 0x0005) AM_WRITE(megazone_flipscreen_w) - AM_RANGE(0x0007, 0x0007) AM_WRITE(irq_mask_w) + AM_RANGE(0x0000, 0x0007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x0800, 0x0800) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x1000, 0x1000) AM_WRITEONLY AM_SHARE("scrolly") AM_RANGE(0x1800, 0x1800) AM_WRITEONLY AM_SHARE("scrollx") @@ -224,7 +228,6 @@ void megazone_state::machine_start() void megazone_state::machine_reset() { - m_flipscreen = 0; m_i8039_status = 0; } @@ -255,6 +258,12 @@ static MACHINE_CONFIG_START( megazone ) MCFG_QUANTUM_TIME(attotime::from_hz(900)) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 13A + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(megazone_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(megazone_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(megazone_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(megazone_state, irq_mask_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/mermaid.cpp b/src/mame/drivers/mermaid.cpp index 08f498f09b2..2ab899f4d38 100644 --- a/src/mame/drivers/mermaid.cpp +++ b/src/mame/drivers/mermaid.cpp @@ -120,6 +120,7 @@ Stephh's notes (based on the games Z80 code and some tests) : #include "includes/mermaid.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/msm5205.h" #include "speaker.h" @@ -128,20 +129,30 @@ Stephh's notes (based on the games Z80 code and some tests) : WRITE8_MEMBER(mermaid_state::mermaid_ay8910_write_port_w) { - if (m_ay8910_enable[0]) m_ay1->data_w(space, offset, data); - if (m_ay8910_enable[1]) m_ay2->data_w(space, offset, data); + if (m_ay8910_enable[0]) m_ay8910[0]->data_w(space, offset, data); + if (m_ay8910_enable[1]) m_ay8910[1]->data_w(space, offset, data); } WRITE8_MEMBER(mermaid_state::mermaid_ay8910_control_port_w) { - if (m_ay8910_enable[0]) m_ay1->address_w(space, offset, data); - if (m_ay8910_enable[1]) m_ay2->address_w(space, offset, data); + if (m_ay8910_enable[0]) m_ay8910[0]->address_w(space, offset, data); + if (m_ay8910_enable[1]) m_ay8910[1]->address_w(space, offset, data); } -WRITE8_MEMBER(mermaid_state::nmi_mask_w) +WRITE_LINE_MEMBER(mermaid_state::ay1_enable_w) { - m_nmi_mask = data & 1; + m_ay8910_enable[0] = state; +} + +WRITE_LINE_MEMBER(mermaid_state::ay2_enable_w) +{ + m_ay8910_enable[1] = state; +} + +WRITE_LINE_MEMBER(mermaid_state::nmi_mask_w) +{ + m_nmi_mask = state; } /* Memory Map */ @@ -156,18 +167,9 @@ static ADDRESS_MAP_START( mermaid_map, AS_PROGRAM, 8, mermaid_state ) AM_RANGE(0xd880, 0xd8bf) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(mermaid_colorram_w) AM_SHARE("colorram") AM_RANGE(0xe000, 0xe000) AM_READ_PORT("DSW") - AM_RANGE(0xe000, 0xe001) AM_RAM AM_SHARE("ay8910_enable") - AM_RANGE(0xe002, 0xe004) AM_WRITENOP // ??? - AM_RANGE(0xe005, 0xe005) AM_WRITE(mermaid_flip_screen_x_w) - AM_RANGE(0xe006, 0xe006) AM_WRITE(mermaid_flip_screen_y_w) - AM_RANGE(0xe007, 0xe007) AM_WRITE(nmi_mask_w) - AM_RANGE(0xe800, 0xe800) AM_READ_PORT("P1") AM_WRITENOP // ??? - AM_RANGE(0xe801, 0xe801) AM_WRITENOP // ??? - AM_RANGE(0xe802, 0xe802) AM_WRITENOP // ??? - AM_RANGE(0xe803, 0xe803) AM_WRITENOP // ??? - AM_RANGE(0xe804, 0xe804) AM_WRITE(rougien_gfxbankswitch1_w) - AM_RANGE(0xe805, 0xe805) AM_WRITE(rougien_gfxbankswitch2_w) - AM_RANGE(0xe807, 0xe807) AM_WRITENOP // ??? + AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("latch1", ls259_device, write_d0) + AM_RANGE(0xe800, 0xe800) AM_READ_PORT("P1") + AM_RANGE(0xe800, 0xe807) AM_DEVWRITE("latch2", ls259_device, write_d0) AM_RANGE(0xf000, 0xf000) AM_READ_PORT("P2") AM_RANGE(0xf800, 0xf800) AM_READ(mermaid_collision_r) AM_RANGE(0xf802, 0xf802) AM_WRITENOP // ??? @@ -175,36 +177,27 @@ static ADDRESS_MAP_START( mermaid_map, AS_PROGRAM, 8, mermaid_state ) AM_RANGE(0xf807, 0xf807) AM_WRITE(mermaid_ay8910_control_port_w) ADDRESS_MAP_END -WRITE8_MEMBER(mermaid_state::rougien_sample_rom_lo_w) +WRITE_LINE_MEMBER(mermaid_state::rougien_sample_rom_lo_w) { - m_adpcm_rom_sel = (data & 1) | (m_adpcm_rom_sel & 2); + m_adpcm_rom_sel = state | (m_adpcm_rom_sel & 2); } -WRITE8_MEMBER(mermaid_state::rougien_sample_rom_hi_w) +WRITE_LINE_MEMBER(mermaid_state::rougien_sample_rom_hi_w) { - m_adpcm_rom_sel = ((data & 1)<<1) | (m_adpcm_rom_sel & 1); + m_adpcm_rom_sel = (state <<1) | (m_adpcm_rom_sel & 1); } -WRITE8_MEMBER(mermaid_state::rougien_sample_playback_w) +WRITE_LINE_MEMBER(mermaid_state::rougien_sample_playback_w) { - if((m_adpcm_play_reg & 1) && ((data & 1) == 0)) + if (state) { m_adpcm_pos = m_adpcm_rom_sel*0x1000; m_adpcm_end = m_adpcm_pos+0x1000; m_adpcm_idle = 0; m_adpcm->reset_w(0); } - - m_adpcm_play_reg = data & 1; } -static ADDRESS_MAP_START( rougien_map, AS_PROGRAM, 8, mermaid_state ) - AM_RANGE(0xe002, 0xe002) AM_WRITE(rougien_sample_playback_w) - AM_RANGE(0xe802, 0xe802) AM_WRITE(rougien_sample_rom_hi_w) - AM_RANGE(0xe803, 0xe803) AM_WRITE(rougien_sample_rom_lo_w) - AM_IMPORT_FROM( mermaid_map ) -ADDRESS_MAP_END - /* Input Ports */ static INPUT_PORTS_START( mermaid ) @@ -371,6 +364,7 @@ void mermaid_state::machine_start() save_item(NAME(m_coll_bit6)); save_item(NAME(m_rougien_gfxbank1)); save_item(NAME(m_rougien_gfxbank2)); + save_item(NAME(m_ay8910_enable)); save_item(NAME(m_adpcm_pos)); save_item(NAME(m_adpcm_end)); @@ -436,6 +430,19 @@ static MACHINE_CONFIG_START( mermaid ) MCFG_CPU_PROGRAM_MAP(mermaid_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", mermaid_state, vblank_irq) + MCFG_DEVICE_ADD("latch1", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mermaid_state, ay1_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mermaid_state, ay2_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // ??? + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mermaid_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(mermaid_state, flip_screen_y_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(mermaid_state, nmi_mask_w)) + + MCFG_DEVICE_ADD("latch2", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // ??? + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mermaid_state, rougien_gfxbankswitch1_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mermaid_state, rougien_gfxbankswitch2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // very frequent /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -465,8 +472,12 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( rougien, mermaid ) - MCFG_DEVICE_MODIFY("maincpu") - MCFG_CPU_PROGRAM_MAP(rougien_map) + MCFG_DEVICE_MODIFY("latch1") + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mermaid_state, rougien_sample_playback_w)) + + MCFG_DEVICE_MODIFY("latch2") + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mermaid_state, rougien_sample_rom_hi_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(mermaid_state, rougien_sample_rom_lo_w)) MCFG_PALETTE_MODIFY("palette") MCFG_PALETTE_INIT_OWNER(mermaid_state,rougien) diff --git a/src/mame/drivers/mjsister.cpp b/src/mame/drivers/mjsister.cpp index d65d7c57d40..8af28e02564 100644 --- a/src/mame/drivers/mjsister.cpp +++ b/src/mame/drivers/mjsister.cpp @@ -10,6 +10,7 @@ #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "sound/dac.h" #include "sound/volt_reg.h" @@ -31,14 +32,16 @@ public: mjsister_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + m_mainlatch(*this, "mainlatch%u", 1), m_palette(*this, "palette"), - m_dac(*this, "dac") { } + m_dac(*this, "dac"), + m_rombank(*this, "bank1") { } /* video-related */ std::unique_ptr<bitmap_ind16> m_tmpbitmap0; std::unique_ptr<bitmap_ind16> m_tmpbitmap1; - int m_flip_screen; - int m_video_enable; + bool m_flip_screen; + bool m_video_enable; int m_screen_redraw; int m_vrambank; int m_colorbank; @@ -46,9 +49,7 @@ public: /* misc */ int m_input_sel1; int m_input_sel2; - - int m_rombank0; - int m_rombank1; + bool m_irq_enable; uint32_t m_dac_adr; uint32_t m_dac_bank; @@ -58,23 +59,32 @@ public: /* devices */ required_device<cpu_device> m_maincpu; + required_device_array<ls259_device, 2> m_mainlatch; required_device<palette_device> m_palette; required_device<dac_byte_interface> m_dac; /* memory */ + required_memory_bank m_rombank; uint8_t m_videoram0[0x8000]; uint8_t m_videoram1[0x8000]; DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(dac_adr_s_w); DECLARE_WRITE8_MEMBER(dac_adr_e_w); - DECLARE_WRITE8_MEMBER(banksel1_w); - DECLARE_WRITE8_MEMBER(banksel2_w); + DECLARE_WRITE_LINE_MEMBER(rombank_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_w); + DECLARE_WRITE_LINE_MEMBER(colorbank_w); + DECLARE_WRITE_LINE_MEMBER(video_enable_w); + DECLARE_WRITE_LINE_MEMBER(irq_enable_w); + DECLARE_WRITE_LINE_MEMBER(vrambank_w); + DECLARE_WRITE_LINE_MEMBER(dac_bank_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_w); DECLARE_WRITE8_MEMBER(input_sel1_w); DECLARE_WRITE8_MEMBER(input_sel2_w); DECLARE_READ8_MEMBER(keys_r); TIMER_CALLBACK_MEMBER(dac_callback); virtual void machine_start() override; virtual void machine_reset() override; + INTERRUPT_GEN_MEMBER(interrupt); virtual void video_start() override; uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void redraw(); @@ -227,56 +237,47 @@ WRITE8_MEMBER(mjsister_state::dac_adr_e_w) m_dac_busy = 1; } -WRITE8_MEMBER(mjsister_state::banksel1_w) +WRITE_LINE_MEMBER(mjsister_state::rombank_w) { - int tmp = m_colorbank; - - switch (data) - { - case 0x0: m_rombank0 = 0 ; break; - case 0x1: m_rombank0 = 1 ; break; - - case 0x2: m_flip_screen = 0 ; break; - case 0x3: m_flip_screen = 1 ; break; - - case 0x4: m_colorbank &= 0xfe; break; - case 0x5: m_colorbank |= 0x01; break; - case 0x6: m_colorbank &= 0xfd; break; - case 0x7: m_colorbank |= 0x02; break; - case 0x8: m_colorbank &= 0xfb; break; - case 0x9: m_colorbank |= 0x04; break; - - case 0xa: m_video_enable = 0 ; break; - case 0xb: m_video_enable = 1 ; break; - - case 0xe: m_vrambank = 0 ; break; - case 0xf: m_vrambank = 1 ; break; + m_rombank->set_entry((m_mainlatch[0]->q0_r() << 1) | m_mainlatch[1]->q6_r()); +} - default: - logerror("%04x p30_w:%02x\n", space.device().safe_pc(), data); - } +WRITE_LINE_MEMBER(mjsister_state::flip_screen_w) +{ + m_flip_screen = state; +} - if (tmp != m_colorbank) - m_screen_redraw = 1; +WRITE_LINE_MEMBER(mjsister_state::colorbank_w) +{ + m_colorbank = (m_mainlatch[0]->output_state() >> 2) & 7; + redraw(); +} - membank("bank1")->set_entry(m_rombank0 * 2 + m_rombank1); +WRITE_LINE_MEMBER(mjsister_state::video_enable_w) +{ + m_video_enable = state; } -WRITE8_MEMBER(mjsister_state::banksel2_w) +WRITE_LINE_MEMBER(mjsister_state::irq_enable_w) { - switch (data) - { - case 0xa: m_dac_bank = 0; break; - case 0xb: m_dac_bank = 1; break; + m_irq_enable = state; + if (!m_irq_enable) + m_maincpu->set_input_line(0, CLEAR_LINE); +} - case 0xc: m_rombank1 = 0; break; - case 0xd: m_rombank1 = 1; break; +WRITE_LINE_MEMBER(mjsister_state::vrambank_w) +{ + m_vrambank = state; +} - default: - logerror("%04x p31_w:%02x\n", space.device().safe_pc(), data); - } +WRITE_LINE_MEMBER(mjsister_state::dac_bank_w) +{ + m_dac_bank = state; +} - membank("bank1")->set_entry(m_rombank0 * 2 + m_rombank1); +WRITE_LINE_MEMBER(mjsister_state::coin_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); } WRITE8_MEMBER(mjsister_state::input_sel1_w) @@ -326,8 +327,8 @@ static ADDRESS_MAP_START( mjsister_io_map, AS_IO, 8, mjsister_state ) AM_RANGE(0x12, 0x12) AM_DEVWRITE("aysnd", ay8910_device, data_w) AM_RANGE(0x20, 0x20) AM_READ(keys_r) AM_RANGE(0x21, 0x21) AM_READ_PORT("IN0") - AM_RANGE(0x30, 0x30) AM_WRITE(banksel1_w) - AM_RANGE(0x31, 0x31) AM_WRITE(banksel2_w) + AM_RANGE(0x30, 0x30) AM_DEVWRITE("mainlatch1", ls259_device, write_nibble) + AM_RANGE(0x31, 0x31) AM_DEVWRITE("mainlatch2", ls259_device, write_nibble) AM_RANGE(0x32, 0x32) AM_WRITE(input_sel1_w) AM_RANGE(0x33, 0x33) AM_WRITE(input_sel2_w) AM_RANGE(0x34, 0x34) AM_WRITE(dac_adr_s_w) @@ -444,7 +445,7 @@ void mjsister_state::machine_start() { uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x8000); + m_rombank->configure_entries(0, 4, &ROM[0x10000], 0x8000); m_dac_timer = timer_alloc(TIMER_DAC); @@ -455,8 +456,7 @@ void mjsister_state::machine_start() save_item(NAME(m_colorbank)); save_item(NAME(m_input_sel1)); save_item(NAME(m_input_sel2)); - save_item(NAME(m_rombank0)); - save_item(NAME(m_rombank1)); + save_item(NAME(m_irq_enable)); save_item(NAME(m_dac_adr)); save_item(NAME(m_dac_bank)); save_item(NAME(m_dac_adr_s)); @@ -470,18 +470,19 @@ void mjsister_state::machine_reset() m_flip_screen = 0; m_video_enable = 0; m_screen_redraw = 0; - m_vrambank = 0; - m_colorbank = 0; m_input_sel1 = 0; m_input_sel2 = 0; - m_rombank0 = 0; - m_rombank1 = 0; m_dac_adr = 0; m_dac_bank = 0; m_dac_adr_s = 0; m_dac_adr_e = 0; } +INTERRUPT_GEN_MEMBER(mjsister_state::interrupt) +{ + if (m_irq_enable) + m_maincpu->set_input_line(0, ASSERT_LINE); +} static MACHINE_CONFIG_START( mjsister ) @@ -489,8 +490,22 @@ static MACHINE_CONFIG_START( mjsister ) MCFG_CPU_ADD("maincpu", Z80, MCLK/2) /* 6.000 MHz */ MCFG_CPU_PROGRAM_MAP(mjsister_map) MCFG_CPU_IO_MAP(mjsister_io_map) - MCFG_CPU_PERIODIC_INT_DRIVER(mjsister_state, irq0_line_hold, 2*60) - + MCFG_CPU_PERIODIC_INT_DRIVER(mjsister_state, interrupt, 2*60) + + MCFG_DEVICE_ADD("mainlatch1", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mjsister_state, rombank_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mjsister_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mjsister_state, colorbank_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(mjsister_state, colorbank_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mjsister_state, colorbank_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mjsister_state, video_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(mjsister_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(mjsister_state, vrambank_w)) + + MCFG_DEVICE_ADD("mainlatch2", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mjsister_state, coin_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mjsister_state, dac_bank_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(mjsister_state, rombank_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/mouser.cpp b/src/mame/drivers/mouser.cpp index fe3def5cf69..7f6fa859b14 100644 --- a/src/mame/drivers/mouser.cpp +++ b/src/mame/drivers/mouser.cpp @@ -18,6 +18,7 @@ #include "includes/mouser.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "screen.h" #include "speaker.h" @@ -25,15 +26,14 @@ /* Mouser has external masking circuitry around * the NMI input on the main CPU */ -WRITE8_MEMBER(mouser_state::mouser_nmi_enable_w) +WRITE_LINE_MEMBER(mouser_state::nmi_enable_w) { - //logerror("nmi_enable %02x\n", data); - m_nmi_enable = data; + m_nmi_enable = state; } INTERRUPT_GEN_MEMBER(mouser_state::mouser_nmi_interrupt) { - if (BIT(m_nmi_enable, 0)) + if (m_nmi_enable) nmi_line_pulse(device); } @@ -60,7 +60,7 @@ WRITE8_MEMBER(mouser_state::mouser_sound_nmi_clear_w) INTERRUPT_GEN_MEMBER(mouser_state::mouser_sound_nmi_assert) { - if (BIT(m_nmi_enable, 0)) + if (m_nmi_enable) device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } @@ -71,9 +71,8 @@ static ADDRESS_MAP_START( mouser_map, AS_PROGRAM, 8, mouser_state ) AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("videoram") AM_RANGE(0x9800, 0x9cff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x9c00, 0x9fff) AM_RAM AM_SHARE("colorram") - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(mouser_nmi_enable_w) /* bit 0 = NMI Enable */ - AM_RANGE(0xa001, 0xa001) AM_WRITE(mouser_flip_screen_x_w) - AM_RANGE(0xa002, 0xa002) AM_WRITE(mouser_flip_screen_y_w) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xa800, 0xa800) AM_READ_PORT("SYSTEM") AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_RANGE(0xb800, 0xb800) AM_READ_PORT("P2") AM_WRITE(mouser_sound_interrupt_w) /* byte to sound cpu */ @@ -198,7 +197,6 @@ void mouser_state::machine_start() void mouser_state::machine_reset() { m_sound_byte = 0; - m_nmi_enable = 0; } static MACHINE_CONFIG_START( mouser ) @@ -214,6 +212,10 @@ static MACHINE_CONFIG_START( mouser ) MCFG_CPU_IO_MAP(mouser_sound_io_map) MCFG_CPU_PERIODIC_INT_DRIVER(mouser_state, mouser_sound_nmi_assert, 4*60) /* ??? This controls the sound tempo */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // type unconfirmed + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mouser_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mouser_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mouser_state, flip_screen_y_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/nemesis.cpp b/src/mame/drivers/nemesis.cpp index e7a9a45e350..a7c03ff5d02 100644 --- a/src/mame/drivers/nemesis.cpp +++ b/src/mame/drivers/nemesis.cpp @@ -54,6 +54,7 @@ So this is the correct behavior of real hardware, not an emulation bug. #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" @@ -103,55 +104,40 @@ TIMER_DEVICE_CALLBACK_MEMBER(nemesis_state::gx400_interrupt) } -WRITE16_MEMBER(nemesis_state::gx400_irq1_enable_word_w) +WRITE_LINE_MEMBER(nemesis_state::irq_enable_w) { - if (ACCESSING_BITS_0_7) - m_irq1_on = data & 0x0001; - - if (ACCESSING_BITS_8_15) - machine().bookkeeping().coin_lockout_w(1, data & 0x0100); + m_irq_on = state; } -WRITE16_MEMBER(nemesis_state::gx400_irq2_enable_word_w) +WRITE_LINE_MEMBER(nemesis_state::irq1_enable_w) { - if (ACCESSING_BITS_0_7) - m_irq2_on = data & 0x0001; - - if (ACCESSING_BITS_8_15) - machine().bookkeeping().coin_lockout_w(0, data & 0x0100); + m_irq1_on = state; } -WRITE16_MEMBER(nemesis_state::gx400_irq4_enable_word_w) +WRITE_LINE_MEMBER(nemesis_state::irq2_enable_w) { - if (ACCESSING_BITS_8_15) - m_irq4_on = data & 0x0100; + m_irq2_on = state; } -WRITE16_MEMBER(nemesis_state::nemesis_irq_enable_word_w) +WRITE_LINE_MEMBER(nemesis_state::irq4_enable_w) { - if (ACCESSING_BITS_0_7) - m_irq_on = data & 0xff; - - if (ACCESSING_BITS_8_15) - machine().bookkeeping().coin_lockout_global_w(data & 0x0100); + m_irq4_on = state; } -WRITE16_MEMBER(nemesis_state::konamigt_irq_enable_word_w) +WRITE_LINE_MEMBER(nemesis_state::coin1_lockout_w) { - if (ACCESSING_BITS_0_7) - m_irq_on = data & 0xff; - - if (ACCESSING_BITS_8_15) - machine().bookkeeping().coin_lockout_w(1, data & 0x0100); + machine().bookkeeping().coin_lockout_w(0, state); } -WRITE16_MEMBER(nemesis_state::konamigt_irq2_enable_word_w) +WRITE_LINE_MEMBER(nemesis_state::coin2_lockout_w) { - if (ACCESSING_BITS_0_7) - m_irq2_on = data & 0xff; + machine().bookkeeping().coin_lockout_w(1, state); +} - if (ACCESSING_BITS_8_15) - machine().bookkeeping().coin_lockout_w(0, data & 0x0100); +WRITE_LINE_MEMBER(nemesis_state::sound_irq_w) +{ + if (state) + m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } @@ -286,12 +272,8 @@ static ADDRESS_MAP_START( nemesis_map, AS_PROGRAM, 16, nemesis_state ) AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1") AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2") AM_RANGE(0x05cc06, 0x05cc07) AM_READ_PORT("TEST") - AM_RANGE(0x05e000, 0x05e001) AM_WRITE(nemesis_irq_enable_word_w) - AM_RANGE(0x05e002, 0x05e003) AM_WRITENOP /* not used irq */ - AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w) - AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w) - AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* not used irq */ - AM_RANGE(0x05e00e, 0x05e00f) AM_WRITENOP /* not used irq */ + AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00) + AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff) AM_RANGE(0x060000, 0x067fff) AM_RAM /* WORK RAM */ ADDRESS_MAP_END @@ -320,12 +302,8 @@ static ADDRESS_MAP_START( gx400_map, AS_PROGRAM, 16, nemesis_state ) AM_RANGE(0x05cc00, 0x05cc01) AM_READ_PORT("IN0") AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1") AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2") - AM_RANGE(0x05e000, 0x05e001) AM_WRITE(gx400_irq2_enable_word_w) /* ?? */ - AM_RANGE(0x05e002, 0x05e003) AM_WRITE(gx400_irq1_enable_word_w) /* ?? */ - AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w) - AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w) - AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* IRQ acknowledge??? */ - AM_RANGE(0x05e00e, 0x05e00f) AM_WRITE(gx400_irq4_enable_word_w) /* ?? */ + AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00) + AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff) AM_RANGE(0x060000, 0x07ffff) AM_RAM /* WORK RAM */ AM_RANGE(0x080000, 0x0bffff) AM_ROM ADDRESS_MAP_END @@ -352,12 +330,8 @@ static ADDRESS_MAP_START( konamigt_map, AS_PROGRAM, 16, nemesis_state ) AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1") AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2") AM_RANGE(0x05cc06, 0x05cc07) AM_READ_PORT("TEST") - AM_RANGE(0x05e000, 0x05e001) AM_WRITE(konamigt_irq2_enable_word_w) - AM_RANGE(0x05e002, 0x05e003) AM_WRITE(konamigt_irq_enable_word_w) - AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w) - AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w) - AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* not used irq */ - AM_RANGE(0x05e00e, 0x05e00f) AM_WRITENOP /* not used irq */ + AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00) + AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff) AM_RANGE(0x060000, 0x067fff) AM_RAM /* WORK RAM */ AM_RANGE(0x070000, 0x070001) AM_READ(konamigt_input_word_r) ADDRESS_MAP_END @@ -386,12 +360,8 @@ static ADDRESS_MAP_START( rf2_gx400_map, AS_PROGRAM, 16, nemesis_state ) AM_RANGE(0x05cc00, 0x05cc01) AM_READ_PORT("IN0") AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1") AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2") - AM_RANGE(0x05e000, 0x05e001) AM_WRITE(gx400_irq2_enable_word_w) /* ?? */ - AM_RANGE(0x05e002, 0x05e003) AM_WRITE(gx400_irq1_enable_word_w) /* ?? */ - AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w) - AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w) - AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* IRQ acknowledge??? */ - AM_RANGE(0x05e00e, 0x05e00f) AM_WRITE(gx400_irq4_enable_word_w) /* ?? */ + AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00) + AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff) AM_RANGE(0x060000, 0x067fff) AM_RAM /* WORK RAM */ AM_RANGE(0x070000, 0x070001) AM_READ(konamigt_input_word_r) AM_RANGE(0x080000, 0x0bffff) AM_ROM @@ -606,9 +576,7 @@ static ADDRESS_MAP_START( hcrash_map, AS_PROGRAM, 16, nemesis_state ) AM_RANGE(0x0c0008, 0x0c0009) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) /* watchdog probably */ AM_RANGE(0x0c000a, 0x0c000b) AM_READ_PORT("IN0") AM_RANGE(0x0c2000, 0x0c2001) AM_READ(konamigt_input_word_r) /* Konami GT control */ - AM_RANGE(0x0c2800, 0x0c2801) AM_WRITENOP - AM_RANGE(0x0c2802, 0x0c2803) AM_WRITE(gx400_irq2_enable_word_w) // or at 0x0c2804 ? - AM_RANGE(0x0c2804, 0x0c2805) AM_WRITENOP + AM_RANGE(0x0c2800, 0x0c280f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff) // ??? AM_RANGE(0x0c4000, 0x0c4001) AM_READ_PORT("IN1") AM_WRITE(selected_ip_word_w) AM_RANGE(0x0c4002, 0x0c4003) AM_READ(selected_ip_word_r) AM_WRITENOP /* WEC Le Mans 24 control. latches the value read previously */ AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(nemesis_videoram2_word_w) AM_SHARE("videoram2") /* VRAM */ @@ -1468,9 +1436,6 @@ void nemesis_state::machine_start() void nemesis_state::machine_reset() { m_irq_on = 0; - m_irq1_on = 0; - m_irq2_on = 0; - m_irq4_on = 0; m_gx400_irq1_cnt = 0; m_frame_counter = 1; m_selected_ip = 0; @@ -1491,6 +1456,16 @@ static MACHINE_CONFIG_START( nemesis ) MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* From schematics, should be accurate */ MCFG_CPU_PROGRAM_MAP(sound_map) /* fixed */ + MCFG_DEVICE_ADD("outlatch", LS259, 0) // 13J + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w)) + MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(nemesis_state, coin2_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w)) + + MCFG_DEVICE_ADD("intlatch", LS259, 0) // 11K + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -1548,6 +1523,18 @@ static MACHINE_CONFIG_START( gx400 ) MCFG_CPU_PROGRAM_MAP(gx400_sound_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */ + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(nemesis_state, irq4_enable_w)) // ?? + + MCFG_DEVICE_ADD("intlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq1_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -1608,6 +1595,17 @@ static MACHINE_CONFIG_START( konamigt ) MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* 3.579545 MHz */ MCFG_CPU_PROGRAM_MAP(sound_map) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w)) + + MCFG_DEVICE_ADD("intlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -1665,6 +1663,18 @@ static MACHINE_CONFIG_START( rf2_gx400 ) MCFG_CPU_PROGRAM_MAP(gx400_sound_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */ + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(nemesis_state, irq4_enable_w)) // ?? + + MCFG_DEVICE_ADD("intlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq1_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -1922,6 +1932,11 @@ static MACHINE_CONFIG_START( hcrash ) MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* 3.579545 MHz */ MCFG_CPU_PROGRAM_MAP(sal_sound_map) + MCFG_DEVICE_ADD("intlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // ? + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w)) // or at 0x0c2804 ? + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // ? + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -2672,6 +2687,18 @@ static MACHINE_CONFIG_START( bubsys ) MCFG_CPU_PROGRAM_MAP(gx400_sound_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */ + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(nemesis_state, irq4_enable_w)) // ?? + + MCFG_DEVICE_ADD("intlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq1_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/orbit.cpp b/src/mame/drivers/orbit.cpp index fe05f93004f..6006cf2ed83 100644 --- a/src/mame/drivers/orbit.cpp +++ b/src/mame/drivers/orbit.cpp @@ -39,7 +39,7 @@ Atari Orbit Driver TIMER_DEVICE_CALLBACK_MEMBER(orbit_state::nmi_32v) { int scanline = param; - int nmistate = (scanline & 32) && (m_misc_flags & 4); + int nmistate = (scanline & 32) && m_latch->q2_r(); m_maincpu->set_input_line(INPUT_LINE_NMI, nmistate ? ASSERT_LINE : CLEAR_LINE); } @@ -64,37 +64,23 @@ INTERRUPT_GEN_MEMBER(orbit_state::orbit_interrupt) * *************************************/ -void orbit_state::update_misc_flags(address_space &space, uint8_t val) -{ - m_misc_flags = val; - - /* BIT0 => UNUSED */ - /* BIT1 => LOCKOUT */ - /* BIT2 => NMI ENABLE */ - /* BIT3 => HEAT RST LED */ - /* BIT4 => PANEL BUS OC */ - /* BIT5 => PANEL STROBE */ - /* BIT6 => HYPER LED */ - /* BIT7 => WARNING SND */ - m_discrete->write(space, ORBIT_WARNING_EN, BIT(m_misc_flags, 7)); +WRITE_LINE_MEMBER(orbit_state::coin_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(0, !state); + machine().bookkeeping().coin_lockout_w(1, !state); +} - output().set_led_value(0, BIT(m_misc_flags, 3)); - output().set_led_value(1, BIT(m_misc_flags, 6)); - machine().bookkeeping().coin_lockout_w(0, !BIT(m_misc_flags, 1)); - machine().bookkeeping().coin_lockout_w(1, !BIT(m_misc_flags, 1)); +WRITE_LINE_MEMBER(orbit_state::heat_rst_led_w) +{ + output().set_led_value(0, state); } -WRITE8_MEMBER(orbit_state::orbit_misc_w) +WRITE_LINE_MEMBER(orbit_state::hyper_led_w) { - uint8_t bit = offset >> 1; - - if (offset & 1) - update_misc_flags(space, m_misc_flags | (1 << bit)); - else - update_misc_flags(space, m_misc_flags & ~(1 << bit)); + output().set_led_value(1, state); } @@ -118,7 +104,7 @@ static ADDRESS_MAP_START( orbit_map, AS_PROGRAM, 8, orbit_state ) AM_RANGE(0x3800, 0x3800) AM_MIRROR(0x00ff) AM_WRITE(orbit_note_w) AM_RANGE(0x3900, 0x3900) AM_MIRROR(0x00ff) AM_WRITE(orbit_noise_amp_w) AM_RANGE(0x3a00, 0x3a00) AM_MIRROR(0x00ff) AM_WRITE(orbit_note_amp_w) - AM_RANGE(0x3c00, 0x3c0f) AM_MIRROR(0x00f0) AM_WRITE(orbit_misc_w) + AM_RANGE(0x3c00, 0x3c0f) AM_MIRROR(0x00f0) AM_DEVWRITE("latch", f9334_device, write_a0) AM_RANGE(0x3e00, 0x3e00) AM_MIRROR(0x00ff) AM_WRITE(orbit_noise_rst_w) AM_RANGE(0x3f00, 0x3f00) AM_MIRROR(0x00ff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x6000, 0x7fff) AM_ROM @@ -274,13 +260,11 @@ GFXDECODE_END void orbit_state::machine_start() { - save_item(NAME(m_misc_flags)); save_item(NAME(m_flip_screen)); } void orbit_state::machine_reset() { - update_misc_flags(generic_space(), 0); m_flip_screen = 0; } @@ -300,6 +284,20 @@ static MACHINE_CONFIG_START( orbit ) MCFG_TIMER_DRIVER_ADD_SCANLINE("32v", orbit_state, nmi_32v, "screen", 0, 32) + MCFG_DEVICE_ADD("latch", F9334, 0) // M6 + /* BIT0 => UNUSED */ + /* BIT1 => LOCKOUT */ + /* BIT2 => NMI ENABLE */ + /* BIT3 => HEAT RST LED */ + /* BIT4 => PANEL BUS OC */ + /* BIT5 => PANEL STROBE */ + /* BIT6 => HYPER LED */ + /* BIT7 => WARNING SND */ + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(orbit_state, coin_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(orbit_state, heat_rst_led_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(orbit_state, hyper_led_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ORBIT_WARNING_EN>)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp index c012fbe91b5..f42fee085f0 100644 --- a/src/mame/drivers/pacman.cpp +++ b/src/mame/drivers/pacman.cpp @@ -345,7 +345,7 @@ Boards: #include "cpu/s2650/s2650.h" #include "cpu/z80/z80.h" #include "machine/nvram.h" -#include "machine/watchdog.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "sound/sn76496.h" #include "screen.h" @@ -415,9 +415,9 @@ INTERRUPT_GEN_MEMBER(pacman_state::vblank_nmi) device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); } -WRITE8_MEMBER(pacman_state::irq_mask_w) +WRITE_LINE_MEMBER(pacman_state::irq_mask_w) { - m_irq_mask = data & 1; + m_irq_mask = state; } WRITE8_MEMBER(pacman_state::pacman_interrupt_vector_w) @@ -507,21 +507,27 @@ WRITE8_MEMBER(pacman_state::nmouse_interrupt_vector_w) * *************************************/ -WRITE8_MEMBER(pacman_state::pacman_leds_w) +WRITE_LINE_MEMBER(pacman_state::led1_w) { - output().set_led_value(offset,data & 1); + output().set_led_value(0, state); } -WRITE8_MEMBER(pacman_state::pacman_coin_counter_w) +WRITE_LINE_MEMBER(pacman_state::led2_w) { - machine().bookkeeping().coin_counter_w(offset,data & 1); + output().set_led_value(1, state); } -WRITE8_MEMBER(pacman_state::pacman_coin_lockout_global_w) +WRITE_LINE_MEMBER(pacman_state::coin_counter_w) { - machine().bookkeeping().coin_lockout_global_w(~data & 0x01); + machine().bookkeeping().coin_counter_w(0, state); +} + + +WRITE_LINE_MEMBER(pacman_state::coin_lockout_global_w) +{ + machine().bookkeeping().coin_lockout_global_w(!state); } @@ -971,13 +977,7 @@ static ADDRESS_MAP_START( pacman_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP - AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w) - AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w) - AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", addressable_latch_device, write_d0) AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP @@ -988,8 +988,6 @@ static ADDRESS_MAP_START( pacman_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") ADDRESS_MAP_END -// The Pacman code uses $5004 and $5005 for LED's and $5007 for coin lockout. This hardware does not -// exist on any Pacman or Puckman board I have seen. DW static ADDRESS_MAP_START( patched_opcodes_map, AS_OPCODES, 8, pacman_state ) AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM AM_SHARE("patched_opcodes") @@ -1003,13 +1001,7 @@ static ADDRESS_MAP_START( birdiy_map, AS_PROGRAM, 8, pacman_state ) // AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w) -// AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) -// AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP - AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w) -// AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w) -// AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w) - AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x5080, 0x509f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x50a0, 0x50af) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") // AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP @@ -1028,13 +1020,7 @@ static ADDRESS_MAP_START( mspacman_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP - AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w) - AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_lockout_global_w) - AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP @@ -1068,13 +1054,7 @@ static ADDRESS_MAP_START( woodpek_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP - AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w) - AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w) - AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP @@ -1101,13 +1081,7 @@ static ADDRESS_MAP_START( numcrash_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4c00, 0x4fef) AM_RAM AM_RANGE(0x4ff0, 0x4fff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) -// AM_RANGE(0x5002, 0x5002) AM_WRITENOP -// AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w) -// AM_RANGE(0x5004, 0x5005) AM_WRITENOP // AM_WRITE(pacman_leds_w) -// AM_RANGE(0x5006, 0x5006) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w) -// AM_RANGE(0x5007, 0x5007) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x5060, 0x506f) AM_WRITEONLY AM_SHARE("spriteram2") // AM_RANGE(0x5070, 0x507f) AM_WRITENOP @@ -1129,17 +1103,12 @@ static ADDRESS_MAP_START( alibaba_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4ef0, 0x4eff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x4f00, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITE(pacman_leds_w) - AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_lockout_global_w) - AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("latch1", ls259_device, write_d0) AM_RANGE(0x5040, 0x506f) AM_MIRROR(0xaf00) AM_WRITE(alibaba_sound_w) /* the sound region is not contiguous */ AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") /* actually at 5050-505f, here to point to free RAM */ AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x50c1, 0x50c1) AM_MIRROR(0xaf00) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x50c2, 0x50c2) AM_MIRROR(0xaf00) AM_WRITE(irq_mask_w) - AM_RANGE(0x50c3, 0x50ff) AM_MIRROR(0xaf00) AM_WRITENOP + AM_RANGE(0x50c0, 0x50c7) AM_MIRROR(0xaf00) AM_DEVWRITE("latch2", ls259_device, write_d0) AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") @@ -1158,13 +1127,7 @@ static ADDRESS_MAP_START( dremshpr_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") AM_RANGE(0x4800, 0x4fef) AM_MIRROR(0xa000) AM_RAM AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w) -// AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP /* unknown */ - AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w) - AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w) - AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP @@ -1189,13 +1152,7 @@ static ADDRESS_MAP_START( epos_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP - AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w) - AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w) - AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP @@ -1216,10 +1173,7 @@ static ADDRESS_MAP_START( s2650games_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x1490, 0x149f) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("s2650_spriteram") AM_RANGE(0x14a0, 0x14bf) AM_MIRROR(0x6000) AM_WRITE(s2650games_tilesbank_w) AM_SHARE("s2650_tileram") AM_RANGE(0x14c0, 0x14ff) AM_MIRROR(0x6000) AM_WRITEONLY - AM_RANGE(0x1500, 0x1502) AM_MIRROR(0x6000) AM_WRITENOP - AM_RANGE(0x1503, 0x1503) AM_MIRROR(0x6000) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x1504, 0x1506) AM_MIRROR(0x6000) AM_WRITENOP - AM_RANGE(0x1507, 0x1507) AM_MIRROR(0x6000) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x1500, 0x1507) AM_MIRROR(0x6000) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x1508, 0x155f) AM_MIRROR(0x6000) AM_WRITEONLY AM_RANGE(0x1560, 0x156f) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x1570, 0x157f) AM_MIRROR(0x6000) AM_WRITEONLY @@ -1243,10 +1197,7 @@ static ADDRESS_MAP_START( rocktrv2_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") AM_RANGE(0x4c00, 0x4fff) AM_RAM - AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x5007, 0x5007) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x5fe0, 0x5fe3) AM_WRITE(rocktrv2_prot_data_w) AM_SHARE("rocktrv2_prot") @@ -1270,10 +1221,7 @@ static ADDRESS_MAP_START( bigbucks_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") AM_RANGE(0x4c00, 0x4fff) AM_RAM - AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x5007, 0x5007) AM_WRITENOP /*?*/ + AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x5000, 0x503f) AM_READ_PORT("IN0") @@ -1293,13 +1241,7 @@ static ADDRESS_MAP_START( mschamp_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP - AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w) - AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w) - AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP @@ -1319,12 +1261,8 @@ static ADDRESS_MAP_START( superabc_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") AM_RANGE(0x4800, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("28c16.u17") // nvram AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf3c) AM_WRITE(superabc_bank_w) - AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITE(pacman_leds_w) - AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP @@ -1346,13 +1284,7 @@ static ADDRESS_MAP_START( crushs_map, AS_PROGRAM, 8, pacman_state ) AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w) - AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP - AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w) - AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w) - AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_WRITENOP // doesn't use pacman sound hw AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP @@ -1376,13 +1308,7 @@ static ADDRESS_MAP_START( pengojpm_map, AS_PROGRAM, 8, pacman_state ) // AM_RANGE(0x8800, 0x8bff) AM_READ(pacman_read_nop) AM_WRITENOP AM_RANGE(0x8c00, 0x8fef) AM_RAM AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x9000, 0x9000) AM_WRITE(irq_mask_w) - AM_RANGE(0x9001, 0x9001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x9002, 0x9002) AM_WRITENOP - AM_RANGE(0x9003, 0x9003) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x9004, 0x9005) AM_WRITENOP // AM_WRITE(pacman_leds_w) - AM_RANGE(0x9006, 0x9006) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w) - AM_RANGE(0x9007, 0x9007) AM_WRITE(pacman_coin_counter_w) + AM_RANGE(0x9000, 0x9007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x9040, 0x905f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) AM_RANGE(0x9060, 0x906f) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x9070, 0x907f) AM_WRITENOP @@ -3551,6 +3477,17 @@ static MACHINE_CONFIG_START( pacman ) MCFG_CPU_IO_MAP(writeport) MCFG_CPU_VBLANK_INT_DRIVER("screen", pacman_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 74LS259 at 8K or 4099 at 7K + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pacman_state, irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pacman_state, flipscreen_w)) + //MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pacman_state, led1_w)) + //MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pacman_state, led2_w)) + //MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w)) +// The Pacman code uses $5004 and $5005 for LED's and $5007 for coin lockout. This hardware does not +// exist on any Pacman or Puckman board I have seen. DW + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 16) @@ -3575,9 +3512,12 @@ static MACHINE_CONFIG_START( pacman ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( pacmanp, pacman ) +static MACHINE_CONFIG_DERIVED( maketrax, pacman ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_DECRYPTED_OPCODES_MAP(patched_opcodes_map) + + MCFG_DEVICE_MODIFY("mainlatch") // 8K on original boards + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // outputs 4-7 go to protection chip at 6P MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( pengojpm, pacman ) @@ -3593,6 +3533,15 @@ static MACHINE_CONFIG_DERIVED( birdiy, pacman ) MCFG_CPU_PROGRAM_MAP(birdiy_map) MCFG_CPU_IO_MAP(0) + MCFG_DEVICE_REPLACE("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(pacman_state, irq_mask_w)) + //MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pacman_state, flipscreen_w)) + //MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pacman_state, led1_w)) + //MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pacman_state, led2_w)) + //MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w)) + MCFG_VIDEO_START_OVERRIDE(pacman_state,birdiy) MACHINE_CONFIG_END @@ -3620,6 +3569,9 @@ static MACHINE_CONFIG_DERIVED( mspacman, pacman ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(mspacman_map) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w)) MACHINE_CONFIG_END @@ -3635,6 +3587,10 @@ static MACHINE_CONFIG_DERIVED( numcrash, pacman ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(numcrash_map) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // ??? + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ??? MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( alibaba, pacman ) @@ -3642,6 +3598,17 @@ static MACHINE_CONFIG_DERIVED( alibaba, pacman ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(alibaba_map) + + MCFG_DEVICE_REMOVE("mainlatch") + MCFG_DEVICE_ADD("latch1", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pacman_state, led1_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pacman_state, led2_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w)) + MCFG_DEVICE_ADD("latch2", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(pacman_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pacman_state, irq_mask_w)) MACHINE_CONFIG_END @@ -3657,6 +3624,9 @@ static MACHINE_CONFIG_DERIVED( dremshpr, pacman ) MCFG_DEVICE_REMOVE("namco") MCFG_SOUND_ADD("ay8910", AY8910, 14318000/8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) MACHINE_CONFIG_END @@ -3716,6 +3686,9 @@ static MACHINE_CONFIG_DERIVED( vanvan, pacman ) MCFG_SOUND_ADD("sn2", SN76496, 1789750) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) MACHINE_CONFIG_END @@ -3729,6 +3702,9 @@ static MACHINE_CONFIG_DERIVED( bigbucks, pacman ) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) /*?*/ MACHINE_CONFIG_END @@ -3742,6 +3718,16 @@ static MACHINE_CONFIG_DERIVED( s2650games, pacman ) MCFG_CPU_VBLANK_INT_DRIVER("screen", pacman_state, s2650_interrupt) MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pacman_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w)) + MCFG_GFXDECODE_MODIFY("gfxdecode", s2650games) MCFG_SCREEN_MODIFY("screen") @@ -7330,20 +7316,20 @@ GAME( 1985, jumpshotp,jumpshot, pacman, jumpshotp,pacman_state, jumpshot, ROT GAME( 1985, shootbul, 0, pacman, shootbul, pacman_state, jumpshot, ROT90, "Bally Midway", "Shoot the Bull", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, crush, 0, pacmanp, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Samno Electric, Ltd.", "Crush Roller (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, crush, 0, maketrax, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Samno Electric, Ltd.", "Crush Roller (set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, crush2, crush, pacman, maketrax, pacman_state, 0, ROT90, "Alpha Denshi Co. / Kural Esco Electric, Ltd.", "Crush Roller (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, crush3, crush, pacmanp, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Crush Roller (set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, crush3, crush, maketrax, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Crush Roller (set 3)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, crush4, crush, pacman, maketrax, pacman_state, eyes, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Crush Roller (set 4)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, crush5, crush, crush4, crush4, pacman_state, 0, ROT90, "Alpha Denshi Co. / Kural TWT", "Crush Roller (set 5)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, maketrax, crush, pacmanp, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, maketrxb, crush, pacmanp, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, korosuke, crush, pacmanp, korosuke, pacman_state, korosuke, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Korosuke Roller (Japan)", MACHINE_SUPPORTS_SAVE ) // ADK considers it a sequel? +GAME( 1981, maketrax, crush, maketrax, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, maketrxb, crush, maketrax, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, korosuke, crush, maketrax, korosuke, pacman_state, korosuke, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Korosuke Roller (Japan)", MACHINE_SUPPORTS_SAVE ) // ADK considers it a sequel? GAME( 1981, crushrlf, crush, pacman, maketrax, pacman_state, 0, ROT90, "bootleg", "Crush Roller (Famaresa PCB)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, crushbl, crush, pacman, maketrax, pacman_state, 0, ROT90, "bootleg", "Crush Roller (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, crushbl2, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, crushbl3, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, crushbl2, crush, maketrax, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, crushbl3, crush, maketrax, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 3)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, crushs, crush, crushs, crushs, pacman_state, 0, ROT90, "bootleg (Sidam)", "Crush Roller (bootleg set 4)", MACHINE_SUPPORTS_SAVE ) // Sidam PCB, no Sidam text -GAME( 1981, mbrush, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg (Olympia)", "Magic Brush (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, mbrush, crush, maketrax, mbrush, pacman_state, maketrax, ROT90, "bootleg (Olympia)", "Magic Brush (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE ) GAME( 1981, paintrlr, crush, pacman, paintrlr, pacman_state, 0, ROT90, "bootleg", "Paint Roller (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, eyes, 0, pacman, eyes, pacman_state, eyes, ROT90, "Techstar (Rock-Ola license)", "Eyes (US set 1)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/pandoras.cpp b/src/mame/drivers/pandoras.cpp index 00a0e1d2ddb..8960cafab98 100644 --- a/src/mame/drivers/pandoras.cpp +++ b/src/mame/drivers/pandoras.cpp @@ -30,6 +30,7 @@ Boards: #include "cpu/m6809/m6809.h" #include "cpu/mcs48/mcs48.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" @@ -46,49 +47,27 @@ Boards: INTERRUPT_GEN_MEMBER(pandoras_state::pandoras_master_interrupt) { if (m_irq_enable_a) - device.execute().set_input_line(M6809_IRQ_LINE, HOLD_LINE); + device.execute().set_input_line(M6809_IRQ_LINE, ASSERT_LINE); } INTERRUPT_GEN_MEMBER(pandoras_state::pandoras_slave_interrupt) { if (m_irq_enable_b) - device.execute().set_input_line(M6809_IRQ_LINE, HOLD_LINE); + device.execute().set_input_line(M6809_IRQ_LINE, ASSERT_LINE); } -WRITE8_MEMBER(pandoras_state::pandoras_int_control_w) +WRITE_LINE_MEMBER(pandoras_state::cpua_irq_enable_w) { - /* byte 0: irq enable (CPU A) - byte 2: coin counter 1 - byte 3: coin counter 2 - byte 5: flip screen - byte 6: irq enable (CPU B) - byte 7: NMI to CPU B - - other bytes unknown */ - - - switch (offset) - { - case 0x00: if (!data) - m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); - m_irq_enable_a = data; - break; - case 0x02: machine().bookkeeping().coin_counter_w(0,data & 0x01); - break; - case 0x03: machine().bookkeeping().coin_counter_w(1,data & 0x01); - break; - case 0x05: pandoras_flipscreen_w(space, 0, data); - break; - case 0x06: if (!data) - m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); - m_irq_enable_b = data; - break; - case 0x07: m_subcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); - break; - - default: logerror("%04x: (irq_ctrl) write %02x to %02x\n",space.device().safe_pc(), data, offset); - break; - } + if (!state) + m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + m_irq_enable_a = state; +} + +WRITE_LINE_MEMBER(pandoras_state::cpub_irq_enable_w) +{ + if (!state) + m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + m_irq_enable_b = state; } WRITE8_MEMBER(pandoras_state::pandoras_cpua_irqtrigger_w) @@ -127,13 +106,22 @@ WRITE8_MEMBER(pandoras_state::pandoras_z80_irqtrigger_w) m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } +WRITE_LINE_MEMBER(pandoras_state::coin_counter_1_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(pandoras_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} static ADDRESS_MAP_START( pandoras_master_map, AS_PROGRAM, 8, pandoras_state ) AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("spriteram") /* Work RAM (Shared with CPU B) */ AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(pandoras_cram_w) AM_SHARE("colorram") /* Color RAM (shared with CPU B) */ AM_RANGE(0x1400, 0x17ff) AM_RAM_WRITE(pandoras_vram_w) AM_SHARE("videoram") /* Video RAM (shared with CPU B) */ - AM_RANGE(0x1800, 0x1807) AM_WRITE(pandoras_int_control_w) /* INT control */ + AM_RANGE(0x1800, 0x1807) AM_DEVWRITE("mainlatch", ls259_device, write_d0) /* INT control */ AM_RANGE(0x1a00, 0x1a00) AM_WRITE(pandoras_scrolly_w) /* bg scroll */ AM_RANGE(0x1c00, 0x1c00) AM_WRITE(pandoras_z80_irqtrigger_w) /* cause INT on the Z80 */ AM_RANGE(0x1e00, 0x1e00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* sound command to the Z80 */ @@ -149,7 +137,7 @@ static ADDRESS_MAP_START( pandoras_slave_map, AS_PROGRAM, 8, pandoras_state ) AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(pandoras_cram_w) AM_SHARE("colorram") /* Color RAM (shared with CPU A) */ AM_RANGE(0x1400, 0x17ff) AM_RAM_WRITE(pandoras_vram_w) AM_SHARE("videoram") /* Video RAM (shared with CPU A) */ AM_RANGE(0x1800, 0x1800) AM_READ_PORT("DSW1") - AM_RANGE(0x1800, 0x1807) AM_WRITE(pandoras_int_control_w) /* INT control */ + AM_RANGE(0x1800, 0x1807) AM_DEVWRITE("mainlatch", ls259_device, write_d0) /* INT control */ AM_RANGE(0x1a00, 0x1a00) AM_READ_PORT("SYSTEM") AM_RANGE(0x1a01, 0x1a01) AM_READ_PORT("P1") AM_RANGE(0x1a02, 0x1a02) AM_READ_PORT("P2") @@ -304,11 +292,7 @@ void pandoras_state::machine_reset() { m_firq_old_data_a = 0; m_firq_old_data_b = 0; - m_irq_enable_a = 0; - m_irq_enable_b = 0; m_i8039_status = 0; - - m_flipscreen = 0; } READ8_MEMBER(pandoras_state::pandoras_portA_r) @@ -343,6 +327,15 @@ static MACHINE_CONFIG_START( pandoras ) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - needed for correct synchronization of the sound CPUs */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // C3 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pandoras_state, cpua_irq_enable_w)) // ENA + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // OFSET - unknown + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pandoras_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pandoras_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pandoras_state, flipscreen_w)) // FLIP + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pandoras_state, cpub_irq_enable_w)) // ENB + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(INPUTLINE("sub", INPUT_LINE_NMI)) MCFG_DEVCB_INVERT // RESETB + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/pengo.cpp b/src/mame/drivers/pengo.cpp index 923150fbe72..4157f5c89a2 100644 --- a/src/mame/drivers/pengo.cpp +++ b/src/mame/drivers/pengo.cpp @@ -67,6 +67,7 @@ #include "includes/pacman.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/segacrpt_device.h" #include "screen.h" #include "speaker.h" @@ -77,8 +78,9 @@ class pengo_state : public pacman_state public: pengo_state(const machine_config &mconfig, device_type type, const char *tag) : pacman_state(mconfig, type, tag), m_decrypted_opcodes(*this, "decrypted_opcodes") { } - DECLARE_WRITE8_MEMBER(pengo_coin_counter_w); - DECLARE_WRITE8_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); DECLARE_DRIVER_INIT(penta); INTERRUPT_GEN_MEMBER(vblank_irq); @@ -115,14 +117,19 @@ public: * *************************************/ -WRITE8_MEMBER(pengo_state::pengo_coin_counter_w) +WRITE_LINE_MEMBER(pengo_state::coin_counter_1_w) { - machine().bookkeeping().coin_counter_w(offset, data & 1); + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(pengo_state::irq_mask_w) +WRITE_LINE_MEMBER(pengo_state::coin_counter_2_w) { - m_irq_mask = data & 1; + machine().bookkeeping().coin_counter_w(1, state); +} + +WRITE_LINE_MEMBER(pengo_state::irq_mask_w) +{ + m_irq_mask = state; } static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8, pengo_state ) @@ -135,14 +142,8 @@ static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8, pengo_state ) AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x9000, 0x903f) AM_READ_PORT("DSW1") AM_RANGE(0x9040, 0x907f) AM_READ_PORT("DSW0") - AM_RANGE(0x9040, 0x9040) AM_WRITE(irq_mask_w) - AM_RANGE(0x9041, 0x9041) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x9042, 0x9042) AM_WRITE(pengo_palettebank_w) - AM_RANGE(0x9043, 0x9043) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x9044, 0x9045) AM_WRITE(pengo_coin_counter_w) - AM_RANGE(0x9046, 0x9046) AM_WRITE(pengo_colortablebank_w) - AM_RANGE(0x9047, 0x9047) AM_WRITE(pengo_gfxbank_w) - AM_RANGE(0x9070, 0x9070) AM_WRITENOP + AM_RANGE(0x9040, 0x9047) AM_DEVWRITE("latch", ls259_device, write_d0) + AM_RANGE(0x9070, 0x9070) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x9080, 0x90bf) AM_READ_PORT("IN1") AM_RANGE(0x90c0, 0x90ff) AM_READ_PORT("IN0") ADDRESS_MAP_END @@ -164,15 +165,8 @@ static ADDRESS_MAP_START( jrpacmbl_map, AS_PROGRAM, 8, pengo_state ) AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_SHARE("spriteram2") AM_RANGE(0x9030, 0x9030) AM_WRITE(jrpacman_scroll_w) AM_RANGE(0x9040, 0x904f) AM_READ_PORT("DSW") - AM_RANGE(0x9040, 0x9040) AM_WRITE(irq_mask_w) - AM_RANGE(0x9041, 0x9041) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w) - AM_RANGE(0x9042, 0x9042) AM_WRITE(pengo_palettebank_w) - AM_RANGE(0x9043, 0x9043) AM_WRITE(pacman_flipscreen_w) - AM_RANGE(0x9044, 0x9044) AM_WRITE(jrpacman_bgpriority_w) - AM_RANGE(0x9045, 0x9045) AM_WRITE(jrpacman_spritebank_w) - AM_RANGE(0x9046, 0x9046) AM_WRITE(pengo_colortablebank_w) - AM_RANGE(0x9047, 0x9047) AM_WRITE(jrpacman_charbank_w) - AM_RANGE(0x9070, 0x9070) AM_WRITENOP + AM_RANGE(0x9040, 0x9047) AM_DEVWRITE("latch", ls259_device, write_d0) + AM_RANGE(0x9070, 0x9070) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x9080, 0x90bf) AM_READ_PORT("P2") AM_RANGE(0x90c0, 0x90ff) AM_READ_PORT("P1") ADDRESS_MAP_END @@ -380,6 +374,18 @@ static MACHINE_CONFIG_START( pengo ) MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", pengo_state, vblank_irq) + MCFG_DEVICE_ADD("latch", LS259, 0) // U27 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pengo_state, irq_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pengo_state, pengo_palettebank_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pengo_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pengo_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pengo_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pengo_state, pengo_colortablebank_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pengo_state, pengo_gfxbank_w)) + + MCFG_WATCHDOG_ADD("watchdog") + /* video hardware */ MCFG_GFXDECODE_ADD("gfxdecode", "palette", pengo) MCFG_PALETTE_ADD("palette", 128*4) @@ -422,6 +428,11 @@ static MACHINE_CONFIG_DERIVED( jrpacmbl, pengo ) MCFG_CPU_PROGRAM_MAP(jrpacmbl_map) MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_OPCODES) + MCFG_DEVICE_MODIFY("latch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pengo_state, jrpacman_bgpriority_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pengo_state, jrpacman_spritebank_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pengo_state, jrpacman_charbank_w)) + MCFG_VIDEO_START_OVERRIDE(pengo_state,jrpacman) MACHINE_CONFIG_END diff --git a/src/mame/drivers/playch10.cpp b/src/mame/drivers/playch10.cpp index d95cb1697e5..a50b4fecb06 100644 --- a/src/mame/drivers/playch10.cpp +++ b/src/mame/drivers/playch10.cpp @@ -296,6 +296,7 @@ Notes & Todo: #include "cpu/m6502/n2a03.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/rp5h01.h" #include "machine/nvram.h" @@ -307,9 +308,9 @@ Notes & Todo: /******************************************************************************/ -WRITE8_MEMBER(playch10_state::up8w_w) +WRITE_LINE_MEMBER(playch10_state::up8w_w) { - m_up_8w = data & 1; + m_up_8w = state; } READ8_MEMBER(playch10_state::ram_8w_r) @@ -361,18 +362,12 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( bios_io_map, AS_IO, 8, playch10_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ_PORT("BIOS") AM_WRITE(pc10_SDCS_w) - AM_RANGE(0x01, 0x01) AM_READ_PORT("SW1") AM_WRITE(pc10_CNTRLMASK_w) - AM_RANGE(0x02, 0x02) AM_READ_PORT("SW2") AM_WRITE(pc10_DISPMASK_w) - AM_RANGE(0x03, 0x03) AM_READWRITE(pc10_detectclr_r, pc10_SOUNDMASK_w) - AM_RANGE(0x04, 0x04) AM_WRITE(pc10_GAMERES_w) - AM_RANGE(0x05, 0x05) AM_WRITE(pc10_GAMESTOP_w) - AM_RANGE(0x06, 0x07) AM_WRITENOP - AM_RANGE(0x08, 0x08) AM_WRITE(pc10_NMIENABLE_w) - AM_RANGE(0x09, 0x09) AM_WRITE(pc10_DOGDI_w) - AM_RANGE(0x0a, 0x0a) AM_WRITE(pc10_PPURES_w) - AM_RANGE(0x0b, 0x0e) AM_WRITE(pc10_CARTSEL_w) - AM_RANGE(0x0f, 0x0f) AM_WRITE(up8w_w) + AM_RANGE(0x00, 0x00) AM_READ_PORT("BIOS") + AM_RANGE(0x01, 0x01) AM_READ_PORT("SW1") + AM_RANGE(0x02, 0x02) AM_READ_PORT("SW2") + AM_RANGE(0x03, 0x03) AM_READ(pc10_detectclr_r) + AM_RANGE(0x00, 0x07) AM_DEVWRITE("outlatch1", ls259_device, write_d0) + AM_RANGE(0x08, 0x0f) AM_DEVWRITE("outlatch2", ls259_device, write_d0) AM_RANGE(0x10, 0x13) AM_WRITE(time_w) AM_SHARE("timedata") ADDRESS_MAP_END @@ -655,6 +650,20 @@ static MACHINE_CONFIG_START( playch10 ) MCFG_CPU_ADD("cart", N2A03, NTSC_APU_CLOCK) MCFG_CPU_PROGRAM_MAP(cart_map) + MCFG_DEVICE_ADD("outlatch1", LS259, 0) // 7D + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(playch10_state, SDCS_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(playch10_state, CNTRLMASK_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(playch10_state, DISPMASK_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(playch10_state, SOUNDMASK_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("cart", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // GAMERES + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("cart", INPUT_LINE_HALT)) MCFG_DEVCB_INVERT // GAMESTOP + + MCFG_DEVICE_ADD("outlatch2", LS259, 0) // 7E + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(playch10_state, NMIENABLE_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(playch10_state, DOGDI_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(playch10_state, PPURES_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(playch10_state, up8w_w)) + MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(playch10_state, CARTSEL_w)) MCFG_DEVCB_MASK(0x78) MCFG_DEVCB_RSHIFT(-3) // video hardware MCFG_GFXDECODE_ADD("gfxdecode", "palette", playch10) diff --git a/src/mame/drivers/polepos.cpp b/src/mame/drivers/polepos.cpp index 7d410d2755b..b6fb9589818 100644 --- a/src/mame/drivers/polepos.cpp +++ b/src/mame/drivers/polepos.cpp @@ -225,6 +225,7 @@ Todo: #include "cpu/z80/z80.h" #include "cpu/z8000/z8000.h" #include "cpu/mb88xx/mb88xx.h" +#include "machine/74259.h" #include "machine/namco06.h" #include "machine/namco51.h" #include "machine/namco53.h" @@ -289,53 +290,36 @@ READ8_MEMBER(polepos_state::polepos_ready_r) } -WRITE8_MEMBER(polepos_state::polepos_latch_w) +WRITE_LINE_MEMBER(polepos_state::iosel_w) { - int bit = data & 1; +// polepos_mcu_enable_w(offset,data); +} - switch (offset) +WRITE_LINE_MEMBER(polepos_state::clson_w) +{ + m_namco_sound->polepos_sound_enable(state); + if (!state) { - case 0x00: /* IRQON */ - m_main_irq_mask = bit; - if (!bit) - m_maincpu->set_input_line(0, CLEAR_LINE); - break; - - case 0x01: /* IOSEL */ -// polepos_mcu_enable_w(offset,data); - break; - - case 0x02: /* CLSON */ - m_namco_sound->polepos_sound_enable(bit); - if (!bit) - { - machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_lsb_w(space, 0, 0); - machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_msb_w(space, 0, 0); - } - break; - - case 0x03: /* GASEL */ - m_adc_input = bit; - break; - - case 0x04: /* RESB */ - m_subcpu->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE); - break; - - case 0x05: /* RESA */ - m_subcpu2->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE); - break; - - case 0x06: /* SB0 */ - m_auto_start_mask = !bit; - break; - - case 0x07: /* CHACL */ - polepos_chacl_w(space,offset,data); - break; + machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_lsb_w(machine().dummy_space(), 0, 0); + machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_msb_w(machine().dummy_space(), 0, 0); } } +WRITE_LINE_MEMBER(polepos_state::gasel_w) +{ + m_adc_input = state; +} + +WRITE_LINE_MEMBER(polepos_state::sb0_w) +{ + m_auto_start_mask = !state; +} + +WRITE_LINE_MEMBER(polepos_state::chacl_w) +{ + polepos_chacl_w(machine().dummy_space(), 0, state); +} + WRITE16_MEMBER(polepos_state::polepos_z8002_nvi_enable_w) { data &= 1; @@ -414,7 +398,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(polepos_state::polepos_scanline) { int scanline = param; - if (((scanline == 64) || (scanline == 192)) && m_main_irq_mask) // 64V + if (((scanline == 64) || (scanline == 192)) && m_latch->q0_r()) // 64V m_maincpu->set_input_line(0, ASSERT_LINE); if (scanline == 240 && m_sub_irq_mask) // VBLANK @@ -427,13 +411,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(polepos_state::polepos_scanline) MACHINE_RESET_MEMBER(polepos_state,polepos) { - address_space &space = m_maincpu->space(AS_PROGRAM); - int i; - - /* Reset all latches */ - for (i = 0; i < 8; i++) - polepos_latch_w(space, i, 0); - /* set the interrupt vectors (this shouldn't be needed) */ m_subcpu->set_input_line_vector(0, Z8000_NVI); m_subcpu2->set_input_line_vector(0, Z8000_NVI); @@ -459,7 +436,7 @@ static ADDRESS_MAP_START( z80_map, AS_PROGRAM, 8, polepos_state ) AM_RANGE(0x9000, 0x9000) AM_MIRROR(0x0eff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w) AM_RANGE(0x9100, 0x9100) AM_MIRROR(0x0eff) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w) AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x0cff) AM_READ(polepos_ready_r) /* READY */ - AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0cf8) AM_WRITE(polepos_latch_w) /* misc latches */ + AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0cf8) AM_DEVWRITE("latch", ls259_device, write_d0) AM_RANGE(0xa100, 0xa100) AM_MIRROR(0x0cff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0xa200, 0xa200) AM_MIRROR(0x0cff) AM_DEVWRITE("polepos", polepos_sound_device, polepos_engine_sound_lsb_w) /* Car Sound ( Lower Nibble ) */ AM_RANGE(0xa300, 0xa300) AM_MIRROR(0x0cff) AM_DEVWRITE("polepos", polepos_sound_device, polepos_engine_sound_msb_w) /* Car Sound ( Upper Nibble ) */ @@ -920,6 +897,16 @@ static MACHINE_CONFIG_START( polepos ) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", polepos_state, polepos_scanline, "screen", 0, 1) + MCFG_DEVICE_ADD("latch", LS259, 0) // at 8E on polepos + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(CLEARLINE("maincpu", 0)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(polepos_state, iosel_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(polepos_state, clson_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(polepos_state, gasel_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(polepos_state, sb0_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(polepos_state, chacl_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 384, 0, 256, 264, 16, 224+16) @@ -1018,6 +1005,16 @@ static MACHINE_CONFIG_START( topracern ) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", polepos_state, polepos_scanline, "screen", 0, 1) + MCFG_DEVICE_ADD("latch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(CLEARLINE("maincpu", 0)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(polepos_state, iosel_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(polepos_state, clson_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(polepos_state, gasel_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(polepos_state, sb0_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(polepos_state, chacl_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 384, 0, 256, 264, 16, 224+16) diff --git a/src/mame/drivers/pooyan.cpp b/src/mame/drivers/pooyan.cpp index 82c45d20b92..faa5493408f 100644 --- a/src/mame/drivers/pooyan.cpp +++ b/src/mame/drivers/pooyan.cpp @@ -16,6 +16,7 @@ #include "audio/timeplt.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "screen.h" @@ -37,14 +38,26 @@ INTERRUPT_GEN_MEMBER(pooyan_state::interrupt) } -WRITE8_MEMBER(pooyan_state::irq_enable_w) +WRITE_LINE_MEMBER(pooyan_state::irq_enable_w) { - m_irq_enable = data & 1; + m_irq_enable = state; if (!m_irq_enable) m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } +WRITE_LINE_MEMBER(pooyan_state::coin_counter_1_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + + +WRITE_LINE_MEMBER(pooyan_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} + + /************************************* * * Memory maps @@ -65,10 +78,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, pooyan_state ) AM_RANGE(0xa0e0, 0xa0e0) AM_MIRROR(0x5e1f) AM_READ_PORT("DSW0") AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x5e7f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0xa100, 0xa100) AM_MIRROR(0x5e7f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) - AM_RANGE(0xa180, 0xa180) AM_MIRROR(0x5e78) AM_WRITE(irq_enable_w) - AM_RANGE(0xa181, 0xa181) AM_MIRROR(0x5e78) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w) - AM_RANGE(0xa183, 0xa183) AM_MIRROR(0x5e78) AM_WRITENOP // ??? - AM_RANGE(0xa187, 0xa187) AM_MIRROR(0x5e78) AM_WRITE(flipscreen_w) + AM_RANGE(0xa180, 0xa187) AM_MIRROR(0x5e78) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -182,12 +192,6 @@ void pooyan_state::machine_start() } -void pooyan_state::machine_reset() -{ - m_irq_enable = 0; -} - - static MACHINE_CONFIG_START( pooyan ) /* basic machine hardware */ @@ -195,6 +199,15 @@ static MACHINE_CONFIG_START( pooyan ) MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", pooyan_state, interrupt) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B2 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pooyan_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pooyan_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pooyan_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // PAY OUT - not used + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pooyan_state, flipscreen_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/prof80.cpp b/src/mame/drivers/prof80.cpp index 98441b1cbb3..b1b55ea40f0 100644 --- a/src/mame/drivers/prof80.cpp +++ b/src/mame/drivers/prof80.cpp @@ -47,119 +47,80 @@ void prof80_state::motor(int mon) } -//------------------------------------------------- -// ls259_w - -//------------------------------------------------- - -void prof80_state::ls259_w(int fa, int sa, int fb, int sb) +WRITE_LINE_MEMBER(prof80_state::ready_w) { - switch (sa) + if (m_ready != state) { - case 0: // C0/TDI - m_rtc->data_in_w(fa); - m_rtc->c0_w(fa); - m_c0 = fa; - break; - - case 1: // C1 - m_rtc->c1_w(fa); - m_c1 = fa; - break; + m_fdc->set_ready_line_connected(!state); + m_fdc->ready_w(!state); + m_ready = state; + } +} - case 2: // C2 - m_rtc->c2_w(fa); - m_c2 = fa; - break; - case 3: // READY - if (m_ready != fa) - { - m_fdc->set_ready_line_connected(!fa); - m_fdc->ready_w(!fa); - m_ready = fa; - } - break; +WRITE_LINE_MEMBER(prof80_state::inuse_w) +{ + //m_floppy->inuse_w(state); +} - case 4: // TCK - m_rtc->clk_w(fa); - break; - case 5: // IN USE - //m_floppy->inuse_w(fa); - break; +WRITE_LINE_MEMBER(prof80_state::motor_w) +{ + if (state) + { + // trigger floppy motor off NE555 timer + int t = 110 * RES_M(10) * CAP_U(6.8); // t = 1.1 * R8 * C6 - case 6: // _MOTOR - if (fa) - { - // trigger floppy motor off NE555 timer - int t = 110 * RES_M(10) * CAP_U(6.8); // t = 1.1 * R8 * C6 - - timer_set(attotime::from_msec(t), TIMER_ID_MOTOR); - } - else - { - // turn on floppy motor - motor(0); - - // reset floppy motor off NE555 timer - timer_set(attotime::never, TIMER_ID_MOTOR); - } - break; + timer_set(attotime::from_msec(t), TIMER_ID_MOTOR); + } + else + { + // turn on floppy motor + motor(0); - case 7: // SELECT - if (m_select != fa) - { - //m_fdc->set_select_lines_connected(fa); - m_select = fa; - } - break; + // reset floppy motor off NE555 timer + timer_set(attotime::never, TIMER_ID_MOTOR); } +} - switch (sb) - { - case 0: // RESF - if (fb) m_fdc->soft_reset(); - break; - case 1: // MINI - break; +WRITE_LINE_MEMBER(prof80_state::select_w) +{ + if (m_select != state) + { + //m_fdc->set_select_lines_connected(state); + m_select = state; + } +} - case 2: // _RTS - m_rs232a->write_rts(fb); - break; - case 3: // TX - m_rs232a->write_txd(fb); - break; +WRITE_LINE_MEMBER(prof80_state::resf_w) +{ + if (state) + m_fdc->soft_reset(); +} - case 4: // _MSTOP - if (!fb) - { - // turn off floppy motor - motor(1); - // reset floppy motor off NE555 timer - timer_set(attotime::never, TIMER_ID_MOTOR); - } - break; +WRITE_LINE_MEMBER(prof80_state::mini_w) +{ +} - case 5: // TXP - m_rs232b->write_txd(fb); - break; - case 6: // TSTB - m_rtc->stb_w(fb); - break; +WRITE_LINE_MEMBER(prof80_state::mstop_w) +{ + if (!state) + { + // turn off floppy motor + motor(1); - case 7: // MME - m_mmu->mme_w(fb); - break; + // reset floppy motor off NE555 timer + timer_set(attotime::never, TIMER_ID_MOTOR); } } //------------------------------------------------- -// flr_w - +// flr_w - flag register //------------------------------------------------- WRITE8_MEMBER( prof80_state::flr_w ) @@ -179,13 +140,8 @@ WRITE8_MEMBER( prof80_state::flr_w ) */ - int fa = BIT(data, 7); - int sa = (data >> 4) & 0x07; - - int fb = BIT(data, 0); - int sb = (data >> 1) & 0x07; - - ls259_w(fa, sa, fb, sb); + m_flra->write_bit((data >> 4) & 0x07, BIT(data, 7)); + m_flrb->write_bit((data >> 1) & 0x07, BIT(data, 0)); } @@ -258,9 +214,9 @@ READ8_MEMBER( prof80_state::status2_r ) { case 0: js4 = 0; break; case 1: js4 = 1; break; - case 2: js4 = !m_c0; break; - case 3: js4 = !m_c1; break; - case 4: js4 = !m_c2; break; + case 2: js4 = !m_flra->q0_r(); break; + case 3: js4 = !m_flra->q1_r(); break; + case 4: js4 = !m_flra->q2_r(); break; } data |= js4 << 4; @@ -270,9 +226,9 @@ READ8_MEMBER( prof80_state::status2_r ) { case 0: js5 = 0; break; case 1: js5 = 1; break; - case 2: js5 = !m_c0; break; - case 3: js5 = !m_c1; break; - case 4: js5 = !m_c2; break; + case 2: js5 = !m_flra->q0_r(); break; + case 3: js5 = !m_flra->q1_r(); break; + case 4: js5 = !m_flra->q2_r(); break; } data |= js5 << 4; @@ -472,26 +428,12 @@ void prof80_state::machine_start() m_rtc->oe_w(1); // register for state saving - save_item(NAME(m_c0)); - save_item(NAME(m_c1)); - save_item(NAME(m_c2)); save_item(NAME(m_motor)); save_item(NAME(m_ready)); save_item(NAME(m_select)); } -void prof80_state::machine_reset() -{ - int i; - - for (i = 0; i < 8; i++) - { - ls259_w(0, i, 0, i); - } -} - - //************************************************************************** // MACHINE DRIVERS @@ -507,15 +449,40 @@ static MACHINE_CONFIG_START( prof80 ) MCFG_CPU_PROGRAM_MAP(prof80_mem) MCFG_CPU_IO_MAP(prof80_io) - // devices + // MMU MCFG_PROF80_MMU_ADD(MMU_TAG, prof80_mmu) + + // RTC MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NOOP, NOOP) + + // FDC MCFG_UPD765A_ADD(UPD765_TAG, true, true) MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", prof80_floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", prof80_floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":2", prof80_floppies, nullptr, floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":3", prof80_floppies, nullptr, floppy_image_device::default_floppy_formats) + // DEMUX latches + MCFG_DEVICE_ADD(FLR_A_TAG, LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, data_in_w)) // TDI + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, c0_w)) // C0 + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, c1_w)) // C1 + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, c2_w)) // C2 + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(prof80_state, ready_w)) // READY + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, clk_w)) // TCK + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(prof80_state, inuse_w)) // IN USE + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(prof80_state, motor_w)) // _MOTOR + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(prof80_state, select_w)) // SELECT + MCFG_DEVICE_ADD(FLR_B_TAG, LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(prof80_state, resf_w)) // RESF + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(prof80_state, mini_w)) // MINI + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_rts)) // _RTS + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_txd)) // TX + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(prof80_state, mstop_w)) // _MSTOP + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE(RS232_B_TAG, rs232_port_device, write_txd)) // TXP + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, stb_w)) // TSTB + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE(MMU_TAG, prof80_mmu_device, mme_w)) // MME + // ECB bus MCFG_ECBBUS_ADD() MCFG_ECBBUS_SLOT_ADD(1, "ecb_1", ecbbus_cards, "grip21") diff --git a/src/mame/drivers/punchout.cpp b/src/mame/drivers/punchout.cpp index 20844ddbc96..670ff18cf5c 100644 --- a/src/mame/drivers/punchout.cpp +++ b/src/mame/drivers/punchout.cpp @@ -119,6 +119,7 @@ DIP locations verified for: #include "cpu/z80/z80.h" #include "cpu/m6502/n2a03.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/nvram.h" #include "rendlay.h" @@ -134,29 +135,9 @@ DIP locations verified for: // Z80 (main) -WRITE8_MEMBER(punchout_state::punchout_speech_reset_w) +WRITE_LINE_MEMBER(punchout_state::nmi_mask_w) { - m_vlm->rst( data & 0x01 ); -} - -WRITE8_MEMBER(punchout_state::punchout_speech_st_w) -{ - m_vlm->st( data & 0x01 ); -} - -WRITE8_MEMBER(punchout_state::punchout_speech_vcu_w) -{ - m_vlm->vcu( data & 0x01 ); -} - -WRITE8_MEMBER(punchout_state::punchout_2a03_reset_w) -{ - m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? ASSERT_LINE : CLEAR_LINE); -} - -WRITE8_MEMBER(punchout_state::nmi_mask_w) -{ - m_nmi_mask = data & 1; + m_nmi_mask = state; } static ADDRESS_MAP_START( punchout_map, AS_PROGRAM, 8, punchout_state ) @@ -197,14 +178,7 @@ static ADDRESS_MAP_START( punchout_io_map, AS_IO, 8, punchout_state ) AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW1") AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) AM_RANGE(0x04, 0x04) AM_DEVWRITE("vlm", vlm5030_device, data_w) AM_RANGE(0x05, 0x07) AM_WRITENOP // spunchout protection - AM_RANGE(0x08, 0x08) AM_WRITE(nmi_mask_w) - AM_RANGE(0x09, 0x09) AM_WRITENOP // watchdog reset, seldom used because 08 clears the watchdog as well - AM_RANGE(0x0a, 0x0a) AM_WRITENOP // ? - AM_RANGE(0x0b, 0x0b) AM_WRITE(punchout_2a03_reset_w) - AM_RANGE(0x0c, 0x0c) AM_WRITE(punchout_speech_reset_w) - AM_RANGE(0x0d, 0x0d) AM_WRITE(punchout_speech_st_w) - AM_RANGE(0x0e, 0x0e) AM_WRITE(punchout_speech_vcu_w) - AM_RANGE(0x0f, 0x0f) AM_WRITENOP // enable NVRAM? + AM_RANGE(0x08, 0x0f) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -654,6 +628,16 @@ static MACHINE_CONFIG_START( punchout ) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2B + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(punchout_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // watchdog reset, seldom used because 08 clears the watchdog as well + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // ? + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("vlm", vlm5030_device, rst)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("vlm", vlm5030_device, st)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("vlm", vlm5030_device, vcu)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // enable NVRAM? + /* video hardware */ MCFG_GFXDECODE_ADD("gfxdecode", "palette", punchout) MCFG_PALETTE_ADD("palette", 0x200) diff --git a/src/mame/drivers/rallyx.cpp b/src/mame/drivers/rallyx.cpp index 7a80c61493a..b1f950dddb0 100644 --- a/src/mame/drivers/rallyx.cpp +++ b/src/mame/drivers/rallyx.cpp @@ -194,6 +194,7 @@ TODO: #include "includes/rallyx.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/samples.h" @@ -216,95 +217,63 @@ WRITE8_MEMBER(rallyx_state::rallyx_interrupt_vector_w) } -WRITE8_MEMBER(rallyx_state::rallyx_bang_w) +WRITE_LINE_MEMBER(rallyx_state::bang_w) { - if (data == 0 && m_last_bang != 0) + if (state == 0 && m_last_bang != 0) m_samples->start(0, 0); - m_last_bang = data; + m_last_bang = state; } -WRITE8_MEMBER(rallyx_state::rallyx_latch_w) + +WRITE_LINE_MEMBER(rallyx_state::irq_mask_w) +{ + m_main_irq_mask = state; + if (!state) + m_maincpu->set_input_line(0, CLEAR_LINE); +} + + +WRITE_LINE_MEMBER(rallyx_state::sound_on_w) { - int bit = data & 1; - - switch (offset) - { - case 0x00: /* BANG */ - rallyx_bang_w(space, 0, bit); - break; - - case 0x01: /* INT ON */ - m_main_irq_mask = bit; - if (!bit) - m_maincpu->set_input_line(0, CLEAR_LINE); - break; - - case 0x02: /* SOUND ON */ - /* this doesn't work in New Rally X so I'm not supporting it */ -// m_namco_sound->pacman_sound_enable_w(bit); - break; - - case 0x03: /* FLIP */ - flip_screen_set(bit); - break; - - case 0x04: - output().set_led_value(0, bit); - break; - - case 0x05: - output().set_led_value(1, bit); - break; - - case 0x06: - machine().bookkeeping().coin_lockout_w(0, !bit); - break; - - case 0x07: - machine().bookkeeping().coin_counter_w(0, bit); - break; - } + /* this doesn't work in New Rally X so I'm not supporting it */ + //m_namco_sound->pacman_sound_enable_w(state); } -WRITE8_MEMBER(rallyx_state::locomotn_latch_w) +WRITE_LINE_MEMBER(rallyx_state::flip_screen_w) { - int bit = data & 1; + flip_screen_set(state); +} - switch (offset) - { - case 0x00: /* SOUNDON */ - m_timeplt_audio->sh_irqtrigger_w(space,0,bit); - break; - case 0x01: /* INTST */ - m_main_irq_mask = bit; - break; +WRITE_LINE_MEMBER(rallyx_state::led_0_w) +{ + output().set_led_value(0, state); +} + + +WRITE_LINE_MEMBER(rallyx_state::led_1_w) +{ + output().set_led_value(1, state); +} - case 0x02: /* MUT */ -// sound disable - break; - case 0x03: /* FLIP */ - flip_screen_set(bit); - break; +WRITE_LINE_MEMBER(rallyx_state::coin_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(0, !state); +} - case 0x04: /* OUT1 */ - machine().bookkeeping().coin_counter_w(0, bit); - break; - case 0x05: /* OUT2 */ - break; +WRITE_LINE_MEMBER(rallyx_state::coin_counter_1_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} - case 0x06: /* OUT3 */ - machine().bookkeeping().coin_counter_w(1,bit); - break; - case 0x07: /* STARSON */ - tactcian_starson_w(space, offset, bit); - break; - } +WRITE_LINE_MEMBER(rallyx_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } @@ -327,7 +296,7 @@ static ADDRESS_MAP_START( rallyx_map, AS_PROGRAM, 8, rallyx_state ) AM_RANGE(0xa130, 0xa130) AM_WRITE(rallyx_scrollx_w) AM_RANGE(0xa140, 0xa140) AM_WRITE(rallyx_scrolly_w) AM_RANGE(0xa170, 0xa170) AM_WRITENOP /* ? */ - AM_RANGE(0xa180, 0xa187) AM_WRITE(rallyx_latch_w) + AM_RANGE(0xa180, 0xa187) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( io_map, AS_IO, 8, rallyx_state ) @@ -349,7 +318,7 @@ static ADDRESS_MAP_START( jungler_map, AS_PROGRAM, 8, rallyx_state ) AM_RANGE(0xa100, 0xa100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xa130, 0xa130) AM_WRITE(rallyx_scrollx_w) /* only jungler and tactcian */ AM_RANGE(0xa140, 0xa140) AM_WRITE(rallyx_scrolly_w) /* only jungler and tactcian */ - AM_RANGE(0xa180, 0xa187) AM_WRITE(locomotn_latch_w) + AM_RANGE(0xa180, 0xa187) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -834,12 +803,6 @@ MACHINE_START_MEMBER(rallyx_state,rallyx) save_item(NAME(m_stars_enable)); } -MACHINE_RESET_MEMBER(rallyx_state,rallyx) -{ - m_last_bang = 0; - m_stars_enable = 0; -} - INTERRUPT_GEN_MEMBER(rallyx_state::rallyx_vblank_irq) { if (m_main_irq_mask) @@ -860,10 +823,19 @@ static MACHINE_CONFIG_START( rallyx ) MCFG_CPU_IO_MAP(io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", rallyx_state, rallyx_vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 259 at 12M or 4099 at 11M on Logic Board I + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(rallyx_state, bang_w)) // BANG + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(rallyx_state, irq_mask_w)) // INT ON + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(rallyx_state, sound_on_w)) // SOUND ON + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(rallyx_state, flip_screen_w)) // FLIP + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(rallyx_state, led_0_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(rallyx_state, led_1_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(rallyx_state, coin_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(rallyx_state, coin_counter_1_w)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_MACHINE_START_OVERRIDE(rallyx_state,rallyx) - MCFG_MACHINE_RESET_OVERRIDE(rallyx_state,rallyx) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -903,10 +875,19 @@ static MACHINE_CONFIG_START( jungler ) MCFG_CPU_PROGRAM_MAP(jungler_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", rallyx_state, jungler_vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 1C on Loco-Motion + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)) // SOUNDON + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(rallyx_state, irq_mask_w)) // INTST + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w)) // MUT + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(rallyx_state, flip_screen_w)) // FLIP + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(rallyx_state, coin_counter_1_w)) // OUT1 + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // OUT2 + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(rallyx_state, coin_counter_2_w)) // OUT3 + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(rallyx_state, stars_enable_w)) // STARSON + MCFG_WATCHDOG_ADD("watchdog") MCFG_MACHINE_START_OVERRIDE(rallyx_state,rallyx) - MCFG_MACHINE_RESET_OVERRIDE(rallyx_state,rallyx) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/retofinv.cpp b/src/mame/drivers/retofinv.cpp index 6b70c57e5ad..04b2a2efec2 100644 --- a/src/mame/drivers/retofinv.cpp +++ b/src/mame/drivers/retofinv.cpp @@ -107,6 +107,7 @@ Notes: #include "includes/retofinv.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/sn76496.h" #include "screen.h" @@ -120,21 +121,6 @@ void retofinv_state::machine_start() save_item(NAME(m_cpu2_m6000)); } -WRITE8_MEMBER(retofinv_state::cpu1_reset_w) -{ - m_subcpu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE); -} - -WRITE8_MEMBER(retofinv_state::cpu2_reset_w) -{ - m_audiocpu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE); -} - -WRITE8_MEMBER(retofinv_state::mcu_reset_w) -{ - m_68705->reset_w(data ? CLEAR_LINE : ASSERT_LINE); -} - WRITE8_MEMBER(retofinv_state::cpu2_m6000_w) { m_cpu2_m6000 = data; @@ -151,16 +137,16 @@ WRITE8_MEMBER(retofinv_state::soundcommand_w) m_audiocpu->set_input_line(0, HOLD_LINE); } -WRITE8_MEMBER(retofinv_state::irq0_ack_w) +WRITE_LINE_MEMBER(retofinv_state::irq0_ack_w) { - m_main_irq_mask = data & 1; + m_main_irq_mask = state; if (!m_main_irq_mask) m_maincpu->set_input_line(0, CLEAR_LINE); } -WRITE8_MEMBER(retofinv_state::irq1_ack_w) +WRITE_LINE_MEMBER(retofinv_state::irq1_ack_w) { - m_sub_irq_mask = data & 1; + m_sub_irq_mask = state; if (!m_sub_irq_mask) m_subcpu->set_input_line(0, CLEAR_LINE); } @@ -170,9 +156,9 @@ WRITE8_MEMBER(retofinv_state::coincounter_w) machine().bookkeeping().coin_counter_w(0, data & 1); } -WRITE8_MEMBER(retofinv_state::coinlockout_w) +WRITE_LINE_MEMBER(retofinv_state::coinlockout_w) { - machine().bookkeeping().coin_lockout_w(0,~data & 1); + machine().bookkeeping().coin_lockout_w(0, !state); } READ8_MEMBER(retofinv_state::mcu_status_r) @@ -205,11 +191,7 @@ static ADDRESS_MAP_START( bootleg_map, AS_PROGRAM, 8, retofinv_state ) AM_RANGE(0xc005, 0xc005) AM_READ_PORT("DSW1") AM_RANGE(0xc006, 0xc006) AM_READ_PORT("DSW2") AM_RANGE(0xc007, 0xc007) AM_READ_PORT("DSW3") - AM_RANGE(0xc800, 0xc800) AM_WRITE(irq0_ack_w) - AM_RANGE(0xc801, 0xc801) AM_WRITE(coinlockout_w) - AM_RANGE(0xc802, 0xc802) AM_WRITE(cpu2_reset_w) -// AM_RANGE(0xc804, 0xc804) AM_WRITE(irq1_ack_w) // presumably (meaning memory map is shared with cpu 1) - AM_RANGE(0xc805, 0xc805) AM_WRITE(cpu1_reset_w) + AM_RANGE(0xc800, 0xc807) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0xd800, 0xd800) AM_WRITE(soundcommand_w) AM_RANGE(0xf800, 0xf800) AM_READ(cpu0_mf800_r) @@ -218,7 +200,6 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, retofinv_state ) AM_IMPORT_FROM(bootleg_map) AM_RANGE(0xc003, 0xc003) AM_READ(mcu_status_r) - AM_RANGE(0xc803, 0xc803) AM_WRITE(mcu_reset_w) AM_RANGE(0xe000, 0xe000) AM_DEVREAD("68705", taito68705_mcu_device, data_r) AM_RANGE(0xe800, 0xe800) AM_DEVWRITE("68705", taito68705_mcu_device, data_w) ADDRESS_MAP_END @@ -228,7 +209,7 @@ static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 8, retofinv_state ) AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram") AM_RANGE(0x8800, 0x9fff) AM_RAM AM_SHARE("sharedram") AM_RANGE(0xa000, 0xa7ff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram") - AM_RANGE(0xc804, 0xc804) AM_WRITE(irq1_ack_w) + AM_RANGE(0xc800, 0xc807) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, retofinv_state ) @@ -447,6 +428,14 @@ static MACHINE_CONFIG_START( retofinv ) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - enough for the sound CPU to read all commands */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC72 - probably shared between CPUs + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(retofinv_state, irq0_ack_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(retofinv_state, coinlockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("68705", taito68705_mcu_device, reset_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(retofinv_state, irq1_ack_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -486,6 +475,9 @@ static MACHINE_CONFIG_DERIVED( retofinvb_nomcu, retofinvb ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(bootleg_map) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) + MCFG_DEVICE_REMOVE("68705") MACHINE_CONFIG_END diff --git a/src/mame/drivers/rocnrope.cpp b/src/mame/drivers/rocnrope.cpp index 6b49896968e..1f5feb93edf 100644 --- a/src/mame/drivers/rocnrope.cpp +++ b/src/mame/drivers/rocnrope.cpp @@ -14,6 +14,7 @@ #include "audio/timeplt.h" #include "cpu/m6809/m6809.h" +#include "machine/74259.h" #include "machine/konami1.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" @@ -36,13 +37,23 @@ WRITE8_MEMBER(rocnrope_state::rocnrope_interrupt_vector_w) RAM[0xfff2 + offset] = data; } -WRITE8_MEMBER(rocnrope_state::irq_mask_w) +WRITE_LINE_MEMBER(rocnrope_state::irq_mask_w) { - m_irq_mask = data & 1; + m_irq_mask = state; if (!m_irq_mask) m_maincpu->set_input_line(0, CLEAR_LINE); } +WRITE_LINE_MEMBER(rocnrope_state::coin_counter_1_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(rocnrope_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} + /************************************* * * Address maps @@ -63,12 +74,7 @@ static ADDRESS_MAP_START( rocnrope_map, AS_PROGRAM, 8, rocnrope_state ) AM_RANGE(0x4c00, 0x4fff) AM_RAM_WRITE(rocnrope_videoram_w) AM_SHARE("videoram") AM_RANGE(0x5000, 0x5fff) AM_RAM AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x8080, 0x8080) AM_WRITE(rocnrope_flipscreen_w) - AM_RANGE(0x8081, 0x8081) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w) /* cause interrupt on audio CPU */ - AM_RANGE(0x8082, 0x8082) AM_WRITENOP /* ??? */ - AM_RANGE(0x8083, 0x8083) AM_WRITENOP /* Coin counter 1 */ - AM_RANGE(0x8084, 0x8084) AM_WRITENOP /* Coin counter 2 */ - AM_RANGE(0x8087, 0x8087) AM_WRITE(irq_mask_w) + AM_RANGE(0x8080, 0x8087) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x8100, 0x8100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x8182, 0x818d) AM_WRITE(rocnrope_interrupt_vector_w) AM_RANGE(0x6000, 0xffff) AM_ROM @@ -207,6 +213,14 @@ static MACHINE_CONFIG_START( rocnrope ) MCFG_CPU_PROGRAM_MAP(rocnrope_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", rocnrope_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B2 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(rocnrope_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(rocnrope_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(rocnrope_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(rocnrope_state, irq_mask_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/rollrace.cpp b/src/mame/drivers/rollrace.cpp index ed5dfef309d..75f3dd4f9ee 100644 --- a/src/mame/drivers/rollrace.cpp +++ b/src/mame/drivers/rollrace.cpp @@ -13,6 +13,7 @@ Issues: #include "includes/rollrace.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "sound/ay8910.h" #include "screen.h" @@ -21,7 +22,6 @@ Issues: void rollrace_state::machine_start() { - save_item(NAME(m_charbank)); save_item(NAME(m_bkgpage)); save_item(NAME(m_bkgflip)); save_item(NAME(m_chrbank)); @@ -44,9 +44,9 @@ WRITE8_MEMBER(rollrace_state::fake_d800_w) /* logerror("d900: %02X\n",data);*/ } -WRITE8_MEMBER(rollrace_state::nmi_mask_w) +WRITE_LINE_MEMBER(rollrace_state::nmi_mask_w) { - m_nmi_mask = data & 1; + m_nmi_mask = state; } WRITE8_MEMBER(rollrace_state::sound_nmi_mask_w) @@ -54,9 +54,14 @@ WRITE8_MEMBER(rollrace_state::sound_nmi_mask_w) m_sound_nmi_mask = data & 1; } -WRITE8_MEMBER(rollrace_state::coin_w) +WRITE_LINE_MEMBER(rollrace_state::coin_counter_1_w) { - machine().bookkeeping().coin_counter_w(offset, data); + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(rollrace_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8, rollrace_state ) @@ -77,11 +82,7 @@ static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8, rollrace_state ) AM_RANGE(0xf803, 0xf803) AM_WRITE(flipy_w) AM_RANGE(0xf804, 0xf804) AM_READ_PORT("DSW1") AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW2") - AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flipx_w) - AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_mask_w) - AM_RANGE(0xfc02, 0xfc03) AM_WRITE(coin_w) - AM_RANGE(0xfc04, 0xfc05) AM_WRITE(charbank_w) - AM_RANGE(0xfc06, 0xfc06) AM_WRITE(spritebank_w) + AM_RANGE(0xfc00, 0xfc07) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -255,6 +256,15 @@ static MACHINE_CONFIG_START( rollrace ) MCFG_CPU_PROGRAM_MAP(rollrace_sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(rollrace_state, sound_timer_irq, 4*60) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(rollrace_state, flipx_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(rollrace_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(rollrace_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(rollrace_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(rollrace_state, charbank_0_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(rollrace_state, charbank_1_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(rollrace_state, spritebank_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/sauro.cpp b/src/mame/drivers/sauro.cpp index adb1f7d2b15..e9dc8607e1c 100644 --- a/src/mame/drivers/sauro.cpp +++ b/src/mame/drivers/sauro.cpp @@ -126,6 +126,7 @@ Stephh's notes (based on the games Z80 code and some tests) : #include "includes/sauro.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/nvram.h" #include "machine/watchdog.h" #include "sound/3812intf.h" @@ -133,6 +134,11 @@ Stephh's notes (based on the games Z80 code and some tests) : #include "speaker.h" +void sauro_state::machine_start() +{ + save_item(NAME(m_irq_enable)); +} + WRITE8_MEMBER(sauro_state::sauro_sound_command_w) { data |= 0x80; @@ -146,21 +152,32 @@ READ8_MEMBER(sauro_state::sauro_sound_command_r) return ret; } -WRITE8_MEMBER(sauro_state::coin1_w) +WRITE_LINE_MEMBER(sauro_state::vblank_irq) +{ + if (state && m_irq_enable) + m_maincpu->set_input_line(0, ASSERT_LINE); +} + +WRITE_LINE_MEMBER(sauro_state::irq_reset_w) { - machine().bookkeeping().coin_counter_w(0, data); - machine().bookkeeping().coin_counter_w(0, 0); // to get the coin counter working in sauro, as it doesn't write 0 + m_irq_enable = !state; + if (m_irq_enable) + m_maincpu->set_input_line(0, CLEAR_LINE); } -WRITE8_MEMBER(sauro_state::coin2_w) +WRITE_LINE_MEMBER(sauro_state::coin1_w) { - machine().bookkeeping().coin_counter_w(1, data); - machine().bookkeeping().coin_counter_w(1, 0); // to get the coin counter working in sauro, as it doesn't write 0 + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(sauro_state::flip_screen_w) +WRITE_LINE_MEMBER(sauro_state::coin2_w) { - flip_screen_set(data); + machine().bookkeeping().coin_counter_w(1, state); +} + +WRITE_LINE_MEMBER(sauro_state::flip_screen_w) +{ + flip_screen_set(state); } WRITE8_MEMBER(sauro_state::adpcm_w) @@ -187,19 +204,7 @@ static ADDRESS_MAP_START( sauro_io_map, AS_IO, 8, sauro_state ) AM_RANGE(0x80, 0x80) AM_WRITE(sauro_sound_command_w) AM_RANGE(0xa0, 0xa0) AM_WRITE(scroll_bg_w) AM_RANGE(0xa1, 0xa1) AM_WRITE(sauro_scroll_fg_w) - AM_RANGE(0xc0, 0xc0) AM_WRITE(flip_screen_w) - AM_RANGE(0xc2, 0xc2) AM_WRITENOP /* coin reset */ - AM_RANGE(0xc3, 0xc3) AM_WRITE(coin1_w) - AM_RANGE(0xc4, 0xc4) AM_WRITENOP /* coin reset */ - AM_RANGE(0xc5, 0xc5) AM_WRITE(coin2_w) - AM_RANGE(0xc6, 0xc7) AM_WRITENOP /* same as 0x80 - verified with debugger */ - AM_RANGE(0xc8, 0xc8) AM_WRITENOP /* written every int: 0 written at end of isr */ - AM_RANGE(0xc9, 0xc9) AM_WRITENOP /* written every int: 1 written at start of isr */ - AM_RANGE(0xca, 0xcb) AM_WRITE(sauro_palette_bank_w) /* 1 written upon death, cleared 2 vblanks later */ - /* Sequence 3,2,1 written during intro screen */ - AM_RANGE(0xcc, 0xcc) AM_WRITENOP /* same as 0xca */ - AM_RANGE(0xcd, 0xcd) AM_WRITENOP /* same as 0xcb */ - AM_RANGE(0xce, 0xce) AM_WRITENOP /* only written at startup */ + AM_RANGE(0xc0, 0xcf) AM_DEVWRITE("mainlatch", ls259_device, write_a0) AM_RANGE(0xe0, 0xe0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) ADDRESS_MAP_END @@ -238,12 +243,7 @@ static ADDRESS_MAP_START( trckydoc_map, AS_PROGRAM, 8, sauro_state ) AM_RANGE(0xf820, 0xf821) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xf828, 0xf828) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_RANGE(0xf830, 0xf830) AM_WRITE(scroll_bg_w) - AM_RANGE(0xf838, 0xf838) AM_WRITENOP /* only written at startup */ - AM_RANGE(0xf839, 0xf839) AM_WRITE(flip_screen_w) - AM_RANGE(0xf83a, 0xf83a) AM_WRITE(coin1_w) - AM_RANGE(0xf83b, 0xf83b) AM_WRITE(coin2_w) - AM_RANGE(0xf83c, 0xf83c) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0xf83f, 0xf83f) AM_WRITENOP /* only written at startup */ + AM_RANGE(0xf838, 0xf83f) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -446,7 +446,9 @@ static MACHINE_CONFIG_START( tecfri ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, XTAL_20MHz/4) /* verified on pcb */ - MCFG_CPU_VBLANK_INT_DRIVER("screen", sauro_state, irq0_line_hold) + + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(sauro_state, irq_reset_w)) MCFG_NVRAM_ADD_1FILL("nvram") @@ -459,6 +461,7 @@ static MACHINE_CONFIG_START( tecfri ) MCFG_SCREEN_SIZE(32 * 8, 32 * 8) MCFG_SCREEN_VISIBLE_AREA(1 * 8, 31 * 8 - 1, 2 * 8, 30 * 8 - 1) MCFG_SCREEN_PALETTE("palette") + MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(sauro_state, vblank_irq)) MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", "proms", 1024) @@ -475,6 +478,11 @@ static MACHINE_CONFIG_DERIVED( trckydoc, tecfri ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(trckydoc_map) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sauro_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(sauro_state, coin1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(sauro_state, coin2_w)) + MCFG_GFXDECODE_ADD("gfxdecode", "palette", trckydoc) MCFG_VIDEO_START_OVERRIDE(sauro_state,trckydoc) @@ -489,6 +497,14 @@ static MACHINE_CONFIG_DERIVED( sauro, tecfri ) MCFG_CPU_PROGRAM_MAP(sauro_map) MCFG_CPU_IO_MAP(sauro_io_map) + MCFG_DEVICE_MODIFY("mainlatch") // Z3 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(sauro_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sauro_state, coin1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(sauro_state, coin2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // sound IRQ trigger? + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(sauro_state, sauro_palette_bank0_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(sauro_state, sauro_palette_bank1_w)) + MCFG_CPU_ADD("audiocpu", Z80, 4000000) // 4 MHz? MCFG_CPU_PROGRAM_MAP(sauro_sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(sauro_state, irq0_line_hold, 8*60) // ? diff --git a/src/mame/drivers/sbrkout.cpp b/src/mame/drivers/sbrkout.cpp index 588e6c000cb..9349f0f891f 100644 --- a/src/mame/drivers/sbrkout.cpp +++ b/src/mame/drivers/sbrkout.cpp @@ -36,6 +36,7 @@ #include "emu.h" #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/dac.h" #include "sound/volt_reg.h" @@ -50,6 +51,7 @@ public: : driver_device(mconfig, type, tag), m_videoram(*this, "videoram"), m_maincpu(*this, "maincpu"), + m_outlatch(*this, "outlatch"), m_dac(*this, "dac"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), @@ -65,13 +67,14 @@ public: DECLARE_WRITE8_MEMBER(irq_ack_w); DECLARE_READ8_MEMBER(switches_r); DECLARE_READ8_MEMBER(sbrkoutct_switches_r); - DECLARE_WRITE8_MEMBER(pot_mask1_w); - DECLARE_WRITE8_MEMBER(pot_mask2_w); - DECLARE_WRITE8_MEMBER(start_1_led_w); - DECLARE_WRITE8_MEMBER(start_2_led_w); - DECLARE_WRITE8_MEMBER(serve_led_w); - DECLARE_WRITE8_MEMBER(serve_2_led_w); - DECLARE_WRITE8_MEMBER(coincount_w); + DECLARE_WRITE_LINE_MEMBER(pot_mask1_w); + DECLARE_WRITE_LINE_MEMBER(pot_mask2_w); + DECLARE_WRITE8_MEMBER(output_latch_w); + DECLARE_WRITE_LINE_MEMBER(start_1_led_w); + DECLARE_WRITE_LINE_MEMBER(start_2_led_w); + DECLARE_WRITE_LINE_MEMBER(serve_led_w); + DECLARE_WRITE_LINE_MEMBER(serve_2_led_w); + DECLARE_WRITE_LINE_MEMBER(coincount_w); DECLARE_READ8_MEMBER(sync_r); DECLARE_READ8_MEMBER(sync2_r); DECLARE_WRITE8_MEMBER(sbrkout_videoram_w); @@ -84,6 +87,7 @@ public: TIMER_CALLBACK_MEMBER(pot_trigger_callback); void update_nmi_state(); required_device<cpu_device> m_maincpu; + required_device<f9334_device> m_outlatch; required_device<dac_bit_interface> m_dac; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; @@ -253,17 +257,17 @@ TIMER_CALLBACK_MEMBER(sbrkout_state::pot_trigger_callback) } -WRITE8_MEMBER(sbrkout_state::pot_mask1_w) +WRITE_LINE_MEMBER(sbrkout_state::pot_mask1_w) { - m_pot_mask[0] = ~offset & 1; + m_pot_mask[0] = !state; m_pot_trigger[0] = 0; update_nmi_state(); } -WRITE8_MEMBER(sbrkout_state::pot_mask2_w) +WRITE_LINE_MEMBER(sbrkout_state::pot_mask2_w) { - m_pot_mask[1] = ~offset & 1; + m_pot_mask[1] = !state; m_pot_trigger[1] = 0; update_nmi_state(); } @@ -282,33 +286,38 @@ WRITE8_MEMBER(sbrkout_state::pot_mask2_w) reversed for the Serve LED, which has a NOT on the signal. */ -WRITE8_MEMBER(sbrkout_state::start_1_led_w) +WRITE8_MEMBER(sbrkout_state::output_latch_w) { - output().set_led_value(0, offset & 1); + m_outlatch->write_bit(offset >> 4, offset & 1); } -WRITE8_MEMBER(sbrkout_state::start_2_led_w) +WRITE_LINE_MEMBER(sbrkout_state::start_1_led_w) { - output().set_led_value(1, offset & 1); + output().set_led_value(0, state); } -WRITE8_MEMBER(sbrkout_state::serve_led_w) +WRITE_LINE_MEMBER(sbrkout_state::start_2_led_w) { - output().set_led_value(0, ~offset & 1); + output().set_led_value(1, state); } -WRITE8_MEMBER(sbrkout_state::serve_2_led_w) + +WRITE_LINE_MEMBER(sbrkout_state::serve_led_w) { - output().set_led_value(1, ~offset & 1); + output().set_led_value(0, !state); } -WRITE8_MEMBER(sbrkout_state::coincount_w) +WRITE_LINE_MEMBER(sbrkout_state::serve_2_led_w) { - machine().bookkeeping().coin_counter_w(0, offset & 1); + output().set_led_value(1, !state); } +WRITE_LINE_MEMBER(sbrkout_state::coincount_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} /************************************* @@ -403,12 +412,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, sbrkout_state ) AM_RANGE(0x0880, 0x0880) AM_MIRROR(0x003f) AM_READ_PORT("START") AM_RANGE(0x08c0, 0x08c0) AM_MIRROR(0x003f) AM_READ_PORT("SERVICE") AM_RANGE(0x0c00, 0x0c00) AM_MIRROR(0x03ff) AM_READ(sync_r) - AM_RANGE(0x0c10, 0x0c11) AM_MIRROR(0x000e) AM_WRITE(serve_led_w) - AM_RANGE(0x0c30, 0x0c31) AM_MIRROR(0x000e) AM_WRITE(start_1_led_w) - AM_RANGE(0x0c40, 0x0c41) AM_MIRROR(0x000e) AM_WRITE(start_2_led_w) - AM_RANGE(0x0c50, 0x0c51) AM_MIRROR(0x000e) AM_WRITE(pot_mask1_w) - AM_RANGE(0x0c60, 0x0c61) AM_MIRROR(0x000e) AM_WRITE(pot_mask2_w) - AM_RANGE(0x0c70, 0x0c71) AM_MIRROR(0x000e) AM_WRITE(coincount_w) + AM_RANGE(0x0c00, 0x0c7f) AM_WRITE(output_latch_w) AM_RANGE(0x0c80, 0x0c80) AM_MIRROR(0x007f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x0e00, 0x0e00) AM_MIRROR(0x007f) AM_WRITE(irq_ack_w) AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x03ff) AM_READ(sync2_r) @@ -424,13 +428,7 @@ static ADDRESS_MAP_START( sbrkoutct_main_map, AS_PROGRAM, 8, sbrkout_state ) AM_RANGE(0x0880, 0x0880) AM_MIRROR(0x003f) AM_READ_PORT("START") AM_RANGE(0x08c0, 0x08c0) AM_MIRROR(0x003f) AM_READ_PORT("SERVICE") AM_RANGE(0x0c00, 0x0c00) AM_MIRROR(0x03ff) AM_READ(sync_r) - AM_RANGE(0x0c10, 0x0c11) AM_MIRROR(0x000e) AM_WRITE(serve_led_w) - AM_RANGE(0x0c20, 0x0c21) AM_MIRROR(0x000e) AM_WRITE(serve_2_led_w) - AM_RANGE(0x0c30, 0x0c31) AM_MIRROR(0x000e) AM_WRITE(start_1_led_w) - AM_RANGE(0x0c40, 0x0c41) AM_MIRROR(0x000e) AM_WRITE(start_2_led_w) - AM_RANGE(0x0c50, 0x0c51) AM_MIRROR(0x000e) AM_WRITE(pot_mask1_w) - AM_RANGE(0x0c60, 0x0c61) AM_MIRROR(0x000e) AM_WRITE(pot_mask2_w) - AM_RANGE(0x0c70, 0x0c71) AM_MIRROR(0x000e) AM_WRITE(coincount_w) + AM_RANGE(0x0c00, 0x0c7f) AM_WRITE(output_latch_w) AM_RANGE(0x0c80, 0x0c80) AM_MIRROR(0x007f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x0e00, 0x0e00) AM_MIRROR(0x007f) AM_WRITE(irq_ack_w) AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x03ff) AM_READ(sync2_r) @@ -586,6 +584,14 @@ static MACHINE_CONFIG_START( sbrkout ) MCFG_CPU_ADD("maincpu", M6502,MAIN_CLOCK/16) /* 375 KHz? Should be 750KHz? */ MCFG_CPU_PROGRAM_MAP(main_map) + MCFG_DEVICE_ADD("outlatch", F9334, 0) // H8 + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sbrkout_state, serve_led_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(sbrkout_state, start_1_led_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(sbrkout_state, start_2_led_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(sbrkout_state, pot_mask1_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(sbrkout_state, pot_mask2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(sbrkout_state, coincount_w)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) @@ -610,6 +616,9 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED(sbrkoutct, sbrkout) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(sbrkoutct_main_map) + + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(sbrkout_state, serve_2_led_w)) MACHINE_CONFIG_END /************************************* diff --git a/src/mame/drivers/shangkid.cpp b/src/mame/drivers/shangkid.cpp index a351a801723..4c69f6aa042 100644 --- a/src/mame/drivers/shangkid.cpp +++ b/src/mame/drivers/shangkid.cpp @@ -54,6 +54,7 @@ Games by Nihon Game/Culture Brain: #include "includes/shangkid.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "sound/dac.h" #include "sound/volt_reg.h" @@ -63,31 +64,21 @@ Games by Nihon Game/Culture Brain: /***************************************************************************************/ -WRITE8_MEMBER(shangkid_state::maincpu_bank_w) +WRITE_LINE_MEMBER(shangkid_state::cpu_reset_w) { - membank("bank1")->set_entry(data & 1); -} - -WRITE8_MEMBER(shangkid_state::bbx_enable_w) -{ - m_bbx->set_input_line(INPUT_LINE_HALT, data?0:1 ); -} - -WRITE8_MEMBER(shangkid_state::cpu_reset_w) -{ - if( data == 0 ) + if (!state) { - m_bbx->set_input_line(INPUT_LINE_RESET, PULSE_LINE); + //m_bbx->set_input_line(INPUT_LINE_RESET, PULSE_LINE); } - else if( data == 1 ) + else { m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); } } -WRITE8_MEMBER(shangkid_state::sound_enable_w) +WRITE_LINE_MEMBER(shangkid_state::sound_enable_w) { - m_bbx_sound_enable = data; + m_bbx_sound_enable = state; } WRITE8_MEMBER(shangkid_state::chinhero_ay8910_porta_w) @@ -150,14 +141,10 @@ DRIVER_INIT_MEMBER(shangkid_state,shangkid) MACHINE_RESET_MEMBER(shangkid_state,chinhero) { - m_bbx->set_input_line(INPUT_LINE_HALT, 1 ); } MACHINE_RESET_MEMBER(shangkid_state,shangkid) { - m_bbx->set_input_line(INPUT_LINE_HALT, 1 ); - - membank("bank1")->set_entry(0); membank("bank2")->set_entry(0); } @@ -244,12 +231,7 @@ GFXDECODE_END static ADDRESS_MAP_START( chinhero_main_map, AS_PROGRAM, 8, shangkid_state ) AM_RANGE(0x0000, 0x9fff) AM_ROM AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */ - AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w) - AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w) - AM_RANGE(0xb002, 0xb002) AM_WRITENOP /* main CPU interrupt-related */ - AM_RANGE(0xb003, 0xb003) AM_WRITENOP /* BBX interrupt-related */ - AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w) - AM_RANGE(0xb006, 0xb006) AM_WRITENOP /* coin counter */ + AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM") AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2") @@ -264,13 +246,7 @@ static ADDRESS_MAP_START( shangkid_main_map, AS_PROGRAM, 8, shangkid_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank1") AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */ - AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w) - AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w) - AM_RANGE(0xb002, 0xb002) AM_WRITENOP /* main CPU interrupt-related */ - AM_RANGE(0xb003, 0xb003) AM_WRITENOP /* BBX interrupt-related */ - AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w) - AM_RANGE(0xb006, 0xb006) AM_WRITENOP /* coin counter */ - AM_RANGE(0xb007, 0xb007) AM_WRITE(maincpu_bank_w) + AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM") AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2") @@ -286,12 +262,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( chinhero_bbx_map, AS_PROGRAM, 8, shangkid_state ) AM_RANGE(0x0000, 0x9fff) AM_ROM AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */ - AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w) - AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w) - AM_RANGE(0xb002, 0xb002) AM_WRITENOP /* main CPU interrupt-related */ - AM_RANGE(0xb003, 0xb003) AM_WRITENOP /* BBX interrupt-related */ - AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w) - AM_RANGE(0xb006, 0xb006) AM_WRITENOP /* coin counter */ + AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM") AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2") @@ -304,13 +275,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( shangkid_bbx_map, AS_PROGRAM, 8, shangkid_state ) AM_RANGE(0x0000, 0x9fff) AM_ROM AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */ - AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w) - AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w) - AM_RANGE(0xb002, 0xb002) AM_WRITENOP /* main CPU interrupt-related */ - AM_RANGE(0xb003, 0xb003) AM_WRITENOP /* BBX interrupt-related */ - AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w) - AM_RANGE(0xb006, 0xb006) AM_WRITENOP /* coin counter */ - AM_RANGE(0xb007, 0xb007) AM_WRITE(maincpu_bank_w) + AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM") AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2") @@ -365,6 +330,14 @@ static MACHINE_CONFIG_START( chinhero ) MCFG_CPU_PROGRAM_MAP(chinhero_sound_map) MCFG_CPU_IO_MAP(sound_portmap) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(INPUTLINE("bbx", INPUT_LINE_HALT)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(shangkid_state, sound_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) /* main CPU interrupt-related */ + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) /* BBX interrupt-related */ + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(shangkid_state, cpu_reset_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) /* coin counter */ + MCFG_MACHINE_RESET_OVERRIDE(shangkid_state,chinhero) MCFG_QUANTUM_TIME(attotime::from_hz(600)) @@ -409,6 +382,9 @@ static MACHINE_CONFIG_DERIVED( shangkid, chinhero ) MCFG_CPU_MODIFY("audiocpu") MCFG_CPU_PROGRAM_MAP(shangkid_sound_map) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(MEMBANK("bank1")) + MCFG_MACHINE_RESET_OVERRIDE(shangkid_state,shangkid) /* video hardware */ diff --git a/src/mame/drivers/shougi.cpp b/src/mame/drivers/shougi.cpp index 2fb3da8b000..be853dd5849 100644 --- a/src/mame/drivers/shougi.cpp +++ b/src/mame/drivers/shougi.cpp @@ -78,6 +78,7 @@ PROM : Type MB7051 **************************************************************************/ #include "emu.h" +#include "machine/74259.h" #include "machine/alpha8201.h" #include "machine/watchdog.h" #include "cpu/z80/z80.h" @@ -95,6 +96,7 @@ public: m_maincpu(*this, "maincpu"), m_subcpu(*this, "sub"), m_alpha_8201(*this, "alpha_8201"), + m_mainlatch(*this, "mainlatch"), m_videoram(*this, "videoram") { } @@ -102,14 +104,15 @@ public: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_subcpu; required_device<alpha_8201_device> m_alpha_8201; + required_device<ls259_device> m_mainlatch; required_shared_ptr<uint8_t> m_videoram; - uint8_t m_control[8]; uint8_t m_nmi_enabled; int m_r; DECLARE_WRITE8_MEMBER(control_w); + DECLARE_WRITE_LINE_MEMBER(nmi_enable_w); DECLARE_READ8_MEMBER(semaphore_r); DECLARE_PALETTE_INIT(shougi); @@ -118,30 +121,20 @@ public: INTERRUPT_GEN_MEMBER(vblank_nmi); virtual void machine_start() override; - virtual void machine_reset() override; }; void shougi_state::machine_start() { // zerofill - memset(m_control, 0, sizeof(m_control)); m_nmi_enabled = 0; m_r = 0; // register for savestates - save_item(NAME(m_control)); save_item(NAME(m_nmi_enabled)); save_item(NAME(m_r)); } -void shougi_state::machine_reset() -{ - // 74LS259 is auto CLR on reset - for (int i = 0; i < 8; i++) - control_w(m_maincpu->space(), i, 0); -} - /*************************************************************************** @@ -241,40 +234,20 @@ WRITE8_MEMBER(shougi_state::control_w) { // 4800-480f connected to the 74LS259, A3 is data line // so 4800-4807 write 0, and 4808-480f write 1 - data = offset >> 3 & 1; - offset &= 7; + m_mainlatch->write_bit(offset & 7, BIT(offset, 3)); +} + - switch (offset) +WRITE_LINE_MEMBER(shougi_state::nmi_enable_w) +{ + m_nmi_enabled = state; + + // NMI lines are tied together on both CPUs and connected to the LS74 /Q output + if (!m_nmi_enabled) { - case 1: - m_nmi_enabled = data; - - // NMI lines are tied together on both CPUs and connected to the LS74 /Q output - if (!m_nmi_enabled) - { - m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - m_subcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); - } - break; - - case 3: - // start/halt ALPHA-8201 - m_alpha_8201->mcu_start_w(data); - break; - - case 4: - // ALPHA-8201 shared RAM bus direction: 0: mcu, 1: maincpu - m_alpha_8201->bus_dir_w(!data); - break; - - default: - // 0: 0: sharedram = sub, 1: sharedram = main (TODO!) - // 2: ? - // 7: nothing? connected to +5v via resistor - break; + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + m_subcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } - - m_control[offset] = data; } @@ -411,6 +384,14 @@ static MACHINE_CONFIG_START( shougi ) MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL_10MHz/4/8) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // 0: sharedram = sub, 1: sharedram = main (TODO!) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(shougi_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // ? + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("alpha_8201", alpha_8201_device, mcu_start_w)) // start/halt ALPHA-8201 + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("alpha_8201", alpha_8201_device, bus_dir_w)) MCFG_DEVCB_INVERT // ALPHA-8201 shared RAM bus direction: 0: mcu, 1: maincpu + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // nothing? connected to +5v via resistor + MCFG_QUANTUM_PERFECT_CPU("maincpu") MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/skyarmy.cpp b/src/mame/drivers/skyarmy.cpp index c7f8b03d4c1..fa494e4b695 100644 --- a/src/mame/drivers/skyarmy.cpp +++ b/src/mame/drivers/skyarmy.cpp @@ -26,6 +26,7 @@ #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "screen.h" #include "speaker.h" @@ -56,12 +57,12 @@ public: tilemap_t* m_tilemap; int m_nmi; - DECLARE_WRITE8_MEMBER(flip_screen_x_w); - DECLARE_WRITE8_MEMBER(flip_screen_y_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(colorram_w); - DECLARE_WRITE8_MEMBER(coin_counter_w); - DECLARE_WRITE8_MEMBER(nmi_enable_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(nmi_enable_w); TILE_GET_INFO_MEMBER(get_tile_info); @@ -79,14 +80,14 @@ void skyarmy_state::machine_start() save_item(NAME(m_nmi)); } -WRITE8_MEMBER(skyarmy_state::flip_screen_x_w) +WRITE_LINE_MEMBER(skyarmy_state::flip_screen_x_w) { - flip_screen_x_set(data & 0x01); + flip_screen_x_set(state); } -WRITE8_MEMBER(skyarmy_state::flip_screen_y_w) +WRITE_LINE_MEMBER(skyarmy_state::flip_screen_y_w) { - flip_screen_y_set(data & 0x01); + flip_screen_y_set(state); } TILE_GET_INFO_MEMBER(skyarmy_state::get_tile_info) @@ -192,15 +193,15 @@ INTERRUPT_GEN_MEMBER(skyarmy_state::nmi_source) } -WRITE8_MEMBER(skyarmy_state::coin_counter_w) +WRITE_LINE_MEMBER(skyarmy_state::coin_counter_w) { - machine().bookkeeping().coin_counter_w(0, data & 1); + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(skyarmy_state::nmi_enable_w) +WRITE_LINE_MEMBER(skyarmy_state::nmi_enable_w) { - m_nmi=data & 1; + m_nmi = state; if (!m_nmi) m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } @@ -213,14 +214,11 @@ static ADDRESS_MAP_START( skyarmy_map, AS_PROGRAM, 8, skyarmy_state ) AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram") /* Color RAM */ AM_RANGE(0x9800, 0x983f) AM_RAM AM_SHARE("spriteram") /* Sprites */ AM_RANGE(0x9840, 0x985f) AM_RAM AM_SHARE("scrollram") /* Scroll RAM */ - AM_RANGE(0xa000, 0xa000) AM_READ_PORT("DSW") AM_WRITE(coin_counter_w) + AM_RANGE(0xa000, 0xa000) AM_READ_PORT("DSW") AM_RANGE(0xa001, 0xa001) AM_READ_PORT("P1") AM_RANGE(0xa002, 0xa002) AM_READ_PORT("P2") AM_RANGE(0xa003, 0xa003) AM_READ_PORT("SYSTEM") - AM_RANGE(0xa004, 0xa004) AM_WRITE(nmi_enable_w) // ??? - AM_RANGE(0xa005, 0xa005) AM_WRITE(flip_screen_x_w) - AM_RANGE(0xa006, 0xa006) AM_WRITE(flip_screen_y_w) - AM_RANGE(0xa007, 0xa007) AM_WRITENOP // video RAM buffering? + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("latch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( skyarmy_io_map, AS_IO, 8, skyarmy_state ) @@ -325,6 +323,13 @@ static MACHINE_CONFIG_START( skyarmy ) MCFG_CPU_VBLANK_INT_DRIVER("screen", skyarmy_state, irq0_line_hold) MCFG_CPU_PERIODIC_INT_DRIVER(skyarmy_state, nmi_source, 650) /* Hz */ + MCFG_DEVICE_ADD("latch", LS259, 0) // 11C + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(skyarmy_state, coin_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(skyarmy_state, nmi_enable_w)) // ??? + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(skyarmy_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(skyarmy_state, flip_screen_y_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // video RAM buffering? + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/skydiver.cpp b/src/mame/drivers/skydiver.cpp index a02eb02254d..511a08074d9 100644 --- a/src/mame/drivers/skydiver.cpp +++ b/src/mame/drivers/skydiver.cpp @@ -144,9 +144,9 @@ PALETTE_INIT_MEMBER(skydiver_state, skydiver) * *************************************/ -WRITE8_MEMBER(skydiver_state::nmion_w) +WRITE_LINE_MEMBER(skydiver_state::nmion_w) { - m_nmion = offset; + m_nmion = state; } @@ -168,24 +168,6 @@ INTERRUPT_GEN_MEMBER(skydiver_state::interrupt) /************************************* * - * Sound handlers - * - *************************************/ - -WRITE8_MEMBER(skydiver_state::sound_enable_w) -{ - m_discrete->write(space, SKYDIVER_SOUND_EN, offset); -} - -WRITE8_MEMBER(skydiver_state::whistle_w) -{ - m_discrete->write(space, NODE_RELATIVE(SKYDIVER_WHISTLE1_EN, (offset >> 1)), offset & 0x01); -} - - - -/************************************* - * * Main CPU memory handlers * *************************************/ @@ -195,19 +177,8 @@ static ADDRESS_MAP_START( skydiver_map, AS_PROGRAM, 8, skydiver_state ) AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x4300) AM_READWRITE(wram_r, wram_w) AM_RANGE(0x0080, 0x00ff) AM_MIRROR(0x4000) AM_RAM /* RAM B1 */ AM_RANGE(0x0400, 0x07ff) AM_MIRROR(0x4000) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") /* RAMs K1,M1,P1,J1,N1,K/L1,L1,H/J1 */ - AM_RANGE(0x0800, 0x0801) AM_MIRROR(0x47f0) AM_WRITE(lamp_s_w) - AM_RANGE(0x0802, 0x0803) AM_MIRROR(0x47f0) AM_WRITE(lamp_k_w) - AM_RANGE(0x0804, 0x0805) AM_MIRROR(0x47f0) AM_WRITE(start_lamp_1_w) - AM_RANGE(0x0806, 0x0807) AM_MIRROR(0x47f0) AM_WRITE(start_lamp_2_w) - AM_RANGE(0x0808, 0x0809) AM_MIRROR(0x47f0) AM_WRITE(lamp_y_w) - AM_RANGE(0x080a, 0x080b) AM_MIRROR(0x47f0) AM_WRITE(lamp_d_w) - AM_RANGE(0x080c, 0x080d) AM_MIRROR(0x47f0) AM_WRITE(sound_enable_w) - // AM_RANGE(0x1000, 0x1001) AM_MIRROR(0x47f0) AM_WRITE(jump1_lamps_w) - AM_RANGE(0x1002, 0x1003) AM_MIRROR(0x47f0) AM_WRITE(coin_lockout_w) - // AM_RANGE(0x1006, 0x1007) AM_MIRROR(0x47f0) AM_WRITE(jump2_lamps_w) - AM_RANGE(0x1008, 0x100b) AM_MIRROR(0x47f0) AM_WRITE(whistle_w) - AM_RANGE(0x100c, 0x100d) AM_MIRROR(0x47f0) AM_WRITE(nmion_w) - AM_RANGE(0x100e, 0x100f) AM_MIRROR(0x47f0) AM_WRITE(width_w) + AM_RANGE(0x0800, 0x080f) AM_MIRROR(0x47f0) AM_DEVWRITE("latch1", f9334_device, write_a0) + AM_RANGE(0x1000, 0x100f) AM_MIRROR(0x47f0) AM_DEVWRITE("latch2", f9334_device, write_a0) AM_RANGE(0x1800, 0x1800) AM_MIRROR(0x47e0) AM_READ_PORT("IN0") AM_RANGE(0x1801, 0x1801) AM_MIRROR(0x47e0) AM_READ_PORT("IN1") AM_RANGE(0x1802, 0x1802) AM_MIRROR(0x47e0) AM_READ_PORT("IN2") @@ -222,7 +193,7 @@ static ADDRESS_MAP_START( skydiver_map, AS_PROGRAM, 8, skydiver_state ) AM_RANGE(0x180b, 0x180b) AM_MIRROR(0x47e4) AM_READ_PORT("IN11") AM_RANGE(0x1810, 0x1810) AM_MIRROR(0x47e4) AM_READ_PORT("IN12") AM_RANGE(0x1811, 0x1811) AM_MIRROR(0x47e4) AM_READ_PORT("IN13") - AM_RANGE(0x2000, 0x201f) AM_MIRROR(0x47e0) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_WRITE(_2000_201F_w) + AM_RANGE(0x2000, 0x201f) AM_MIRROR(0x47e0) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_WRITE(latch3_watchdog_w) AM_RANGE(0x2800, 0x2fff) AM_MIRROR(0x4000) AM_ROM AM_RANGE(0x3000, 0x37ff) AM_MIRROR(0x4000) AM_ROM AM_RANGE(0x3800, 0x3fff) AM_ROM @@ -385,6 +356,30 @@ static MACHINE_CONFIG_START( skydiver ) MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) // 128V clocks the same as VBLANK + MCFG_DEVICE_ADD("latch1", F9334, 0) // F12 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(skydiver_state, lamp_s_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(skydiver_state, lamp_k_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(skydiver_state, start_lamp_1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(skydiver_state, start_lamp_2_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(skydiver_state, lamp_y_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(skydiver_state, lamp_d_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_SOUND_EN>)) + MCFG_DEVICE_ADD("latch2", F9334, 0) // H12 + //MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(skydiver_state, jump1_lamps_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(skydiver_state, coin_lockout_w)) + //MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(skydiver_state, jump2_lamps_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_WHISTLE1_EN>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_WHISTLE2_EN>)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(skydiver_state, nmion_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(skydiver_state, width_w)) + MCFG_DEVICE_ADD("latch3", F9334, 0) // A11 + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(skydiver_state, lamp_i_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(skydiver_state, lamp_v_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(skydiver_state, lamp_e_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(skydiver_state, lamp_r_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_OCT1_EN>)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_OCT2_EN>)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_NOISE_RST>)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/slapfght.cpp b/src/mame/drivers/slapfght.cpp index 881ec6bf79d..d36e2a0c466 100644 --- a/src/mame/drivers/slapfght.cpp +++ b/src/mame/drivers/slapfght.cpp @@ -262,6 +262,7 @@ Stephh's notes (based on the games Z80 code and some tests) : #include "cpu/z80/z80.h" #include "cpu/m6805/m6805.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "speaker.h" @@ -367,82 +368,49 @@ INTERRUPT_GEN_MEMBER(slapfght_state::vblank_irq) device.execute().set_input_line(0, ASSERT_LINE); } -WRITE8_MEMBER(slapfght_state::irq_enable_w) +WRITE_LINE_MEMBER(slapfght_state::irq_enable_w) { - m_main_irq_enabled = offset ? true : false; + m_main_irq_enabled = state ? true : false; if (!m_main_irq_enabled) m_maincpu->set_input_line(0, CLEAR_LINE); } -WRITE8_MEMBER(slapfght_state::sound_reset_w) +WRITE_LINE_MEMBER(slapfght_state::sound_reset_w) { - m_audiocpu->set_input_line(INPUT_LINE_RESET, offset ? CLEAR_LINE : ASSERT_LINE); + m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE); - if (offset == 0) + if (state == 0) m_sound_nmi_enabled = false; } -WRITE8_MEMBER(slapfght_state::prg_bank_w) -{ - membank("bank1")->set_entry(offset); -} - READ8_MEMBER(slapfght_state::vblank_r) { return m_screen->vblank() ? 1 : 0; } -static ADDRESS_MAP_START( perfrman_io_map, AS_IO, 8, slapfght_state ) +static ADDRESS_MAP_START( io_map_nomcu, AS_IO, 8, slapfght_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_READ(vblank_r) - AM_RANGE(0x00, 0x01) AM_WRITE(sound_reset_w) - AM_RANGE(0x02, 0x03) AM_WRITE(flipscreen_w) - AM_RANGE(0x06, 0x07) AM_WRITE(irq_enable_w) - AM_RANGE(0x0c, 0x0d) AM_WRITE(palette_bank_w) -ADDRESS_MAP_END - - -static ADDRESS_MAP_START( tigerh_io_map, AS_IO, 8, slapfght_state ) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(tigerh_mcu_status_r) - AM_RANGE(0x00, 0x01) AM_WRITE(sound_reset_w) - AM_RANGE(0x02, 0x03) AM_WRITE(flipscreen_w) - AM_RANGE(0x06, 0x07) AM_WRITE(irq_enable_w) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( tigerhb_io_map, AS_IO, 8, slapfght_state ) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(vblank_r) // no MCU - AM_IMPORT_FROM( tigerh_io_map ) + AM_RANGE(0x00, 0x0f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) ADDRESS_MAP_END - -static ADDRESS_MAP_START( slapfigh_io_map, AS_IO, 8, slapfght_state ) +static ADDRESS_MAP_START( io_map_mcu, AS_IO, 8, slapfght_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_READ(tigerh_mcu_status_r) - AM_RANGE(0x00, 0x01) AM_WRITE(sound_reset_w) - AM_RANGE(0x02, 0x03) AM_WRITE(flipscreen_w) - AM_RANGE(0x06, 0x07) AM_WRITE(irq_enable_w) - AM_RANGE(0x08, 0x09) AM_WRITE(prg_bank_w) + AM_RANGE(0x00, 0x0f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) ADDRESS_MAP_END -static ADDRESS_MAP_START( slapfighb1_io_map, AS_IO, 8, slapfght_state ) +static ADDRESS_MAP_START( getstarb1_io_map, AS_IO, 8, slapfght_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(vblank_r) // no MCU - AM_IMPORT_FROM( slapfigh_io_map ) + AM_RANGE(0x00, 0x00) AM_READ(getstarb1_prot_r) + AM_RANGE(0x00, 0x0f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) ADDRESS_MAP_END -static ADDRESS_MAP_START( getstar_io_map, AS_IO, 8, slapfght_state ) +static ADDRESS_MAP_START( getstarb2_io_map, AS_IO, 8, slapfght_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_READ(getstar_mcusim_status_r) - AM_IMPORT_FROM( slapfigh_io_map ) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( getstarb1_io_map, AS_IO, 8, slapfght_state ) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ(getstarb1_prot_r) - AM_IMPORT_FROM( getstar_io_map ) + AM_RANGE(0x00, 0x0f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) ADDRESS_MAP_END @@ -910,9 +878,15 @@ static MACHINE_CONFIG_START( perfrman ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz/4) // 4MHz? XTAL is known, divider is guessed MCFG_CPU_PROGRAM_MAP(perfrman_map) - MCFG_CPU_IO_MAP(perfrman_io_map) + MCFG_CPU_IO_MAP(io_map_nomcu) MCFG_CPU_VBLANK_INT_DRIVER("screen", slapfght_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(slapfght_state, sound_reset_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(slapfght_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(slapfght_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(slapfght_state, palette_bank_w)) + MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/8) // 2MHz? XTAL is known, divider is guessed MCFG_CPU_PROGRAM_MAP(perfrman_sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(slapfght_state, sound_nmi, 240) // music speed, verified @@ -955,9 +929,14 @@ static MACHINE_CONFIG_START( tigerh ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, XTAL_36MHz/6) // 6MHz MCFG_CPU_PROGRAM_MAP(tigerh_map_mcu) - MCFG_CPU_IO_MAP(tigerh_io_map) + MCFG_CPU_IO_MAP(io_map_mcu) MCFG_CPU_VBLANK_INT_DRIVER("screen", slapfght_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(slapfght_state, sound_reset_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(slapfght_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(slapfght_state, irq_enable_w)) + MCFG_CPU_ADD("audiocpu", Z80, XTAL_36MHz/12) // 3MHz MCFG_CPU_PROGRAM_MAP(tigerh_sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(slapfght_state, sound_nmi, 360) // music speed, verified with pcb recording @@ -1001,7 +980,7 @@ static MACHINE_CONFIG_DERIVED( tigerhb1, tigerh ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(tigerhb1_map) - MCFG_CPU_IO_MAP(tigerhb_io_map) + MCFG_CPU_IO_MAP(io_map_nomcu) MCFG_DEVICE_REMOVE("bmcu") MACHINE_CONFIG_END @@ -1019,9 +998,15 @@ static MACHINE_CONFIG_START( slapfigh ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",Z80, XTAL_36MHz/6) // 6MHz MCFG_CPU_PROGRAM_MAP(slapfigh_map_mcu) - MCFG_CPU_IO_MAP(slapfigh_io_map) + MCFG_CPU_IO_MAP(io_map_mcu) MCFG_CPU_VBLANK_INT_DRIVER("screen", slapfght_state, vblank_irq) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(slapfght_state, sound_reset_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(slapfght_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(slapfght_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("bank1")) + MCFG_CPU_ADD("audiocpu", Z80, XTAL_36MHz/12) // 3MHz MCFG_CPU_PROGRAM_MAP(tigerh_sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(slapfght_state, sound_nmi, 180) @@ -1066,7 +1051,7 @@ static MACHINE_CONFIG_DERIVED( slapfighb1, slapfigh ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(slapfighb1_map) - MCFG_CPU_IO_MAP(slapfighb1_io_map) + MCFG_CPU_IO_MAP(io_map_nomcu) MCFG_DEVICE_REMOVE("bmcu") MACHINE_CONFIG_END @@ -1090,7 +1075,7 @@ static MACHINE_CONFIG_DERIVED( getstarb2, slapfighb1 ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(getstar_map) - MCFG_CPU_IO_MAP(getstar_io_map) + MCFG_CPU_IO_MAP(getstarb2_io_map) MACHINE_CONFIG_END diff --git a/src/mame/drivers/sonson.cpp b/src/mame/drivers/sonson.cpp index a5aacf161b2..9c35e66cd07 100644 --- a/src/mame/drivers/sonson.cpp +++ b/src/mame/drivers/sonson.cpp @@ -54,33 +54,28 @@ TODO: #include "includes/sonson.h" #include "cpu/m6809/m6809.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "sound/ay8910.h" #include "screen.h" #include "speaker.h" -WRITE8_MEMBER(sonson_state::sonson_sh_irqtrigger_w) +WRITE_LINE_MEMBER(sonson_state::sh_irqtrigger_w) { - data &= 1; - - if (m_last_irq == 0 && data == 1) - { - /* setting bit 0 low then high triggers IRQ on the sound CPU */ + // setting bit 0 low then high triggers IRQ on the sound CPU + if (state) m_audiocpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE); - } - - m_last_irq = data; } -WRITE8_MEMBER(sonson_state::sonson_coin1_counter_w) +WRITE_LINE_MEMBER(sonson_state::coin1_counter_w) { - machine().bookkeeping().coin_counter_w(0, data & 1); + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(sonson_state::sonson_coin2_counter_w) +WRITE_LINE_MEMBER(sonson_state::coin2_counter_w) { - machine().bookkeeping().coin_counter_w(1, data & 1); + machine().bookkeeping().coin_counter_w(1, state); } static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, sonson_state ) @@ -96,10 +91,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, sonson_state ) AM_RANGE(0x3006, 0x3006) AM_READ_PORT("DSW2") AM_RANGE(0x3008, 0x3008) AM_WRITENOP // might be Y scroll, but the game always sets it to 0 AM_RANGE(0x3010, 0x3010) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) - AM_RANGE(0x3018, 0x3018) AM_WRITE(sonson_flipscreen_w) - AM_RANGE(0x3019, 0x3019) AM_WRITE(sonson_sh_irqtrigger_w) - AM_RANGE(0x301e, 0x301e) AM_WRITE(sonson_coin2_counter_w) - AM_RANGE(0x301f, 0x301f) AM_WRITE(sonson_coin1_counter_w) + AM_RANGE(0x3018, 0x301f) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x4000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -231,16 +223,6 @@ GFXDECODE_END -void sonson_state::machine_start() -{ - save_item(NAME(m_last_irq)); -} - -void sonson_state::machine_reset() -{ - m_last_irq = 0; -} - static MACHINE_CONFIG_START( sonson ) /* basic machine hardware */ @@ -252,6 +234,11 @@ static MACHINE_CONFIG_START( sonson ) MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(sonson_state, irq0_line_hold, 4*60) /* FIRQs are triggered by the main CPU */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // A9 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(sonson_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sonson_state, sh_irqtrigger_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(sonson_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(sonson_state, coin1_counter_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/splash.cpp b/src/mame/drivers/splash.cpp index 6f8e92a3f5e..222c0a70f12 100644 --- a/src/mame/drivers/splash.cpp +++ b/src/mame/drivers/splash.cpp @@ -74,22 +74,29 @@ WRITE16_MEMBER(splash_state::roldf_sh_irqtrigger_w) space.device().execute().spin_until_time(attotime::from_usec(40)); } -WRITE16_MEMBER(splash_state::coin_w) +WRITE8_MEMBER(splash_state::coin_w) { - if (ACCESSING_BITS_8_15) - { - switch ((offset >> 3)) - { - case 0x00: /* Coin Lockouts */ - case 0x01: - machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, (data & 0x0400) >> 8); - break; - case 0x02: /* Coin Counters */ - case 0x03: - machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, (data & 0x0100) >> 8); - break; - } - } + m_outlatch->write_bit(offset >> 3, BIT(data, 0)); +} + +WRITE_LINE_MEMBER(splash_state::coin1_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(0, !state); +} + +WRITE_LINE_MEMBER(splash_state::coin2_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(1, !state); +} + +WRITE_LINE_MEMBER(splash_state::coin1_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(splash_state::coin2_counter_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } static ADDRESS_MAP_START( splash_map, AS_PROGRAM, 16, splash_state ) @@ -99,8 +106,8 @@ static ADDRESS_MAP_START( splash_map, AS_PROGRAM, 16, splash_state ) AM_RANGE(0x840002, 0x840003) AM_READ_PORT("DSW2") AM_RANGE(0x840004, 0x840005) AM_READ_PORT("P1") AM_RANGE(0x840006, 0x840007) AM_READ_PORT("P2") + AM_RANGE(0x84000a, 0x84000b) AM_SELECT(0x000070) AM_WRITE8(coin_w, 0xff00) /* Coin Counters + Coin Lockout */ AM_RANGE(0x84000e, 0x84000f) AM_WRITE(splash_sh_irqtrigger_w) /* Sound command */ - AM_RANGE(0x84000a, 0x84003b) AM_WRITE(coin_w) /* Coin Counters + Coin Lockout */ AM_RANGE(0x880000, 0x8817ff) AM_RAM_WRITE(vram_w) AM_SHARE("videoram") /* Video RAM */ AM_RANGE(0x881800, 0x881803) AM_RAM AM_SHARE("vregs") /* Scroll registers */ AM_RANGE(0x881804, 0x881fff) AM_RAM /* Work RAM */ @@ -172,8 +179,8 @@ static ADDRESS_MAP_START( roldfrog_map, AS_PROGRAM, 16, splash_state ) AM_RANGE(0x840002, 0x840003) AM_READ_PORT("DSW2") AM_RANGE(0x840004, 0x840005) AM_READ_PORT("P1") AM_RANGE(0x840006, 0x840007) AM_READ_PORT("P2") + AM_RANGE(0x84000a, 0x84000b) AM_SELECT(0x000070) AM_WRITE8(coin_w, 0xff00) /* Coin Counters + Coin Lockout */ AM_RANGE(0x84000e, 0x84000f) AM_WRITE(roldf_sh_irqtrigger_w) /* Sound command */ - AM_RANGE(0x84000a, 0x84003b) AM_WRITE(coin_w) /* Coin Counters + Coin Lockout */ AM_RANGE(0x880000, 0x8817ff) AM_RAM_WRITE(vram_w) AM_SHARE("videoram") /* Video RAM */ AM_RANGE(0x881800, 0x881803) AM_RAM AM_SHARE("vregs") /* Scroll registers */ AM_RANGE(0x881804, 0x881fff) AM_RAM /* Work RAM */ @@ -501,6 +508,12 @@ static MACHINE_CONFIG_START( splash ) MCFG_CPU_PROGRAM_MAP(splash_sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(splash_state, nmi_line_pulse, 60*64) /* needed for the msm5205 to play the samples */ + MCFG_DEVICE_ADD("outlatch", LS259, 0) // A8 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(splash_state, coin1_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(splash_state, coin2_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(splash_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(splash_state, coin2_counter_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(58) @@ -557,6 +570,12 @@ static MACHINE_CONFIG_START( roldfrog ) MCFG_CPU_IO_MAP(roldfrog_sound_io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", splash_state, roldfrog_interrupt) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(splash_state, coin1_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(splash_state, coin2_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(splash_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(splash_state, coin2_counter_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/sprint2.cpp b/src/mame/drivers/sprint2.cpp index 915292612da..73e075122e9 100644 --- a/src/mame/drivers/sprint2.cpp +++ b/src/mame/drivers/sprint2.cpp @@ -47,8 +47,6 @@ DRIVER_INIT_MEMBER(sprint2_state,dominos4) { m_game = 3; m_maincpu->space(AS_PROGRAM).install_read_port(0x0880, 0x0880, "SELFTTEST"); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x0c50, 0x0c5f, write8_delegate(FUNC(sprint2_state::dominos4_lamp3_w),this)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x0c60, 0x0c6f, write8_delegate(FUNC(sprint2_state::dominos4_lamp4_w),this)); } int sprint2_state::service_mode() @@ -170,7 +168,7 @@ READ8_MEMBER(sprint2_state::sprint2_sync_r) { uint8_t val = 0; - if (m_attract != 0) + if (m_outlatch->q0_r() != 0) val |= 0x10; if (m_screen->vpos() == 261) @@ -212,12 +210,9 @@ WRITE8_MEMBER(sprint2_state::sprint2_wram_w) } -WRITE8_MEMBER(sprint2_state::sprint2_attract_w) +WRITE8_MEMBER(sprint2_state::output_latch_w) { - m_attract = offset & 1; - - // also DOMINOS_ATTRACT_EN - m_discrete->write(space, SPRINT2_ATTRACT_EN, m_attract); + m_outlatch->write_bit(offset >> 4, offset & 1); } @@ -227,34 +222,24 @@ WRITE8_MEMBER(sprint2_state::sprint2_noise_reset_w) } -WRITE8_MEMBER(sprint2_state::sprint2_skid1_w) +WRITE_LINE_MEMBER(sprint2_state::lamp1_w) { - // also DOMINOS_TUMBLE_EN - m_discrete->write(space, SPRINT2_SKIDSND1_EN, offset & 1); + output().set_led_value(0, state); } -WRITE8_MEMBER(sprint2_state::sprint2_skid2_w) +WRITE_LINE_MEMBER(sprint2_state::lamp2_w) { - m_discrete->write(space, SPRINT2_SKIDSND2_EN, offset & 1); + output().set_led_value(1, state); } - -WRITE8_MEMBER(sprint2_state::sprint2_lamp1_w) +WRITE_LINE_MEMBER(sprint2_state::lamp3_w) { - output().set_led_value(0, offset & 1); -} -WRITE8_MEMBER(sprint2_state::sprint2_lamp2_w) -{ - output().set_led_value(1, offset & 1); + output().set_led_value(2, state); } -WRITE8_MEMBER(sprint2_state::dominos4_lamp3_w) +WRITE_LINE_MEMBER(sprint2_state::lamp4_w) { - output().set_led_value(2, offset & 1); -} -WRITE8_MEMBER(sprint2_state::dominos4_lamp4_w) -{ - output().set_led_value(3, offset & 1); + output().set_led_value(3, state); } static ADDRESS_MAP_START( sprint2_map, AS_PROGRAM, 8, sprint2_state ) @@ -268,12 +253,7 @@ static ADDRESS_MAP_START( sprint2_map, AS_PROGRAM, 8, sprint2_state ) AM_RANGE(0x0880, 0x08bf) AM_READ(sprint2_steering1_r) AM_RANGE(0x08c0, 0x08ff) AM_READ(sprint2_steering2_r) AM_RANGE(0x0c00, 0x0fff) AM_READ(sprint2_sync_r) - AM_RANGE(0x0c00, 0x0c0f) AM_WRITE(sprint2_attract_w) - AM_RANGE(0x0c10, 0x0c1f) AM_WRITE(sprint2_skid1_w) - AM_RANGE(0x0c20, 0x0c2f) AM_WRITE(sprint2_skid2_w) - AM_RANGE(0x0c30, 0x0c3f) AM_WRITE(sprint2_lamp1_w) - AM_RANGE(0x0c40, 0x0c4f) AM_WRITE(sprint2_lamp2_w) - AM_RANGE(0x0c60, 0x0c6f) AM_WRITENOP /* SPARE */ + AM_RANGE(0x0c00, 0x0c7f) AM_WRITE(output_latch_w) AM_RANGE(0x0c80, 0x0cff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x0d00, 0x0d7f) AM_WRITE(sprint2_collision_reset1_w) AM_RANGE(0x0d80, 0x0dff) AM_WRITE(sprint2_collision_reset2_w) @@ -556,6 +536,14 @@ static MACHINE_CONFIG_START( sprint2 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_DEVICE_ADD("outlatch", F9334, 0) // at H8 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT2_ATTRACT_EN>)) // also DOMINOS_ATTRACT_EN + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT2_SKIDSND1_EN>)) // also DOMINOS_TUMBLE_EN + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT2_SKIDSND2_EN>)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(sprint2_state, lamp1_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(sprint2_state, lamp2_w)) + //MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(sprint2_state, sprint2_spare_w)) + MCFG_SOUND_ADD("discrete", DISCRETE, 0) MCFG_DISCRETE_INTF(sprint2) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) @@ -592,6 +580,12 @@ static MACHINE_CONFIG_DERIVED( dominos, sprint2 ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( dominos4, dominos ) + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(sprint2_state, lamp3_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(sprint2_state, lamp4_w)) +MACHINE_CONFIG_END + ROM_START( sprint1 ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "6290-01.b1", 0x2000, 0x0800, CRC(41fc985e) SHA1(7178846480cbf8d15955ccd987d0b0e902ab9f90) ) @@ -721,4 +715,4 @@ GAME( 1976, sprint2, sprint1, sprint2, sprint2, sprint2_state, sprint2, ROT0, " GAME( 1976, sprint2a, sprint1, sprint2, sprint2, sprint2_state, sprint2, ROT0, "Atari (Kee Games)", "Sprint 2 (set 2)", 0 ) GAME( 1976, sprint2h, sprint1, sprint2, sprint2, sprint2_state, sprint2, ROT0, "hack", "Sprint 2 (color kit, Italy)", MACHINE_WRONG_COLORS ) // Italian hack, supposedly is color instead of b/w? how? GAME( 1977, dominos, 0, dominos, dominos, sprint2_state, dominos, ROT0, "Atari", "Dominos", 0 ) -GAME( 1977, dominos4, dominos, dominos, dominos4,sprint2_state, dominos4,ROT0, "Atari", "Dominos 4 (Cocktail)", 0 ) +GAME( 1977, dominos4, dominos, dominos4, dominos4,sprint2_state, dominos4,ROT0, "Atari", "Dominos 4 (Cocktail)", 0 ) diff --git a/src/mame/drivers/sprint4.cpp b/src/mame/drivers/sprint4.cpp index 56fe8c86c7f..b65be1a2ca3 100644 --- a/src/mame/drivers/sprint4.cpp +++ b/src/mame/drivers/sprint4.cpp @@ -11,6 +11,7 @@ Atari Sprint 4 driver #include "audio/sprint4.h" #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "speaker.h" #define MASTER_CLOCK 12096000 @@ -195,43 +196,35 @@ WRITE8_MEMBER(sprint4_state::da_latch_w) } -WRITE8_MEMBER(sprint4_state::lamp_w) +WRITE_LINE_MEMBER(sprint4_state::lamp0_w) { - output().set_led_value((offset >> 1) & 3, offset & 1); + output().set_led_value(0, state); } - -#ifdef UNUSED_FUNCTION -WRITE8_MEMBER(sprint4_state::lockout_w) +WRITE_LINE_MEMBER(sprint4_state::lamp1_w) { - machine().bookkeeping().coin_lockout_global_w(~offset & 1); + output().set_led_value(1, state); } -#endif - -WRITE8_MEMBER(sprint4_state::screech_1_w) +WRITE_LINE_MEMBER(sprint4_state::lamp2_w) { - m_discrete->write(space, SPRINT4_SCREECH_EN_1, offset & 1); + output().set_led_value(2, state); } - -WRITE8_MEMBER(sprint4_state::screech_2_w) +WRITE_LINE_MEMBER(sprint4_state::lamp3_w) { - m_discrete->write(space, SPRINT4_SCREECH_EN_2, offset & 1); + output().set_led_value(3, state); } -WRITE8_MEMBER(sprint4_state::screech_3_w) +#ifdef UNUSED_FUNCTION +WRITE8_MEMBER(sprint4_state::lockout_w) { - m_discrete->write(space, SPRINT4_SCREECH_EN_3, offset & 1); + machine().bookkeeping().coin_lockout_global_w(~offset & 1); } +#endif -WRITE8_MEMBER(sprint4_state::screech_4_w) -{ - m_discrete->write(space, SPRINT4_SCREECH_EN_4, offset & 1); -} - WRITE8_MEMBER(sprint4_state::bang_w) { m_discrete->write(space, SPRINT4_BANG_DATA, data & 0x0f); @@ -264,11 +257,7 @@ static ADDRESS_MAP_START( sprint4_cpu_map, AS_PROGRAM, 8, sprint4_state ) AM_RANGE(0x0040, 0x0041) AM_MIRROR(0x718) AM_WRITE(da_latch_w) AM_RANGE(0x0042, 0x0043) AM_MIRROR(0x718) AM_WRITE(bang_w) AM_RANGE(0x0044, 0x0045) AM_MIRROR(0x718) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x0060, 0x0067) AM_MIRROR(0x710) AM_WRITE(lamp_w) - AM_RANGE(0x0068, 0x0069) AM_MIRROR(0x710) AM_WRITE(screech_1_w) - AM_RANGE(0x006a, 0x006b) AM_MIRROR(0x710) AM_WRITE(screech_2_w) - AM_RANGE(0x006c, 0x006d) AM_MIRROR(0x710) AM_WRITE(screech_3_w) - AM_RANGE(0x006e, 0x006f) AM_MIRROR(0x710) AM_WRITE(screech_4_w) + AM_RANGE(0x0060, 0x006f) AM_MIRROR(0x710) AM_DEVWRITE("latch", f9334_device, write_a0) AM_RANGE(0x2000, 0x27ff) AM_NOP /* diagnostic ROM */ AM_RANGE(0x2800, 0x3fff) AM_ROM @@ -433,6 +422,16 @@ static MACHINE_CONFIG_START( sprint4 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_DEVICE_ADD("latch", F9334, 0) // at E11 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(sprint4_state, lamp0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sprint4_state, lamp1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(sprint4_state, lamp2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(sprint4_state, lamp3_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT4_SCREECH_EN_1>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT4_SCREECH_EN_2>)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT4_SCREECH_EN_3>)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT4_SCREECH_EN_4>)) + MCFG_SOUND_ADD("discrete", DISCRETE, 0) MCFG_DISCRETE_INTF(sprint4) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) diff --git a/src/mame/drivers/sprint8.cpp b/src/mame/drivers/sprint8.cpp index 1787e21f7cc..45b5b4dc6ba 100644 --- a/src/mame/drivers/sprint8.cpp +++ b/src/mame/drivers/sprint8.cpp @@ -9,7 +9,6 @@ Atari Sprint 8 driver #include "emu.h" #include "includes/sprint8.h" #include "cpu/m6800/m6800.h" -#include "speaker.h" @@ -96,14 +95,19 @@ WRITE8_MEMBER(sprint8_state::lockout_w) } -WRITE8_MEMBER(sprint8_state::int_reset_w) +WRITE_LINE_MEMBER(sprint8_state::int_reset_w) { - m_collision_reset = !(data & 1); + m_collision_reset = !state; if (m_collision_reset) m_maincpu->set_input_line(0, CLEAR_LINE); } +WRITE_LINE_MEMBER(sprint8_state::team_w) +{ + m_team = state; +} + static ADDRESS_MAP_START( sprint8_map, AS_PROGRAM, 8, sprint8_state ) AM_RANGE(0x0000, 0x00ff) AM_RAM @@ -117,14 +121,8 @@ static ADDRESS_MAP_START( sprint8_map, AS_PROGRAM, 8, sprint8_state ) AM_RANGE(0x1c10, 0x1c1f) AM_WRITEONLY AM_SHARE("pos_v_ram") AM_RANGE(0x1c20, 0x1c2f) AM_WRITEONLY AM_SHARE("pos_d_ram") AM_RANGE(0x1c30, 0x1c37) AM_WRITE(lockout_w) - AM_RANGE(0x1d00, 0x1d00) AM_WRITE(int_reset_w) - AM_RANGE(0x1d01, 0x1d01) AM_WRITE(crash_w) - AM_RANGE(0x1d02, 0x1d02) AM_WRITE(screech_w) - AM_RANGE(0x1d03, 0x1d03) AM_WRITENOP - AM_RANGE(0x1d04, 0x1d04) AM_WRITENOP - AM_RANGE(0x1d05, 0x1d05) AM_WRITEONLY AM_SHARE("team") - AM_RANGE(0x1d06, 0x1d06) AM_WRITE(attract_w) - AM_RANGE(0x1e00, 0x1e07) AM_WRITE(motor_w) + AM_RANGE(0x1d00, 0x1d07) AM_DEVWRITE("latch", f9334_device, write_d0) + AM_RANGE(0x1e00, 0x1e07) AM_DEVWRITE("motor", f9334_device, write_d0) AM_RANGE(0x1f00, 0x1f00) AM_WRITENOP /* probably a watchdog, disabled in service mode */ AM_RANGE(0x2000, 0x3fff) AM_ROM AM_RANGE(0xf800, 0xffff) AM_ROM @@ -479,23 +477,7 @@ static MACHINE_CONFIG_START( sprint8 ) MCFG_PALETTE_INDIRECT_ENTRIES(18) MCFG_PALETTE_INIT_OWNER(sprint8_state, sprint8) - /* sound hardware */ - /* the proper way is to hook up 4 speakers, but they are not really - * F/R/L/R speakers. Though you can pretend the 1-2 mix is the front. */ - MCFG_SPEAKER_ADD("speaker_1_2", 0.0, 0.0, 1.0) /* front */ - MCFG_SPEAKER_ADD("speaker_3_7", -0.2, 0.0, 1.0) /* left */ - MCFG_SPEAKER_ADD("speaker_5_6", 0.0, 0.0, -0.5) /* back */ - MCFG_SPEAKER_ADD("speaker_4_8", 0.2, 0.0, 1.0) /* right */ - - MCFG_SOUND_ADD("discrete", DISCRETE, 0) - MCFG_DISCRETE_INTF(sprint8) - MCFG_SOUND_ROUTE(0, "speaker_1_2", 1.0) - /* volumes on other channels defaulted to off, */ - /* user can turn them up if needed. */ - /* The game does not sound good with all channels mixed to stereo. */ - MCFG_SOUND_ROUTE(1, "speaker_3_7", 0.0) - MCFG_SOUND_ROUTE(2, "speaker_5_6", 0.0) - MCFG_SOUND_ROUTE(3, "speaker_4_8", 0.0) + MCFG_FRAGMENT_ADD(sprint8_audio) MACHINE_CONFIG_END diff --git a/src/mame/drivers/starshp1.cpp b/src/mame/drivers/starshp1.cpp index 5f57715c250..705cccc77af 100644 --- a/src/mame/drivers/starshp1.cpp +++ b/src/mame/drivers/starshp1.cpp @@ -12,6 +12,7 @@ Atari Starship 1 driver #include "emu.h" #include "includes/starshp1.h" #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "speaker.h" @@ -24,42 +25,23 @@ INTERRUPT_GEN_MEMBER(starshp1_state::starshp1_interrupt) } -WRITE8_MEMBER(starshp1_state::starshp1_audio_w) +WRITE_LINE_MEMBER(starshp1_state::attract_w) { - data &= 1; - - switch (offset & 7) - { - case 0: - m_attract = data; - m_discrete->write(space, STARSHP1_ATTRACT, data); - break; - case 1: - m_phasor = data; - m_discrete->write(space, STARSHP1_PHASOR_ON, data); - break; - case 2: - m_discrete->write(space, STARSHP1_KICKER, data); - break; - case 3: - m_discrete->write(space, STARSHP1_SL1, data); - break; - case 4: - m_discrete->write(space, STARSHP1_SL2, data); - break; - case 5: - m_discrete->write(space, STARSHP1_MOLVL, data); - break; - case 6: - m_discrete->write(space, STARSHP1_NOISE_FREQ, data); - break; - } + m_attract = state; + m_discrete->write(machine().dummy_space(), STARSHP1_ATTRACT, state); machine().bookkeeping().coin_lockout_w(0, !m_attract); machine().bookkeeping().coin_lockout_w(1, !m_attract); } +WRITE_LINE_MEMBER(starshp1_state::phasor_w) +{ + m_phasor = state; + m_discrete->write(machine().dummy_space(), STARSHP1_PHASOR_ON, state); +} + + WRITE8_MEMBER(starshp1_state::starshp1_collision_reset_w) { m_collision_latch = 0; @@ -131,37 +113,45 @@ WRITE8_MEMBER(starshp1_state::starshp1_analog_out_w) } -WRITE8_MEMBER(starshp1_state::starshp1_misc_w) +WRITE_LINE_MEMBER(starshp1_state::ship_explode_w) { - data &= 1; + m_ship_explode = state; +} - switch (offset & 7) - { - case 0: - m_ship_explode = data; - break; - case 1: - m_circle_mod = data; - break; - case 2: - m_circle_kill = !data; - break; - case 3: - m_starfield_kill = data; - break; - case 4: - m_inverse = data; - break; - case 5: - /* BLACK HOLE, not used */ - break; - case 6: - m_mux = data; - break; - case 7: - output().set_led_value(0, !data); - break; - } + +WRITE_LINE_MEMBER(starshp1_state::circle_mod_w) +{ + m_circle_mod = state; +} + + +WRITE_LINE_MEMBER(starshp1_state::circle_kill_w) +{ + m_circle_kill = !state; +} + + +WRITE_LINE_MEMBER(starshp1_state::starfield_kill_w) +{ + m_starfield_kill = state; +} + + +WRITE_LINE_MEMBER(starshp1_state::inverse_w) +{ + m_inverse = state; +} + + +WRITE_LINE_MEMBER(starshp1_state::mux_w) +{ + m_mux = state; +} + + +WRITE_LINE_MEMBER(starshp1_state::led_w) +{ + output().set_led_value(0, !state); } @@ -179,9 +169,9 @@ static ADDRESS_MAP_START( starshp1_map, AS_PROGRAM, 8, starshp1_state ) AM_RANGE(0xd400, 0xd40f) AM_WRITEONLY AM_SHARE("obj_ram") AM_RANGE(0xd800, 0xd800) AM_READ(starshp1_rng_r) AM_RANGE(0xd800, 0xd80f) AM_WRITE(starshp1_collision_reset_w) - AM_RANGE(0xdc00, 0xdc0f) AM_WRITE(starshp1_misc_w) + AM_RANGE(0xdc00, 0xdc07) AM_MIRROR(0x0008) AM_DEVWRITE("misclatch", f9334_device, write_d0) AM_RANGE(0xdd00, 0xdd0f) AM_WRITE(starshp1_analog_in_w) - AM_RANGE(0xde00, 0xde0f) AM_WRITE(starshp1_audio_w) + AM_RANGE(0xde00, 0xde07) AM_MIRROR(0x0008) AM_DEVWRITE("audiolatch", f9334_device, write_d0) AM_RANGE(0xdf00, 0xdf0f) AM_WRITE(starshp1_analog_out_w) AM_RANGE(0xf000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -305,6 +295,16 @@ static MACHINE_CONFIG_START( starshp1 ) MCFG_CPU_PROGRAM_MAP(starshp1_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", starshp1_state, starshp1_interrupt) + MCFG_DEVICE_ADD("misclatch", F9334, 0) // C8 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(starshp1_state, ship_explode_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(starshp1_state, circle_mod_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(starshp1_state, circle_kill_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(starshp1_state, starfield_kill_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(starshp1_state, inverse_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // BLACK HOLE, not used + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(starshp1_state, mux_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(starshp1_state, led_w)) + /* video hardware */ @@ -325,6 +325,15 @@ static MACHINE_CONFIG_START( starshp1 ) MCFG_SOUND_ADD("discrete", DISCRETE, 0) MCFG_DISCRETE_INTF(starshp1) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_DEVICE_ADD("audiolatch", F9334, 0) // D9 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(starshp1_state, attract_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(starshp1_state, phasor_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<STARSHP1_KICKER>)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<STARSHP1_SL1>)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<STARSHP1_SL2>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<STARSHP1_MOLVL>)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<STARSHP1_NOISE_FREQ>)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/starwars.cpp b/src/mame/drivers/starwars.cpp index 116706f7fef..54f911cac1e 100644 --- a/src/mame/drivers/starwars.cpp +++ b/src/mame/drivers/starwars.cpp @@ -29,6 +29,7 @@ #include "includes/slapstic.h" #include "cpu/m6809/m6809.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "video/vector.h" #include "video/avgdvg.h" @@ -63,17 +64,12 @@ WRITE8_MEMBER(starwars_state::quad_pokeyn_w) void starwars_state::machine_reset() { /* ESB-specific */ - if (m_is_esb) + if (m_slapstic_device.found()) { - address_space &space = m_maincpu->space(AS_PROGRAM); - /* reset the slapstic */ m_slapstic_device->slapstic_reset(); m_slapstic_current_bank = m_slapstic_device->slapstic_bank(); memcpy(m_slapstic_base, &m_slapstic_source[m_slapstic_current_bank * 0x2000], 0x2000); - - /* reset all the banks */ - starwars_out_w(space, 4, 0); } /* reset the matrix processor */ @@ -150,7 +146,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, starwars_state ) AM_RANGE(0x4620, 0x463f) AM_DEVWRITE("avg", avg_starwars_device, reset_w) AM_RANGE(0x4640, 0x465f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x4660, 0x467f) AM_WRITE(irq_ack_w) - AM_RANGE(0x4680, 0x469f) AM_READNOP AM_WRITE(starwars_out_w) + AM_RANGE(0x4680, 0x4687) AM_READNOP AM_MIRROR(0x0018) AM_DEVWRITE("outlatch", ls259_device, write_d7) AM_RANGE(0x46a0, 0x46bf) AM_WRITE(starwars_nstore_w) AM_RANGE(0x46c0, 0x46c2) AM_WRITE(starwars_adc_select_w) AM_RANGE(0x46e0, 0x46e0) AM_WRITE(starwars_soundrst_w) @@ -320,6 +316,16 @@ static MACHINE_CONFIG_START( starwars ) MCFG_X2212_ADD_AUTOSAVE("x2212") /* nvram */ + MCFG_DEVICE_ADD("outlatch", LS259, 0) // 9L/M + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(starwars_state, coin1_counter_w)) // Coin counter 1 + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(starwars_state, coin2_counter_w)) // Coin counter 2 + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(starwars_state, led3_w)) // LED 3 + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(starwars_state, led2_w)) // LED 2 + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("bank1")) // bank switch + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(starwars_state, prng_reset_w)) // reset PRNG + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(starwars_state, led1_w)) // LED 1 + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(starwars_state, recall_w)) // NVRAM array recall + /* video hardware */ MCFG_VECTOR_ADD("vector") MCFG_SCREEN_ADD("screen", VECTOR) @@ -359,6 +365,10 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( esb, starwars ) MCFG_SLAPSTIC_ADD("slapstic", 101) + + MCFG_DEVICE_MODIFY("outlatch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("bank1")) + MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("bank2")) MACHINE_CONFIG_END @@ -528,7 +538,6 @@ ROM_END DRIVER_INIT_MEMBER(starwars_state,starwars) { /* prepare the mathbox */ - m_is_esb = 0; starwars_mproc_init(); /* initialize banking */ @@ -553,7 +562,6 @@ DRIVER_INIT_MEMBER(starwars_state,esb) m_maincpu->space(AS_PROGRAM).install_read_bank(0xa000, 0xffff, "bank2"); /* prepare the matrix processor */ - m_is_esb = 1; starwars_mproc_init(); /* initialize banking */ diff --git a/src/mame/drivers/subs.cpp b/src/mame/drivers/subs.cpp index 76a30841615..70faf483713 100644 --- a/src/mame/drivers/subs.cpp +++ b/src/mame/drivers/subs.cpp @@ -23,7 +23,7 @@ #include "includes/subs.h" #include "cpu/m6502/m6502.h" -#include "sound/discrete.h" +#include "machine/74259.h" #include "rendlay.h" #include "screen.h" #include "speaker.h" @@ -59,15 +59,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, subs_state ) AM_RANGE(0x0020, 0x0027) AM_READ(coin_r) // AM_RANGE(0x0040, 0x0040) AM_WRITE(timer_reset_w) AM_RANGE(0x0060, 0x0063) AM_READ(options_r) - AM_RANGE(0x0060, 0x0061) AM_WRITE(lamp1_w) - AM_RANGE(0x0062, 0x0063) AM_WRITE(lamp2_w) - AM_RANGE(0x0064, 0x0065) AM_WRITE(sonar2_w) - AM_RANGE(0x0066, 0x0067) AM_WRITE(sonar1_w) -// Schematics show crash and explode reversed. But this is proper. - AM_RANGE(0x0068, 0x0069) AM_WRITE(explode_w) - AM_RANGE(0x006a, 0x006b) AM_WRITE(crash_w) - AM_RANGE(0x006c, 0x006d) AM_WRITE(invert1_w) - AM_RANGE(0x006e, 0x006f) AM_WRITE(invert2_w) + AM_RANGE(0x0060, 0x006f) AM_DEVWRITE("latch", ls259_device, write_a0) AM_RANGE(0x0090, 0x009f) AM_SHARE("spriteram") AM_RANGE(0x0000, 0x01ff) AM_RAM AM_RANGE(0x0800, 0x0bff) AM_RAM AM_SHARE("videoram") @@ -220,6 +212,17 @@ static MACHINE_CONFIG_START( subs ) MCFG_DISCRETE_INTF(subs) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + MCFG_DEVICE_ADD("latch", LS259, 0) // C9 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(subs_state, lamp1_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(subs_state, lamp2_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SUBS_SONAR2_EN>)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SUBS_SONAR1_EN>)) + // Schematics show crash and explode reversed. But this is proper. + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SUBS_EXPLODE_EN>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SUBS_CRASH_EN>)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(subs_state, invert1_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(subs_state, invert2_w)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/tankbatt.cpp b/src/mame/drivers/tankbatt.cpp index ba260df01cf..74c6f313695 100644 --- a/src/mame/drivers/tankbatt.cpp +++ b/src/mame/drivers/tankbatt.cpp @@ -62,6 +62,7 @@ Known issues: #include "includes/tankbatt.h" #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "sound/samples.h" #include "screen.h" #include "speaker.h" @@ -73,9 +74,14 @@ void tankbatt_state::machine_start() save_item(NAME(m_sound_enable)); } -WRITE8_MEMBER(tankbatt_state::led_w) +WRITE_LINE_MEMBER(tankbatt_state::led0_w) { - output().set_led_value(offset,data & 1); + machine().output().set_led_value(0, state); +} + +WRITE_LINE_MEMBER(tankbatt_state::led1_w) +{ + machine().output().set_led_value(1, state); } READ8_MEMBER(tankbatt_state::in0_r) @@ -102,21 +108,21 @@ READ8_MEMBER(tankbatt_state::dsw_r) return ((val << (7 - offset)) & 0x80); } -WRITE8_MEMBER(tankbatt_state::interrupt_enable_w) +WRITE_LINE_MEMBER(tankbatt_state::interrupt_enable_w) { - m_nmi_enable = !data; - m_sound_enable = !data; + m_nmi_enable = !state; + m_sound_enable = !state; /* hack - turn off the engine noise if the normal game nmi's are disabled */ - if (data) m_samples->stop(2); + if (state) m_samples->stop(2); } -WRITE8_MEMBER(tankbatt_state::demo_interrupt_enable_w) +WRITE_LINE_MEMBER(tankbatt_state::demo_interrupt_enable_w) { - m_nmi_enable = data; + m_nmi_enable = state; } -WRITE8_MEMBER(tankbatt_state::sh_expl_w) +WRITE_LINE_MEMBER(tankbatt_state::sh_expl_w) { if (m_sound_enable) { @@ -124,11 +130,11 @@ WRITE8_MEMBER(tankbatt_state::sh_expl_w) } } -WRITE8_MEMBER(tankbatt_state::sh_engine_w) +WRITE_LINE_MEMBER(tankbatt_state::sh_engine_w) { if (m_sound_enable) { - if (data) + if (state) m_samples->start(2, 2, true); else m_samples->start(2, 1, true); @@ -136,7 +142,7 @@ WRITE8_MEMBER(tankbatt_state::sh_engine_w) else m_samples->stop(2); } -WRITE8_MEMBER(tankbatt_state::sh_fire_w) +WRITE_LINE_MEMBER(tankbatt_state::sh_fire_w) { if (m_sound_enable) { @@ -150,16 +156,15 @@ WRITE8_MEMBER(tankbatt_state::irq_ack_w) m_maincpu->set_input_line(0, CLEAR_LINE); } -WRITE8_MEMBER(tankbatt_state::coincounter_w) +WRITE_LINE_MEMBER(tankbatt_state::coincounter_w) { - machine().bookkeeping().coin_counter_w(0,data & 1); - machine().bookkeeping().coin_counter_w(1,data & 1); + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(tankbatt_state::coinlockout_w) +WRITE_LINE_MEMBER(tankbatt_state::coinlockout_w) { - machine().bookkeeping().coin_lockout_w(0,data & 1); - machine().bookkeeping().coin_lockout_w(1,data & 1); + machine().bookkeeping().coin_lockout_w(0, state); + machine().bookkeeping().coin_lockout_w(1, state); } static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tankbatt_state ) @@ -167,18 +172,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tankbatt_state ) AM_RANGE(0x0010, 0x01ff) AM_RAM AM_RANGE(0x0200, 0x07ff) AM_RAM AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") - AM_RANGE(0x0c00, 0x0c07) AM_READ(in0_r) - AM_RANGE(0x0c00, 0x0c01) AM_WRITE(led_w) - AM_RANGE(0x0c02, 0x0c02) AM_WRITE(coincounter_w) - AM_RANGE(0x0c03, 0x0c03) AM_WRITE(coinlockout_w) - AM_RANGE(0x0c08, 0x0c0f) AM_READ(in1_r) - AM_RANGE(0x0c08, 0x0c08) AM_WRITENOP //coin counter mirror? - AM_RANGE(0x0c0a, 0x0c0a) AM_WRITE(interrupt_enable_w) - AM_RANGE(0x0c0b, 0x0c0b) AM_WRITE(sh_engine_w) - AM_RANGE(0x0c0c, 0x0c0c) AM_WRITE(sh_fire_w) - AM_RANGE(0x0c0d, 0x0c0d) AM_WRITE(sh_expl_w) // bit 7 == led for the start 2 button - AM_RANGE(0x0c0e, 0x0c0e) AM_WRITENOP //bit 7 == led for the start 1 button - AM_RANGE(0x0c0f, 0x0c0f) AM_WRITE(demo_interrupt_enable_w) + AM_RANGE(0x0c00, 0x0c07) AM_READ(in0_r) AM_DEVWRITE("outlatch", cd4099_device, write_d0) + AM_RANGE(0x0c08, 0x0c0f) AM_READ(in1_r) AM_DEVWRITE("mainlatch", cd4099_device, write_d0) AM_RANGE(0x0c10, 0x0c10) AM_WRITE(irq_ack_w) AM_RANGE(0x0c18, 0x0c1f) AM_READ(dsw_r) AM_RANGE(0x0c18, 0x0c18) AM_WRITENOP /* watchdog ?? */ @@ -289,6 +284,21 @@ static MACHINE_CONFIG_START( tankbatt ) MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", tankbatt_state, interrupt) + MCFG_DEVICE_ADD("mainlatch", CD4099, 0) // latches at 4H and 5H (are the empty 4J and 5J locations for LS259 substitution?) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) //coin counter mirror? + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tankbatt_state, interrupt_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tankbatt_state, sh_engine_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tankbatt_state, sh_fire_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(tankbatt_state, sh_expl_w)) // bit 7 also set by ASL instruction + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // bit 7 also set by ASL instruction + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(tankbatt_state, demo_interrupt_enable_w)) + + MCFG_DEVICE_ADD("outlatch", CD4099, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tankbatt_state, led0_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tankbatt_state, led1_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tankbatt_state, coincounter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tankbatt_state, coinlockout_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/targeth.cpp b/src/mame/drivers/targeth.cpp index 58a4a8f7768..d9ca413b922 100644 --- a/src/mame/drivers/targeth.cpp +++ b/src/mame/drivers/targeth.cpp @@ -101,9 +101,19 @@ WRITE16_MEMBER(targeth_state::OKIM6295_bankswitch_w) } } -WRITE16_MEMBER(targeth_state::coin_counter_w) +WRITE16_MEMBER(targeth_state::output_latch_w) { - machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01); + m_outlatch->write_bit(offset >> 3, BIT(data, 0)); +} + +WRITE_LINE_MEMBER(targeth_state::coin1_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(targeth_state::coin2_counter_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } WRITE8_MEMBER(targeth_state::shareram_w) @@ -139,10 +149,10 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, targeth_state ) AM_RANGE(0x700002, 0x700003) AM_READ_PORT("DSW1") AM_RANGE(0x700006, 0x700007) AM_READ_PORT("SYSTEM") /* Coins, Start & Fire buttons */ AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SERVICE") /* Service & Guns Reload? */ + AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE(output_latch_w) AM_RANGE(0x70000c, 0x70000d) AM_WRITE(OKIM6295_bankswitch_w) /* OKI6295 bankswitch */ AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status register */ - AM_RANGE(0x700010, 0x70001b) AM_WRITENOP /* ??? Guns reload related? */ - AM_RANGE(0x70002a, 0x70003b) AM_WRITE(coin_counter_w) /* Coin counters */ + AM_RANGE(0x700010, 0x700011) AM_WRITENOP /* ??? Guns reload related? */ AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */ AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */ ADDRESS_MAP_END @@ -253,6 +263,10 @@ static MACHINE_CONFIG_START( targeth ) MCFG_DEVICE_ADD("gaelco_ds5002fp", GAELCO_DS5002FP, XTAL_24MHz / 2) MCFG_DEVICE_ADDRESS_MAP(0, mcu_hostmem_map) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(targeth_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(targeth_state, coin2_counter_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/thepit.cpp b/src/mame/drivers/thepit.cpp index 3b32028b4f3..2fe4fd84105 100644 --- a/src/mame/drivers/thepit.cpp +++ b/src/mame/drivers/thepit.cpp @@ -156,6 +156,7 @@ Player 2 and Player 1 share the same controls ! #include "includes/thepit.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" @@ -187,14 +188,21 @@ READ8_MEMBER(thepit_state::intrepid_colorram_mirror_r) return m_colorram[offset]; } -WRITE8_MEMBER(thepit_state::sound_enable_w) +WRITE_LINE_MEMBER(thepit_state::coin_lockout_w) { - machine().sound().system_enable(data); + machine().bookkeeping().coin_lockout_w(0, !state); } -WRITE8_MEMBER(thepit_state::nmi_mask_w) +WRITE_LINE_MEMBER(thepit_state::sound_enable_w) { - m_nmi_mask = data & 1; + machine().sound().system_enable(state); +} + +WRITE_LINE_MEMBER(thepit_state::nmi_mask_w) +{ + m_nmi_mask = state; + if (!m_nmi_mask) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } @@ -208,13 +216,8 @@ static ADDRESS_MAP_START( thepit_main_map, AS_PROGRAM, 8, thepit_state ) AM_RANGE(0x9860, 0x98ff) AM_RAM AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r) AM_WRITENOP // Not hooked up according to the schematics AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1") - AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w) - AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized - AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w - AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_enable_w) - AM_RANGE(0xb004, 0xb005) AM_WRITENOP // Unused, but initialized - AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w) - AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w) + AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") + AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END @@ -228,13 +231,8 @@ static ADDRESS_MAP_START( desertdan_main_map, AS_PROGRAM, 8, thepit_state ) AM_RANGE(0x9860, 0x98ff) AM_RAM AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r) AM_WRITENOP // Not hooked up according to the schematics AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1") - AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w) - AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized - AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w - AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_enable_w) - AM_RANGE(0xb004, 0xb005) AM_WRITENOP // Unused, but initialized - AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w) - AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w) + AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") + AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END @@ -249,14 +247,8 @@ static ADDRESS_MAP_START( intrepid_main_map, AS_PROGRAM, 8, thepit_state ) AM_RANGE(0x9860, 0x98ff) AM_RAM AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r) AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1") - AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w) - AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized - AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w - AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_enable_w) - AM_RANGE(0xb004, 0xb004) AM_WRITENOP // Unused, but initialized - AM_RANGE(0xb005, 0xb005) AM_WRITE(intrepid_graphics_bank_w) - AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w) - AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w) + AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") + AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) ADDRESS_MAP_END @@ -706,7 +698,7 @@ GFXDECODE_END INTERRUPT_GEN_MEMBER(thepit_state::vblank_irq) { if(m_nmi_mask) - device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); + device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } static MACHINE_CONFIG_START( thepit ) @@ -721,6 +713,13 @@ static MACHINE_CONFIG_START( thepit ) MCFG_CPU_IO_MAP(audio_io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", thepit_state, irq0_line_hold) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC42 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(thepit_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // marked "LOCK OUT" on Centuri schematic but never written + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(thepit_state, sound_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(thepit_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(thepit_state, flip_screen_y_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -746,7 +745,12 @@ static MACHINE_CONFIG_START( thepit ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( desertdn, thepit ) +static MACHINE_CONFIG_DERIVED( fitter, thepit ) + MCFG_DEVICE_MODIFY("mainlatch") // IC42 + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(thepit_state, coin_lockout_w)) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( desertdn, fitter ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") @@ -759,12 +763,15 @@ static MACHINE_CONFIG_DERIVED( desertdn, thepit ) MCFG_GFXDECODE_MODIFY("gfxdecode", intrepid) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( intrepid, thepit ) +static MACHINE_CONFIG_DERIVED( intrepid, fitter ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(intrepid_main_map) + MCFG_DEVICE_MODIFY("mainlatch") // 2F on Funny Mouse main board; IC46 on Port Man main board + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(thepit_state, intrepid_graphics_bank_w)) + /* video hardware */ MCFG_GFXDECODE_MODIFY("gfxdecode", intrepid) MACHINE_CONFIG_END @@ -1268,10 +1275,10 @@ DRIVER_INIT_MEMBER(thepit_state,rtriv) } -GAME( 1981, roundup, 0, thepit, roundup, thepit_state, 0, ROT90, "Taito Corporation (Amenip/Centuri license)", "Round-Up", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, fitter, roundup, thepit, fitter, thepit_state, 0, ROT90, "Taito Corporation", "Fitter", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, fitterbl, roundup, thepit, fitter, thepit_state, 0, ROT90, "bootleg", "Fitter (bootleg of Round-Up)", MACHINE_SUPPORTS_SAVE ) -GAME( 1981, ttfitter, roundup, thepit, fitter, thepit_state, 0, ROT90, "Taito Corporation", "T.T Fitter (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, roundup, 0, fitter, roundup, thepit_state, 0, ROT90, "Taito Corporation (Amenip/Centuri license)", "Round-Up", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, fitter, roundup, fitter, fitter, thepit_state, 0, ROT90, "Taito Corporation", "Fitter", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, fitterbl, roundup, fitter, fitter, thepit_state, 0, ROT90, "bootleg", "Fitter (bootleg of Round-Up)", MACHINE_SUPPORTS_SAVE ) +GAME( 1981, ttfitter, roundup, fitter, fitter, thepit_state, 0, ROT90, "Taito Corporation", "T.T Fitter (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1982, thepit, 0, thepit, thepit, thepit_state, 0, ROT90, "Zilec Electronics", "The Pit", MACHINE_SUPPORTS_SAVE ) // AW == Andy Walker GAME( 1982, thepitu1, thepit, thepit, thepit, thepit_state, 0, ROT90, "Zilec Electronics (Centuri license)", "The Pit (US set 1)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/thoop2.cpp b/src/mame/drivers/thoop2.cpp index 297291c49b1..7a9c8b01d1d 100644 --- a/src/mame/drivers/thoop2.cpp +++ b/src/mame/drivers/thoop2.cpp @@ -32,30 +32,34 @@ void thoop2_state::machine_start() membank("okibank")->configure_entries(0, 16, memregion("oki")->base(), 0x10000); } -WRITE16_MEMBER(thoop2_state::OKIM6295_bankswitch_w) +WRITE8_MEMBER(thoop2_state::OKIM6295_bankswitch_w) { - if (ACCESSING_BITS_0_7){ - membank("okibank")->set_entry(data & 0x0f); - } + membank("okibank")->set_entry(data & 0x0f); } -WRITE16_MEMBER(thoop2_state::coin_w) +WRITE8_MEMBER(thoop2_state::coin_w) { - if (ACCESSING_BITS_0_7){ - switch ((offset >> 3)){ - case 0x00: /* Coin Lockouts */ - case 0x01: - machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01); - break; - case 0x02: /* Coin Counters */ - case 0x03: - machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01); - break; - } - } - - /* 04b unknown. Sound related? */ - /* 05b unknown */ + m_outlatch->write_bit(offset >> 3, BIT(data, 0)); +} + +WRITE_LINE_MEMBER(thoop2_state::coin1_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(0, !state); +} + +WRITE_LINE_MEMBER(thoop2_state::coin2_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(1, !state); +} + +WRITE_LINE_MEMBER(thoop2_state::coin1_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(thoop2_state::coin2_counter_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } WRITE8_MEMBER(thoop2_state::shareram_w) @@ -88,9 +92,9 @@ static ADDRESS_MAP_START( thoop2_map, AS_PROGRAM, 16, thoop2_state ) AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1") AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2") AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SYSTEM") - AM_RANGE(0x70000c, 0x70000d) AM_WRITE(OKIM6295_bankswitch_w) /* OKI6295 bankswitch */ + AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(coin_w, 0x00ff) /* Coin Counters + Coin Lockout */ + AM_RANGE(0x70000c, 0x70000d) AM_WRITE8(OKIM6295_bankswitch_w, 0x00ff) /* OKI6295 bankswitch */ AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 data register */ - AM_RANGE(0x70000a, 0x70005b) AM_WRITE(coin_w) /* Coin Counters + Coin Lockout */ AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */ AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */ ADDRESS_MAP_END @@ -224,6 +228,14 @@ static MACHINE_CONFIG_START( thoop2 ) MCFG_DEVICE_ADD("gaelco_ds5002fp", GAELCO_DS5002FP, XTAL_24MHz / 2) MCFG_DEVICE_ADDRESS_MAP(0, mcu_hostmem_map) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(thoop2_state, coin1_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(thoop2_state, coin2_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(thoop2_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(thoop2_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // unknown. Sound related? + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // unknown + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/timelimt.cpp b/src/mame/drivers/timelimt.cpp index 4495ca7d196..9c260fb7796 100644 --- a/src/mame/drivers/timelimt.cpp +++ b/src/mame/drivers/timelimt.cpp @@ -18,6 +18,7 @@ Notes: #include "includes/timelimt.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/ay8910.h" @@ -33,20 +34,16 @@ void timelimt_state::machine_start() save_item(NAME(m_nmi_enabled)); } -void timelimt_state::machine_reset() +WRITE_LINE_MEMBER(timelimt_state::nmi_enable_w) { - m_nmi_enabled = 0; + m_nmi_enabled = state; + if (!m_nmi_enabled) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } -WRITE8_MEMBER(timelimt_state::nmi_enable_w) +WRITE_LINE_MEMBER(timelimt_state::coin_lockout_w) { - m_nmi_enabled = data & 1; /* bit 0 = nmi enable */ -} - -WRITE8_MEMBER(timelimt_state::sound_reset_w) -{ - if (data & 1) - m_audiocpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); + machine().bookkeeping().coin_lockout_w(0, !state); } /***************************************************************************/ @@ -60,8 +57,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, timelimt_state ) AM_RANGE(0xa000, 0xa000) AM_READ_PORT("INPUTS") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("SYSTEM") AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") - AM_RANGE(0xb000, 0xb000) AM_WRITE(nmi_enable_w) /* nmi enable */ - AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_reset_w)/* sound reset ? */ + AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xb800, 0xb800) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* sound write */ AM_RANGE(0xb800, 0xb800) AM_READNOP /* NMI ack? */ AM_RANGE(0xc800, 0xc800) AM_WRITE(scroll_x_lsb_w) @@ -103,7 +99,7 @@ static INPUT_PORTS_START( timelimt ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* probably unused */ @@ -148,7 +144,7 @@ static INPUT_PORTS_START( progress ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* probably unused */ @@ -216,8 +212,8 @@ GFXDECODE_END INTERRUPT_GEN_MEMBER(timelimt_state::irq) { - if ( m_nmi_enabled ) - device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); + if (m_nmi_enabled) + device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } /***************************************************************************/ @@ -237,6 +233,13 @@ static MACHINE_CONFIG_START( timelimt ) MCFG_QUANTUM_TIME(attotime::from_hz(3000)) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC15 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(timelimt_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(timelimt_state, coin_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // probably flip screen + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // probably flip screen + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -295,7 +298,7 @@ ROM_START( timelimt ) ROM_LOAD( "tl2", 0x2000, 0x2000, CRC(4693b849) SHA1(fbebedde53599fb1eaedc648bd704b321ab096b5) ) ROM_LOAD( "tl1", 0x0000, 0x2000, CRC(c4007caf) SHA1(ae05af3319545d5ca98a046bfc100138a5a3ed96) ) - ROM_REGION( 0x0060, "proms", 0 ) + ROM_REGION( 0x0060, "proms", 0 ) // N82S123N color PROMs ROM_LOAD( "clr.35", 0x0000, 0x0020, CRC(9c9e6073) SHA1(98496175bf19a8cdb0018705bc1a2193b8a782e1) ) ROM_LOAD( "clr.48", 0x0020, 0x0020, CRC(a0bcac59) SHA1(e5832831b21981363509b79d89766757bd9273b0) ) /* FIXED BITS (xxxxxx1x) */ ROM_LOAD( "clr.57", 0x0040, 0x0020, CRC(3a9f5394) SHA1(0b501f81ce1df722cf7ef982c03e0be337bfe9ee) ) diff --git a/src/mame/drivers/timeplt.cpp b/src/mame/drivers/timeplt.cpp index 39a502f1af3..bc9e3d8f277 100644 --- a/src/mame/drivers/timeplt.cpp +++ b/src/mame/drivers/timeplt.cpp @@ -72,9 +72,9 @@ INTERRUPT_GEN_MEMBER(timeplt_state::interrupt) } -WRITE8_MEMBER(timeplt_state::nmi_enable_w) +WRITE_LINE_MEMBER(timeplt_state::nmi_enable_w) { - m_nmi_enable = data & 1; + m_nmi_enable = state; if (!m_nmi_enable) m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } @@ -87,9 +87,19 @@ WRITE8_MEMBER(timeplt_state::nmi_enable_w) * *************************************/ -WRITE8_MEMBER(timeplt_state::coincounter_w) +WRITE8_MEMBER(timeplt_state::mainlatch_w) { - machine().bookkeeping().coin_counter_w(offset >> 1, data); + m_mainlatch->write_d0(space, offset >> 1, data); +} + +WRITE_LINE_MEMBER(timeplt_state::coin_counter_1_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(timeplt_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } READ8_MEMBER(timeplt_state::psurge_protection_r) @@ -125,7 +135,7 @@ CUSTOM_INPUT_MEMBER(timeplt_state::chkun_hopper_status_r) * *************************************/ -static ADDRESS_MAP_START( common_main_map, AS_PROGRAM, 8, timeplt_state ) +static ADDRESS_MAP_START( timeplt_main_map, AS_PROGRAM, 8, timeplt_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x5fff) AM_ROM AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram") @@ -136,22 +146,14 @@ static ADDRESS_MAP_START( common_main_map, AS_PROGRAM, 8, timeplt_state ) AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_READ(scanline_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0xc200, 0xc200) AM_MIRROR(0x0cff) AM_READ_PORT("DSW1") AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0c9f) AM_READ_PORT("IN0") - AM_RANGE(0xc302, 0xc302) AM_MIRROR(0x0cf1) AM_WRITE(flipscreen_w) - AM_RANGE(0xc304, 0xc304) AM_MIRROR(0x0cf1) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w) - AM_RANGE(0xc30a, 0xc30d) AM_MIRROR(0x0cf0) AM_WRITE(coincounter_w) // handler ignores low bit of offset + AM_RANGE(0xc300, 0xc30f) AM_MIRROR(0x0cf0) AM_WRITE(mainlatch_w) // handler ignores low bit of offset AM_RANGE(0xc320, 0xc320) AM_MIRROR(0x0c9f) AM_READ_PORT("IN1") AM_RANGE(0xc340, 0xc340) AM_MIRROR(0x0c9f) AM_READ_PORT("IN2") AM_RANGE(0xc360, 0xc360) AM_MIRROR(0x0c9f) AM_READ_PORT("DSW0") ADDRESS_MAP_END -static ADDRESS_MAP_START( timeplt_main_map, AS_PROGRAM, 8, timeplt_state ) - AM_IMPORT_FROM(common_main_map) - AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0cf1) AM_WRITE(nmi_enable_w) - AM_RANGE(0xc308, 0xc308) AM_MIRROR(0x0cf1) AM_WRITE(video_enable_w) -ADDRESS_MAP_END - static ADDRESS_MAP_START( psurge_main_map, AS_PROGRAM, 8, timeplt_state ) - AM_IMPORT_FROM(common_main_map) + AM_IMPORT_FROM(timeplt_main_map) AM_RANGE(0x6004, 0x6004) AM_READ(psurge_protection_r) ADDRESS_MAP_END @@ -421,7 +423,6 @@ void timeplt_state::machine_start() void timeplt_state::machine_reset() { - m_nmi_enable = 0; } static MACHINE_CONFIG_START( timeplt ) @@ -431,6 +432,16 @@ static MACHINE_CONFIG_START( timeplt ) MCFG_CPU_PROGRAM_MAP(timeplt_main_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", timeplt_state, interrupt) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B3 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(timeplt_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(timeplt_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(timeplt_state, video_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(timeplt_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(timeplt_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // PAY OUT - not used + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -461,6 +472,12 @@ static MACHINE_CONFIG_DERIVED( psurge, timeplt ) MCFG_CPU_PROGRAM_MAP(psurge_main_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", timeplt_state, nmi_line_pulse) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) + MCFG_VIDEO_START_OVERRIDE(timeplt_state,psurge) MACHINE_CONFIG_END diff --git a/src/mame/drivers/toaplan1.cpp b/src/mame/drivers/toaplan1.cpp index bf27b7a3764..c5e07316232 100644 --- a/src/mame/drivers/toaplan1.cpp +++ b/src/mame/drivers/toaplan1.cpp @@ -612,6 +612,7 @@ Stephh's and AWJ's notes (based on the games M68000 and Z80 code and some tests) #include "cpu/tms32010/tms32010.h" #include "cpu/z80/z80.h" #include "cpu/z180/z180.h" +#include "machine/74259.h" #include "sound/3812intf.h" #include "speaker.h" @@ -842,7 +843,7 @@ static ADDRESS_MAP_START( rallybik_sound_io_map, AS_IO, 8, toaplan1_rallybik_sta AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") AM_RANGE(0x10, 0x10) AM_READ_PORT("P2") AM_RANGE(0x20, 0x20) AM_READ_PORT("SYSTEM") - AM_RANGE(0x30, 0x30) AM_WRITE(rallybik_coin_w) /* Coin counter/lockout */ + AM_RANGE(0x30, 0x30) AM_DEVWRITE("coinlatch", ls259_device, write_nibble) /* Coin counter/lockout */ AM_RANGE(0x40, 0x40) AM_READ_PORT("DSWA") AM_RANGE(0x50, 0x50) AM_READ_PORT("DSWB") AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write) @@ -1899,6 +1900,12 @@ static MACHINE_CONFIG_START( rallybik ) MCFG_QUANTUM_TIME(attotime::from_hz(600)) + MCFG_DEVICE_ADD("coinlatch", LS259, 0) // 19L + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(toaplan1_rallybik_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(toaplan1_rallybik_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(toaplan1_rallybik_state, coin_lockout_1_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(toaplan1_rallybik_state, coin_lockout_2_w)) + MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1) /* video hardware */ diff --git a/src/mame/drivers/tomcat.cpp b/src/mame/drivers/tomcat.cpp index 34455a5593d..a2d946078c3 100644 --- a/src/mame/drivers/tomcat.cpp +++ b/src/mame/drivers/tomcat.cpp @@ -30,6 +30,7 @@ #include "cpu/m6502/m6502.h" #include "video/vector.h" #include "video/avgdvg.h" +#include "machine/74259.h" #include "machine/timekpr.h" #include "machine/nvram.h" #include "machine/watchdog.h" @@ -50,7 +51,8 @@ public: m_tms(*this, "tms"), m_shared_ram(*this, "shared_ram"), m_maincpu(*this, "maincpu"), - m_dsp(*this, "dsp") { } + m_dsp(*this, "dsp"), + m_mainlatch(*this, "mainlatch") { } required_device<tms5220_device> m_tms; int m_control_num; @@ -61,22 +63,15 @@ public: DECLARE_WRITE16_MEMBER(tomcat_adcon_w); DECLARE_READ16_MEMBER(tomcat_adcread_r); DECLARE_READ16_MEMBER(tomcat_inputs_r); - DECLARE_WRITE16_MEMBER(tomcat_led1on_w); - DECLARE_WRITE16_MEMBER(tomcat_led2on_w); - DECLARE_WRITE16_MEMBER(tomcat_led2off_w); - DECLARE_WRITE16_MEMBER(tomcat_led1off_w); - DECLARE_WRITE16_MEMBER(tomcat_lnkmodel_w); - DECLARE_WRITE16_MEMBER(tomcat_errl_w); - DECLARE_WRITE16_MEMBER(tomcat_errh_w); - DECLARE_WRITE16_MEMBER(tomcat_ackl_w); - DECLARE_WRITE16_MEMBER(tomcat_ackh_w); - DECLARE_WRITE16_MEMBER(tomcat_lnkmodeh_w); - DECLARE_WRITE16_MEMBER(tomcat_txbuffl_w); - DECLARE_WRITE16_MEMBER(tomcat_txbuffh_w); - DECLARE_WRITE16_MEMBER(tomcat_sndresl_w); - DECLARE_WRITE16_MEMBER(tomcat_sndresh_w); - DECLARE_WRITE16_MEMBER(tomcat_mresl_w); - DECLARE_WRITE16_MEMBER(tomcat_mresh_w); + DECLARE_WRITE16_MEMBER(main_latch_w); + DECLARE_WRITE_LINE_MEMBER(led1_w); + DECLARE_WRITE_LINE_MEMBER(led2_w); + DECLARE_WRITE_LINE_MEMBER(lnkmode_w); + DECLARE_WRITE_LINE_MEMBER(err_w); + DECLARE_WRITE_LINE_MEMBER(ack_w); + DECLARE_WRITE_LINE_MEMBER(txbuff_w); + DECLARE_WRITE_LINE_MEMBER(sndres_w); + DECLARE_WRITE_LINE_MEMBER(mres_w); DECLARE_WRITE16_MEMBER(tomcat_irqclr_w); DECLARE_READ16_MEMBER(tomcat_inputs2_r); DECLARE_READ16_MEMBER(tomcat_320bio_r); @@ -87,6 +82,7 @@ public: virtual void machine_start() override; required_device<cpu_device> m_maincpu; required_device<cpu_device> m_dsp; + required_device<ls259_device> m_mainlatch; }; @@ -115,93 +111,61 @@ READ16_MEMBER(tomcat_state::tomcat_inputs_r) return result; } -WRITE16_MEMBER(tomcat_state::tomcat_led1on_w) +WRITE16_MEMBER(tomcat_state::main_latch_w) { - output().set_led_value(1, 1); + // A1-A3 = address, A4 = data + m_mainlatch->write_bit(offset & 7, BIT(offset, 3)); } -WRITE16_MEMBER(tomcat_state::tomcat_led2on_w) +WRITE_LINE_MEMBER(tomcat_state::led1_w) { - output().set_led_value(2, 1); + // Low = ON, High = OFF + output().set_led_value(1, !state); } -WRITE16_MEMBER(tomcat_state::tomcat_led2off_w) +WRITE_LINE_MEMBER(tomcat_state::led2_w) { - output().set_led_value(2, 0); + // Low = ON, High = OFF + output().set_led_value(2, !state); } -WRITE16_MEMBER(tomcat_state::tomcat_led1off_w) +WRITE_LINE_MEMBER(tomcat_state::lnkmode_w) { - output().set_led_value(1, 0); + // Link Mode + // When Low: Master does not respond to Interrupts } -WRITE16_MEMBER(tomcat_state::tomcat_lnkmodel_w) +WRITE_LINE_MEMBER(tomcat_state::err_w) { - // Link Mode Low (address strobe) - // Master does not respond to Interrupts + // Link Error Flag } -WRITE16_MEMBER(tomcat_state::tomcat_errl_w) +WRITE_LINE_MEMBER(tomcat_state::ack_w) { - // Link Error Flag Low (address strobe) + // Link ACK Flag } -WRITE16_MEMBER(tomcat_state::tomcat_errh_w) +WRITE_LINE_MEMBER(tomcat_state::txbuff_w) { - // Link Error Flag High (address strobe) + // Link Buffer Control + // When High: Turn off TX (Link) Buffer } -WRITE16_MEMBER(tomcat_state::tomcat_ackl_w) +WRITE_LINE_MEMBER(tomcat_state::sndres_w) { - // Link ACK Flag Low (address strobe) + // Sound Reset + // When Low: Reset Sound System + // When High: Release reset of sound system } -WRITE16_MEMBER(tomcat_state::tomcat_ackh_w) +WRITE_LINE_MEMBER(tomcat_state::mres_w) { - // Link ACK Flag High (address strobe) -} - -WRITE16_MEMBER(tomcat_state::tomcat_lnkmodeh_w) -{ - // Link Mode high (address strobe) -} - -WRITE16_MEMBER(tomcat_state::tomcat_txbuffl_w) -{ - // Link Buffer Control (address strobe) -} - -WRITE16_MEMBER(tomcat_state::tomcat_txbuffh_w) -{ - // Link Buffer Control high (address strobe) - // Turn off TX (Link) Buffer -} - -WRITE16_MEMBER(tomcat_state::tomcat_sndresl_w) -{ - // Sound Reset Low (Address Strobe) - // Reset Sound System -} - -WRITE16_MEMBER(tomcat_state::tomcat_sndresh_w) -{ - // Sound Reset high (Address Strobe) - // Release reset of sound system -} - -WRITE16_MEMBER(tomcat_state::tomcat_mresl_w) -{ - // 320 Reset Low (Address Strobe) - // Reset TMS320 - m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); -} - -WRITE16_MEMBER(tomcat_state::tomcat_mresh_w) -{ - // 320 Reset high (Address Strobe) - // Release reset of TMS320 - m_dsp_BIO = 0; - m_dsp->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + // 320 Reset + // When Low: Reset TMS320 + // When High: Release reset of TMS320 + if (state) + m_dsp_BIO = 0; + m_dsp->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE); } WRITE16_MEMBER(tomcat_state::tomcat_irqclr_w) @@ -281,22 +245,7 @@ static ADDRESS_MAP_START( tomcat_map, AS_PROGRAM, 16, tomcat_state ) AM_RANGE(0x406000, 0x406001) AM_DEVWRITE("avg", avg_tomcat_device, reset_word_w) AM_RANGE(0x408000, 0x408001) AM_READ(tomcat_inputs2_r) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) AM_RANGE(0x40a000, 0x40a001) AM_READWRITE(tomcat_320bio_r, tomcat_irqclr_w) - AM_RANGE(0x40e000, 0x40e001) AM_WRITE(tomcat_led1on_w) - AM_RANGE(0x40e002, 0x40e003) AM_WRITE(tomcat_led2on_w) - AM_RANGE(0x40e004, 0x40e005) AM_WRITE(tomcat_mresl_w) - AM_RANGE(0x40e006, 0x40e007) AM_WRITE(tomcat_sndresl_w) - AM_RANGE(0x40e008, 0x40e009) AM_WRITE(tomcat_lnkmodel_w) - AM_RANGE(0x40e00a, 0x40e00b) AM_WRITE(tomcat_errl_w) - AM_RANGE(0x40e00c, 0x40e00d) AM_WRITE(tomcat_ackl_w) - AM_RANGE(0x40e00e, 0x40e00f) AM_WRITE(tomcat_txbuffl_w) - AM_RANGE(0x40e010, 0x40e011) AM_WRITE(tomcat_led1off_w) - AM_RANGE(0x40e012, 0x40e013) AM_WRITE(tomcat_led2off_w) - AM_RANGE(0x40e014, 0x40e015) AM_WRITE(tomcat_mresh_w) - AM_RANGE(0x40e016, 0x40e017) AM_WRITE(tomcat_sndresh_w) - AM_RANGE(0x40e018, 0x40e019) AM_WRITE(tomcat_lnkmodeh_w) - AM_RANGE(0x40e01a, 0x40e01b) AM_WRITE(tomcat_errh_w) - AM_RANGE(0x40e01c, 0x40e01d) AM_WRITE(tomcat_ackh_w) - AM_RANGE(0x40e01e, 0x40e01f) AM_WRITE(tomcat_txbuffh_w) + AM_RANGE(0x40e000, 0x40e01f) AM_WRITE(main_latch_w) AM_RANGE(0x800000, 0x803fff) AM_RAM AM_SHARE("vectorram") AM_RANGE(0xffa000, 0xffbfff) AM_RAM AM_SHARE("shared_ram") AM_RANGE(0xffc000, 0xffcfff) AM_RAM @@ -402,6 +351,16 @@ static MACHINE_CONFIG_START( tomcat ) MCFG_QUANTUM_TIME(attotime::from_hz(4000)) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tomcat_state, led1_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tomcat_state, led2_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tomcat_state, mres_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tomcat_state, sndres_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tomcat_state, lnkmode_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(tomcat_state, err_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(tomcat_state, ack_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(tomcat_state, txbuff_w)) + MCFG_NVRAM_ADD_0FILL("nvram") MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/tp84.cpp b/src/mame/drivers/tp84.cpp index e4d8546dbd5..ef213ea248a 100644 --- a/src/mame/drivers/tp84.cpp +++ b/src/mame/drivers/tp84.cpp @@ -69,6 +69,7 @@ C004 76489 #4 trigger #include "cpu/m6809/m6809.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "sound/flt_rc.h" @@ -79,6 +80,49 @@ C004 76489 #4 trigger void tp84_state::machine_start() { + save_item(NAME(m_irq_enable)); + save_item(NAME(m_sub_irq_mask)); + save_item(NAME(m_flipscreen_x)); + save_item(NAME(m_flipscreen_y)); +} + + +INTERRUPT_GEN_MEMBER(tp84_state::main_vblank_irq) +{ + if (m_irq_enable) + device.execute().set_input_line(0, ASSERT_LINE); +} + + +WRITE_LINE_MEMBER(tp84_state::irq_enable_w) +{ + m_irq_enable = state; + if (!m_irq_enable) + m_maincpu->set_input_line(0, CLEAR_LINE); +} + + +WRITE_LINE_MEMBER(tp84_state::coin_counter_1_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + + +WRITE_LINE_MEMBER(tp84_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} + + +WRITE_LINE_MEMBER(tp84_state::flip_screen_x_w) +{ + m_flipscreen_x = state; +} + + +WRITE_LINE_MEMBER(tp84_state::flip_screen_y_w) +{ + m_flipscreen_y = state; } @@ -132,9 +176,8 @@ static ADDRESS_MAP_START( tp84_cpu1_map, AS_PROGRAM, 8, tp84_state ) AM_RANGE(0x2820, 0x2820) AM_READ_PORT("P1") AM_RANGE(0x2840, 0x2840) AM_READ_PORT("P2") AM_RANGE(0x2860, 0x2860) AM_READ_PORT("DSW1") - AM_RANGE(0x3000, 0x3000) AM_READ_PORT("DSW2") AM_WRITEONLY - AM_RANGE(0x3004, 0x3004) AM_WRITEONLY AM_SHARE("flipscreen_x") - AM_RANGE(0x3005, 0x3005) AM_WRITEONLY AM_SHARE("flipscreen_y") + AM_RANGE(0x3000, 0x3000) AM_READ_PORT("DSW2") + AM_RANGE(0x3000, 0x3007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x3800, 0x3800) AM_WRITE(tp84_sh_irqtrigger_w) AM_RANGE(0x3a00, 0x3a00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x3c00, 0x3c00) AM_WRITEONLY AM_SHARE("scroll_x") @@ -158,9 +201,8 @@ static ADDRESS_MAP_START( tp84b_cpu1_map, AS_PROGRAM, 8, tp84_state ) AM_RANGE(0x1a20, 0x1a20) AM_READ_PORT("P1") AM_RANGE(0x1a40, 0x1a40) AM_READ_PORT("P2") AM_RANGE(0x1a60, 0x1a60) AM_READ_PORT("DSW1") - AM_RANGE(0x1c00, 0x1c00) AM_READ_PORT("DSW2") AM_WRITENOP - AM_RANGE(0x1c04, 0x1c04) AM_WRITEONLY AM_SHARE("flipscreen_x") - AM_RANGE(0x1c05, 0x1c05) AM_WRITEONLY AM_SHARE("flipscreen_y") + AM_RANGE(0x1c00, 0x1c00) AM_READ_PORT("DSW2") + AM_RANGE(0x1c00, 0x1c07) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x1e00, 0x1e00) AM_WRITE(tp84_sh_irqtrigger_w) AM_RANGE(0x1e80, 0x1e80) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x1f00, 0x1f00) AM_WRITEONLY AM_SHARE("scroll_x") @@ -291,7 +333,7 @@ static MACHINE_CONFIG_START( tp84 ) /* basic machine hardware */ MCFG_CPU_ADD("cpu1",M6809, XTAL_18_432MHz/12) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(tp84_cpu1_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", tp84_state, irq0_line_hold) + MCFG_CPU_VBLANK_INT_DRIVER("screen", tp84_state, main_vblank_irq) MCFG_CPU_ADD("sub", M6809, XTAL_18_432MHz/12) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(cpu2_map) @@ -303,6 +345,13 @@ static MACHINE_CONFIG_START( tp84 ) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ /* synchronization of the CPUs */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 3B + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tp84_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tp84_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tp84_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tp84_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(tp84_state, flip_screen_y_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/triplhnt.cpp b/src/mame/drivers/triplhnt.cpp index fe020337307..cd4db00a741 100644 --- a/src/mame/drivers/triplhnt.cpp +++ b/src/mame/drivers/triplhnt.cpp @@ -30,48 +30,42 @@ void triplhnt_state::set_collision(int code) } -void triplhnt_state::update_misc(address_space &space, int offset) +WRITE_LINE_MEMBER(triplhnt_state::ram_2_w) { - uint8_t is_witch_hunt; - uint8_t bit = offset >> 1; - - /* BIT0 => UNUSED */ - /* BIT1 => LAMP */ - /* BIT2 => SCREECH */ - /* BIT3 => LOCKOUT */ - /* BIT4 => SPRITE ZOOM */ - /* BIT5 => CMOS WRITE */ - /* BIT6 => TAPE CTRL */ - /* BIT7 => SPRITE BANK */ - - if (offset & 1) - { - m_misc_flags |= 1 << bit; - - if (bit == 5) - { - m_cmos[m_cmos_latch] = m_da_latch; - } - } - else - { - m_misc_flags &= ~(1 << bit); - } + if (state) + m_cmos[m_cmos_latch] = m_da_latch; +} - m_sprite_zoom = (m_misc_flags >> 4) & 1; - m_sprite_bank = (m_misc_flags >> 7) & 1; - output().set_led_value(0, m_misc_flags & 0x02); +WRITE_LINE_MEMBER(triplhnt_state::sprite_zoom_w) +{ + m_sprite_zoom = state; +} - machine().bookkeeping().coin_lockout_w(0, !(m_misc_flags & 0x08)); - machine().bookkeeping().coin_lockout_w(1, !(m_misc_flags & 0x08)); - m_discrete->write(space, TRIPLHNT_SCREECH_EN, m_misc_flags & 0x04); // screech - m_discrete->write(space, TRIPLHNT_LAMP_EN, m_misc_flags & 0x02); // Lamp is used to reset noise - m_discrete->write(space, TRIPLHNT_BEAR_EN, m_misc_flags & 0x80); // bear +WRITE_LINE_MEMBER(triplhnt_state::sprite_bank_w) +{ + m_sprite_bank = state; +} + + +WRITE_LINE_MEMBER(triplhnt_state::lamp1_w) +{ + output().set_led_value(0, state); +} - is_witch_hunt = ioport("0C09")->read() == 0x40; - bit = ~m_misc_flags & 0x40; + +WRITE_LINE_MEMBER(triplhnt_state::coin_lockout_w) +{ + machine().bookkeeping().coin_lockout_w(0, !state); + machine().bookkeeping().coin_lockout_w(1, !state); +} + + +WRITE_LINE_MEMBER(triplhnt_state::tape_control_w) +{ + bool is_witch_hunt = ioport("0C09")->read() == 0x40; + bool bit = !state; /* if we're not playing the sample yet, start it */ if (!m_samples->playing(0)) @@ -85,12 +79,6 @@ void triplhnt_state::update_misc(address_space &space, int offset) } -WRITE8_MEMBER(triplhnt_state::misc_w) -{ - update_misc(space, offset); -} - - READ8_MEMBER(triplhnt_state::cmos_r) { m_cmos_latch = offset; @@ -108,7 +96,7 @@ READ8_MEMBER(triplhnt_state::input_port_4_r) READ8_MEMBER(triplhnt_state::misc_r) { - update_misc(space, offset); + m_latch->write_a0(space, offset, 0); return ioport("VBLANK")->read() | m_hit_code; } @@ -141,7 +129,7 @@ static ADDRESS_MAP_START( triplhnt_map, AS_PROGRAM, 8, triplhnt_state ) AM_RANGE(0x0c0b, 0x0c0b) AM_READ(input_port_4_r) AM_RANGE(0x0c10, 0x0c1f) AM_READ(da_latch_r) AM_RANGE(0x0c20, 0x0c2f) AM_READ(cmos_r) AM_SHARE("nvram") - AM_RANGE(0x0c30, 0x0c3f) AM_READWRITE(misc_r, misc_w) + AM_RANGE(0x0c30, 0x0c3f) AM_READ(misc_r) AM_DEVWRITE("latch", f9334_device, write_a0) AM_RANGE(0x0c40, 0x0c40) AM_READ_PORT("0C40") AM_RANGE(0x0c48, 0x0c48) AM_READ_PORT("0C48") AM_RANGE(0x7000, 0x7fff) AM_ROM /* program */ @@ -308,7 +296,19 @@ static MACHINE_CONFIG_START( triplhnt ) MCFG_CPU_PROGRAM_MAP(triplhnt_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", triplhnt_state, irq0_line_hold) - MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_NVRAM_ADD_0FILL("nvram") // battery-backed 74C89 at J5 + + MCFG_DEVICE_ADD("latch", F9334, 0) // J7 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // unused + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(triplhnt_state, lamp1_w)) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("discrete", discrete_device, write_line<TRIPLHNT_LAMP_EN>)) // Lamp is used to reset noise + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<TRIPLHNT_SCREECH_EN>)) // screech + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(triplhnt_state, coin_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(triplhnt_state, sprite_zoom_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(triplhnt_state, ram_2_w)) // CMOS write + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(triplhnt_state, tape_control_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(triplhnt_state, sprite_bank_w)) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("discrete", discrete_device, write_line<TRIPLHNT_BEAR_EN>)) // bear MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/tsamurai.cpp b/src/mame/drivers/tsamurai.cpp index 1b98bfcd4cb..eaff6bfa1fe 100644 --- a/src/mame/drivers/tsamurai.cpp +++ b/src/mame/drivers/tsamurai.cpp @@ -42,6 +42,7 @@ the "America" release. #include "includes/tsamurai.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "sound/dac.h" #include "sound/volt_reg.h" @@ -73,9 +74,9 @@ MACHINE_START_MEMBER(tsamurai_state, vsgongf) machine_start(); } -WRITE8_MEMBER(tsamurai_state::nmi_enable_w) +WRITE_LINE_MEMBER(tsamurai_state::nmi_enable_w) { - m_nmi_enabled = data; + m_nmi_enabled = state; } INTERRUPT_GEN_MEMBER(tsamurai_state::interrupt) @@ -126,14 +127,19 @@ WRITE8_MEMBER(tsamurai_state::m660_sound_command3_w) m_audio3->set_input_line(0, HOLD_LINE ); } -WRITE8_MEMBER(tsamurai_state::flip_screen_w) +WRITE_LINE_MEMBER(tsamurai_state::flip_screen_w) { - flip_screen_set(data); + flip_screen_set(state); } -WRITE8_MEMBER(tsamurai_state::coincounter_w) +WRITE_LINE_MEMBER(tsamurai_state::coin1_counter_w) { - machine().bookkeeping().coin_counter_w(offset,data); + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(tsamurai_state::coin2_counter_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } @@ -164,10 +170,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tsamurai_state ) AM_RANGE(0xf804, 0xf804) AM_READ_PORT("DSW1") AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW2") - AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flip_screen_w) - AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_enable_w) - AM_RANGE(0xfc02, 0xfc02) AM_WRITE(textbank1_w) - AM_RANGE(0xfc03, 0xfc04) AM_WRITE(coincounter_w) + AM_RANGE(0xfc00, 0xfc07) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( m660_map, AS_PROGRAM, 8, tsamurai_state ) @@ -198,11 +201,7 @@ static ADDRESS_MAP_START( m660_map, AS_PROGRAM, 8, tsamurai_state ) AM_RANGE(0xf804, 0xf804) AM_READ_PORT("DSW1") AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW2") - AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flip_screen_w) - AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_enable_w) - AM_RANGE(0xfc02, 0xfc02) AM_WRITE(textbank1_w) - AM_RANGE(0xfc03, 0xfc04) AM_WRITE(coincounter_w) - AM_RANGE(0xfc07, 0xfc07) AM_WRITE(m660_textbank2_w)/* Mission 660 uses a bit here */ + AM_RANGE(0xfc00, 0xfc07) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( z80_io_map, AS_IO, 8, tsamurai_state ) @@ -354,10 +353,7 @@ static ADDRESS_MAP_START( vsgongf_map, AS_PROGRAM, 8, tsamurai_state ) AM_RANGE(0xf800, 0xf800) AM_WRITENOP AM_RANGE(0xf801, 0xf801) AM_WRITENOP /* vreg? always 0 */ AM_RANGE(0xf803, 0xf803) AM_WRITENOP /* vreg? always 0 */ - AM_RANGE(0xfc00, 0xfc00) AM_RAM /* vreg? always 0 */ - AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_enable_w) - AM_RANGE(0xfc02, 0xfc03) AM_WRITE(coincounter_w) - AM_RANGE(0xfc04, 0xfc04) AM_WRITE(textbank1_w) + AM_RANGE(0xfc00, 0xfc07) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_vsgongf_map, AS_PROGRAM, 8, tsamurai_state ) @@ -722,6 +718,13 @@ static MACHINE_CONFIG_START( tsamurai ) MCFG_MACHINE_START_OVERRIDE(tsamurai_state,tsamurai) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tsamurai_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tsamurai_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tsamurai_state, textbank1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tsamurai_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tsamurai_state, coin2_counter_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -763,6 +766,13 @@ static MACHINE_CONFIG_START( vsgongf ) MCFG_MACHINE_START_OVERRIDE(tsamurai_state,vsgongf) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 4L + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // vreg? always 0 + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tsamurai_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tsamurai_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tsamurai_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tsamurai_state, textbank1_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -811,6 +821,14 @@ static MACHINE_CONFIG_START( m660 ) MCFG_MACHINE_START_OVERRIDE(tsamurai_state,m660) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tsamurai_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tsamurai_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tsamurai_state, textbank1_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tsamurai_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tsamurai_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(tsamurai_state, textbank2_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/tubep.cpp b/src/mame/drivers/tubep.cpp index fd3dec57bef..551d1cb4874 100644 --- a/src/mame/drivers/tubep.cpp +++ b/src/mame/drivers/tubep.cpp @@ -106,6 +106,7 @@ TP-S.1 TP-S.2 TP-S.3 TP-B.1 8212 TP-B.2 TP-B.3 TP-B.4 #include "cpu/m6800/m6800.h" #include "cpu/z80/z80.h" #include "cpu/m6805/m6805.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "sound/msm5205.h" #include "speaker.h" @@ -118,33 +119,14 @@ TP-S.1 TP-S.2 TP-S.3 TP-B.1 8212 TP-B.2 TP-B.3 TP-B.4 *************************************/ -WRITE8_MEMBER(tubep_state::tubep_LS259_w) +WRITE_LINE_MEMBER(tubep_state::coin1_counter_w) { - switch(offset) - { - case 0: - case 1: - /* - port b0: bit0 - coin 1 counter - port b1 bit0 - coin 2 counter - */ - machine().bookkeeping().coin_counter_w(offset,data&1); - break; - case 2: - //something... - break; - case 5: - //screen_flip_w(offset,data&1); /* bit 0 = screen flip, active high */ - break; - case 6: - tubep_background_romselect_w(space,offset,data); /* bit0 = 0->select roms: B1,B3,B5; bit0 = 1->select roms: B2,B4,B6 */ - break; - case 7: - tubep_colorproms_A4_line_w(space,offset,data); /* bit0 = line A4 (color proms address) state */ - break; - default: - break; - } + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(tubep_state::coin2_counter_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } @@ -181,7 +163,7 @@ static ADDRESS_MAP_START( tubep_main_portmap, AS_IO, 8, tubep_state ) AM_RANGE(0xd0, 0xd0) AM_READ_PORT("P1") AM_RANGE(0x80, 0x80) AM_WRITE(main_cpu_irq_line_clear_w) - AM_RANGE(0xb0, 0xb7) AM_WRITE(tubep_LS259_w) + AM_RANGE(0xb0, 0xb7) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xd0, 0xd0) AM_WRITE(tubep_soundlatch_w) ADDRESS_MAP_END @@ -395,23 +377,6 @@ ADDRESS_MAP_END * *************************************/ -WRITE8_MEMBER(tubep_state::rjammer_LS259_w) -{ - switch(offset) - { - case 0: - case 1: - machine().bookkeeping().coin_counter_w(offset,data&1); /* bit 0 = coin counter */ - break; - case 5: - //screen_flip_w(offset,data&1); /* bit 0 = screen flip, active high */ - break; - default: - break; - } -} - - WRITE8_MEMBER(tubep_state::rjammer_soundlatch_w) { m_sound_latch = data; @@ -436,7 +401,7 @@ static ADDRESS_MAP_START( rjammer_main_portmap, AS_IO, 8, tubep_state ) AM_RANGE(0xb0, 0xb0) AM_READ_PORT("P1") AM_RANGE(0xc0, 0xc0) AM_READ_PORT("P2") - AM_RANGE(0xd0, 0xd7) AM_WRITE(rjammer_LS259_w) + AM_RANGE(0xd0, 0xd7) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xe0, 0xe0) AM_WRITE(main_cpu_irq_line_clear_w) /* clear IRQ interrupt */ AM_RANGE(0xf0, 0xf0) AM_WRITE(rjammer_soundlatch_w) ADDRESS_MAP_END @@ -875,6 +840,14 @@ static MACHINE_CONFIG_START( tubep ) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tubep_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tubep_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) //something... + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(tubep_state, screen_flip_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(tubep_state, background_romselect_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(tubep_state, colorproms_A4_line_w)) + MCFG_MACHINE_START_OVERRIDE(tubep_state,tubep) MCFG_MACHINE_RESET_OVERRIDE(tubep_state,tubep) @@ -936,6 +909,11 @@ static MACHINE_CONFIG_START( rjammer ) MCFG_CPU_ADD("mcu",NSC8105,6000000) /* 6 MHz Xtal - divided internally ??? */ MCFG_CPU_PROGRAM_MAP(nsc_map) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 3A + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tubep_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tubep_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(tubep_state, screen_flip_w)) + MCFG_MACHINE_START_OVERRIDE(tubep_state,rjammer) MCFG_MACHINE_RESET_OVERRIDE(tubep_state,rjammer) diff --git a/src/mame/drivers/tutankhm.cpp b/src/mame/drivers/tutankhm.cpp index f674fce3246..50507d7aba8 100644 --- a/src/mame/drivers/tutankhm.cpp +++ b/src/mame/drivers/tutankhm.cpp @@ -53,9 +53,9 @@ #include "emu.h" #include "includes/tutankhm.h" #include "includes/konamipt.h" -#include "audio/timeplt.h" #include "cpu/m6809/m6809.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/watchdog.h" #include "screen.h" @@ -76,9 +76,9 @@ INTERRUPT_GEN_MEMBER(tutankhm_state::tutankhm_interrupt) } -WRITE8_MEMBER(tutankhm_state::irq_enable_w) +WRITE_LINE_MEMBER(tutankhm_state::irq_enable_w) { - m_irq_enable = data & 1; + m_irq_enable = state; if (!m_irq_enable) m_maincpu->set_input_line(0, CLEAR_LINE); } @@ -102,15 +102,22 @@ WRITE8_MEMBER(tutankhm_state::tutankhm_bankselect_w) * *************************************/ -WRITE8_MEMBER(tutankhm_state::sound_mute_w) +WRITE_LINE_MEMBER(tutankhm_state::coin_counter_1_w) { - machine().sound().system_mute(data & 1); + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(tutankhm_state::tutankhm_coin_counter_w) +WRITE_LINE_MEMBER(tutankhm_state::coin_counter_2_w) { - machine().bookkeeping().coin_counter_w(offset ^ 1, data); + machine().bookkeeping().coin_counter_w(1, state); +} + + +WRITE8_MEMBER(tutankhm_state::sound_on_w) +{ + m_timeplt_audio->sh_irqtrigger_w(0); + m_timeplt_audio->sh_irqtrigger_w(1); } @@ -130,14 +137,9 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tutankhm_state ) AM_RANGE(0x81a0, 0x81a0) AM_MIRROR(0x000f) AM_READ_PORT("IN1") /* IN1: Player 1 I/O */ AM_RANGE(0x81c0, 0x81c0) AM_MIRROR(0x000f) AM_READ_PORT("IN2") /* IN2: Player 2 I/O */ AM_RANGE(0x81e0, 0x81e0) AM_MIRROR(0x000f) AM_READ_PORT("DSW1") /* DSW1 (inverted bits) */ - AM_RANGE(0x8200, 0x8200) AM_MIRROR(0x00f8) AM_READNOP AM_WRITE(irq_enable_w) - AM_RANGE(0x8202, 0x8203) AM_MIRROR(0x00f8) AM_WRITE(tutankhm_coin_counter_w) - AM_RANGE(0x8204, 0x8204) AM_MIRROR(0x00f8) AM_WRITENOP // starfield? - AM_RANGE(0x8205, 0x8205) AM_MIRROR(0x00f8) AM_WRITE(sound_mute_w) - AM_RANGE(0x8206, 0x8206) AM_MIRROR(0x00f8) AM_WRITE(tutankhm_flip_screen_x_w) - AM_RANGE(0x8207, 0x8207) AM_MIRROR(0x00f8) AM_WRITE(tutankhm_flip_screen_y_w) + AM_RANGE(0x8200, 0x8207) AM_MIRROR(0x00f8) AM_READNOP AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x8300, 0x8300) AM_MIRROR(0x00ff) AM_WRITE(tutankhm_bankselect_w) - AM_RANGE(0x8600, 0x8600) AM_MIRROR(0x00ff) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w) + AM_RANGE(0x8600, 0x8600) AM_MIRROR(0x00ff) AM_WRITE(sound_on_w) AM_RANGE(0x8700, 0x8700) AM_MIRROR(0x00ff) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x8800, 0x8fff) AM_RAM AM_RANGE(0x9000, 0x9fff) AM_ROMBANK("bank1") @@ -218,9 +220,6 @@ MACHINE_START_MEMBER(tutankhm_state,tutankhm) MACHINE_RESET_MEMBER(tutankhm_state,tutankhm) { m_irq_toggle = 0; - m_irq_enable = 0; - m_flip_x = 0; - m_flip_y = 0; } static MACHINE_CONFIG_START( tutankhm ) @@ -233,6 +232,16 @@ static MACHINE_CONFIG_START( tutankhm ) MCFG_MACHINE_START_OVERRIDE(tutankhm_state,tutankhm) MCFG_MACHINE_RESET_OVERRIDE(tutankhm_state,tutankhm) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // C3 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tutankhm_state, irq_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // PAY OUT - not used + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tutankhm_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tutankhm_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // starfield? + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(tutankhm_state, flip_screen_x_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(tutankhm_state, flip_screen_y_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/ultratnk.cpp b/src/mame/drivers/ultratnk.cpp index 6ab14d4c161..369e6891b68 100644 --- a/src/mame/drivers/ultratnk.cpp +++ b/src/mame/drivers/ultratnk.cpp @@ -10,6 +10,7 @@ Atari Ultra Tank driver #include "includes/ultratnk.h" #include "audio/sprint4.h" #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "speaker.h" #define MASTER_CLOCK XTAL_12_096MHz @@ -134,30 +135,22 @@ WRITE8_MEMBER(ultratnk_state::da_latch_w) } -WRITE8_MEMBER(ultratnk_state::led_1_w) +WRITE_LINE_MEMBER(ultratnk_state::led_1_w) { - output().set_led_value(0, offset & 1); /* left player start */ + output().set_led_value(0, state); /* left player start */ } -WRITE8_MEMBER(ultratnk_state::led_2_w) +WRITE_LINE_MEMBER(ultratnk_state::led_2_w) { - output().set_led_value(1, offset & 1); /* right player start */ + output().set_led_value(1, state); /* right player start */ } -WRITE8_MEMBER(ultratnk_state::lockout_w) +WRITE_LINE_MEMBER(ultratnk_state::lockout_w) { - machine().bookkeeping().coin_lockout_global_w(~offset & 1); + machine().bookkeeping().coin_lockout_global_w(!state); } -WRITE8_MEMBER(ultratnk_state::fire_1_w) -{ - m_discrete->write(space, ULTRATNK_FIRE_EN_1, offset & 1); -} -WRITE8_MEMBER(ultratnk_state::fire_2_w) -{ - m_discrete->write(space, ULTRATNK_FIRE_EN_2, offset & 1); -} WRITE8_MEMBER(ultratnk_state::attract_w) { m_discrete->write(space, ULTRATNK_ATTRACT_EN, data & 1); @@ -189,11 +182,7 @@ static ADDRESS_MAP_START( ultratnk_cpu_map, AS_PROGRAM, 8, ultratnk_state ) AM_RANGE(0x2040, 0x2041) AM_MIRROR(0x718) AM_WRITE(da_latch_w) AM_RANGE(0x2042, 0x2043) AM_MIRROR(0x718) AM_WRITE(explosion_w) AM_RANGE(0x2044, 0x2045) AM_MIRROR(0x718) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x2066, 0x2067) AM_MIRROR(0x710) AM_WRITE(lockout_w) - AM_RANGE(0x2068, 0x2069) AM_MIRROR(0x710) AM_WRITE(led_1_w) - AM_RANGE(0x206a, 0x206b) AM_MIRROR(0x710) AM_WRITE(led_2_w) - AM_RANGE(0x206c, 0x206d) AM_MIRROR(0x710) AM_WRITE(fire_2_w) - AM_RANGE(0x206e, 0x206f) AM_MIRROR(0x710) AM_WRITE(fire_1_w) + AM_RANGE(0x2060, 0x206f) AM_MIRROR(0x710) AM_DEVWRITE("latch", f9334_device, write_a0) AM_RANGE(0x2800, 0x2fff) AM_NOP /* diagnostic ROM */ AM_RANGE(0x3000, 0x3fff) AM_ROM @@ -315,6 +304,13 @@ static MACHINE_CONFIG_START( ultratnk ) MCFG_CPU_ADD("maincpu", M6502, PIXEL_CLOCK / 8) MCFG_CPU_PROGRAM_MAP(ultratnk_cpu_map) + MCFG_DEVICE_ADD("latch", F9334, 0) // E11 + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(ultratnk_state, lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ultratnk_state, led_1_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ultratnk_state, led_2_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ULTRATNK_FIRE_EN_2>)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ULTRATNK_FIRE_EN_1>)) + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_VBLANK_INIT("screen", 8) diff --git a/src/mame/drivers/vastar.cpp b/src/mame/drivers/vastar.cpp index de2ec1c4445..3f845e90a97 100644 --- a/src/mame/drivers/vastar.cpp +++ b/src/mame/drivers/vastar.cpp @@ -106,6 +106,7 @@ Vsync : 60.58hz #include "includes/vastar.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/ay8910.h" #include "screen.h" @@ -119,9 +120,6 @@ void vastar_state::machine_start() void vastar_state::machine_reset() { - /* we must start with the second CPU halted */ - m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - m_nmi_mask = 0; m_sprite_priority[0] = 0; m_spriteram1 = m_fgvideoram + 0x000; @@ -131,20 +129,14 @@ void vastar_state::machine_reset() m_spriteram3 = m_fgvideoram + 0x800; } -WRITE8_MEMBER(vastar_state::hold_cpu2_w) +WRITE_LINE_MEMBER(vastar_state::flip_screen_w) { - /* I'm not sure that this works exactly like this */ - m_subcpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE); + flip_screen_set(state); } -WRITE8_MEMBER(vastar_state::flip_screen_w) +WRITE_LINE_MEMBER(vastar_state::nmi_mask_w) { - flip_screen_set(data); -} - -WRITE8_MEMBER(vastar_state::nmi_mask_w) -{ - m_nmi_mask = data & 1; + m_nmi_mask = state; } @@ -160,9 +152,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( main_port_map, AS_IO, 8, vastar_state ) ADDRESS_MAP_GLOBAL_MASK(0x0f) - AM_RANGE(0x00, 0x00) AM_WRITE(nmi_mask_w) - AM_RANGE(0x01, 0x01) AM_WRITE(flip_screen_w) - AM_RANGE(0x02, 0x02) AM_WRITE(hold_cpu2_w) + AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -438,6 +428,11 @@ static MACHINE_CONFIG_START( vastar ) MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* 10 CPU slices per frame - seems enough to ensure proper synchronization of the CPUs */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(vastar_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(vastar_state, flip_screen_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/warpwarp.cpp b/src/mame/drivers/warpwarp.cpp index 39e819805a1..60bc71de95e 100644 --- a/src/mame/drivers/warpwarp.cpp +++ b/src/mame/drivers/warpwarp.cpp @@ -130,6 +130,7 @@ Notes: #include "includes/warpwarp.h" #include "cpu/i8085/i8085.h" +#include "machine/74259.h" #include "screen.h" #include "speaker.h" @@ -193,40 +194,47 @@ WRITE8_MEMBER(warpwarp_state::geebee_out6_w) } } -WRITE8_MEMBER(warpwarp_state::geebee_out7_w) +WRITE_LINE_MEMBER(warpwarp_state::lamp_1_w) { - switch (offset & 7) - { - case 0: - output().set_led_value(0,data & 1); - break; - case 1: - output().set_led_value(1,data & 1); - break; - case 2: - output().set_led_value(2,data & 1); - break; - case 3: - machine().bookkeeping().coin_counter_w(0,data & 1); - break; - case 4: - if (strcmp(machine().system().name, "geebeeb")) - machine().bookkeeping().coin_lockout_global_w(~data & 1); - break; - case 5: - if( m_geebee_bgw != (data & 1) ) - machine().tilemap().mark_all_dirty(); - m_geebee_bgw = data & 1; - break; - case 6: - m_ball_on = data & 1; - if (~data & 1) - m_maincpu->set_input_line(0, CLEAR_LINE); - break; - case 7: - flip_screen_set(data & 1); - break; - } + output().set_led_value(0, state); +} + +WRITE_LINE_MEMBER(warpwarp_state::lamp_2_w) +{ + output().set_led_value(1, state); +} + +WRITE_LINE_MEMBER(warpwarp_state::lamp_3_w) +{ + output().set_led_value(2, state); +} + +WRITE_LINE_MEMBER(warpwarp_state::counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(warpwarp_state::lock_out_w) +{ + machine().bookkeeping().coin_lockout_global_w(!state); +} + +WRITE_LINE_MEMBER(warpwarp_state::geebee_bgw_w) +{ + m_geebee_bgw = state; + machine().tilemap().mark_all_dirty(); +} + +WRITE_LINE_MEMBER(warpwarp_state::ball_on_w) +{ + m_ball_on = state; + if (!state) + m_maincpu->set_input_line(0, CLEAR_LINE); +} + +WRITE_LINE_MEMBER(warpwarp_state::inv_w) +{ + flip_screen_set(state); } @@ -280,39 +288,6 @@ WRITE8_MEMBER(warpwarp_state::warpwarp_out0_w) } } -WRITE8_MEMBER(warpwarp_state::warpwarp_out3_w) -{ - switch (offset & 7) - { - case 0: - output().set_led_value(0,data & 1); - break; - case 1: - output().set_led_value(1,data & 1); - break; - case 2: - output().set_led_value(2,data & 1); - break; - case 3: - /* n.c. */ - break; - case 4: - machine().bookkeeping().coin_lockout_global_w(~data & 1); - break; - case 5: - machine().bookkeeping().coin_counter_w(0,data & 1); - break; - case 6: - m_ball_on = data & 1; - if (~data & 1) - m_maincpu->set_input_line(0, CLEAR_LINE); - break; - case 7: - flip_screen_set(data & 1); - break; - } -} - static ADDRESS_MAP_START( geebee_map, AS_PROGRAM, 8, warpwarp_state ) @@ -322,13 +297,13 @@ static ADDRESS_MAP_START( geebee_map, AS_PROGRAM, 8, warpwarp_state ) AM_RANGE(0x4000, 0x40ff) AM_RAM AM_RANGE(0x5000, 0x53ff) AM_READ(geebee_in_r) AM_RANGE(0x6000, 0x6fff) AM_WRITE(geebee_out6_w) - AM_RANGE(0x7000, 0x7fff) AM_WRITE(geebee_out7_w) + AM_RANGE(0x7000, 0x7007) AM_MIRROR(0x0ff8) AM_DEVWRITE("latch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( geebee_port_map, AS_IO, 8, warpwarp_state ) AM_RANGE(0x50, 0x53) AM_READ(geebee_in_r) AM_RANGE(0x60, 0x6f) AM_WRITE(geebee_out6_w) - AM_RANGE(0x70, 0x7f) AM_WRITE(geebee_out7_w) + AM_RANGE(0x70, 0x77) AM_MIRROR(0x08) AM_DEVWRITE("latch", ls259_device, write_d0) ADDRESS_MAP_END @@ -340,7 +315,7 @@ static ADDRESS_MAP_START( bombbee_map, AS_PROGRAM, 8, warpwarp_state ) AM_RANGE(0x6000, 0x600f) AM_READWRITE(warpwarp_sw_r, warpwarp_out0_w) AM_RANGE(0x6010, 0x601f) AM_READ(warpwarp_vol_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music1_w) AM_RANGE(0x6020, 0x602f) AM_READ(warpwarp_dsw1_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music2_w) - AM_RANGE(0x6030, 0x603f) AM_WRITE(warpwarp_out3_w) + AM_RANGE(0x6030, 0x6037) AM_MIRROR(0x0008) AM_DEVWRITE("latch", ls259_device, write_d0) ADDRESS_MAP_END static ADDRESS_MAP_START( warpwarp_map, AS_PROGRAM, 8, warpwarp_state ) @@ -351,7 +326,7 @@ static ADDRESS_MAP_START( warpwarp_map, AS_PROGRAM, 8, warpwarp_state ) AM_RANGE(0xc000, 0xc00f) AM_READWRITE(warpwarp_sw_r, warpwarp_out0_w) AM_RANGE(0xc010, 0xc01f) AM_READ(warpwarp_vol_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music1_w) AM_RANGE(0xc020, 0xc02f) AM_READ(warpwarp_dsw1_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music2_w) - AM_RANGE(0xc030, 0xc03f) AM_WRITE(warpwarp_out3_w) + AM_RANGE(0xc030, 0xc037) AM_MIRROR(0x0008) AM_DEVWRITE("latch", ls259_device, write_d0) ADDRESS_MAP_END @@ -738,6 +713,16 @@ static MACHINE_CONFIG_START( geebee ) MCFG_CPU_IO_MAP(geebee_port_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", warpwarp_state, vblank_irq) + MCFG_DEVICE_ADD("latch", LS259, 0) // 5N + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(warpwarp_state, lamp_1_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(warpwarp_state, lamp_2_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(warpwarp_state, lamp_3_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(warpwarp_state, counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(warpwarp_state, lock_out_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(warpwarp_state, geebee_bgw_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(warpwarp_state, ball_on_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(warpwarp_state, inv_w)) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/3, 384, 0, 272, 264, 0, 224) @@ -757,6 +742,11 @@ static MACHINE_CONFIG_START( geebee ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( geebeeb, geebee ) + MCFG_DEVICE_MODIFY("latch") + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // remove coin lockout +MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( navarone, geebee ) /* basic machine hardware */ @@ -775,6 +765,16 @@ static MACHINE_CONFIG_START( bombbee ) MCFG_CPU_PROGRAM_MAP(bombbee_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", warpwarp_state, vblank_irq) + MCFG_DEVICE_ADD("latch", LS259, 0) // 6L on Warp Warp + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(warpwarp_state, lamp_1_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(warpwarp_state, lamp_2_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(warpwarp_state, lamp_3_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // n.c. + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(warpwarp_state, lock_out_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(warpwarp_state, counter_w)) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(warpwarp_state, ball_on_w)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(warpwarp_state, inv_w)) + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ @@ -997,7 +997,7 @@ DRIVER_INIT_MEMBER(warpwarp_state,warpwarp) /* B & W games */ GAMEL(1978, geebee, 0, geebee, geebee, warpwarp_state, geebee, ROT90, "Namco", "Gee Bee (Japan)", MACHINE_SUPPORTS_SAVE, layout_geebee ) -GAMEL(1978, geebeeb, geebee, geebee, geebeeb, warpwarp_state, geebee, ROT90, "Namco (F.lli Bertolino license)", "Gee Bee (Europe)", MACHINE_SUPPORTS_SAVE, layout_geebee ) // Fratelli Bertolino +GAMEL(1978, geebeeb, geebee, geebeeb, geebeeb, warpwarp_state, geebee, ROT90, "Namco (F.lli Bertolino license)", "Gee Bee (Europe)", MACHINE_SUPPORTS_SAVE, layout_geebee ) // Fratelli Bertolino GAMEL(1978, geebeeg, geebee, geebee, geebee, warpwarp_state, geebee, ROT90, "Namco (Gremlin license)", "Gee Bee (US)", MACHINE_SUPPORTS_SAVE, layout_geebee ) GAMEL(1980, navarone, 0, navarone, navarone, warpwarp_state, navarone, ROT90, "Namco", "Navarone", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_navarone ) diff --git a/src/mame/drivers/wiping.cpp b/src/mame/drivers/wiping.cpp index 5f79e91e739..64d31775af3 100644 --- a/src/mame/drivers/wiping.cpp +++ b/src/mame/drivers/wiping.cpp @@ -40,6 +40,7 @@ dip: 6.7 7.7 #include "audio/wiping.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "screen.h" #include "speaker.h" @@ -67,19 +68,14 @@ READ8_MEMBER(wiping_state::ports_r) // irq/reset controls like in clshroad.cpp -WRITE8_MEMBER(wiping_state::subcpu_reset_w) +WRITE_LINE_MEMBER(wiping_state::main_irq_mask_w) { - m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE); + m_main_irq_mask = state; } -WRITE8_MEMBER(wiping_state::main_irq_mask_w) +WRITE_LINE_MEMBER(wiping_state::sound_irq_mask_w) { - m_main_irq_mask = data & 1; -} - -WRITE8_MEMBER(wiping_state::sound_irq_mask_w) -{ - m_sound_irq_mask = data & 1; + m_sound_irq_mask = state; } static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, wiping_state ) @@ -90,9 +86,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, wiping_state ) AM_RANGE(0x8000, 0x8bff) AM_RAM AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("share1") AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("share2") - AM_RANGE(0xa000, 0xa000) AM_WRITE(main_irq_mask_w) - AM_RANGE(0xa002, 0xa002) AM_WRITE(flipscreen_w) - AM_RANGE(0xa003, 0xa003) AM_WRITE(subcpu_reset_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xa800, 0xa807) AM_READ(ports_r) AM_RANGE(0xb000, 0xb7ff) AM_RAM AM_RANGE(0xb800, 0xb800) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) @@ -103,7 +97,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, wiping_state ) AM_RANGE(0x4000, 0x7fff) AM_DEVWRITE("wiping", wiping_sound_device, sound_w) AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("share1") AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("share2") - AM_RANGE(0xa001, 0xa001) AM_WRITE(sound_irq_mask_w) + AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) ADDRESS_MAP_END @@ -300,6 +294,12 @@ static MACHINE_CONFIG_START( wiping ) MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(wiping_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */ + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 5A + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(wiping_state, main_irq_mask_w)) // INT1 + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(wiping_state, sound_irq_mask_w)) // INT2 + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(wiping_state, flipscreen_w)) // INV + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // CP2RE + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/wrally.cpp b/src/mame/drivers/wrally.cpp index 62aae7a0506..0fb3aaa0452 100644 --- a/src/mame/drivers/wrally.cpp +++ b/src/mame/drivers/wrally.cpp @@ -153,13 +153,9 @@ static ADDRESS_MAP_START( wrally_map, AS_PROGRAM, 16, wrally_state ) AM_RANGE(0x700002, 0x700003) AM_READ_PORT("P1_P2") AM_RANGE(0x700004, 0x700005) AM_READ_PORT("WHEEL") AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SYSTEM") + AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(latch_w, 0x00ff) AM_RANGE(0x70000c, 0x70000d) AM_WRITE(okim6295_bankswitch_w) /* OKI6295 bankswitch */ AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status/data register */ - AM_RANGE(0x70000a, 0x70001b) AM_WRITE(coin_lockout_w) /* Coin lockouts */ - AM_RANGE(0x70002a, 0x70003b) AM_WRITE(coin_counter_w) /* Coin counters */ - AM_RANGE(0x70004a, 0x70004b) AM_WRITENOP /* Sound muting */ - AM_RANGE(0x70005a, 0x70005b) AM_WRITE(flipscreen_w) /* Flip screen */ - AM_RANGE(0x70006a, 0x70007b) AM_WRITENOP /* ??? */ AM_RANGE(0xfec000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with DS5002FP) */ ADDRESS_MAP_END @@ -284,6 +280,16 @@ static MACHINE_CONFIG_START( wrally ) MCFG_PALETTE_ADD("palette", 1024*8) MCFG_PALETTE_FORMAT(xxxxBBBBRRRRGGGG) + MCFG_DEVICE_ADD("outlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(wrally_state, coin1_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(wrally_state, coin2_lockout_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(wrally_state, coin1_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(wrally_state, coin2_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) /* Sound muting */ + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(wrally_state, flipscreen_w)) /* Flip screen */ + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) /* ??? */ + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) /* ??? */ + /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/xorworld.cpp b/src/mame/drivers/xorworld.cpp index 143c2499857..498b3948d45 100644 --- a/src/mame/drivers/xorworld.cpp +++ b/src/mame/drivers/xorworld.cpp @@ -33,6 +33,7 @@ EEPROM chip: 93C46 #include "includes/xorworld.h" #include "cpu/m68000/m68000.h" +#include "machine/74259.h" #include "machine/eepromser.h" #include "sound/saa1099.h" @@ -50,24 +51,6 @@ EEPROM chip: 93C46 EEPROM read/write/control ****************************************************************/ -WRITE16_MEMBER(xorworld_state::eeprom_chip_select_w) -{ - /* bit 0 is CS (active low) */ - m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); -} - -WRITE16_MEMBER(xorworld_state::eeprom_serial_clock_w) -{ - /* bit 0 is SK (active high) */ - m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); -} - -WRITE16_MEMBER(xorworld_state::eeprom_data_w) -{ - /* bit 0 is EEPROM data (DIN) */ - m_eeprom->di_write(data & 0x01); -} - WRITE16_MEMBER(xorworld_state::irq2_ack_w) { m_maincpu->set_input_line(2, CLEAR_LINE); @@ -84,13 +67,11 @@ static ADDRESS_MAP_START( xorworld_map, AS_PROGRAM, 16, xorworld_state ) AM_RANGE(0x400000, 0x400001) AM_READ_PORT("P2") AM_RANGE(0x600000, 0x600001) AM_READ_PORT("DSW") AM_RANGE(0x800000, 0x800003) AM_DEVWRITE8("saa", saa1099_device, write, 0x00ff) - AM_RANGE(0xa00008, 0xa00009) AM_WRITE(eeprom_chip_select_w) - AM_RANGE(0xa0000a, 0xa0000b) AM_WRITE(eeprom_serial_clock_w) - AM_RANGE(0xa0000c, 0xa0000d) AM_WRITE(eeprom_data_w) + AM_RANGE(0xa00000, 0xa0000f) AM_DEVWRITE8("mainlatch", ls259_device, write_d0, 0x00ff) AM_RANGE(0xffc000, 0xffc7ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") AM_RANGE(0xffc800, 0xffc87f) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0xffc880, 0xffc881) AM_WRITE(irq2_ack_w) - AM_RANGE(0xffc882, 0xffc883) AM_WRITE(irq6_ack_w) + AM_RANGE(0xffc880, 0xffc881) AM_WRITE(irq2_ack_w) AM_READNOP + AM_RANGE(0xffc882, 0xffc883) AM_WRITE(irq6_ack_w) AM_READNOP AM_RANGE(0xffc884, 0xffffff) AM_RAM ADDRESS_MAP_END @@ -184,6 +165,11 @@ static MACHINE_CONFIG_START( xorworld ) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) // CS (active low) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) // SK (active high) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) // EEPROM data (DIN) + // video hardware MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/includes/asteroid.h b/src/mame/includes/asteroid.h index 76f90210483..314f3bc672d 100644 --- a/src/mame/includes/asteroid.h +++ b/src/mame/includes/asteroid.h @@ -9,6 +9,28 @@ #include "sound/discrete.h" #include "video/avgdvg.h" +#define ASTEROID_SAUCER_SND_EN NODE_01 +#define ASTEROID_SAUCER_FIRE_EN NODE_02 +#define ASTEROID_SAUCER_SEL NODE_03 +#define ASTEROID_THRUST_EN NODE_04 +#define ASTEROID_SHIP_FIRE_EN NODE_05 +#define ASTEROID_LIFE_EN NODE_06 +#define ASTEROID_NOISE_RESET NODE_07 + +#define ASTEROID_THUMP_EN NODE_08 +#define ASTEROID_THUMP_DATA NODE_09 +#define ASTEROID_EXPLODE_DATA NODE_10 +#define ASTEROID_EXPLODE_PITCH NODE_11 + +#define ASTEROID_NOISE NODE_20 +#define ASTEROID_THUMP_SND NODE_21 +#define ASTEROID_SAUCER_SND NODE_22 +#define ASTEROID_LIFE_SND NODE_23 +#define ASTEROID_SAUCER_FIRE_SND NODE_24 +#define ASTEROID_SHIP_FIRE_SND NODE_25 +#define ASTEROID_EXPLODE_SND NODE_26 +#define ASTEROID_THRUST_SND NODE_27 + class asteroid_state : public driver_device { public: @@ -29,19 +51,19 @@ public: optional_memory_bank m_ram1; optional_memory_bank m_ram2; - DECLARE_WRITE8_MEMBER(astdelux_coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_center_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w); DECLARE_WRITE8_MEMBER(llander_led_w); DECLARE_READ8_MEMBER(asteroid_IN0_r); DECLARE_READ8_MEMBER(asterock_IN0_r); DECLARE_READ8_MEMBER(asteroid_IN1_r); DECLARE_READ8_MEMBER(asteroid_DSW1_r); DECLARE_WRITE8_MEMBER(asteroid_bank_switch_w); - DECLARE_WRITE8_MEMBER(astdelux_bank_switch_w); - DECLARE_WRITE8_MEMBER(astdelux_led_w); + DECLARE_WRITE_LINE_MEMBER(start1_led_w); + DECLARE_WRITE_LINE_MEMBER(start2_led_w); DECLARE_WRITE8_MEMBER(asteroid_explode_w); DECLARE_WRITE8_MEMBER(asteroid_thump_w); - DECLARE_WRITE8_MEMBER(asteroid_sounds_w); - DECLARE_WRITE8_MEMBER(astdelux_sounds_w); DECLARE_WRITE8_MEMBER(asteroid_noise_reset_w); DECLARE_WRITE8_MEMBER(llander_snd_reset_w); DECLARE_WRITE8_MEMBER(llander_sounds_w); diff --git a/src/mame/includes/atarisy1.h b/src/mame/includes/atarisy1.h index 8cd6c99220f..6c684e63454 100644 --- a/src/mame/includes/atarisy1.h +++ b/src/mame/includes/atarisy1.h @@ -6,8 +6,10 @@ *************************************************************************/ +#include "machine/74259.h" #include "machine/atarigen.h" #include "sound/tms5220.h" +#include "sound/ym2151.h" #include "video/atarimo.h" class atarisy1_state : public atarigen_state @@ -25,7 +27,9 @@ public: m_yscroll_reset_timer(*this, "yreset_timer"), m_scanline_timer(*this, "scan_timer"), m_int3off_timer(*this, "int3off_timer"), - m_tms(*this, "tms") { } + m_tms(*this, "tms"), + m_ymsnd(*this, "ymsnd"), + m_outlatch(*this, "outlatch") { } required_device<cpu_device> m_audiocpu; required_device<atari_sound_comm_device> m_soundcomm; @@ -57,6 +61,9 @@ public: /* speech */ required_device<tms5220_device> m_tms; + required_device<ym2151_device> m_ymsnd; + required_device<ls259_device> m_outlatch; + /* graphics bank tracking */ uint8_t m_bank_gfx[3][8]; uint8_t m_bank_color_shift[MAX_GFX_ELEMENTS]; @@ -67,7 +74,11 @@ public: DECLARE_WRITE16_MEMBER(joystick_w); DECLARE_READ16_MEMBER(trakball_r); DECLARE_READ8_MEMBER(switch_6502_r); - DECLARE_WRITE8_MEMBER(led_w); + DECLARE_WRITE_LINE_MEMBER(music_reset_w); + DECLARE_WRITE_LINE_MEMBER(led_1_w); + DECLARE_WRITE_LINE_MEMBER(led_2_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w); DECLARE_WRITE8_MEMBER(via_pa_w); DECLARE_READ8_MEMBER(via_pa_r); DECLARE_WRITE8_MEMBER(via_pb_w); diff --git a/src/mame/includes/avalnche.h b/src/mame/includes/avalnche.h index 6f61d5a6b38..6c42bdfd902 100644 --- a/src/mame/includes/avalnche.h +++ b/src/mame/includes/avalnche.h @@ -8,6 +8,13 @@ #include "sound/discrete.h" +/* Avalanche Discrete Sound Input Nodes */ +#define AVALNCHE_AUD0_EN NODE_01 +#define AVALNCHE_AUD1_EN NODE_02 +#define AVALNCHE_AUD2_EN NODE_03 +#define AVALNCHE_SOUNDLVL_DATA NODE_04 +#define AVALNCHE_ATTRACT_EN NODE_05 + class avalnche_state : public driver_device { @@ -23,18 +30,18 @@ public: uint8_t m_avalance_video_inverted; - DECLARE_WRITE8_MEMBER(avalance_video_invert_w); + DECLARE_WRITE_LINE_MEMBER(video_invert_w); DECLARE_WRITE8_MEMBER(catch_coin_counter_w); - DECLARE_WRITE8_MEMBER(avalance_credit_1_lamp_w); - DECLARE_WRITE8_MEMBER(avalance_credit_2_lamp_w); - DECLARE_WRITE8_MEMBER(avalance_start_lamp_w); + DECLARE_WRITE_LINE_MEMBER(credit_1_lamp_w); + DECLARE_WRITE_LINE_MEMBER(credit_2_lamp_w); + DECLARE_WRITE_LINE_MEMBER(start_lamp_w); virtual void machine_start() override; virtual void machine_reset() override; uint32_t screen_update_avalnche(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE8_MEMBER(avalnche_noise_amplitude_w); - DECLARE_WRITE8_MEMBER(avalnche_attract_enable_w); - DECLARE_WRITE8_MEMBER(avalnche_audio_w); - DECLARE_WRITE8_MEMBER(catch_audio_w); + DECLARE_WRITE_LINE_MEMBER(catch_aud0_w); + DECLARE_WRITE_LINE_MEMBER(catch_aud1_w); + DECLARE_WRITE_LINE_MEMBER(catch_aud2_w); required_device<cpu_device> m_maincpu; }; diff --git a/src/mame/includes/bagman.h b/src/mame/includes/bagman.h index b7c640942de..fe2394a3b49 100644 --- a/src/mame/includes/bagman.h +++ b/src/mame/includes/bagman.h @@ -1,5 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria + +#include "machine/74259.h" #include "sound/tms5110.h" class bagman_state : public driver_device @@ -11,23 +13,23 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_tmsprom(*this, "tmsprom"), + m_tmslatch(*this, "tmslatch"), m_videoram(*this, "videoram"), m_colorram(*this, "colorram"), - m_video_enable(*this, "video_enable"), m_spriteram(*this, "spriteram") { } required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; optional_device<tmsprom_device> m_tmsprom; + optional_device<ls259_device> m_tmslatch; required_shared_ptr<uint8_t> m_videoram; required_shared_ptr<uint8_t> m_colorram; - required_shared_ptr<uint8_t> m_video_enable; required_shared_ptr<uint8_t> m_spriteram; - uint8_t m_irq_mask; - uint8_t m_ls259_buf[8]; + bool m_irq_mask; + bool m_video_enable; uint8_t m_p1_res; uint8_t m_p1_old_val; uint8_t m_p2_res; @@ -45,14 +47,19 @@ public: tilemap_t *m_bg_tilemap; // common - DECLARE_WRITE8_MEMBER(coincounter_w); - DECLARE_WRITE8_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(colorram_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_x_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_y_w); + DECLARE_WRITE_LINE_MEMBER(video_enable_w); // bagman DECLARE_WRITE8_MEMBER(ls259_w); + DECLARE_WRITE_LINE_MEMBER(tmsprom_bit_w); + DECLARE_WRITE_LINE_MEMBER(tmsprom_csq0_w); + DECLARE_WRITE_LINE_MEMBER(tmsprom_csq1_w); DECLARE_WRITE8_MEMBER(pal16r6_w); DECLARE_READ8_MEMBER(pal16r6_r); @@ -63,12 +70,10 @@ public: TILE_GET_INFO_MEMBER(get_bg_tile_info); virtual void machine_start() override; - DECLARE_MACHINE_START(bagman); DECLARE_MACHINE_START(squaitsa); virtual void machine_reset() override; virtual void video_start() override; DECLARE_PALETTE_INIT(bagman); - DECLARE_DRIVER_INIT(bagman); INTERRUPT_GEN_MEMBER(vblank_irq); diff --git a/src/mame/includes/bosco.h b/src/mame/includes/bosco.h index 2a0a17c0003..001abc62e73 100644 --- a/src/mame/includes/bosco.h +++ b/src/mame/includes/bosco.h @@ -14,14 +14,12 @@ public: : galaga_state(mconfig, type, tag) , m_bosco_radarattr(*this, "bosco_radarattr") , m_bosco_starcontrol(*this, "starcontrol") - , m_bosco_starblink(*this, "bosco_starblink") { } required_shared_ptr<uint8_t> m_bosco_radarattr; required_shared_ptr<uint8_t> m_bosco_starcontrol; - required_shared_ptr<uint8_t> m_bosco_starblink; uint8_t *m_bosco_radarx; uint8_t *m_bosco_radary; @@ -29,7 +27,6 @@ public: uint8_t *m_spriteram; uint8_t *m_spriteram2; uint32_t m_spriteram_size; - DECLARE_WRITE8_MEMBER(bosco_flip_screen_w); TILEMAP_MAPPER_MEMBER(fg_tilemap_scan); TILE_GET_INFO_MEMBER(bg_get_tile_info); TILE_GET_INFO_MEMBER(fg_get_tile_info); diff --git a/src/mame/includes/bsktball.h b/src/mame/includes/bsktball.h index d0e0206549b..3e9a9ca0095 100644 --- a/src/mame/includes/bsktball.h +++ b/src/mame/includes/bsktball.h @@ -50,12 +50,12 @@ public: int m_last_p1_vert; int m_last_p2_horiz; int m_last_p2_vert; - DECLARE_WRITE8_MEMBER(bsktball_nmion_w); - DECLARE_WRITE8_MEMBER(bsktball_ld1_w); - DECLARE_WRITE8_MEMBER(bsktball_ld2_w); + DECLARE_WRITE_LINE_MEMBER(nmion_w); + DECLARE_WRITE_LINE_MEMBER(ld1_w); + DECLARE_WRITE_LINE_MEMBER(ld2_w); DECLARE_READ8_MEMBER(bsktball_in0_r); - DECLARE_WRITE8_MEMBER(bsktball_led1_w); - DECLARE_WRITE8_MEMBER(bsktball_led2_w); + DECLARE_WRITE_LINE_MEMBER(led1_w); + DECLARE_WRITE_LINE_MEMBER(led2_w); DECLARE_WRITE8_MEMBER(bsktball_videoram_w); TILE_GET_INFO_MEMBER(get_bg_tile_info); virtual void machine_start() override; @@ -66,7 +66,6 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(bsktball_scanline); DECLARE_WRITE8_MEMBER(bsktball_bounce_w); DECLARE_WRITE8_MEMBER(bsktball_note_w); - DECLARE_WRITE8_MEMBER(bsktball_noise_reset_w); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; diff --git a/src/mame/includes/canyon.h b/src/mame/includes/canyon.h index 1bc774e35e2..902e6484c4f 100644 --- a/src/mame/includes/canyon.h +++ b/src/mame/includes/canyon.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/discrete.h" @@ -26,6 +27,7 @@ public: canyon_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_videoram(*this, "videoram"), + m_outlatch(*this, "outlatch"), m_discrete(*this, "discrete"), m_maincpu(*this, "maincpu"), m_watchdog(*this, "watchdog"), @@ -35,13 +37,16 @@ public: /* memory pointers */ required_shared_ptr<uint8_t> m_videoram; + required_device<f9334_device> m_outlatch; required_device<discrete_device> m_discrete; /* video-related */ tilemap_t *m_bg_tilemap; DECLARE_READ8_MEMBER(canyon_switches_r); DECLARE_READ8_MEMBER(canyon_options_r); - DECLARE_WRITE8_MEMBER(canyon_led_w); + DECLARE_WRITE8_MEMBER(output_latch_w); + DECLARE_WRITE_LINE_MEMBER(led1_w); + DECLARE_WRITE_LINE_MEMBER(led2_w); DECLARE_WRITE8_MEMBER(canyon_videoram_w); TILE_GET_INFO_MEMBER(get_bg_tile_info); virtual void video_start() override; @@ -49,8 +54,6 @@ public: uint32_t screen_update_canyon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE8_MEMBER(canyon_motor_w); DECLARE_WRITE8_MEMBER(canyon_explode_w); - DECLARE_WRITE8_MEMBER(canyon_attract_w); - DECLARE_WRITE8_MEMBER(canyon_whistle_w); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); void draw_bombs( bitmap_ind16 &bitmap, const rectangle &cliprect ); required_device<cpu_device> m_maincpu; diff --git a/src/mame/includes/cclimber.h b/src/mame/includes/cclimber.h index 2b1ec8a32b6..4e42ad5282a 100644 --- a/src/mame/includes/cclimber.h +++ b/src/mame/includes/cclimber.h @@ -1,6 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria +#include "machine/74259.h" #include "machine/gen_latch.h" class cclimber_state : public driver_device @@ -12,6 +13,7 @@ public: m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_mainlatch(*this, "mainlatch"), m_soundlatch(*this, "soundlatch"), m_bigsprite_videoram(*this, "bigspriteram"), m_videoram(*this, "videoram"), @@ -19,9 +21,6 @@ public: m_spriteram(*this, "spriteram"), m_bigsprite_control(*this, "bigspritectrl"), m_colorram(*this, "colorram"), - m_flip_screen(*this, "flip_screen"), - m_swimmer_side_background_enabled(*this, "sidebg_enable"), - m_swimmer_palettebank(*this, "palettebank"), m_swimmer_background_color(*this, "bgcolor"), m_toprollr_bg_videoram(*this, "bg_videoram"), m_toprollr_bg_coloram(*this, "bg_coloram"), @@ -31,6 +30,7 @@ public: optional_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<ls259_device> m_mainlatch; optional_device<generic_latch_8_device> m_soundlatch; required_shared_ptr<uint8_t> m_bigsprite_videoram; @@ -39,18 +39,20 @@ public: required_shared_ptr<uint8_t> m_spriteram; required_shared_ptr<uint8_t> m_bigsprite_control; required_shared_ptr<uint8_t> m_colorram; - required_shared_ptr<uint8_t> m_flip_screen; - optional_shared_ptr<uint8_t> m_swimmer_side_background_enabled; - optional_shared_ptr<uint8_t> m_swimmer_palettebank; optional_shared_ptr<uint8_t> m_swimmer_background_color; optional_shared_ptr<uint8_t> m_toprollr_bg_videoram; optional_shared_ptr<uint8_t> m_toprollr_bg_coloram; optional_shared_ptr<uint8_t> m_decrypted_opcodes; + bool m_flip_x; + bool m_flip_y; + bool m_swimmer_side_background_enabled; + bool m_swimmer_palettebank; + uint8_t m_yamato_p0; uint8_t m_yamato_p1; uint8_t m_toprollr_rombank; - uint8_t m_nmi_mask; + bool m_nmi_mask; tilemap_t *m_pf_tilemap; tilemap_t *m_bs_tilemap; tilemap_t *m_toproller_bg_tilemap; @@ -61,11 +63,14 @@ public: DECLARE_WRITE8_MEMBER(yamato_p1_w); DECLARE_READ8_MEMBER(yamato_p0_r); DECLARE_READ8_MEMBER(yamato_p1_r); - DECLARE_WRITE8_MEMBER(toprollr_rombank_w); - DECLARE_WRITE8_MEMBER(nmi_mask_w); + DECLARE_WRITE_LINE_MEMBER(toprollr_rombank_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); DECLARE_READ8_MEMBER(bagmanf_a000_r); DECLARE_WRITE8_MEMBER(cclimber_colorram_w); - DECLARE_WRITE8_MEMBER(cannonb_flip_screen_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); + DECLARE_WRITE_LINE_MEMBER(sidebg_enable_w); + DECLARE_WRITE_LINE_MEMBER(palette_bank_w); virtual void machine_start() override; DECLARE_DRIVER_INIT(cclimber); @@ -77,7 +82,6 @@ public: DECLARE_DRIVER_INIT(cannonb); DECLARE_DRIVER_INIT(dking); DECLARE_DRIVER_INIT(rpatrol); - DECLARE_MACHINE_RESET(cclimber); DECLARE_VIDEO_START(cclimber); DECLARE_PALETTE_INIT(cclimber); DECLARE_VIDEO_START(swimmer); diff --git a/src/mame/includes/centiped.h b/src/mame/includes/centiped.h index 552e0354600..f152257a275 100644 --- a/src/mame/includes/centiped.h +++ b/src/mame/includes/centiped.h @@ -57,14 +57,19 @@ public: DECLARE_READ8_MEMBER(centiped_IN2_r); DECLARE_READ8_MEMBER(milliped_IN1_r); DECLARE_READ8_MEMBER(milliped_IN2_r); - DECLARE_WRITE8_MEMBER(input_select_w); - DECLARE_WRITE8_MEMBER(control_select_w); + DECLARE_WRITE_LINE_MEMBER(input_select_w); + DECLARE_WRITE_LINE_MEMBER(control_select_w); DECLARE_READ8_MEMBER(mazeinv_input_r); DECLARE_WRITE8_MEMBER(mazeinv_input_select_w); DECLARE_READ8_MEMBER(bullsdrt_data_port_r); - DECLARE_WRITE8_MEMBER(led_w); - DECLARE_WRITE8_MEMBER(coin_count_w); - DECLARE_WRITE8_MEMBER(bullsdrt_coin_count_w); + DECLARE_WRITE_LINE_MEMBER(led_1_w); + DECLARE_WRITE_LINE_MEMBER(led_2_w); + DECLARE_WRITE_LINE_MEMBER(led_3_w); + DECLARE_WRITE_LINE_MEMBER(led_4_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_center_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w); + DECLARE_WRITE_LINE_MEMBER(bullsdrt_coin_count_w); DECLARE_READ8_MEMBER(caterplr_unknown_r); DECLARE_WRITE8_MEMBER(caterplr_AY8910_w); DECLARE_READ8_MEMBER(caterplr_AY8910_r); @@ -74,7 +79,7 @@ public: // video/centiped.c DECLARE_WRITE8_MEMBER(centiped_videoram_w); - DECLARE_WRITE8_MEMBER(centiped_flip_screen_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_w); DECLARE_WRITE8_MEMBER(multiped_gfxbank_w); DECLARE_WRITE8_MEMBER(bullsdrt_tilesbank_w); DECLARE_WRITE8_MEMBER(bullsdrt_sprites_bank_w); diff --git a/src/mame/includes/champbas.h b/src/mame/includes/champbas.h index 014b56e293c..c7af3b0f800 100644 --- a/src/mame/includes/champbas.h +++ b/src/mame/includes/champbas.h @@ -47,9 +47,9 @@ public: uint8_t m_palette_bank; // handlers - DECLARE_WRITE8_MEMBER(irq_enable_w); - DECLARE_WRITE8_MEMBER(mcu_switch_w); - DECLARE_WRITE8_MEMBER(mcu_start_w); + DECLARE_WRITE_LINE_MEMBER(irq_enable_w); + DECLARE_WRITE_LINE_MEMBER(mcu_switch_w); + DECLARE_WRITE_LINE_MEMBER(mcu_start_w); DECLARE_READ8_MEMBER(champbja_protection_r); DECLARE_CUSTOM_INPUT_MEMBER(watchdog_bit2); @@ -58,9 +58,9 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(exctsccr_sound_irq); DECLARE_WRITE8_MEMBER(tilemap_w); - DECLARE_WRITE8_MEMBER(gfxbank_w); - DECLARE_WRITE8_MEMBER(palette_bank_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(gfxbank_w); + DECLARE_WRITE_LINE_MEMBER(palette_bank_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_DRIVER_INIT(exctsccr); DECLARE_DRIVER_INIT(champbas); diff --git a/src/mame/includes/changela.h b/src/mame/includes/changela.h index 74928fe0e5a..0fa5ebc7f4c 100644 --- a/src/mame/includes/changela.h +++ b/src/mame/includes/changela.h @@ -62,10 +62,11 @@ public: DECLARE_READ8_MEMBER(changela_31_r); DECLARE_READ8_MEMBER(changela_2c_r); DECLARE_READ8_MEMBER(changela_2d_r); - DECLARE_WRITE8_MEMBER(mcu_pc_0_w); - DECLARE_WRITE8_MEMBER(changela_collision_reset_0); - DECLARE_WRITE8_MEMBER(changela_collision_reset_1); - DECLARE_WRITE8_MEMBER(changela_coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(mcu_pc_0_w); + DECLARE_WRITE_LINE_MEMBER(collision_reset_0_w); + DECLARE_WRITE_LINE_MEMBER(collision_reset_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE8_MEMBER(changela_colors_w); DECLARE_WRITE8_MEMBER(changela_mem_device_select_w); DECLARE_WRITE8_MEMBER(changela_mem_device_w); diff --git a/src/mame/includes/cinemat.h b/src/mame/includes/cinemat.h index b7d615a0c5a..750164f39d1 100644 --- a/src/mame/includes/cinemat.h +++ b/src/mame/includes/cinemat.h @@ -7,6 +7,7 @@ *************************************************************************/ #include "cpu/ccpu/ccpu.h" +#include "machine/74259.h" #include "sound/ay8910.h" #include "sound/samples.h" #include "video/vector.h" @@ -19,6 +20,7 @@ public: : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_ay1(*this, "ay1") + , m_outlatch(*this, "outlatch") , m_samples(*this, "samples") , m_vector(*this, "vector") , m_screen(*this, "screen") @@ -29,6 +31,7 @@ public: required_device<ccpu_cpu_device> m_maincpu; optional_device<ay8910_device> m_ay1; + required_device<ls259_device> m_outlatch; optional_device<samples_device> m_samples; required_device<vector_device> m_vector; required_device<screen_device> m_screen; @@ -37,10 +40,6 @@ public: optional_ioport m_analog_x; optional_ioport m_analog_y; - typedef void (cinemat_state::*sound_func)(uint8_t sound_val, uint8_t bits_changed); - - sound_func m_sound_handler; - uint8_t m_sound_control; uint32_t m_current_shift; uint32_t m_last_shift; uint32_t m_last_shift2; @@ -66,41 +65,26 @@ public: DECLARE_READ8_MEMBER(inputs_r); DECLARE_READ8_MEMBER(switches_r); DECLARE_READ8_MEMBER(coin_input_r); - DECLARE_WRITE8_MEMBER(coin_reset_w); - DECLARE_WRITE8_MEMBER(mux_select_w); + WRITE_LINE_MEMBER(coin_reset_w); + WRITE_LINE_MEMBER(mux_select_w); DECLARE_READ8_MEMBER(speedfrk_wheel_r); DECLARE_READ8_MEMBER(speedfrk_gear_r); DECLARE_READ8_MEMBER(sundance_inputs_r); DECLARE_READ8_MEMBER(boxingb_dial_r); DECLARE_READ8_MEMBER(qb3_frame_r); - DECLARE_WRITE8_MEMBER(qb3_ram_bank_w); - DECLARE_WRITE8_MEMBER(cinemat_vector_control_w); - DECLARE_WRITE8_MEMBER(cinemat_sound_control_w); - DECLARE_WRITE8_MEMBER(qb3_sound_w); + DECLARE_WRITE_LINE_MEMBER(qb3_ram_bank_w); + DECLARE_WRITE_LINE_MEMBER(vector_control_w); DECLARE_READ8_MEMBER(joystick_read); DECLARE_INPUT_CHANGED_MEMBER(coin_inserted); DECLARE_DRIVER_INIT(speedfrk); DECLARE_DRIVER_INIT(boxingb); - DECLARE_DRIVER_INIT(tailg); DECLARE_DRIVER_INIT(sundance); DECLARE_DRIVER_INIT(qb3); virtual void machine_start() override; virtual void machine_reset() override; virtual void sound_start() override; + virtual void sound_reset() override; virtual void video_start() override; - DECLARE_SOUND_RESET(spacewar); - DECLARE_SOUND_RESET(barrier); - DECLARE_SOUND_RESET(speedfrk); - DECLARE_SOUND_RESET(starhawk); - DECLARE_SOUND_RESET(sundance); - DECLARE_SOUND_RESET(tailg); - DECLARE_SOUND_RESET(warrior); - DECLARE_SOUND_RESET(armora); - DECLARE_SOUND_RESET(ripoff); - DECLARE_SOUND_RESET(starcas); - DECLARE_SOUND_RESET(solarq); - DECLARE_SOUND_RESET(boxingb); - DECLARE_SOUND_RESET(wotw); DECLARE_SOUND_RESET(demon); DECLARE_SOUND_RESET(qb3); DECLARE_VIDEO_START(cinemat_16level); @@ -114,22 +98,66 @@ public: DECLARE_WRITE8_MEMBER(sound_portb_w); DECLARE_WRITE8_MEMBER(sound_output_w); TIMER_CALLBACK_MEMBER(synced_sound_w); - void generic_init(sound_func sound_handler); void cinemat_vector_callback(int16_t sx, int16_t sy, int16_t ex, int16_t ey, uint8_t shift); - void spacewar_sound_w(uint8_t sound_val, uint8_t bits_changed); - void barrier_sound_w(uint8_t sound_val, uint8_t bits_changed); - void speedfrk_sound_w(uint8_t sound_val, uint8_t bits_changed); - void starhawk_sound_w(uint8_t sound_val, uint8_t bits_changed); - void sundance_sound_w(uint8_t sound_val, uint8_t bits_changed); - void tailg_sound_w(uint8_t sound_val, uint8_t bits_changed); - void warrior_sound_w(uint8_t sound_val, uint8_t bits_changed); - void armora_sound_w(uint8_t sound_val, uint8_t bits_changed); - void ripoff_sound_w(uint8_t sound_val, uint8_t bits_changed); - void starcas_sound_w(uint8_t sound_val, uint8_t bits_changed); - void solarq_sound_w(uint8_t sound_val, uint8_t bits_changed); - void boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed); - void wotw_sound_w(uint8_t sound_val, uint8_t bits_changed); - void demon_sound_w(uint8_t sound_val, uint8_t bits_changed); + DECLARE_WRITE_LINE_MEMBER(spacewar_sound0_w); + DECLARE_WRITE_LINE_MEMBER(spacewar_sound1_w); + DECLARE_WRITE_LINE_MEMBER(spacewar_sound2_w); + DECLARE_WRITE_LINE_MEMBER(spacewar_sound3_w); + DECLARE_WRITE_LINE_MEMBER(spacewar_sound4_w); + DECLARE_WRITE_LINE_MEMBER(barrier_sound0_w); + DECLARE_WRITE_LINE_MEMBER(barrier_sound1_w); + DECLARE_WRITE_LINE_MEMBER(barrier_sound2_w); + DECLARE_WRITE_LINE_MEMBER(speedfrk_start_led_w); + DECLARE_WRITE_LINE_MEMBER(speedfrk_sound3_w); + DECLARE_WRITE_LINE_MEMBER(speedfrk_sound4_w); + DECLARE_WRITE_LINE_MEMBER(starhawk_sound0_w); + DECLARE_WRITE_LINE_MEMBER(starhawk_sound1_w); + DECLARE_WRITE_LINE_MEMBER(starhawk_sound2_w); + DECLARE_WRITE_LINE_MEMBER(starhawk_sound3_w); + DECLARE_WRITE_LINE_MEMBER(starhawk_sound4_w); + DECLARE_WRITE_LINE_MEMBER(starhawk_sound7_w); + DECLARE_WRITE_LINE_MEMBER(sundance_sound0_w); + DECLARE_WRITE_LINE_MEMBER(sundance_sound1_w); + DECLARE_WRITE_LINE_MEMBER(sundance_sound2_w); + DECLARE_WRITE_LINE_MEMBER(sundance_sound3_w); + DECLARE_WRITE_LINE_MEMBER(sundance_sound4_w); + DECLARE_WRITE_LINE_MEMBER(sundance_sound7_w); + DECLARE_WRITE_LINE_MEMBER(tailg_sound_w); + DECLARE_WRITE_LINE_MEMBER(warrior_sound0_w); + DECLARE_WRITE_LINE_MEMBER(warrior_sound1_w); + DECLARE_WRITE_LINE_MEMBER(warrior_sound2_w); + DECLARE_WRITE_LINE_MEMBER(warrior_sound3_w); + DECLARE_WRITE_LINE_MEMBER(warrior_sound4_w); + DECLARE_WRITE_LINE_MEMBER(armora_sound0_w); + DECLARE_WRITE_LINE_MEMBER(armora_sound1_w); + DECLARE_WRITE_LINE_MEMBER(armora_sound2_w); + DECLARE_WRITE_LINE_MEMBER(armora_sound3_w); + DECLARE_WRITE_LINE_MEMBER(armora_sound4_w); + DECLARE_WRITE_LINE_MEMBER(ripoff_sound1_w); + DECLARE_WRITE_LINE_MEMBER(ripoff_sound2_w); + DECLARE_WRITE_LINE_MEMBER(ripoff_sound3_w); + DECLARE_WRITE_LINE_MEMBER(ripoff_sound4_w); + DECLARE_WRITE_LINE_MEMBER(ripoff_sound7_w); + DECLARE_WRITE_LINE_MEMBER(starcas_sound0_w); + DECLARE_WRITE_LINE_MEMBER(starcas_sound1_w); + DECLARE_WRITE_LINE_MEMBER(starcas_sound2_w); + DECLARE_WRITE_LINE_MEMBER(starcas_sound3_w); + DECLARE_WRITE_LINE_MEMBER(starcas_sound4_w); + DECLARE_WRITE_LINE_MEMBER(solarq_sound0_w); + DECLARE_WRITE_LINE_MEMBER(solarq_sound1_w); + DECLARE_WRITE_LINE_MEMBER(solarq_sound4_w); + DECLARE_WRITE_LINE_MEMBER(boxingb_sound0_w); + DECLARE_WRITE_LINE_MEMBER(boxingb_sound1_w); + DECLARE_WRITE_LINE_MEMBER(boxingb_sound2_w); + DECLARE_WRITE_LINE_MEMBER(boxingb_sound3_w); + DECLARE_WRITE_LINE_MEMBER(boxingb_sound4_w); + DECLARE_WRITE_LINE_MEMBER(wotw_sound0_w); + DECLARE_WRITE_LINE_MEMBER(wotw_sound1_w); + DECLARE_WRITE_LINE_MEMBER(wotw_sound2_w); + DECLARE_WRITE_LINE_MEMBER(wotw_sound3_w); + DECLARE_WRITE_LINE_MEMBER(wotw_sound4_w); + DECLARE_WRITE_LINE_MEMBER(demon_sound4_w); + DECLARE_WRITE_LINE_MEMBER(qb3_sound4_w); }; /*----------- defined in audio/cinemat.c -----------*/ diff --git a/src/mame/includes/cloak.h b/src/mame/includes/cloak.h index f890300d75f..85e4d9e80a0 100644 --- a/src/mame/includes/cloak.h +++ b/src/mame/includes/cloak.h @@ -32,8 +32,10 @@ public: uint8_t *m_current_bitmap_videoram_displayed; std::unique_ptr<uint16_t[]> m_palette_ram; tilemap_t *m_bg_tilemap; - DECLARE_WRITE8_MEMBER(cloak_led_w); - DECLARE_WRITE8_MEMBER(cloak_coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(start_led_1_w); + DECLARE_WRITE_LINE_MEMBER(start_led_2_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_l_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_r_w); DECLARE_WRITE8_MEMBER(cloak_custom_w); DECLARE_WRITE8_MEMBER(cloak_irq_reset_0_w); DECLARE_WRITE8_MEMBER(cloak_irq_reset_1_w); @@ -43,7 +45,7 @@ public: DECLARE_READ8_MEMBER(graph_processor_r); DECLARE_WRITE8_MEMBER(graph_processor_w); DECLARE_WRITE8_MEMBER(cloak_videoram_w); - DECLARE_WRITE8_MEMBER(cloak_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(cocktail_w); void set_current_bitmap_videoram_pointer(); void adjust_xy(int offset); TILE_GET_INFO_MEMBER(get_bg_tile_info); diff --git a/src/mame/includes/cloud9.h b/src/mame/includes/cloud9.h index a1a4c6f60c4..5e34100a4f4 100644 --- a/src/mame/includes/cloud9.h +++ b/src/mame/includes/cloud9.h @@ -7,6 +7,7 @@ *************************************************************************/ #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "machine/x2212.h" #include "screen.h" @@ -21,7 +22,8 @@ public: m_paletteram(*this, "paletteram"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette"){ } + m_palette(*this, "palette"), + m_videolatch(*this, "videolatch") { } /* devices */ required_device<m6502_device> m_maincpu; @@ -34,6 +36,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<ls259_device> m_videolatch; /* video-related */ const uint8_t *m_syncprom; @@ -43,7 +46,6 @@ public: double m_rweights[3]; double m_gweights[3]; double m_bweights[3]; - uint8_t m_video_control[8]; uint8_t m_bitmode_addr[2]; /* misc */ @@ -53,12 +55,13 @@ public: uint8_t m_irq_state; DECLARE_WRITE8_MEMBER(irq_ack_w); - DECLARE_WRITE8_MEMBER(cloud9_led_w); - DECLARE_WRITE8_MEMBER(cloud9_coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); + DECLARE_WRITE_LINE_MEMBER(led1_w); + DECLARE_WRITE_LINE_MEMBER(led2_w); DECLARE_READ8_MEMBER(leta_r); DECLARE_WRITE8_MEMBER(nvram_recall_w); DECLARE_WRITE8_MEMBER(nvram_store_w); - DECLARE_WRITE8_MEMBER(cloud9_video_control_w); DECLARE_WRITE8_MEMBER(cloud9_paletteram_w); DECLARE_WRITE8_MEMBER(cloud9_videoram_w); DECLARE_READ8_MEMBER(cloud9_bitmode_r); diff --git a/src/mame/includes/clshroad.h b/src/mame/includes/clshroad.h index 0d721a178d4..e9bccb49791 100644 --- a/src/mame/includes/clshroad.h +++ b/src/mame/includes/clshroad.h @@ -32,10 +32,9 @@ public: tilemap_t *m_tilemap_1; DECLARE_READ8_MEMBER(input_r); - DECLARE_WRITE8_MEMBER(subcpu_reset_w); - DECLARE_WRITE8_MEMBER(main_irq_mask_w); - DECLARE_WRITE8_MEMBER(sound_irq_mask_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(main_irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(sound_irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_WRITE8_MEMBER(vram_0_w); DECLARE_WRITE8_MEMBER(vram_1_w); diff --git a/src/mame/includes/copsnrob.h b/src/mame/includes/copsnrob.h index 97e09fbd391..08e47b223a2 100644 --- a/src/mame/includes/copsnrob.h +++ b/src/mame/includes/copsnrob.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/74259.h" #include "sound/discrete.h" #include "screen.h" @@ -40,7 +41,7 @@ public: uint8_t m_ic_h3_data; DECLARE_READ8_MEMBER(copsnrob_misc_r); DECLARE_WRITE8_MEMBER(copsnrob_misc2_w); - DECLARE_WRITE8_MEMBER(copsnrob_misc_w); + DECLARE_WRITE_LINE_MEMBER(one_start_w); virtual void machine_start() override; virtual void machine_reset() override; uint32_t screen_update_copsnrob(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -51,4 +52,4 @@ public: }; /*----------- defined in audio/copsnrob.c -----------*/ -DISCRETE_SOUND_EXTERN( copsnrob ); +MACHINE_CONFIG_EXTERN(copsnrob_audio); diff --git a/src/mame/includes/crgolf.h b/src/mame/includes/crgolf.h index cce3ea2f904..0269f343bde 100644 --- a/src/mame/includes/crgolf.h +++ b/src/mame/includes/crgolf.h @@ -18,10 +18,6 @@ public: m_videoram_a(*this, "vrama"), m_videoram_b(*this, "vramb"), - m_color_select(*this, "color_select"), - m_screen_flip(*this, "screen_flip"), - m_screenb_enable(*this, "screenb_enable"), - m_screena_enable(*this, "screena_enable"), m_vrambank(*this, "vrambank"), m_maincpu(*this, "maincpu"), @@ -36,10 +32,10 @@ public: required_shared_ptr<uint8_t> m_videoram_a; required_shared_ptr<uint8_t> m_videoram_b; - required_shared_ptr<uint8_t> m_color_select; - required_shared_ptr<uint8_t> m_screen_flip; - required_shared_ptr<uint8_t> m_screenb_enable; - required_shared_ptr<uint8_t> m_screena_enable; + bool m_color_select; + bool m_screen_flip; + bool m_screena_enable; + bool m_screenb_enable; /* misc */ uint8_t m_port_select; @@ -63,7 +59,11 @@ public: DECLARE_READ8_MEMBER(main_to_sound_r); DECLARE_WRITE8_MEMBER(sound_to_main_w); DECLARE_READ8_MEMBER(sound_to_main_r); - DECLARE_WRITE8_MEMBER(screen_select_w); + DECLARE_WRITE_LINE_MEMBER(color_select_w); + DECLARE_WRITE_LINE_MEMBER(screen_flip_w); + DECLARE_WRITE_LINE_MEMBER(screen_select_w); + DECLARE_WRITE_LINE_MEMBER(screena_enable_w); + DECLARE_WRITE_LINE_MEMBER(screenb_enable_w); DECLARE_WRITE8_MEMBER(crgolfhi_sample_w); DECLARE_READ8_MEMBER(unk_sub_02_r); DECLARE_READ8_MEMBER(unk_sub_05_r); diff --git a/src/mame/includes/digdug.h b/src/mame/includes/digdug.h index 333188e31ea..6328da68541 100644 --- a/src/mame/includes/digdug.h +++ b/src/mame/includes/digdug.h @@ -26,6 +26,8 @@ public: DECLARE_PALETTE_INIT(digdug); uint32_t screen_update_digdug(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE8_MEMBER( digdug_videoram_w ); - DECLARE_WRITE8_MEMBER( digdug_PORT_w ); + DECLARE_WRITE8_MEMBER(digdug_videoram_w); + DECLARE_WRITE8_MEMBER(bg_select_w); + DECLARE_WRITE_LINE_MEMBER(tx_color_mode_w); + DECLARE_WRITE_LINE_MEMBER(bg_disable_w); }; diff --git a/src/mame/includes/dragrace.h b/src/mame/includes/dragrace.h index 9e6bdd89434..7f8b6323efd 100644 --- a/src/mame/includes/dragrace.h +++ b/src/mame/includes/dragrace.h @@ -37,7 +37,9 @@ public: m_maincpu(*this, "maincpu"), m_watchdog(*this, "watchdog"), m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen") { } + m_screen(*this, "screen") + { + } /* memory pointers */ required_shared_ptr<uint8_t> m_playfield_ram; @@ -47,7 +49,6 @@ public: tilemap_t *m_bg_tilemap; /* misc */ - unsigned m_misc_flags; int m_gear[2]; /* devices */ @@ -57,8 +58,10 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; - DECLARE_WRITE8_MEMBER(dragrace_misc_w); - DECLARE_WRITE8_MEMBER(dragrace_misc_clear_w); + DECLARE_WRITE8_MEMBER(speed1_w); + DECLARE_WRITE8_MEMBER(speed2_w); + DECLARE_WRITE_LINE_MEMBER(p1_start_w); + DECLARE_WRITE_LINE_MEMBER(p2_start_w); DECLARE_READ8_MEMBER(dragrace_input_r); DECLARE_READ8_MEMBER(dragrace_steering_r); DECLARE_READ8_MEMBER(dragrace_scanline_r); diff --git a/src/mame/includes/dynax.h b/src/mame/includes/dynax.h index b3c2e13b5a4..8c728b2acd9 100644 --- a/src/mame/includes/dynax.h +++ b/src/mame/includes/dynax.h @@ -5,6 +5,8 @@ Dynax hardware ***************************************************************************/ + +#include "machine/74259.h" #include "machine/msm6242.h" #include "sound/ym2413.h" #include "sound/msm5205.h" @@ -24,6 +26,7 @@ public: , m_screen(*this, "screen") , m_palette(*this, "palette") , m_rtc(*this, "rtc") + , m_mainlatch(*this, "mainlatch") , m_gfx_region1(*this, "gfx1") , m_gfx_region2(*this, "gfx2") , m_gfx_region3(*this, "gfx3") @@ -45,6 +48,7 @@ public: optional_device<screen_device> m_screen; required_device<palette_device> m_palette; optional_device<msm6242_device> m_rtc; + optional_device<ls259_device> m_mainlatch; optional_region_ptr<uint8_t> m_gfx_region1; optional_region_ptr<uint8_t> m_gfx_region2; optional_region_ptr<uint8_t> m_gfx_region3; @@ -136,13 +140,13 @@ public: uint8_t *m_hnoridur_ptr; DECLARE_WRITE8_MEMBER(dynax_vblank_ack_w); - DECLARE_WRITE8_MEMBER(dynax_blitter_ack_w); + DECLARE_WRITE_LINE_MEMBER(blitter_ack_w); DECLARE_WRITE8_MEMBER(jantouki_vblank_ack_w); - DECLARE_WRITE8_MEMBER(jantouki_blitter_ack_w); - DECLARE_WRITE8_MEMBER(jantouki_blitter2_ack_w); + DECLARE_WRITE_LINE_MEMBER(jantouki_blitter_ack_w); + DECLARE_WRITE_LINE_MEMBER(jantouki_blitter2_ack_w); DECLARE_WRITE8_MEMBER(jantouki_sound_vblank_ack_w); - DECLARE_WRITE8_MEMBER(dynax_coincounter_0_w); - DECLARE_WRITE8_MEMBER(dynax_coincounter_1_w); + DECLARE_WRITE_LINE_MEMBER(coincounter_0_w); + DECLARE_WRITE_LINE_MEMBER(coincounter_1_w); DECLARE_READ8_MEMBER(ret_ff); DECLARE_READ8_MEMBER(hanamai_keyboard_0_r); DECLARE_READ8_MEMBER(hanamai_keyboard_1_r); @@ -156,19 +160,16 @@ public: DECLARE_WRITE8_MEMBER(yarunara_palette_w); DECLARE_WRITE8_MEMBER(nanajign_palette_w); DECLARE_WRITE8_MEMBER(adpcm_data_w); - DECLARE_WRITE8_MEMBER(yarunara_layer_half_w); - DECLARE_WRITE8_MEMBER(yarunara_layer_half2_w); + DECLARE_WRITE8_MEMBER(yarunara_mainlatch_w); DECLARE_WRITE8_MEMBER(hjingi_bank_w); - DECLARE_WRITE8_MEMBER(hjingi_lockout_w); - DECLARE_WRITE8_MEMBER(hjingi_hopper_w); + DECLARE_WRITE_LINE_MEMBER(hjingi_lockout_w); + DECLARE_WRITE_LINE_MEMBER(hjingi_hopper_w); uint8_t hjingi_hopper_bit(); DECLARE_READ8_MEMBER(hjingi_keyboard_0_r); DECLARE_READ8_MEMBER(hjingi_keyboard_1_r); DECLARE_WRITE8_MEMBER(yarunara_input_w); DECLARE_READ8_MEMBER(yarunara_input_r); DECLARE_WRITE8_MEMBER(yarunara_rombank_w); - DECLARE_WRITE8_MEMBER(yarunara_flipscreen_w); - DECLARE_WRITE8_MEMBER(yarunara_flipscreen_inv_w); DECLARE_WRITE8_MEMBER(yarunara_blit_romregion_w); DECLARE_READ8_MEMBER(jantouki_soundlatch_ack_r); DECLARE_WRITE8_MEMBER(jantouki_soundlatch_w); @@ -195,9 +196,10 @@ public: DECLARE_READ8_MEMBER(tenkai_p8_r); DECLARE_READ8_MEMBER(tenkai_8000_r); DECLARE_WRITE8_MEMBER(tenkai_8000_w); - DECLARE_WRITE8_MEMBER(tenkai_6c_w); - DECLARE_WRITE8_MEMBER(tenkai_70_w); + DECLARE_WRITE_LINE_MEMBER(tenkai_6c_w); + DECLARE_WRITE_LINE_MEMBER(tenkai_70_w); DECLARE_WRITE8_MEMBER(tenkai_blit_romregion_w); + DECLARE_WRITE8_MEMBER(tenkai_mainlatch_w); DECLARE_READ8_MEMBER(gekisha_keyboard_0_r); DECLARE_READ8_MEMBER(gekisha_keyboard_1_r); DECLARE_WRITE8_MEMBER(gekisha_hopper_w); @@ -221,15 +223,17 @@ public: DECLARE_WRITE8_MEMBER(tenkai_blit_palette23_w); DECLARE_WRITE8_MEMBER(mjembase_blit_palette23_w); DECLARE_WRITE8_MEMBER(dynax_blit_palette67_w); - DECLARE_WRITE8_MEMBER(dynax_blit_palbank_w); - DECLARE_WRITE8_MEMBER(dynax_blit2_palbank_w); - DECLARE_WRITE8_MEMBER(hanamai_layer_half_w); - DECLARE_WRITE8_MEMBER(hnoridur_layer_half2_w); - DECLARE_WRITE8_MEMBER(mjdialq2_blit_dest_w); + DECLARE_WRITE_LINE_MEMBER(blit_palbank_w); + DECLARE_WRITE_LINE_MEMBER(blit2_palbank_w); + DECLARE_WRITE_LINE_MEMBER(layer_half_w); + DECLARE_WRITE_LINE_MEMBER(layer_half2_w); + DECLARE_WRITE_LINE_MEMBER(mjdialq2_blit_dest0_w); + DECLARE_WRITE_LINE_MEMBER(mjdialq2_blit_dest1_w); DECLARE_WRITE8_MEMBER(dynax_layer_enable_w); DECLARE_WRITE8_MEMBER(jantouki_layer_enable_w); - DECLARE_WRITE8_MEMBER(mjdialq2_layer_enable_w); - DECLARE_WRITE8_MEMBER(dynax_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(mjdialq2_layer0_enable_w); + DECLARE_WRITE_LINE_MEMBER(mjdialq2_layer1_enable_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_WRITE8_MEMBER(dynax_blit_romregion_w); DECLARE_WRITE8_MEMBER(dynax_blit2_romregion_w); DECLARE_WRITE8_MEMBER(dynax_blit_scroll_w); @@ -247,7 +251,6 @@ public: DECLARE_DRIVER_INIT(mjelct3); DECLARE_DRIVER_INIT(blktouch); DECLARE_DRIVER_INIT(mjelct3a); - DECLARE_DRIVER_INIT(mjreach); DECLARE_DRIVER_INIT(maya_common); DECLARE_DRIVER_INIT(mayac); DECLARE_DRIVER_INIT(maya); @@ -280,6 +283,7 @@ public: DECLARE_MACHINE_RESET(adpcm); DECLARE_WRITE8_MEMBER(adpcm_reset_w); + DECLARE_WRITE_LINE_MEMBER(adpcm_reset_kludge_w); DECLARE_MACHINE_START(gekisha); DECLARE_MACHINE_RESET(gekisha); DECLARE_MACHINE_START(tenkai); diff --git a/src/mame/includes/equites.h b/src/mame/includes/equites.h index 28e088e00fc..7daa6afeda4 100644 --- a/src/mame/includes/equites.h +++ b/src/mame/includes/equites.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/74259.h" #include "machine/alpha8201.h" #include "machine/gen_latch.h" #include "sound/samples.h" @@ -34,7 +35,8 @@ public: m_msm(*this, "msm"), m_dac_1(*this, "dac1"), m_dac_2(*this, "dac2"), - m_soundlatch(*this, "soundlatch") + m_soundlatch(*this, "soundlatch"), + m_mainlatch(*this, "mainlatch") { } /* memory pointers */ @@ -80,6 +82,7 @@ public: required_device<dac_byte_interface> m_dac_1; required_device<dac_byte_interface> m_dac_2; required_device<generic_latch_8_device> m_soundlatch; + required_device<ls259_device> m_mainlatch; DECLARE_WRITE8_MEMBER(equites_c0f8_w); DECLARE_WRITE8_MEMBER(equites_cymbal_ctrl_w); @@ -89,18 +92,18 @@ public: DECLARE_WRITE8_MEMBER(equites_8155_portc_w); DECLARE_WRITE16_MEMBER(gekisou_unknown_bit_w); DECLARE_READ16_MEMBER(equites_spriteram_kludge_r); + DECLARE_WRITE8_MEMBER(mainlatch_w); DECLARE_READ8_MEMBER(mcu_ram_r); DECLARE_WRITE8_MEMBER(mcu_ram_w); - DECLARE_WRITE16_MEMBER(mcu_start_w); - DECLARE_WRITE16_MEMBER(mcu_switch_w); + DECLARE_WRITE_LINE_MEMBER(mcu_start_w); + DECLARE_WRITE_LINE_MEMBER(mcu_switch_w); DECLARE_READ8_MEMBER(equites_fg_videoram_r); DECLARE_WRITE8_MEMBER(equites_fg_videoram_w); DECLARE_WRITE16_MEMBER(equites_bg_videoram_w); DECLARE_WRITE8_MEMBER(equites_bgcolor_w); DECLARE_WRITE16_MEMBER(equites_scrollreg_w); - DECLARE_WRITE16_MEMBER(splndrbt_selchar_w); - DECLARE_WRITE16_MEMBER(equites_flipw_w); - DECLARE_WRITE8_MEMBER(equites_flipb_w); + DECLARE_WRITE_LINE_MEMBER(splndrbt_selchar_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_w); DECLARE_WRITE16_MEMBER(splndrbt_bg_scrollx_w); DECLARE_WRITE16_MEMBER(splndrbt_bg_scrolly_w); DECLARE_CUSTOM_INPUT_MEMBER(gekisou_unknown_bit_r); diff --git a/src/mame/includes/fastfred.h b/src/mame/includes/fastfred.h index a89a1a6b2ea..caea0089c12 100644 --- a/src/mame/includes/fastfred.h +++ b/src/mame/includes/fastfred.h @@ -49,22 +49,22 @@ public: DECLARE_READ8_MEMBER(flyboy_custom2_io_r); DECLARE_READ8_MEMBER(jumpcoas_custom_io_r); DECLARE_READ8_MEMBER(boggy84_custom_io_r); - DECLARE_WRITE8_MEMBER(imago_dma_irq_w); + DECLARE_WRITE_LINE_MEMBER(imago_dma_irq_w); DECLARE_WRITE8_MEMBER(imago_sprites_bank_w); DECLARE_WRITE8_MEMBER(imago_sprites_dma_w); DECLARE_READ8_MEMBER(imago_sprites_offset_r); - DECLARE_WRITE8_MEMBER(nmi_mask_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(sound_nmi_mask_w); DECLARE_WRITE8_MEMBER(fastfred_videoram_w); DECLARE_WRITE8_MEMBER(fastfred_attributes_w); - DECLARE_WRITE8_MEMBER(fastfred_charbank1_w); - DECLARE_WRITE8_MEMBER(fastfred_charbank2_w); - DECLARE_WRITE8_MEMBER(fastfred_colorbank1_w); - DECLARE_WRITE8_MEMBER(fastfred_colorbank2_w); - DECLARE_WRITE8_MEMBER(fastfred_flip_screen_x_w); - DECLARE_WRITE8_MEMBER(fastfred_flip_screen_y_w); + DECLARE_WRITE_LINE_MEMBER(charbank1_w); + DECLARE_WRITE_LINE_MEMBER(charbank2_w); + DECLARE_WRITE_LINE_MEMBER(colorbank1_w); + DECLARE_WRITE_LINE_MEMBER(colorbank2_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); DECLARE_WRITE8_MEMBER(imago_fg_videoram_w); - DECLARE_WRITE8_MEMBER(imago_charbank_w); + DECLARE_WRITE_LINE_MEMBER(imago_charbank_w); DECLARE_DRIVER_INIT(fastfred); DECLARE_DRIVER_INIT(flyboy); diff --git a/src/mame/includes/freekick.h b/src/mame/includes/freekick.h index f9dcec5cc70..418e16d5afd 100644 --- a/src/mame/includes/freekick.h +++ b/src/mame/includes/freekick.h @@ -30,13 +30,16 @@ public: int m_spinner; int m_nmi_en; int m_ff_data; - DECLARE_WRITE8_MEMBER(flipscreen_xy_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); - DECLARE_WRITE8_MEMBER(coin_w); - DECLARE_WRITE8_MEMBER(spinner_select_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_x_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_y_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(coin1_w); + DECLARE_WRITE_LINE_MEMBER(coin2_w); + DECLARE_WRITE_LINE_MEMBER(spinner_select_w); + DECLARE_WRITE8_MEMBER(gigas_spinner_select_w); DECLARE_READ8_MEMBER(spinner_r); DECLARE_WRITE8_MEMBER(pbillrd_bankswitch_w); - DECLARE_WRITE8_MEMBER(nmi_enable_w); + DECLARE_WRITE_LINE_MEMBER(nmi_enable_w); DECLARE_WRITE8_MEMBER(oigas_5_w); DECLARE_READ8_MEMBER(oigas_3_r); DECLARE_READ8_MEMBER(oigas_2_r); diff --git a/src/mame/includes/funkybee.h b/src/mame/includes/funkybee.h index 169fc2a69fe..c3d3388d47b 100644 --- a/src/mame/includes/funkybee.h +++ b/src/mame/includes/funkybee.h @@ -24,16 +24,16 @@ public: tilemap_t *m_bg_tilemap; int m_gfx_bank; DECLARE_READ8_MEMBER(funkybee_input_port_0_r); - DECLARE_WRITE8_MEMBER(funkybee_coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE8_MEMBER(funkybee_videoram_w); DECLARE_WRITE8_MEMBER(funkybee_colorram_w); - DECLARE_WRITE8_MEMBER(funkybee_gfx_bank_w); + DECLARE_WRITE_LINE_MEMBER(gfx_bank_w); DECLARE_WRITE8_MEMBER(funkybee_scroll_w); - DECLARE_WRITE8_MEMBER(funkybee_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); TILE_GET_INFO_MEMBER(get_bg_tile_info); TILEMAP_MAPPER_MEMBER(funkybee_tilemap_scan); virtual void machine_start() override; - virtual void machine_reset() override; virtual void video_start() override; DECLARE_PALETTE_INIT(funkybee); uint32_t screen_update_funkybee(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/gaelco.h b/src/mame/includes/gaelco.h index a87e6a7a33a..91509b861a3 100644 --- a/src/mame/includes/gaelco.h +++ b/src/mame/includes/gaelco.h @@ -6,6 +6,7 @@ ***************************************************************************/ +#include "machine/74259.h" #include "machine/gen_latch.h" class gaelco_state : public driver_device @@ -18,6 +19,7 @@ public: m_palette(*this, "palette"), m_audiocpu(*this, "audiocpu"), m_soundlatch(*this, "soundlatch"), + m_outlatch(*this, "outlatch"), m_videoram(*this, "videoram"), m_vregs(*this, "vregs"), m_spriteram(*this, "spriteram"), @@ -29,6 +31,7 @@ public: required_device<palette_device> m_palette; optional_device<cpu_device> m_audiocpu; optional_device<generic_latch_8_device> m_soundlatch; + optional_device<ls259_device> m_outlatch; /* memory pointers */ required_shared_ptr<uint16_t> m_videoram; @@ -40,7 +43,11 @@ public: tilemap_t *m_tilemap[2]; DECLARE_WRITE8_MEMBER(bigkarnk_sound_command_w); - DECLARE_WRITE8_MEMBER(bigkarnk_coin_w); + DECLARE_WRITE8_MEMBER(output_latch_w); + DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); DECLARE_WRITE8_MEMBER(OKIM6295_bankswitch_w); DECLARE_WRITE16_MEMBER(gaelco_vram_encrypted_w); DECLARE_WRITE16_MEMBER(gaelco_encrypted_w); diff --git a/src/mame/includes/gaelco2.h b/src/mame/includes/gaelco2.h index d132b267585..3966f0c0cdf 100644 --- a/src/mame/includes/gaelco2.h +++ b/src/mame/includes/gaelco2.h @@ -2,6 +2,7 @@ // copyright-holders:Manuel Abadia #include "cpu/m68000/m68000.h" #include "video/bufsprite.h" +#include "machine/74259.h" #include "machine/eepromser.h" class gaelco2_state : public driver_device @@ -14,6 +15,7 @@ public: m_vregs(*this, "vregs"), m_snowboar_protection(*this, "snowboar_prot"), m_eeprom(*this, "eeprom"), + m_mainlatch(*this, "mainlatch"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_generic_paletteram_16(*this, "paletteram"), @@ -22,9 +24,12 @@ public: DECLARE_WRITE8_MEMBER(shareram_w); DECLARE_READ8_MEMBER(shareram_r); - DECLARE_WRITE16_MEMBER(gaelco2_coin_w); - DECLARE_WRITE16_MEMBER(gaelco2_coin2_w); - DECLARE_WRITE16_MEMBER(touchgo_coin_w); + DECLARE_WRITE16_MEMBER(wrally2_latch_w); + DECLARE_WRITE16_MEMBER(alighunt_coin_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin3_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin4_counter_w); DECLARE_READ16_MEMBER(snowboar_protection_r); DECLARE_WRITE16_MEMBER(snowboar_protection_w); DECLARE_WRITE16_MEMBER(gaelco2_vram_w); @@ -41,9 +46,6 @@ public: uint32_t screen_update_gaelco2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_gaelco2_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_gaelco2_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE16_MEMBER(gaelco2_eeprom_cs_w); - DECLARE_WRITE16_MEMBER(gaelco2_eeprom_sk_w); - DECLARE_WRITE16_MEMBER(gaelco2_eeprom_data_w); void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int mask, int xoffs); uint32_t dual_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int index); void gaelco2_ROM16_split_gfx(const char *src_reg, const char *dst_reg, int start, int length, int dest1, int dest2); @@ -62,6 +64,7 @@ private: required_shared_ptr<uint16_t> m_vregs; optional_shared_ptr<uint16_t> m_snowboar_protection; optional_device<eeprom_serial_93cxx_device> m_eeprom; + optional_device<ls259_device> m_mainlatch; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_shared_ptr<uint16_t> m_generic_paletteram_16; @@ -111,8 +114,7 @@ public: uint8_t m_analog_ports[2]; - DECLARE_WRITE16_MEMBER(wrally2_coin_w); - DECLARE_WRITE16_MEMBER(wrally2_adc_clk); - DECLARE_WRITE16_MEMBER(wrally2_adc_cs); + DECLARE_WRITE_LINE_MEMBER(wrally2_adc_clk); + DECLARE_WRITE_LINE_MEMBER(wrally2_adc_cs); DECLARE_CUSTOM_INPUT_MEMBER(wrally2_analog_bit_r); }; diff --git a/src/mame/includes/gaelco3d.h b/src/mame/includes/gaelco3d.h index 48ed08c6025..8af455fbf53 100644 --- a/src/mame/includes/gaelco3d.h +++ b/src/mame/includes/gaelco3d.h @@ -10,6 +10,7 @@ #include "sound/dmadac.h" #include "video/poly.h" +#include "machine/74259.h" #include "machine/eepromser.h" #include "machine/gaelco3d.h" #include "cpu/adsp2100/adsp2100.h" @@ -69,6 +70,8 @@ public: m_tms(*this, "tms"), m_serial(*this, "serial"), m_screen(*this, "screen"), + m_mainlatch(*this, "mainlatch"), + m_outlatch(*this, "outlatch"), m_paletteram16(*this, "paletteram"), m_paletteram32(*this, "paletteram"), m_analog(*this, {"ANALOG0", "ANALOG1", "ANALOG2", "ANALOG3"}) @@ -85,6 +88,8 @@ public: required_device<cpu_device> m_tms; required_device<gaelco_serial_device> m_serial; required_device<screen_device> m_screen; + required_device<ls259_device> m_mainlatch; + required_device<ls259_device> m_outlatch; optional_shared_ptr<uint16_t> m_paletteram16; optional_shared_ptr<uint32_t> m_paletteram32; optional_ioport_array<4> m_analog; @@ -107,35 +112,34 @@ public: int m_video_changed; std::unique_ptr<gaelco3d_renderer> m_poly; DECLARE_WRITE16_MEMBER(irq_ack_w); - DECLARE_WRITE32_MEMBER(irq_ack32_w); DECLARE_WRITE16_MEMBER(sound_data_w); DECLARE_READ16_MEMBER(sound_data_r); DECLARE_READ16_MEMBER(sound_status_r); DECLARE_WRITE16_MEMBER(sound_status_w); - DECLARE_WRITE16_MEMBER(analog_port_clock_w); - DECLARE_WRITE16_MEMBER(analog_port_latch_w); + DECLARE_WRITE_LINE_MEMBER(analog_port_clock_w); + DECLARE_WRITE_LINE_MEMBER(analog_port_latch_w); DECLARE_READ32_MEMBER(tms_m68k_ram_r); DECLARE_WRITE32_MEMBER(tms_m68k_ram_w); DECLARE_WRITE8_MEMBER(tms_iack_w); - DECLARE_WRITE16_MEMBER(tms_reset_w); - DECLARE_WRITE16_MEMBER(tms_irq_w); - DECLARE_WRITE16_MEMBER(tms_control3_w); + DECLARE_WRITE_LINE_MEMBER(tms_reset_w); + DECLARE_WRITE_LINE_MEMBER(tms_irq_w); + DECLARE_WRITE_LINE_MEMBER(tms_control3_w); DECLARE_WRITE16_MEMBER(tms_comm_w); DECLARE_WRITE16_MEMBER(adsp_control_w); DECLARE_WRITE16_MEMBER(adsp_rombank_w); - DECLARE_WRITE32_MEMBER(radikalb_lamp_w); - DECLARE_WRITE32_MEMBER(unknown_137_w); - DECLARE_WRITE32_MEMBER(unknown_13a_w); + DECLARE_WRITE_LINE_MEMBER(radikalb_lamp_w); + DECLARE_WRITE_LINE_MEMBER(unknown_137_w); + DECLARE_WRITE_LINE_MEMBER(unknown_13a_w); DECLARE_WRITE32_MEMBER(gaelco3d_render_w); DECLARE_WRITE16_MEMBER(gaelco3d_paletteram_w); DECLARE_WRITE32_MEMBER(gaelco3d_paletteram_020_w); DECLARE_CUSTOM_INPUT_MEMBER(analog_bit_r); DECLARE_WRITE_LINE_MEMBER(ser_irq); DECLARE_READ16_MEMBER(eeprom_data_r); - DECLARE_READ32_MEMBER(eeprom_data32_r); - DECLARE_WRITE16_MEMBER(eeprom_data_w); - DECLARE_WRITE16_MEMBER(eeprom_clock_w); - DECLARE_WRITE16_MEMBER(eeprom_cs_w); + DECLARE_WRITE8_MEMBER(mainlatch_68000_w); + DECLARE_WRITE8_MEMBER(outlatch_68000_w); + DECLARE_WRITE8_MEMBER(mainlatch_68020_w); + DECLARE_WRITE8_MEMBER(outlatch_68020_w); DECLARE_DRIVER_INIT(gaelco3d); virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/galaga.h b/src/mame/includes/galaga.h index d38ba4f5263..08ab5165c43 100644 --- a/src/mame/includes/galaga.h +++ b/src/mame/includes/galaga.h @@ -5,6 +5,7 @@ #pragma once +#include "machine/74259.h" #include "sound/discrete.h" #include "sound/namco.h" #include "sound/samples.h" @@ -19,7 +20,7 @@ public: m_galaga_ram1(*this, "galaga_ram1"), m_galaga_ram2(*this, "galaga_ram2"), m_galaga_ram3(*this, "galaga_ram3"), - m_galaga_starcontrol(*this, "starcontrol"), + m_videolatch(*this, "videolatch"), m_maincpu(*this, "maincpu"), m_subcpu(*this, "sub"), m_subcpu2(*this, "sub2"), @@ -33,7 +34,7 @@ public: optional_shared_ptr<uint8_t> m_galaga_ram1; optional_shared_ptr<uint8_t> m_galaga_ram2; optional_shared_ptr<uint8_t> m_galaga_ram3; - optional_shared_ptr<uint8_t> m_galaga_starcontrol; // 6 addresses + optional_device<ls259_device> m_videolatch; // not present on Xevious required_device<cpu_device> m_maincpu; required_device<cpu_device> m_subcpu; required_device<cpu_device> m_subcpu2; @@ -42,7 +43,6 @@ public: required_device<screen_device> m_screen; required_device<palette_device> m_palette; emu_timer *m_cpu3_interrupt_timer; - uint8_t m_custom_mod; /* machine state */ uint32_t m_stars_scrollx; @@ -62,15 +62,16 @@ public: uint8_t m_sub_irq_mask; uint8_t m_sub2_nmi_mask; DECLARE_READ8_MEMBER(bosco_dsw_r); - DECLARE_WRITE8_MEMBER(galaga_flip_screen_w); - DECLARE_WRITE8_MEMBER(bosco_latch_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_w); + DECLARE_WRITE_LINE_MEMBER(irq1_clear_w); + DECLARE_WRITE_LINE_MEMBER(irq2_clear_w); + DECLARE_WRITE_LINE_MEMBER(nmion_w); DECLARE_WRITE8_MEMBER(galaga_videoram_w); - DECLARE_WRITE8_MEMBER(gatsbee_bank_w); + DECLARE_WRITE_LINE_MEMBER(gatsbee_bank_w); DECLARE_WRITE8_MEMBER(out_0); DECLARE_WRITE8_MEMBER(out_1); DECLARE_READ8_MEMBER(namco_52xx_rom_r); DECLARE_READ8_MEMBER(namco_52xx_si_r); - DECLARE_READ8_MEMBER(custom_mod_r); DECLARE_DRIVER_INIT(galaga); DECLARE_DRIVER_INIT(gatsbee); TILEMAP_MAPPER_MEMBER(tilemap_scan); @@ -86,7 +87,6 @@ public: TIMER_CALLBACK_MEMBER(cpu3_interrupt_callback); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); void draw_stars(bitmap_ind16 &bitmap, const rectangle &cliprect ); - void bosco_latch_reset(); struct star { uint16_t x,y; diff --git a/src/mame/includes/gauntlet.h b/src/mame/includes/gauntlet.h index c09432c4fdd..1ac87752b93 100644 --- a/src/mame/includes/gauntlet.h +++ b/src/mame/includes/gauntlet.h @@ -7,6 +7,7 @@ *************************************************************************/ #include "machine/atarigen.h" +#include "machine/74259.h" #include "video/atarimo.h" #include "sound/ym2151.h" #include "sound/pokey.h" @@ -22,6 +23,7 @@ public: m_ym2151(*this, "ymsnd"), m_pokey(*this, "pokey"), m_tms5220(*this, "tms"), + m_soundctl(*this, "soundctl"), m_playfield_tilemap(*this, "playfield"), m_alpha_tilemap(*this, "alpha"), m_mob(*this, "mob") { } @@ -31,6 +33,7 @@ public: required_device<ym2151_device> m_ym2151; required_device<pokey_device> m_pokey; required_device<tms5220_device> m_tms5220; + required_device<ls259_device> m_soundctl; required_device<tilemap_device> m_playfield_tilemap; required_device<tilemap_device> m_alpha_tilemap; @@ -44,7 +47,10 @@ public: virtual void scanline_update(screen_device &screen, int scanline) override; DECLARE_WRITE16_MEMBER(sound_reset_w); DECLARE_READ8_MEMBER(switch_6502_r); - DECLARE_WRITE8_MEMBER(sound_ctl_w); + DECLARE_WRITE_LINE_MEMBER(ym2151_reset_w); + DECLARE_WRITE_LINE_MEMBER(speech_squeak_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w); DECLARE_WRITE8_MEMBER(mixer_w); void swap_memory(void *ptr1, void *ptr2, int bytes); void common_init(int vindctr2); diff --git a/src/mame/includes/gladiatr.h b/src/mame/includes/gladiatr.h index 5dd2eb2ee40..7313527c675 100644 --- a/src/mame/includes/gladiatr.h +++ b/src/mame/includes/gladiatr.h @@ -12,6 +12,7 @@ public: DECLARE_WRITE8_MEMBER(colorram_w); DECLARE_WRITE8_MEMBER(textram_w); DECLARE_WRITE8_MEMBER(paletteram_w); + DECLARE_WRITE_LINE_MEMBER(spritebuffer_w); DECLARE_WRITE8_MEMBER(spritebuffer_w); protected: @@ -100,13 +101,12 @@ public: { } - DECLARE_WRITE8_MEMBER(gladiatr_spritebank_w); + DECLARE_WRITE_LINE_MEMBER(spritebank_w); DECLARE_WRITE8_MEMBER(gladiatr_video_registers_w); - DECLARE_WRITE8_MEMBER(gladiatr_bankswitch_w); DECLARE_WRITE8_MEMBER(gladiator_cpu_sound_command_w); DECLARE_READ8_MEMBER(gladiator_cpu_sound_command_r); - DECLARE_WRITE8_MEMBER(gladiatr_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_WRITE8_MEMBER(gladiatr_irq_patch_w); DECLARE_WRITE8_MEMBER(gladiator_int_control_w); DECLARE_WRITE8_MEMBER(gladiator_adpcm_w); diff --git a/src/mame/includes/glass.h b/src/mame/includes/glass.h index 0f4159027c6..7167e0ff21d 100644 --- a/src/mame/includes/glass.h +++ b/src/mame/includes/glass.h @@ -6,6 +6,8 @@ *************************************************************************/ +#include "machine/74259.h" + class glass_state : public driver_device { public: @@ -14,6 +16,7 @@ public: m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_outlatch(*this, "outlatch"), m_videoram(*this, "videoram"), m_vregs(*this, "vregs"), m_spriteram(*this, "spriteram"), @@ -26,6 +29,7 @@ public: required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<ls259_device> m_outlatch; /* memory pointers */ required_shared_ptr<uint16_t> m_videoram; @@ -51,6 +55,11 @@ public: DECLARE_WRITE16_MEMBER(blitter_w); DECLARE_WRITE16_MEMBER(vram_w); + DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); + DECLARE_DRIVER_INIT(glass); virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/gng.h b/src/mame/includes/gng.h index 8c76329ceac..98a6fd42498 100644 --- a/src/mame/includes/gng.h +++ b/src/mame/includes/gng.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "sound/2203intf.h" #include "video/bufsprite.h" class gng_state : public driver_device @@ -17,6 +18,7 @@ public: m_fgvideoram(*this, "fgvideoram"), m_bgvideoram(*this, "bgvideoram"), m_maincpu(*this, "maincpu"), + m_ym(*this, "ym%u", 1), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette") { } @@ -32,13 +34,15 @@ public: uint8_t m_scrolly[2]; DECLARE_WRITE8_MEMBER(gng_bankswitch_w); - DECLARE_WRITE8_MEMBER(gng_coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); + DECLARE_WRITE_LINE_MEMBER(ym_reset_w); DECLARE_READ8_MEMBER(diamond_hack_r); DECLARE_WRITE8_MEMBER(gng_fgvideoram_w); DECLARE_WRITE8_MEMBER(gng_bgvideoram_w); DECLARE_WRITE8_MEMBER(gng_bgscrollx_w); DECLARE_WRITE8_MEMBER(gng_bgscrolly_w); - DECLARE_WRITE8_MEMBER(gng_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_DRIVER_INIT(diamond); TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info); @@ -48,6 +52,7 @@ public: uint32_t screen_update_gng(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); required_device<cpu_device> m_maincpu; + required_device_array<ym2203_device, 2> m_ym; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; }; diff --git a/src/mame/includes/gomoku.h b/src/mame/includes/gomoku.h index e443d80d1a7..a99c8426ea3 100644 --- a/src/mame/includes/gomoku.h +++ b/src/mame/includes/gomoku.h @@ -3,6 +3,7 @@ #ifndef MAME_INCLUDES_GOMOKU_H #define MAME_INCLUDES_GOMOKU_H +#include "machine/74259.h" #include "screen.h" class gomoku_state : public driver_device @@ -15,6 +16,7 @@ public: m_bgram(*this, "bgram"), m_inputs(*this, {"IN0", "IN1", "DSW", "UNUSED0", "UNUSED1", "UNUSED2", "UNUSED3", "UNUSED4"}), m_maincpu(*this, "maincpu"), + m_latch(*this, "latch"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen") { } @@ -27,16 +29,18 @@ public: bitmap_ind16 m_bg_bitmap; optional_ioport_array<8> m_inputs; DECLARE_READ8_MEMBER(input_port_r); + DECLARE_WRITE8_MEMBER(gomoku_latch_w); DECLARE_WRITE8_MEMBER(gomoku_videoram_w); DECLARE_WRITE8_MEMBER(gomoku_colorram_w); DECLARE_WRITE8_MEMBER(gomoku_bgram_w); - DECLARE_WRITE8_MEMBER(gomoku_flipscreen_w); - DECLARE_WRITE8_MEMBER(gomoku_bg_dispsw_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(bg_dispsw_w); TILE_GET_INFO_MEMBER(get_fg_tile_info); virtual void video_start() override; DECLARE_PALETTE_INIT(gomoku); uint32_t screen_update_gomoku(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); required_device<cpu_device> m_maincpu; + required_device<ls259_device> m_latch; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; }; diff --git a/src/mame/includes/gridlee.h b/src/mame/includes/gridlee.h index 45fa8aa3c05..84bbfbd99f1 100644 --- a/src/mame/includes/gridlee.h +++ b/src/mame/includes/gridlee.h @@ -8,6 +8,7 @@ ***************************************************************************/ +#include "machine/74259.h" #include "sound/samples.h" #include "screen.h" @@ -32,13 +33,15 @@ public: m_videoram(*this, "videoram"), m_maincpu(*this, "maincpu"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_latch(*this, "latch") { } required_shared_ptr<uint8_t> m_spriteram; required_shared_ptr<uint8_t> m_videoram; required_device<cpu_device> m_maincpu; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<ls259_device> m_latch; uint8_t m_last_analog_input[2]; uint8_t m_last_analog_output[2]; @@ -54,10 +57,11 @@ public: DECLARE_READ8_MEMBER(analog_port_r); DECLARE_READ8_MEMBER(random_num_r); - DECLARE_WRITE8_MEMBER(led_0_w); - DECLARE_WRITE8_MEMBER(led_1_w); - DECLARE_WRITE8_MEMBER(gridlee_coin_counter_w); - DECLARE_WRITE8_MEMBER(gridlee_cocktail_flip_w); + DECLARE_WRITE8_MEMBER(latch_w); + DECLARE_WRITE_LINE_MEMBER(led_0_w); + DECLARE_WRITE_LINE_MEMBER(led_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(cocktail_flip_w); DECLARE_WRITE8_MEMBER(gridlee_videoram_w); DECLARE_WRITE8_MEMBER(gridlee_palette_select_w); virtual void machine_start() override; diff --git a/src/mame/includes/gyruss.h b/src/mame/includes/gyruss.h index acea4589292..82181c76e5e 100644 --- a/src/mame/includes/gyruss.h +++ b/src/mame/includes/gyruss.h @@ -21,7 +21,6 @@ public: m_discrete(*this, "discrete"), m_colorram(*this, "colorram"), m_videoram(*this, "videoram"), - m_flipscreen(*this, "flipscreen"), m_spriteram(*this, "spriteram"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), @@ -36,7 +35,6 @@ public: required_device<discrete_device> m_discrete; required_shared_ptr<uint8_t> m_colorram; required_shared_ptr<uint8_t> m_videoram; - required_shared_ptr<uint8_t> m_flipscreen; required_shared_ptr<uint8_t> m_spriteram; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; @@ -45,14 +43,18 @@ public: tilemap_t *m_tilemap; uint8_t m_master_nmi_mask; uint8_t m_slave_irq_mask; + bool m_flipscreen; DECLARE_WRITE8_MEMBER(gyruss_irq_clear_w); DECLARE_WRITE8_MEMBER(gyruss_sh_irqtrigger_w); DECLARE_WRITE8_MEMBER(gyruss_i8039_irq_w); - DECLARE_WRITE8_MEMBER(master_nmi_mask_w); + DECLARE_WRITE_LINE_MEMBER(master_nmi_mask_w); DECLARE_WRITE8_MEMBER(slave_irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE8_MEMBER(gyruss_spriteram_w); DECLARE_READ8_MEMBER(gyruss_scanline_r); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_READ8_MEMBER(gyruss_portA_r); DECLARE_WRITE8_MEMBER(gyruss_dac_w); DECLARE_WRITE8_MEMBER(gyruss_filter0_w); diff --git a/src/mame/includes/hnayayoi.h b/src/mame/includes/hnayayoi.h index 4fd0b470379..ab2be332925 100644 --- a/src/mame/includes/hnayayoi.h +++ b/src/mame/includes/hnayayoi.h @@ -25,6 +25,8 @@ public: /* misc */ int m_keyb; + bool m_nmi_enable; + DECLARE_READ8_MEMBER(keyboard_0_r); DECLARE_READ8_MEMBER(keyboard_1_r); DECLARE_WRITE8_MEMBER(keyboard_w); @@ -33,9 +35,9 @@ public: DECLARE_WRITE8_MEMBER(dynax_blitter_rev1_clear_w); DECLARE_WRITE8_MEMBER(hnayayoi_palbank_w); DECLARE_WRITE8_MEMBER(adpcm_data_w); - DECLARE_WRITE8_MEMBER(adpcm_vclk_w); - DECLARE_WRITE8_MEMBER(adpcm_reset_w); - DECLARE_WRITE8_MEMBER(adpcm_reset_inv_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(nmi_enable_w); + DECLARE_WRITE_LINE_MEMBER(nmi_clock_w); DECLARE_DRIVER_INIT(hnfubuki); virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/holeland.h b/src/mame/includes/holeland.h index a85a89bbb14..6eb76c73588 100644 --- a/src/mame/includes/holeland.h +++ b/src/mame/includes/holeland.h @@ -6,6 +6,8 @@ *************************************************************************/ +#include "machine/74259.h" + class holeland_state : public driver_device { public: @@ -14,6 +16,7 @@ public: m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_latch(*this, "latch"), m_videoram(*this, "videoram"), m_colorram(*this, "colorram"), m_spriteram(*this, "spriteram") { } @@ -23,6 +26,7 @@ public: required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<ls259_device> m_latch; /* memory pointers */ required_shared_ptr<uint8_t> m_videoram; @@ -32,13 +36,15 @@ public: /* video-related */ tilemap_t *m_bg_tilemap; int m_palette_offset; - int m_po[2]; + + DECLARE_WRITE_LINE_MEMBER(coin_counter_w); DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(colorram_w); DECLARE_WRITE8_MEMBER(pal_offs_w); DECLARE_WRITE8_MEMBER(scroll_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_x_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_y_w); TILE_GET_INFO_MEMBER(holeland_get_tile_info); TILE_GET_INFO_MEMBER(crzrally_get_tile_info); diff --git a/src/mame/includes/jedi.h b/src/mame/includes/jedi.h index d4619c83778..40d50931207 100644 --- a/src/mame/includes/jedi.h +++ b/src/mame/includes/jedi.h @@ -24,8 +24,6 @@ public: jedi_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_nvram(*this, "nvram") , - m_foreground_bank(*this, "foreground_bank"), - m_video_off(*this, "video_off"), m_backgroundram(*this, "backgroundram"), m_paletteram(*this, "paletteram"), m_foregroundram(*this, "foregroundram"), @@ -46,8 +44,6 @@ public: emu_timer *m_interrupt_timer; /* video state */ - required_shared_ptr<uint8_t> m_foreground_bank; - required_shared_ptr<uint8_t> m_video_off; required_shared_ptr<uint8_t> m_backgroundram; required_shared_ptr<uint8_t> m_paletteram; required_shared_ptr<uint8_t> m_foregroundram; @@ -55,6 +51,8 @@ public: required_shared_ptr<uint8_t> m_smoothing_table; uint32_t m_vscroll; uint32_t m_hscroll; + bool m_foreground_bank; + bool m_video_off; /* audio state */ uint8_t m_audio_latch; @@ -66,14 +64,15 @@ public: DECLARE_WRITE8_MEMBER(rom_banksel_w); DECLARE_READ8_MEMBER(a2d_data_r); DECLARE_WRITE8_MEMBER(a2d_select_w); - DECLARE_WRITE8_MEMBER(jedi_coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w); DECLARE_WRITE8_MEMBER(nvram_data_w); DECLARE_WRITE8_MEMBER(nvram_enable_w); DECLARE_WRITE8_MEMBER(jedi_vscroll_w); DECLARE_WRITE8_MEMBER(jedi_hscroll_w); DECLARE_CUSTOM_INPUT_MEMBER(jedi_audio_comm_stat_r); DECLARE_WRITE8_MEMBER(irq_ack_w); - DECLARE_WRITE8_MEMBER(jedi_audio_reset_w); + DECLARE_WRITE_LINE_MEMBER(audio_reset_w); DECLARE_WRITE8_MEMBER(jedi_audio_latch_w); DECLARE_READ8_MEMBER(audio_latch_r); DECLARE_READ8_MEMBER(jedi_audio_ack_latch_r); @@ -86,6 +85,8 @@ public: virtual void sound_start() override; virtual void sound_reset() override; DECLARE_VIDEO_START(jedi); + DECLARE_WRITE_LINE_MEMBER(foreground_bank_w); + DECLARE_WRITE_LINE_MEMBER(video_off_w); uint32_t screen_update_jedi(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(generate_interrupt); TIMER_CALLBACK_MEMBER(delayed_audio_latch_w); diff --git a/src/mame/includes/kchamp.h b/src/mame/includes/kchamp.h index f3a1b7cb39a..8d3b9657842 100644 --- a/src/mame/includes/kchamp.h +++ b/src/mame/includes/kchamp.h @@ -8,6 +8,7 @@ #include "machine/74157.h" #include "machine/gen_latch.h" +#include "sound/ay8910.h" #include "sound/msm5205.h" #include "sound/dac.h" @@ -22,6 +23,7 @@ public: m_decrypted_opcodes(*this, "decrypted_opcodes"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), + m_ay(*this, "ay%u", 1), m_adpcm_select(*this, "adpcm_select"), m_msm(*this, "msm"), m_dac(*this, "dac"), @@ -46,6 +48,7 @@ public: /* devices */ required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; + required_device_array<ay8910_device, 2> m_ay; optional_device<ls157_device> m_adpcm_select; optional_device<msm5205_device> m_msm; optional_device<dac_8bit_r2r_device> m_dac; @@ -53,14 +56,14 @@ public: required_device<palette_device> m_palette; required_device<generic_latch_8_device> m_soundlatch; - DECLARE_WRITE8_MEMBER(control_w); - DECLARE_WRITE8_MEMBER(sound_reset_w); + DECLARE_WRITE_LINE_MEMBER(nmi_enable_w); + DECLARE_WRITE_LINE_MEMBER(sound_reset_w); DECLARE_WRITE8_MEMBER(sound_msm_w); DECLARE_READ8_MEMBER(sound_reset_r); DECLARE_WRITE8_MEMBER(kc_sound_control_w); DECLARE_WRITE8_MEMBER(kchamp_videoram_w); DECLARE_WRITE8_MEMBER(kchamp_colorram_w); - DECLARE_WRITE8_MEMBER(kchamp_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_WRITE8_MEMBER(sound_control_w); DECLARE_DRIVER_INIT(kchampvs); DECLARE_DRIVER_INIT(kchampvs2); diff --git a/src/mame/includes/kyugo.h b/src/mame/includes/kyugo.h index 71193f349f2..dde5e87745e 100644 --- a/src/mame/includes/kyugo.h +++ b/src/mame/includes/kyugo.h @@ -47,8 +47,7 @@ public: required_device<palette_device> m_palette; uint8_t m_nmi_mask; - DECLARE_WRITE8_MEMBER(kyugo_nmi_mask_w); - DECLARE_WRITE8_MEMBER(kyugo_sub_cpu_control_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(kyugo_coin_counter_w); DECLARE_WRITE8_MEMBER(kyugo_fgvideoram_w); DECLARE_WRITE8_MEMBER(kyugo_bgvideoram_w); @@ -57,7 +56,7 @@ public: DECLARE_WRITE8_MEMBER(kyugo_scroll_x_lo_w); DECLARE_WRITE8_MEMBER(kyugo_gfxctrl_w); DECLARE_WRITE8_MEMBER(kyugo_scroll_y_w); - DECLARE_WRITE8_MEMBER(kyugo_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_DRIVER_INIT(srdmissn); TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info); diff --git a/src/mame/includes/ladybug.h b/src/mame/includes/ladybug.h index a3c5c03f87d..387cf6b54b3 100644 --- a/src/mame/includes/ladybug.h +++ b/src/mame/includes/ladybug.h @@ -56,7 +56,7 @@ public: DECLARE_WRITE8_MEMBER(ladybug_videoram_w); DECLARE_WRITE8_MEMBER(ladybug_colorram_w); - DECLARE_WRITE8_MEMBER(ladybug_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_CUSTOM_INPUT_MEMBER(ladybug_p1_control_r); DECLARE_CUSTOM_INPUT_MEMBER(ladybug_p2_control_r); DECLARE_INPUT_CHANGED_MEMBER(coin1_inserted); diff --git a/src/mame/includes/liberatr.h b/src/mame/includes/liberatr.h index f207b7ed8f8..71592a2340b 100644 --- a/src/mame/includes/liberatr.h +++ b/src/mame/includes/liberatr.h @@ -7,6 +7,7 @@ *************************************************************************/ #include "cpu/m6502/m6502.h" +#include "machine/74259.h" #include "machine/er2055.h" #include "machine/watchdog.h" #include "sound/pokey.h" @@ -20,25 +21,30 @@ public: m_earom(*this, "earom"), m_earom_data(0), m_earom_control(0), + m_outlatch(*this, "outlatch"), m_screen(*this, "screen"), m_base_ram(*this, "base_ram"), m_planet_frame(*this, "planet_frame"), - m_planet_select(*this, "planet_select"), m_xcoord(*this, "xcoord"), m_ycoord(*this, "ycoord"), m_bitmapram(*this, "bitmapram"), m_colorram(*this, "colorram") { } - DECLARE_WRITE8_MEMBER( led_w ); - DECLARE_WRITE8_MEMBER( coin_counter_w ); + DECLARE_WRITE8_MEMBER(output_latch_w); + DECLARE_WRITE_LINE_MEMBER(start_led_1_w); + DECLARE_WRITE_LINE_MEMBER(start_led_2_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w); - DECLARE_WRITE8_MEMBER( trackball_reset_w ); - DECLARE_READ8_MEMBER( port0_r ); + DECLARE_WRITE_LINE_MEMBER(trackball_reset_w); + DECLARE_READ8_MEMBER(port0_r); DECLARE_WRITE8_MEMBER( bitmap_w ); DECLARE_READ8_MEMBER( bitmap_xy_r ); DECLARE_WRITE8_MEMBER( bitmap_xy_w ); + DECLARE_WRITE_LINE_MEMBER(planet_select_w); + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); // early raster EAROM interface @@ -56,6 +62,8 @@ protected: uint8_t m_earom_data; uint8_t m_earom_control; + required_device<ls259_device> m_outlatch; + struct planet; void init_planet(planet &liberatr_planet, uint8_t *planet_rom); @@ -66,7 +74,6 @@ protected: required_device<screen_device> m_screen; required_shared_ptr<uint8_t> m_base_ram; required_shared_ptr<uint8_t> m_planet_frame; - required_shared_ptr<uint8_t> m_planet_select; required_shared_ptr<uint8_t> m_xcoord; required_shared_ptr<uint8_t> m_ycoord; required_shared_ptr<uint8_t> m_bitmapram; @@ -76,6 +83,8 @@ protected: uint8_t m_ctrld; uint8_t m_videoram[0x10000]; + bool m_planet_select; + // The following structure describes the (up to 32) line segments // that make up one horizontal line (latitude) for one display frame of the planet. // Note: this and the following structure is only used to collect the diff --git a/src/mame/includes/lisa.h b/src/mame/includes/lisa.h index f43392426e7..d44aa22771f 100644 --- a/src/mame/includes/lisa.h +++ b/src/mame/includes/lisa.h @@ -12,6 +12,7 @@ #define MAME_INCLUDES_LISA_H #include "cpu/m68000/m68000.h" +#include "machine/74259.h" #include "machine/6522via.h" #include "machine/6522via.h" #include "machine/8530scc.h" @@ -109,6 +110,7 @@ public: m_scc(*this, "scc"), m_speaker(*this, "speaker"), m_nvram(*this, "nvram"), + m_latch(*this, "latch"), m_fdc_rom(*this,"fdc_rom"), m_fdc_ram(*this,"fdc_ram"), m_io_line0(*this, "LINE0"), @@ -131,6 +133,7 @@ public: required_device<scc8530_t> m_scc; required_device<speaker_sound_device> m_speaker; required_device<nvram_device> m_nvram; + required_device<ls259_device> m_latch; required_shared_ptr<uint8_t> m_fdc_rom; required_shared_ptr<uint8_t> m_fdc_ram; @@ -196,6 +199,14 @@ public: DECLARE_WRITE16_MEMBER(lisa_w); DECLARE_READ16_MEMBER(lisa_IO_r); DECLARE_WRITE16_MEMBER(lisa_IO_w); + DECLARE_WRITE_LINE_MEMBER(diag1_w); + DECLARE_WRITE_LINE_MEMBER(diag2_w); + DECLARE_WRITE_LINE_MEMBER(seg1_w); + DECLARE_WRITE_LINE_MEMBER(seg2_w); + DECLARE_WRITE_LINE_MEMBER(setup_w); + DECLARE_WRITE_LINE_MEMBER(vtmsk_w); + DECLARE_WRITE_LINE_MEMBER(sfmsk_w); + DECLARE_WRITE_LINE_MEMBER(hdmsk_w); DECLARE_DRIVER_INIT(lisa210); DECLARE_DRIVER_INIT(mac_xl); diff --git a/src/mame/includes/mappy.h b/src/mame/includes/mappy.h index 0cecac7c776..ae60c4792cf 100644 --- a/src/mame/includes/mappy.h +++ b/src/mame/includes/mappy.h @@ -74,10 +74,10 @@ public: uint8_t m_sub_irq_mask; uint8_t m_sub2_irq_mask; - void common_latch_w(uint32_t offset); - DECLARE_WRITE8_MEMBER(superpac_latch_w); - DECLARE_WRITE8_MEMBER(phozon_latch_w); - DECLARE_WRITE8_MEMBER(mappy_latch_w); + DECLARE_WRITE_LINE_MEMBER(int_on_w); + DECLARE_WRITE_LINE_MEMBER(int_on_2_w); + DECLARE_WRITE_LINE_MEMBER(int_on_3_w); + DECLARE_WRITE_LINE_MEMBER(mappy_flip_w); DECLARE_WRITE8_MEMBER(superpac_videoram_w); DECLARE_WRITE8_MEMBER(mappy_videoram_w); DECLARE_WRITE8_MEMBER(superpac_flipscreen_w); @@ -90,13 +90,10 @@ public: TILE_GET_INFO_MEMBER(phozon_get_tile_info); TILE_GET_INFO_MEMBER(mappy_get_tile_info); DECLARE_MACHINE_START(mappy); - DECLARE_MACHINE_RESET(superpac); DECLARE_VIDEO_START(superpac); DECLARE_PALETTE_INIT(superpac); - DECLARE_MACHINE_RESET(phozon); DECLARE_VIDEO_START(phozon); DECLARE_PALETTE_INIT(phozon); - DECLARE_MACHINE_RESET(mappy); DECLARE_VIDEO_START(mappy); DECLARE_PALETTE_INIT(mappy); uint32_t screen_update_superpac(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/marineb.h b/src/mame/includes/marineb.h index 60324a8ec75..bc6c08d941a 100644 --- a/src/mame/includes/marineb.h +++ b/src/mame/includes/marineb.h @@ -24,7 +24,6 @@ public: uint8_t m_column_scroll; uint8_t m_flipscreen_x; uint8_t m_flipscreen_y; - uint8_t m_marineb_active_low_flipscreen; /* devices */ required_device<cpu_device> m_maincpu; @@ -33,20 +32,19 @@ public: required_device<palette_device> m_palette; uint8_t m_irq_mask; - DECLARE_WRITE8_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); DECLARE_WRITE8_MEMBER(marineb_videoram_w); DECLARE_WRITE8_MEMBER(marineb_colorram_w); DECLARE_WRITE8_MEMBER(marineb_column_scroll_w); DECLARE_WRITE8_MEMBER(marineb_palette_bank_0_w); DECLARE_WRITE8_MEMBER(marineb_palette_bank_1_w); - DECLARE_WRITE8_MEMBER(marineb_flipscreen_x_w); - DECLARE_WRITE8_MEMBER(marineb_flipscreen_y_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_x_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_y_w); TILE_GET_INFO_MEMBER(get_tile_info); virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; DECLARE_PALETTE_INIT(marineb); - DECLARE_MACHINE_RESET(springer); uint32_t screen_update_marineb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_changes(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_springer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/megazone.h b/src/mame/includes/megazone.h index 50e688340dd..4d868e682b7 100644 --- a/src/mame/includes/megazone.h +++ b/src/mame/includes/megazone.h @@ -50,9 +50,10 @@ public: uint8_t m_irq_mask; DECLARE_WRITE8_MEMBER(megazone_i8039_irq_w); DECLARE_WRITE8_MEMBER(i8039_irqen_and_status_w); - DECLARE_WRITE8_MEMBER(megazone_coin_counter_w); - DECLARE_WRITE8_MEMBER(irq_mask_w); - DECLARE_WRITE8_MEMBER(megazone_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_READ8_MEMBER(megazone_port_a_r); DECLARE_WRITE8_MEMBER(megazone_port_b_w); virtual void machine_start() override; diff --git a/src/mame/includes/mermaid.h b/src/mame/includes/mermaid.h index 2a43ff480b9..6c7e5451aed 100644 --- a/src/mame/includes/mermaid.h +++ b/src/mame/includes/mermaid.h @@ -20,11 +20,9 @@ public: m_fg_scrollram(*this, "fg_scrollram"), m_spriteram(*this, "spriteram"), m_colorram(*this, "colorram"), - m_ay8910_enable(*this, "ay8910_enable"), m_maincpu(*this, "maincpu"), m_adpcm(*this, "adpcm"), - m_ay1(*this, "ay1"), - m_ay2(*this, "ay2"), + m_ay8910(*this, "ay%u", 1), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette") @@ -38,7 +36,6 @@ public: required_shared_ptr<uint8_t> m_fg_scrollram; required_shared_ptr<uint8_t> m_spriteram; required_shared_ptr<uint8_t> m_colorram; - required_shared_ptr<uint8_t> m_ay8910_enable; /* video-related */ tilemap_t *m_bg_tilemap; @@ -61,12 +58,12 @@ public: uint8_t m_adpcm_trigger; uint8_t m_adpcm_rom_sel; uint8_t m_adpcm_play_reg; + bool m_ay8910_enable[2]; /* devices */ required_device<cpu_device> m_maincpu; optional_device<msm5205_device> m_adpcm; - required_device<ay8910_device> m_ay1; - required_device<ay8910_device> m_ay2; + required_device_array<ay8910_device, 2> m_ay8910; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; @@ -74,19 +71,21 @@ public: uint8_t m_nmi_mask; DECLARE_WRITE8_MEMBER(mermaid_ay8910_write_port_w); DECLARE_WRITE8_MEMBER(mermaid_ay8910_control_port_w); - DECLARE_WRITE8_MEMBER(nmi_mask_w); - DECLARE_WRITE8_MEMBER(rougien_sample_rom_lo_w); - DECLARE_WRITE8_MEMBER(rougien_sample_rom_hi_w); - DECLARE_WRITE8_MEMBER(rougien_sample_playback_w); + DECLARE_WRITE_LINE_MEMBER(ay1_enable_w); + DECLARE_WRITE_LINE_MEMBER(ay2_enable_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); + DECLARE_WRITE_LINE_MEMBER(rougien_sample_rom_lo_w); + DECLARE_WRITE_LINE_MEMBER(rougien_sample_rom_hi_w); + DECLARE_WRITE_LINE_MEMBER(rougien_sample_playback_w); DECLARE_WRITE8_MEMBER(mermaid_videoram2_w); DECLARE_WRITE8_MEMBER(mermaid_videoram_w); DECLARE_WRITE8_MEMBER(mermaid_colorram_w); - DECLARE_WRITE8_MEMBER(mermaid_flip_screen_x_w); - DECLARE_WRITE8_MEMBER(mermaid_flip_screen_y_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); DECLARE_WRITE8_MEMBER(mermaid_bg_scroll_w); DECLARE_WRITE8_MEMBER(mermaid_fg_scroll_w); - DECLARE_WRITE8_MEMBER(rougien_gfxbankswitch1_w); - DECLARE_WRITE8_MEMBER(rougien_gfxbankswitch2_w); + DECLARE_WRITE_LINE_MEMBER(rougien_gfxbankswitch1_w); + DECLARE_WRITE_LINE_MEMBER(rougien_gfxbankswitch2_w); DECLARE_READ8_MEMBER(mermaid_collision_r); TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info); diff --git a/src/mame/includes/mouser.h b/src/mame/includes/mouser.h index c9daccdea1c..d27d97b145c 100644 --- a/src/mame/includes/mouser.h +++ b/src/mame/includes/mouser.h @@ -36,12 +36,12 @@ public: required_device<palette_device> m_palette; optional_shared_ptr<uint8_t> m_decrypted_opcodes; - DECLARE_WRITE8_MEMBER(mouser_nmi_enable_w); + DECLARE_WRITE_LINE_MEMBER(nmi_enable_w); DECLARE_WRITE8_MEMBER(mouser_sound_interrupt_w); DECLARE_READ8_MEMBER(mouser_sound_byte_r); DECLARE_WRITE8_MEMBER(mouser_sound_nmi_clear_w); - DECLARE_WRITE8_MEMBER(mouser_flip_screen_x_w); - DECLARE_WRITE8_MEMBER(mouser_flip_screen_y_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); DECLARE_DRIVER_INIT(mouser); virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/nemesis.h b/src/mame/includes/nemesis.h index 5da3b2c15f7..c29251de962 100644 --- a/src/mame/includes/nemesis.h +++ b/src/mame/includes/nemesis.h @@ -85,20 +85,21 @@ public: required_device<screen_device> m_screen; required_device<palette_device> m_palette; - DECLARE_WRITE16_MEMBER(gx400_irq1_enable_word_w); - DECLARE_WRITE16_MEMBER(gx400_irq2_enable_word_w); - DECLARE_WRITE16_MEMBER(gx400_irq4_enable_word_w); - DECLARE_WRITE16_MEMBER(nemesis_irq_enable_word_w); - DECLARE_WRITE16_MEMBER(konamigt_irq_enable_word_w); - DECLARE_WRITE16_MEMBER(konamigt_irq2_enable_word_w); + DECLARE_WRITE_LINE_MEMBER(irq_enable_w); + DECLARE_WRITE_LINE_MEMBER(irq1_enable_w); + DECLARE_WRITE_LINE_MEMBER(irq2_enable_w); + DECLARE_WRITE_LINE_MEMBER(irq4_enable_w); + DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w); + DECLARE_WRITE_LINE_MEMBER(sound_irq_w); DECLARE_READ16_MEMBER(gx400_sharedram_word_r); DECLARE_WRITE16_MEMBER(gx400_sharedram_word_w); DECLARE_READ16_MEMBER(konamigt_input_word_r); DECLARE_WRITE16_MEMBER(selected_ip_word_w); DECLARE_READ16_MEMBER(selected_ip_word_r); DECLARE_READ8_MEMBER(wd_r); - DECLARE_WRITE16_MEMBER(nemesis_gfx_flipx_word_w); - DECLARE_WRITE16_MEMBER(nemesis_gfx_flipy_word_w); + DECLARE_WRITE_LINE_MEMBER(gfx_flipx_w); + DECLARE_WRITE_LINE_MEMBER(gfx_flipy_w); DECLARE_WRITE16_MEMBER(salamand_control_port_word_w); DECLARE_WRITE16_MEMBER(nemesis_palette_word_w); DECLARE_WRITE16_MEMBER(nemesis_videoram1_word_w); diff --git a/src/mame/includes/orbit.h b/src/mame/includes/orbit.h index 470a40ee9c0..e2f66a5cba3 100644 --- a/src/mame/includes/orbit.h +++ b/src/mame/includes/orbit.h @@ -10,6 +10,7 @@ #pragma once +#include "machine/74259.h" #include "sound/discrete.h" #include "screen.h" @@ -32,14 +33,16 @@ public: m_discrete(*this, "discrete"), m_bg_tilemap(nullptr), m_flip_screen(0), - m_misc_flags(0), + m_latch(*this, "latch"), m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette") { } - DECLARE_WRITE8_MEMBER(orbit_misc_w); + DECLARE_WRITE_LINE_MEMBER(coin_lockout_w); + DECLARE_WRITE_LINE_MEMBER(heat_rst_led_w); + DECLARE_WRITE_LINE_MEMBER(hyper_led_w); DECLARE_WRITE8_MEMBER(orbit_playfield_w); TILE_GET_INFO_MEMBER(get_tile_info); uint32_t screen_update_orbit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -69,10 +72,8 @@ protected: tilemap_t *m_bg_tilemap; int m_flip_screen; - /* misc */ - uint8_t m_misc_flags; - /* devices */ + required_device<f9334_device> m_latch; required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; diff --git a/src/mame/includes/pacman.h b/src/mame/includes/pacman.h index cbfe2da6948..7f296581efa 100644 --- a/src/mame/includes/pacman.h +++ b/src/mame/includes/pacman.h @@ -1,5 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Nicola Salmoria +#include "machine/watchdog.h" #include "sound/namco.h" /************************************************************************* @@ -15,6 +16,7 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_namco_sound(*this, "namco"), + m_watchdog(*this, "watchdog"), m_spriteram(*this, "spriteram"), m_spriteram2(*this, "spriteram2"), m_s2650_spriteram(*this, "s2650_spriteram"), @@ -29,6 +31,7 @@ public: required_device<cpu_device> m_maincpu; optional_device<namco_device> m_namco_sound; + required_device<watchdog_timer_device> m_watchdog; optional_shared_ptr<uint8_t> m_spriteram; optional_shared_ptr<uint8_t> m_spriteram2; optional_shared_ptr<uint8_t> m_s2650_spriteram; @@ -59,9 +62,10 @@ public: DECLARE_WRITE8_MEMBER(pacman_interrupt_vector_w); DECLARE_WRITE8_MEMBER(piranha_interrupt_vector_w); DECLARE_WRITE8_MEMBER(nmouse_interrupt_vector_w); - DECLARE_WRITE8_MEMBER(pacman_leds_w); - DECLARE_WRITE8_MEMBER(pacman_coin_counter_w); - DECLARE_WRITE8_MEMBER(pacman_coin_lockout_global_w); + DECLARE_WRITE_LINE_MEMBER(led1_w); + DECLARE_WRITE_LINE_MEMBER(led2_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin_lockout_global_w); DECLARE_WRITE8_MEMBER(alibaba_sound_w); DECLARE_READ8_MEMBER(alibaba_mystery_1_r); DECLARE_READ8_MEMBER(alibaba_mystery_2_r); @@ -94,24 +98,24 @@ public: DECLARE_WRITE8_MEMBER(mspacman_disable_decode_w); DECLARE_READ8_MEMBER(mspacman_enable_decode_r_0x3ff8); DECLARE_WRITE8_MEMBER(mspacman_enable_decode_w); - DECLARE_WRITE8_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); DECLARE_READ8_MEMBER(mspacii_protection_r); DECLARE_READ8_MEMBER(cannonbp_protection_r); DECLARE_WRITE8_MEMBER(pacman_videoram_w); DECLARE_WRITE8_MEMBER(pacman_colorram_w); - DECLARE_WRITE8_MEMBER(pacman_flipscreen_w); - DECLARE_WRITE8_MEMBER(pengo_palettebank_w); - DECLARE_WRITE8_MEMBER(pengo_colortablebank_w); - DECLARE_WRITE8_MEMBER(pengo_gfxbank_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(pengo_palettebank_w); + DECLARE_WRITE_LINE_MEMBER(pengo_colortablebank_w); + DECLARE_WRITE_LINE_MEMBER(pengo_gfxbank_w); DECLARE_WRITE8_MEMBER(s2650games_videoram_w); DECLARE_WRITE8_MEMBER(s2650games_colorram_w); DECLARE_WRITE8_MEMBER(s2650games_scroll_w); DECLARE_WRITE8_MEMBER(s2650games_tilesbank_w); DECLARE_WRITE8_MEMBER(jrpacman_videoram_w); - DECLARE_WRITE8_MEMBER(jrpacman_charbank_w); - DECLARE_WRITE8_MEMBER(jrpacman_spritebank_w); + DECLARE_WRITE_LINE_MEMBER(jrpacman_charbank_w); + DECLARE_WRITE_LINE_MEMBER(jrpacman_spritebank_w); DECLARE_WRITE8_MEMBER(jrpacman_scroll_w); - DECLARE_WRITE8_MEMBER(jrpacman_bgpriority_w); + DECLARE_WRITE_LINE_MEMBER(jrpacman_bgpriority_w); DECLARE_WRITE8_MEMBER(superabc_bank_w); DECLARE_DRIVER_INIT(maketrax); DECLARE_DRIVER_INIT(drivfrcp); diff --git a/src/mame/includes/pandoras.h b/src/mame/includes/pandoras.h index 40bdc82a29f..9d78bb0a55a 100644 --- a/src/mame/includes/pandoras.h +++ b/src/mame/includes/pandoras.h @@ -44,16 +44,19 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; - DECLARE_WRITE8_MEMBER(pandoras_int_control_w); + DECLARE_WRITE_LINE_MEMBER(cpua_irq_enable_w); + DECLARE_WRITE_LINE_MEMBER(cpub_irq_enable_w); DECLARE_WRITE8_MEMBER(pandoras_cpua_irqtrigger_w); DECLARE_WRITE8_MEMBER(pandoras_cpub_irqtrigger_w); DECLARE_WRITE8_MEMBER(pandoras_i8039_irqtrigger_w); DECLARE_WRITE8_MEMBER(i8039_irqen_and_status_w); DECLARE_WRITE8_MEMBER(pandoras_z80_irqtrigger_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE8_MEMBER(pandoras_vram_w); DECLARE_WRITE8_MEMBER(pandoras_cram_w); DECLARE_WRITE8_MEMBER(pandoras_scrolly_w); - DECLARE_WRITE8_MEMBER(pandoras_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_READ8_MEMBER(pandoras_portA_r); DECLARE_READ8_MEMBER(pandoras_portB_r); TILE_GET_INFO_MEMBER(get_tile_info0); diff --git a/src/mame/includes/playch10.h b/src/mame/includes/playch10.h index 1cf8a7d85e1..608b72baf8c 100644 --- a/src/mame/includes/playch10.h +++ b/src/mame/includes/playch10.h @@ -72,22 +72,20 @@ public: int m_IRQ_enable; int m_pc10_bios; tilemap_t *m_bg_tilemap; - DECLARE_WRITE8_MEMBER(up8w_w); + DECLARE_WRITE_LINE_MEMBER(up8w_w); DECLARE_READ8_MEMBER(ram_8w_r); DECLARE_WRITE8_MEMBER(ram_8w_w); DECLARE_WRITE8_MEMBER(sprite_dma_w); DECLARE_WRITE8_MEMBER(time_w); - DECLARE_WRITE8_MEMBER(pc10_SDCS_w); - DECLARE_WRITE8_MEMBER(pc10_CNTRLMASK_w); - DECLARE_WRITE8_MEMBER(pc10_DISPMASK_w); - DECLARE_WRITE8_MEMBER(pc10_SOUNDMASK_w); - DECLARE_WRITE8_MEMBER(pc10_NMIENABLE_w); - DECLARE_WRITE8_MEMBER(pc10_DOGDI_w); - DECLARE_WRITE8_MEMBER(pc10_GAMERES_w); - DECLARE_WRITE8_MEMBER(pc10_GAMESTOP_w); - DECLARE_WRITE8_MEMBER(pc10_PPURES_w); + DECLARE_WRITE_LINE_MEMBER(SDCS_w); + DECLARE_WRITE_LINE_MEMBER(CNTRLMASK_w); + DECLARE_WRITE_LINE_MEMBER(DISPMASK_w); + DECLARE_WRITE_LINE_MEMBER(SOUNDMASK_w); + DECLARE_WRITE_LINE_MEMBER(NMIENABLE_w); + DECLARE_WRITE_LINE_MEMBER(DOGDI_w); + DECLARE_WRITE_LINE_MEMBER(PPURES_w); DECLARE_READ8_MEMBER(pc10_detectclr_r); - DECLARE_WRITE8_MEMBER(pc10_CARTSEL_w); + DECLARE_WRITE8_MEMBER(CARTSEL_w); DECLARE_READ8_MEMBER(pc10_prot_r); DECLARE_WRITE8_MEMBER(pc10_prot_w); DECLARE_WRITE8_MEMBER(pc10_in0_w); diff --git a/src/mame/includes/polepos.h b/src/mame/includes/polepos.h index 8765038dd0c..e0a6e6ac23e 100644 --- a/src/mame/includes/polepos.h +++ b/src/mame/includes/polepos.h @@ -10,6 +10,7 @@ #pragma once +#include "machine/74259.h" #include "machine/gen_latch.h" #include "sound/namco.h" #include "sound/discrete.h" @@ -49,6 +50,7 @@ public: m_sound_z80(*this, "soundz80bl"), m_soundlatch(*this, "soundlatch"), m_namco_sound(*this, "namco"), + m_latch(*this, "latch"), m_sprite16_memory(*this, "sprite16_memory"), m_road16_memory(*this, "road16_memory"), m_alpha16_memory(*this, "alpha16_memory"), @@ -63,6 +65,7 @@ public: optional_device<cpu_device> m_sound_z80; optional_device<generic_latch_8_device> m_soundlatch; optional_device<namco_device> m_namco_sound; + required_device<ls259_device> m_latch; uint8_t m_steer_last; uint8_t m_steer_delta; int16_t m_steer_accum; @@ -85,12 +88,15 @@ public: tilemap_t *m_tx_tilemap; int m_chacl; uint16_t m_scroll; - uint8_t m_main_irq_mask; uint8_t m_sub_irq_mask; DECLARE_READ16_MEMBER(polepos2_ic25_r); DECLARE_READ8_MEMBER(polepos_adc_r); DECLARE_READ8_MEMBER(polepos_ready_r); - DECLARE_WRITE8_MEMBER(polepos_latch_w); + DECLARE_WRITE_LINE_MEMBER(iosel_w); + DECLARE_WRITE_LINE_MEMBER(clson_w); + DECLARE_WRITE_LINE_MEMBER(gasel_w); + DECLARE_WRITE_LINE_MEMBER(sb0_w); + DECLARE_WRITE_LINE_MEMBER(chacl_w); DECLARE_WRITE16_MEMBER(polepos_z8002_nvi_enable_w); DECLARE_READ16_MEMBER(polepos_sprite16_r); DECLARE_WRITE16_MEMBER(polepos_sprite16_w); diff --git a/src/mame/includes/pooyan.h b/src/mame/includes/pooyan.h index 763c88bacf7..a9143e8de4c 100644 --- a/src/mame/includes/pooyan.h +++ b/src/mame/includes/pooyan.h @@ -30,15 +30,16 @@ public: /* misc */ uint8_t m_irq_enable; - DECLARE_WRITE8_MEMBER(irq_enable_w); + DECLARE_WRITE_LINE_MEMBER(irq_enable_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(colorram_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); TILE_GET_INFO_MEMBER(get_bg_tile_info); virtual void machine_start() override; - virtual void machine_reset() override; virtual void video_start() override; DECLARE_PALETTE_INIT(pooyan); diff --git a/src/mame/includes/prof80.h b/src/mame/includes/prof80.h index faa9d7be323..253ef3311de 100644 --- a/src/mame/includes/prof80.h +++ b/src/mame/includes/prof80.h @@ -10,6 +10,7 @@ #include "cpu/z80/z80.h" #include "cpu/z80/z80daisy.h" #include "machine/prof80mmu.h" +#include "machine/74259.h" #include "machine/ram.h" #include "machine/rescap.h" #include "machine/upd1990a.h" @@ -21,6 +22,8 @@ #define UPD1990A_TAG "z43" #define RS232_A_TAG "rs232a" #define RS232_B_TAG "rs232b" +#define FLR_A_TAG "z44" +#define FLR_B_TAG "z45" // ------------------------------------------------------------------------ @@ -45,6 +48,8 @@ public: m_ecb(*this, ECBBUS_TAG), m_rs232a(*this, RS232_A_TAG), m_rs232b(*this, RS232_B_TAG), + m_flra(*this, FLR_A_TAG), + m_flrb(*this, FLR_B_TAG), m_rom(*this, Z80_TAG), m_j4(*this, "J4"), m_j5(*this, "J5") @@ -60,30 +65,33 @@ public: required_device<ecbbus_device> m_ecb; required_device<rs232_port_device> m_rs232a; required_device<rs232_port_device> m_rs232b; + required_device<ls259_device> m_flra; + required_device<ls259_device> m_flrb; required_memory_region m_rom; required_ioport m_j4; required_ioport m_j5; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; - virtual void machine_reset() override; enum { TIMER_ID_MOTOR }; - DECLARE_WRITE8_MEMBER( flr_w ); - DECLARE_READ8_MEMBER( status_r ); - DECLARE_READ8_MEMBER( status2_r ); + DECLARE_WRITE8_MEMBER(flr_w); + DECLARE_READ8_MEMBER(status_r); + DECLARE_READ8_MEMBER(status2_r); - void ls259_w(int fa, int sa, int fb, int sb); void motor(int mon); - // RTC state - int m_c0; - int m_c1; - int m_c2; + DECLARE_WRITE_LINE_MEMBER(ready_w); + DECLARE_WRITE_LINE_MEMBER(inuse_w); + DECLARE_WRITE_LINE_MEMBER(motor_w); + DECLARE_WRITE_LINE_MEMBER(select_w); + DECLARE_WRITE_LINE_MEMBER(resf_w); + DECLARE_WRITE_LINE_MEMBER(mini_w); + DECLARE_WRITE_LINE_MEMBER(mstop_w); // floppy state int m_motor; diff --git a/src/mame/includes/punchout.h b/src/mame/includes/punchout.h index 93f562ce3b1..363c91c08bc 100644 --- a/src/mame/includes/punchout.h +++ b/src/mame/includes/punchout.h @@ -62,15 +62,12 @@ public: DECLARE_WRITE8_MEMBER(spunchout_exp_w); DECLARE_WRITE8_MEMBER(spunchout_rp5h01_reset_w); DECLARE_WRITE8_MEMBER(spunchout_rp5h01_clock_w); - DECLARE_WRITE8_MEMBER(nmi_mask_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(punchout_bg_top_videoram_w); DECLARE_WRITE8_MEMBER(punchout_bg_bot_videoram_w); DECLARE_WRITE8_MEMBER(armwrest_fg_videoram_w); DECLARE_WRITE8_MEMBER(punchout_spr1_videoram_w); DECLARE_WRITE8_MEMBER(punchout_spr2_videoram_w); - DECLARE_WRITE8_MEMBER(punchout_speech_reset_w); - DECLARE_WRITE8_MEMBER(punchout_speech_st_w); - DECLARE_WRITE8_MEMBER(punchout_speech_vcu_w); TILE_GET_INFO_MEMBER(top_get_info); TILE_GET_INFO_MEMBER(armwrest_top_get_info); TILE_GET_INFO_MEMBER(bot_get_info); diff --git a/src/mame/includes/rallyx.h b/src/mame/includes/rallyx.h index a7787db6a88..762c4f12c21 100644 --- a/src/mame/includes/rallyx.h +++ b/src/mame/includes/rallyx.h @@ -55,20 +55,25 @@ public: uint8_t m_main_irq_mask; DECLARE_WRITE8_MEMBER(rallyx_interrupt_vector_w); - DECLARE_WRITE8_MEMBER(rallyx_bang_w); - DECLARE_WRITE8_MEMBER(rallyx_latch_w); - DECLARE_WRITE8_MEMBER(locomotn_latch_w); + DECLARE_WRITE_LINE_MEMBER(bang_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(sound_on_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_w); + DECLARE_WRITE_LINE_MEMBER(led_0_w); + DECLARE_WRITE_LINE_MEMBER(led_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE8_MEMBER(rallyx_videoram_w); DECLARE_WRITE8_MEMBER(rallyx_scrollx_w); DECLARE_WRITE8_MEMBER(rallyx_scrolly_w); - DECLARE_WRITE8_MEMBER(tactcian_starson_w); + DECLARE_WRITE_LINE_MEMBER(stars_enable_w); TILEMAP_MAPPER_MEMBER(fg_tilemap_scan); TILE_GET_INFO_MEMBER(rallyx_bg_get_tile_info); TILE_GET_INFO_MEMBER(rallyx_fg_get_tile_info); TILE_GET_INFO_MEMBER(locomotn_bg_get_tile_info); TILE_GET_INFO_MEMBER(locomotn_fg_get_tile_info); DECLARE_MACHINE_START(rallyx); - DECLARE_MACHINE_RESET(rallyx); DECLARE_VIDEO_START(rallyx); DECLARE_PALETTE_INIT(rallyx); DECLARE_VIDEO_START(jungler); diff --git a/src/mame/includes/retofinv.h b/src/mame/includes/retofinv.h index 96ba21cf1c6..ca5928fbf44 100644 --- a/src/mame/includes/retofinv.h +++ b/src/mame/includes/retofinv.h @@ -24,16 +24,13 @@ public: { } - DECLARE_WRITE8_MEMBER(cpu1_reset_w); - DECLARE_WRITE8_MEMBER(cpu2_reset_w); - DECLARE_WRITE8_MEMBER(mcu_reset_w); DECLARE_WRITE8_MEMBER(cpu2_m6000_w); DECLARE_READ8_MEMBER(cpu0_mf800_r); DECLARE_WRITE8_MEMBER(soundcommand_w); - DECLARE_WRITE8_MEMBER(irq0_ack_w); - DECLARE_WRITE8_MEMBER(irq1_ack_w); + DECLARE_WRITE_LINE_MEMBER(irq0_ack_w); + DECLARE_WRITE_LINE_MEMBER(irq1_ack_w); DECLARE_WRITE8_MEMBER(coincounter_w); - DECLARE_WRITE8_MEMBER(coinlockout_w); + DECLARE_WRITE_LINE_MEMBER(coinlockout_w); DECLARE_READ8_MEMBER(mcu_status_r); DECLARE_WRITE8_MEMBER(bg_videoram_w); DECLARE_WRITE8_MEMBER(fg_videoram_w); diff --git a/src/mame/includes/rocnrope.h b/src/mame/includes/rocnrope.h index 10cd5b6bb50..f02426b00a3 100644 --- a/src/mame/includes/rocnrope.h +++ b/src/mame/includes/rocnrope.h @@ -29,10 +29,12 @@ public: uint8_t m_irq_mask; DECLARE_WRITE8_MEMBER(rocnrope_interrupt_vector_w); - DECLARE_WRITE8_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE8_MEMBER(rocnrope_videoram_w); DECLARE_WRITE8_MEMBER(rocnrope_colorram_w); - DECLARE_WRITE8_MEMBER(rocnrope_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_w); DECLARE_DRIVER_INIT(rocnrope); TILE_GET_INFO_MEMBER(get_bg_tile_info); diff --git a/src/mame/includes/rollrace.h b/src/mame/includes/rollrace.h index f066376edd5..88c6ebdbe05 100644 --- a/src/mame/includes/rollrace.h +++ b/src/mame/includes/rollrace.h @@ -20,7 +20,6 @@ public: required_shared_ptr<uint8_t> m_spriteram; tilemap_t *m_fg_tilemap; - int m_charbank[2]; int m_bkgpage; int m_bkgflip; int m_chrbank; @@ -35,16 +34,18 @@ public: DECLARE_READ8_MEMBER(fake_d800_r); DECLARE_WRITE8_MEMBER(fake_d800_w); - DECLARE_WRITE8_MEMBER(nmi_mask_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(sound_nmi_mask_w); - DECLARE_WRITE8_MEMBER(coin_w); - DECLARE_WRITE8_MEMBER(charbank_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); + DECLARE_WRITE_LINE_MEMBER(charbank_0_w); + DECLARE_WRITE_LINE_MEMBER(charbank_1_w); DECLARE_WRITE8_MEMBER(bkgpen_w); - DECLARE_WRITE8_MEMBER(spritebank_w); + DECLARE_WRITE_LINE_MEMBER(spritebank_w); DECLARE_WRITE8_MEMBER(backgroundpage_w); DECLARE_WRITE8_MEMBER(backgroundcolor_w); DECLARE_WRITE8_MEMBER(flipy_w); - DECLARE_WRITE8_MEMBER(flipx_w); + DECLARE_WRITE_LINE_MEMBER(flipx_w); DECLARE_WRITE8_MEMBER(vram_w); DECLARE_WRITE8_MEMBER(cram_w); TILE_GET_INFO_MEMBER(get_fg_tile_info); diff --git a/src/mame/includes/sauro.h b/src/mame/includes/sauro.h index 7c4457d8561..54dc91214ec 100644 --- a/src/mame/includes/sauro.h +++ b/src/mame/includes/sauro.h @@ -4,7 +4,6 @@ #include "machine/gen_latch.h" #include "sound/sp0256.h" - class sauro_state : public driver_device { public: @@ -37,10 +36,16 @@ public: tilemap_t *m_fg_tilemap; uint8_t m_palette_bank; + bool m_irq_enable; + + virtual void machine_start() override; + // common - DECLARE_WRITE8_MEMBER(coin1_w); - DECLARE_WRITE8_MEMBER(coin2_w); - DECLARE_WRITE8_MEMBER(flip_screen_w); + DECLARE_WRITE_LINE_MEMBER(vblank_irq); + DECLARE_WRITE_LINE_MEMBER(irq_reset_w); + DECLARE_WRITE_LINE_MEMBER(coin1_w); + DECLARE_WRITE_LINE_MEMBER(coin2_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_w); DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(colorram_w); DECLARE_WRITE8_MEMBER(scroll_bg_w); @@ -48,7 +53,8 @@ public: // sauro specific DECLARE_WRITE8_MEMBER(sauro_sound_command_w); DECLARE_READ8_MEMBER(sauro_sound_command_r); - DECLARE_WRITE8_MEMBER(sauro_palette_bank_w); + DECLARE_WRITE_LINE_MEMBER(sauro_palette_bank0_w); + DECLARE_WRITE_LINE_MEMBER(sauro_palette_bank1_w); DECLARE_WRITE8_MEMBER(sauro_scroll_fg_w); DECLARE_WRITE8_MEMBER(sauro_videoram2_w); DECLARE_WRITE8_MEMBER(sauro_colorram2_w); diff --git a/src/mame/includes/shangkid.h b/src/mame/includes/shangkid.h index 795f9db3d7c..6faa4cd51ec 100644 --- a/src/mame/includes/shangkid.h +++ b/src/mame/includes/shangkid.h @@ -30,10 +30,8 @@ public: tilemap_t *m_background; // shangkid and chinhero - DECLARE_WRITE8_MEMBER(maincpu_bank_w); - DECLARE_WRITE8_MEMBER(bbx_enable_w); - DECLARE_WRITE8_MEMBER(cpu_reset_w); - DECLARE_WRITE8_MEMBER(sound_enable_w); + DECLARE_WRITE_LINE_MEMBER(cpu_reset_w); + DECLARE_WRITE_LINE_MEMBER(sound_enable_w); DECLARE_READ8_MEMBER(soundlatch_r); DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(ay8910_portb_w); diff --git a/src/mame/includes/skydiver.h b/src/mame/includes/skydiver.h index 2c7daceedc6..e441fd6f64e 100644 --- a/src/mame/includes/skydiver.h +++ b/src/mame/includes/skydiver.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/discrete.h" @@ -29,6 +30,7 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_watchdog(*this, "watchdog"), + m_latch3(*this, "latch3"), m_discrete(*this, "discrete"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), @@ -36,6 +38,7 @@ public: required_device<cpu_device> m_maincpu; required_device<watchdog_timer_device> m_watchdog; + required_device<f9334_device> m_latch3; required_device<discrete_device> m_discrete; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; @@ -46,21 +49,23 @@ public: tilemap_t *m_bg_tilemap; int m_width; - DECLARE_WRITE8_MEMBER(nmion_w); + DECLARE_WRITE_LINE_MEMBER(nmion_w); DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_READ8_MEMBER(wram_r); DECLARE_WRITE8_MEMBER(wram_w); - DECLARE_WRITE8_MEMBER(width_w); - DECLARE_WRITE8_MEMBER(coin_lockout_w); - DECLARE_WRITE8_MEMBER(start_lamp_1_w); - DECLARE_WRITE8_MEMBER(start_lamp_2_w); - DECLARE_WRITE8_MEMBER(lamp_s_w); - DECLARE_WRITE8_MEMBER(lamp_k_w); - DECLARE_WRITE8_MEMBER(lamp_y_w); - DECLARE_WRITE8_MEMBER(lamp_d_w); - DECLARE_WRITE8_MEMBER(_2000_201F_w); - DECLARE_WRITE8_MEMBER(sound_enable_w); - DECLARE_WRITE8_MEMBER(whistle_w); + DECLARE_WRITE_LINE_MEMBER(width_w); + DECLARE_WRITE_LINE_MEMBER(coin_lockout_w); + DECLARE_WRITE_LINE_MEMBER(start_lamp_1_w); + DECLARE_WRITE_LINE_MEMBER(start_lamp_2_w); + DECLARE_WRITE_LINE_MEMBER(lamp_s_w); + DECLARE_WRITE_LINE_MEMBER(lamp_k_w); + DECLARE_WRITE_LINE_MEMBER(lamp_y_w); + DECLARE_WRITE_LINE_MEMBER(lamp_d_w); + DECLARE_WRITE_LINE_MEMBER(lamp_i_w); + DECLARE_WRITE_LINE_MEMBER(lamp_v_w); + DECLARE_WRITE_LINE_MEMBER(lamp_e_w); + DECLARE_WRITE_LINE_MEMBER(lamp_r_w); + DECLARE_WRITE8_MEMBER(latch3_watchdog_w); TILE_GET_INFO_MEMBER(get_tile_info); diff --git a/src/mame/includes/slapfght.h b/src/mame/includes/slapfght.h index 9e033a23b76..043a9ea3f4b 100644 --- a/src/mame/includes/slapfght.h +++ b/src/mame/includes/slapfght.h @@ -72,9 +72,8 @@ public: uint8_t m_tigerhb_cmd; DECLARE_READ8_MEMBER(tigerh_mcu_status_r); - DECLARE_WRITE8_MEMBER(sound_reset_w); - DECLARE_WRITE8_MEMBER(irq_enable_w); - DECLARE_WRITE8_MEMBER(prg_bank_w); + DECLARE_WRITE_LINE_MEMBER(sound_reset_w); + DECLARE_WRITE_LINE_MEMBER(irq_enable_w); DECLARE_READ8_MEMBER(vblank_r); DECLARE_WRITE8_MEMBER(sound_nmi_enable_w); DECLARE_WRITE8_MEMBER(videoram_w); @@ -84,8 +83,8 @@ public: DECLARE_WRITE8_MEMBER(scrollx_lo_w); DECLARE_WRITE8_MEMBER(scrollx_hi_w); DECLARE_WRITE8_MEMBER(scrolly_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); - DECLARE_WRITE8_MEMBER(palette_bank_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(palette_bank_w); DECLARE_WRITE8_MEMBER(scroll_from_mcu_w); diff --git a/src/mame/includes/sonson.h b/src/mame/includes/sonson.h index e63d705938d..7bb26342498 100644 --- a/src/mame/includes/sonson.h +++ b/src/mame/includes/sonson.h @@ -27,21 +27,16 @@ public: /* video-related */ tilemap_t *m_bg_tilemap; - /* misc */ - int m_last_irq; - /* devices */ required_device<cpu_device> m_audiocpu; - DECLARE_WRITE8_MEMBER(sonson_sh_irqtrigger_w); - DECLARE_WRITE8_MEMBER(sonson_coin1_counter_w); - DECLARE_WRITE8_MEMBER(sonson_coin2_counter_w); + DECLARE_WRITE_LINE_MEMBER(sh_irqtrigger_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); DECLARE_WRITE8_MEMBER(sonson_videoram_w); DECLARE_WRITE8_MEMBER(sonson_colorram_w); DECLARE_WRITE8_MEMBER(sonson_scrollx_w); - DECLARE_WRITE8_MEMBER(sonson_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); TILE_GET_INFO_MEMBER(get_bg_tile_info); - virtual void machine_start() override; - virtual void machine_reset() override; virtual void video_start() override; DECLARE_PALETTE_INIT(sonson); uint32_t screen_update_sonson(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/splash.h b/src/mame/includes/splash.h index da40cfae925..c10ac031084 100644 --- a/src/mame/includes/splash.h +++ b/src/mame/includes/splash.h @@ -1,6 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Manuel Abadia, David Haywood +#include "machine/74259.h" #include "machine/eepromser.h" #include "machine/gen_latch.h" #include "sound/msm5205.h" @@ -16,6 +17,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_soundlatch(*this, "soundlatch"), + m_outlatch(*this, "outlatch"), m_pixelram(*this, "pixelram"), m_videoram(*this, "videoram"), m_vregs(*this, "vregs"), @@ -30,6 +32,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_device<generic_latch_8_device> m_soundlatch; + optional_device<ls259_device> m_outlatch; required_shared_ptr<uint16_t> m_pixelram; required_shared_ptr<uint16_t> m_videoram; @@ -54,7 +57,11 @@ public: // common DECLARE_WRITE16_MEMBER(vram_w); - DECLARE_WRITE16_MEMBER(coin_w); + DECLARE_WRITE8_MEMBER(coin_w); + DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); // splash specific DECLARE_WRITE_LINE_MEMBER(splash_msm5205_int); diff --git a/src/mame/includes/sprint2.h b/src/mame/includes/sprint2.h index 79a61f3b824..6ea352a1769 100644 --- a/src/mame/includes/sprint2.h +++ b/src/mame/includes/sprint2.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/discrete.h" #include "screen.h" @@ -33,12 +34,12 @@ public: m_video_ram(*this, "video_ram"), m_maincpu(*this, "maincpu"), m_watchdog(*this, "watchdog"), + m_outlatch(*this, "outlatch"), m_discrete(*this, "discrete"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette") { } - int m_attract; int m_steering[2]; int m_gear[2]; int m_game; @@ -57,19 +58,17 @@ public: DECLARE_WRITE8_MEMBER(sprint2_steering_reset1_w); DECLARE_WRITE8_MEMBER(sprint2_steering_reset2_w); DECLARE_WRITE8_MEMBER(sprint2_wram_w); - DECLARE_WRITE8_MEMBER(sprint2_lamp1_w); - DECLARE_WRITE8_MEMBER(sprint2_lamp2_w); - DECLARE_WRITE8_MEMBER(dominos4_lamp3_w); - DECLARE_WRITE8_MEMBER(dominos4_lamp4_w); + DECLARE_WRITE8_MEMBER(output_latch_w); + DECLARE_WRITE_LINE_MEMBER(lamp1_w); + DECLARE_WRITE_LINE_MEMBER(lamp2_w); + DECLARE_WRITE_LINE_MEMBER(lamp3_w); + DECLARE_WRITE_LINE_MEMBER(lamp4_w); DECLARE_READ8_MEMBER(sprint2_collision1_r); DECLARE_READ8_MEMBER(sprint2_collision2_r); DECLARE_WRITE8_MEMBER(sprint2_collision_reset1_w); DECLARE_WRITE8_MEMBER(sprint2_collision_reset2_w); DECLARE_WRITE8_MEMBER(sprint2_video_ram_w); - DECLARE_WRITE8_MEMBER(sprint2_attract_w); DECLARE_WRITE8_MEMBER(sprint2_noise_reset_w); - DECLARE_WRITE8_MEMBER(sprint2_skid1_w); - DECLARE_WRITE8_MEMBER(sprint2_skid2_w); DECLARE_DRIVER_INIT(sprint1); DECLARE_DRIVER_INIT(sprint2); DECLARE_DRIVER_INIT(dominos); @@ -87,6 +86,7 @@ public: int service_mode(); required_device<cpu_device> m_maincpu; required_device<watchdog_timer_device> m_watchdog; + required_device<f9334_device> m_outlatch; required_device<discrete_device> m_discrete; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; diff --git a/src/mame/includes/sprint4.h b/src/mame/includes/sprint4.h index 3144a335489..e410f0a508b 100644 --- a/src/mame/includes/sprint4.h +++ b/src/mame/includes/sprint4.h @@ -50,7 +50,10 @@ public: DECLARE_WRITE8_MEMBER(wram_w); DECLARE_WRITE8_MEMBER(collision_reset_w); DECLARE_WRITE8_MEMBER(da_latch_w); - DECLARE_WRITE8_MEMBER(lamp_w); + DECLARE_WRITE_LINE_MEMBER(lamp0_w); + DECLARE_WRITE_LINE_MEMBER(lamp1_w); + DECLARE_WRITE_LINE_MEMBER(lamp2_w); + DECLARE_WRITE_LINE_MEMBER(lamp3_w); DECLARE_WRITE8_MEMBER(video_ram_w); DECLARE_CUSTOM_INPUT_MEMBER(get_lever); DECLARE_CUSTOM_INPUT_MEMBER(get_wheel); diff --git a/src/mame/includes/sprint8.h b/src/mame/includes/sprint8.h index 3a279090c1a..0d7404f56a6 100644 --- a/src/mame/includes/sprint8.h +++ b/src/mame/includes/sprint8.h @@ -1,5 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Stefan Jokisch +#include "machine/74259.h" #include "sound/discrete.h" #include "screen.h" @@ -16,8 +17,7 @@ public: m_video_ram(*this, "video_ram"), m_pos_h_ram(*this, "pos_h_ram"), m_pos_v_ram(*this, "pos_v_ram"), - m_pos_d_ram(*this, "pos_d_ram"), - m_team(*this, "team") { } + m_pos_d_ram(*this, "pos_d_ram") { } required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; @@ -29,13 +29,14 @@ public: required_shared_ptr<uint8_t> m_pos_h_ram; required_shared_ptr<uint8_t> m_pos_v_ram; required_shared_ptr<uint8_t> m_pos_d_ram; - required_shared_ptr<uint8_t> m_team; int m_steer_dir[8]; int m_steer_flag[8]; int m_collision_reset; int m_collision_index; uint8_t m_dial[8]; + int m_team; + tilemap_t* m_tilemap1; tilemap_t* m_tilemap2; bitmap_ind16 m_helper1; @@ -45,12 +46,9 @@ public: DECLARE_READ8_MEMBER(collision_r); DECLARE_READ8_MEMBER(input_r); DECLARE_WRITE8_MEMBER(lockout_w); - DECLARE_WRITE8_MEMBER(int_reset_w); + DECLARE_WRITE_LINE_MEMBER(int_reset_w); + DECLARE_WRITE_LINE_MEMBER(team_w); DECLARE_WRITE8_MEMBER(video_ram_w); - DECLARE_WRITE8_MEMBER(crash_w); - DECLARE_WRITE8_MEMBER(screech_w); - DECLARE_WRITE8_MEMBER(attract_w); - DECLARE_WRITE8_MEMBER(motor_w); virtual void machine_start() override; virtual void machine_reset() override; @@ -70,4 +68,5 @@ public: }; /*----------- defined in audio/sprint8.c -----------*/ +MACHINE_CONFIG_EXTERN( sprint8_audio ); DISCRETE_SOUND_EXTERN( sprint8 ); diff --git a/src/mame/includes/starshp1.h b/src/mame/includes/starshp1.h index a376c2ab8ec..807e0d36776 100644 --- a/src/mame/includes/starshp1.h +++ b/src/mame/includes/starshp1.h @@ -82,14 +82,21 @@ public: tilemap_t *m_bg_tilemap; DECLARE_WRITE8_MEMBER(starshp1_collision_reset_w); DECLARE_WRITE8_MEMBER(starshp1_analog_in_w); - DECLARE_WRITE8_MEMBER(starshp1_misc_w); + DECLARE_WRITE_LINE_MEMBER(ship_explode_w); + DECLARE_WRITE_LINE_MEMBER(circle_mod_w); + DECLARE_WRITE_LINE_MEMBER(circle_kill_w); + DECLARE_WRITE_LINE_MEMBER(starfield_kill_w); + DECLARE_WRITE_LINE_MEMBER(inverse_w); + DECLARE_WRITE_LINE_MEMBER(mux_w); + DECLARE_WRITE_LINE_MEMBER(led_w); DECLARE_READ8_MEMBER(starshp1_rng_r); DECLARE_WRITE8_MEMBER(starshp1_ssadd_w); DECLARE_WRITE8_MEMBER(starshp1_sspic_w); DECLARE_WRITE8_MEMBER(starshp1_playfield_w); DECLARE_CUSTOM_INPUT_MEMBER(starshp1_analog_r); DECLARE_CUSTOM_INPUT_MEMBER(collision_latch_r); - DECLARE_WRITE8_MEMBER(starshp1_audio_w); + DECLARE_WRITE_LINE_MEMBER(attract_w); + DECLARE_WRITE_LINE_MEMBER(phasor_w); DECLARE_WRITE8_MEMBER(starshp1_analog_out_w); TILE_GET_INFO_MEMBER(get_tile_info); virtual void video_start() override; diff --git a/src/mame/includes/starwars.h b/src/mame/includes/starwars.h index 841a37f2176..2f4989243dd 100644 --- a/src/mame/includes/starwars.h +++ b/src/mame/includes/starwars.h @@ -36,7 +36,6 @@ public: uint8_t *m_slapstic_source; uint8_t *m_slapstic_base; uint8_t m_slapstic_current_bank; - uint8_t m_is_esb; uint8_t m_control_num; int m_MPA; int m_BIC; @@ -57,10 +56,16 @@ public: DECLARE_READ8_MEMBER(esb_slapstic_r); DECLARE_WRITE8_MEMBER(esb_slapstic_w); DECLARE_WRITE8_MEMBER(starwars_nstore_w); - DECLARE_WRITE8_MEMBER(starwars_out_w); + DECLARE_WRITE_LINE_MEMBER(recall_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); + DECLARE_WRITE_LINE_MEMBER(led1_w); + DECLARE_WRITE_LINE_MEMBER(led2_w); + DECLARE_WRITE_LINE_MEMBER(led3_w); DECLARE_READ8_MEMBER(starwars_adc_r); DECLARE_WRITE8_MEMBER(starwars_adc_select_w); DECLARE_READ8_MEMBER(starwars_prng_r); + DECLARE_WRITE_LINE_MEMBER(prng_reset_w); DECLARE_READ8_MEMBER(starwars_div_reh_r); DECLARE_READ8_MEMBER(starwars_div_rel_r); DECLARE_WRITE8_MEMBER(starwars_math_w); diff --git a/src/mame/includes/subs.h b/src/mame/includes/subs.h index 2594e515095..334d7ecee85 100644 --- a/src/mame/includes/subs.h +++ b/src/mame/includes/subs.h @@ -49,14 +49,10 @@ public: DECLARE_READ8_MEMBER(control_r); DECLARE_READ8_MEMBER(coin_r); DECLARE_READ8_MEMBER(options_r); - DECLARE_WRITE8_MEMBER(lamp1_w); - DECLARE_WRITE8_MEMBER(lamp2_w); - DECLARE_WRITE8_MEMBER(invert1_w); - DECLARE_WRITE8_MEMBER(invert2_w); - DECLARE_WRITE8_MEMBER(sonar1_w); - DECLARE_WRITE8_MEMBER(sonar2_w); - DECLARE_WRITE8_MEMBER(crash_w); - DECLARE_WRITE8_MEMBER(explode_w); + DECLARE_WRITE_LINE_MEMBER(lamp1_w); + DECLARE_WRITE_LINE_MEMBER(lamp2_w); + DECLARE_WRITE_LINE_MEMBER(invert1_w); + DECLARE_WRITE_LINE_MEMBER(invert2_w); DECLARE_WRITE8_MEMBER(noise_reset_w); virtual void machine_start() override; diff --git a/src/mame/includes/tankbatt.h b/src/mame/includes/tankbatt.h index 083cd7813a9..424e4f6edad 100644 --- a/src/mame/includes/tankbatt.h +++ b/src/mame/includes/tankbatt.h @@ -25,18 +25,19 @@ public: int m_sound_enable; tilemap_t *m_bg_tilemap; - DECLARE_WRITE8_MEMBER(led_w); + DECLARE_WRITE_LINE_MEMBER(led0_w); + DECLARE_WRITE_LINE_MEMBER(led1_w); DECLARE_READ8_MEMBER(in0_r); DECLARE_READ8_MEMBER(in1_r); DECLARE_READ8_MEMBER(dsw_r); - DECLARE_WRITE8_MEMBER(interrupt_enable_w); - DECLARE_WRITE8_MEMBER(demo_interrupt_enable_w); - DECLARE_WRITE8_MEMBER(sh_expl_w); - DECLARE_WRITE8_MEMBER(sh_engine_w); - DECLARE_WRITE8_MEMBER(sh_fire_w); + DECLARE_WRITE_LINE_MEMBER(interrupt_enable_w); + DECLARE_WRITE_LINE_MEMBER(demo_interrupt_enable_w); + DECLARE_WRITE_LINE_MEMBER(sh_expl_w); + DECLARE_WRITE_LINE_MEMBER(sh_engine_w); + DECLARE_WRITE_LINE_MEMBER(sh_fire_w); DECLARE_WRITE8_MEMBER(irq_ack_w); - DECLARE_WRITE8_MEMBER(coincounter_w); - DECLARE_WRITE8_MEMBER(coinlockout_w); + DECLARE_WRITE_LINE_MEMBER(coincounter_w); + DECLARE_WRITE_LINE_MEMBER(coinlockout_w); DECLARE_WRITE8_MEMBER(videoram_w); diff --git a/src/mame/includes/targeth.h b/src/mame/includes/targeth.h index bf84a9e6755..7c8b744d818 100644 --- a/src/mame/includes/targeth.h +++ b/src/mame/includes/targeth.h @@ -5,6 +5,8 @@ #pragma once +#include "machine/74259.h" + class targeth_state : public driver_device { public: @@ -13,6 +15,7 @@ public: m_maincpu(*this,"maincpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_outlatch(*this, "outlatch"), m_videoram(*this, "videoram"), m_vregs(*this, "vregs"), m_spriteram(*this, "spriteram"), @@ -20,9 +23,12 @@ public: { } DECLARE_WRITE16_MEMBER(OKIM6295_bankswitch_w); - DECLARE_WRITE16_MEMBER(coin_counter_w); + DECLARE_WRITE16_MEMBER(output_latch_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); DECLARE_WRITE8_MEMBER(shareram_w); DECLARE_READ8_MEMBER(shareram_r); + DECLARE_WRITE16_MEMBER(vram_w); TILE_GET_INFO_MEMBER(get_tile_info_screen0); @@ -42,6 +48,7 @@ private: required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<ls259_device> m_outlatch; required_shared_ptr<uint16_t> m_videoram; required_shared_ptr<uint16_t> m_vregs; diff --git a/src/mame/includes/thepit.h b/src/mame/includes/thepit.h index 5ed5d9242f9..b96c44ed8a8 100644 --- a/src/mame/includes/thepit.h +++ b/src/mame/includes/thepit.h @@ -34,16 +34,17 @@ public: int m_question_rom; int m_remap_address[16]; - DECLARE_WRITE8_MEMBER(sound_enable_w); - DECLARE_WRITE8_MEMBER(nmi_mask_w); + DECLARE_WRITE_LINE_MEMBER(coin_lockout_w); + DECLARE_WRITE_LINE_MEMBER(sound_enable_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(colorram_w); - DECLARE_WRITE8_MEMBER(flip_screen_x_w); - DECLARE_WRITE8_MEMBER(flip_screen_y_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); DECLARE_READ8_MEMBER(input_port_0_r); DECLARE_READ8_MEMBER(intrepid_colorram_mirror_r); - DECLARE_WRITE8_MEMBER(intrepid_graphics_bank_w); + DECLARE_WRITE_LINE_MEMBER(intrepid_graphics_bank_w); DECLARE_READ8_MEMBER(rtriv_question_r); diff --git a/src/mame/includes/thoop2.h b/src/mame/includes/thoop2.h index 9f74d370e6d..390caf7a7f9 100644 --- a/src/mame/includes/thoop2.h +++ b/src/mame/includes/thoop2.h @@ -5,6 +5,8 @@ #pragma once +#include "machine/74259.h" + class thoop2_state : public driver_device { public: @@ -14,14 +16,20 @@ public: m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_outlatch(*this, "outlatch"), m_videoram(*this, "videoram"), m_vregs(*this, "vregs"), m_spriteram(*this, "spriteram"), m_shareram(*this, "shareram") { } - DECLARE_WRITE16_MEMBER(OKIM6295_bankswitch_w); - DECLARE_WRITE16_MEMBER(coin_w); + DECLARE_WRITE8_MEMBER(OKIM6295_bankswitch_w); + DECLARE_WRITE8_MEMBER(coin_w); + DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); + DECLARE_WRITE16_MEMBER(vram_w); DECLARE_WRITE8_MEMBER(shareram_w); DECLARE_READ8_MEMBER(shareram_r); @@ -45,6 +53,7 @@ private: required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<ls259_device> m_outlatch; required_shared_ptr<uint16_t> m_videoram; required_shared_ptr<uint16_t> m_vregs; diff --git a/src/mame/includes/timelimt.h b/src/mame/includes/timelimt.h index 69a07aecae2..634e2ea7ea4 100644 --- a/src/mame/includes/timelimt.h +++ b/src/mame/includes/timelimt.h @@ -29,8 +29,9 @@ public: tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; - DECLARE_WRITE8_MEMBER(nmi_enable_w); - DECLARE_WRITE8_MEMBER(sound_reset_w); + DECLARE_WRITE_LINE_MEMBER(nmi_enable_w); + DECLARE_WRITE_LINE_MEMBER(coin_lockout_w); + DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(bg_videoram_w); DECLARE_WRITE8_MEMBER(scroll_x_lsb_w); @@ -41,7 +42,6 @@ public: TILE_GET_INFO_MEMBER(get_fg_tile_info); virtual void machine_start() override; - virtual void machine_reset() override; virtual void video_start() override; DECLARE_PALETTE_INIT(timelimt); diff --git a/src/mame/includes/timeplt.h b/src/mame/includes/timeplt.h index b15ea3610ce..358831bed6d 100644 --- a/src/mame/includes/timeplt.h +++ b/src/mame/includes/timeplt.h @@ -6,6 +6,7 @@ ***************************************************************************/ +#include "machine/74259.h" #include "sound/tc8830f.h" #include "screen.h" @@ -19,6 +20,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_mainlatch(*this, "mainlatch"), m_colorram(*this, "colorram"), m_videoram(*this, "videoram"), m_spriteram(*this, "spriteram"), @@ -30,6 +32,7 @@ public: required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; + required_device<ls259_device> m_mainlatch; /* memory pointers */ required_shared_ptr<uint8_t> m_colorram; @@ -45,15 +48,17 @@ public: bool m_video_enable; /* common */ - DECLARE_WRITE8_MEMBER(coincounter_w); + DECLARE_WRITE8_MEMBER(mainlatch_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(colorram_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_READ8_MEMBER(scanline_r); /* all but psurge */ - DECLARE_WRITE8_MEMBER(nmi_enable_w); - DECLARE_WRITE8_MEMBER(video_enable_w); + DECLARE_WRITE_LINE_MEMBER(nmi_enable_w); + DECLARE_WRITE_LINE_MEMBER(video_enable_w); /* psurge */ DECLARE_READ8_MEMBER(psurge_protection_r); diff --git a/src/mame/includes/toaplan1.h b/src/mame/includes/toaplan1.h index b45ed1633c4..c9455017136 100644 --- a/src/mame/includes/toaplan1.h +++ b/src/mame/includes/toaplan1.h @@ -30,7 +30,6 @@ public: optional_shared_ptr<uint8_t> m_sharedram; - int m_coin_count; /* coin count increments on startup ? , so don't count it */ int m_intenable; /* Demon world */ @@ -175,7 +174,10 @@ public: { } - DECLARE_WRITE8_MEMBER(rallybik_coin_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); + DECLARE_WRITE_LINE_MEMBER(coin_lockout_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_lockout_2_w); DECLARE_READ16_MEMBER(rallybik_tileram16_r); DECLARE_VIDEO_START(rallybik); uint32_t screen_update_rallybik(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/tp84.h b/src/mame/includes/tp84.h index 4ccd006730b..f902bbf680c 100644 --- a/src/mame/includes/tp84.h +++ b/src/mame/includes/tp84.h @@ -7,10 +7,9 @@ class tp84_state : public driver_device public: tp84_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), + m_maincpu(*this, "cpu1"), m_audiocpu(*this, "audiocpu"), m_palette_bank(*this, "palette_bank"), - m_flipscreen_x(*this, "flipscreen_x"), - m_flipscreen_y(*this, "flipscreen_y"), m_scroll_x(*this, "scroll_x"), m_scroll_y(*this, "scroll_y"), m_bg_videoram(*this, "bg_videoram"), @@ -22,10 +21,9 @@ public: m_screen(*this, "screen"), m_palette(*this, "palette") { } + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_audiocpu; required_shared_ptr<uint8_t> m_palette_bank; - required_shared_ptr<uint8_t> m_flipscreen_x; - required_shared_ptr<uint8_t> m_flipscreen_y; required_shared_ptr<uint8_t> m_scroll_x; required_shared_ptr<uint8_t> m_scroll_y; required_shared_ptr<uint8_t> m_bg_videoram; @@ -38,8 +36,17 @@ public: required_device<palette_device> m_palette; tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; + bool m_flipscreen_x; + bool m_flipscreen_y; - uint8_t m_sub_irq_mask; + bool m_irq_enable; + bool m_sub_irq_mask; + + DECLARE_WRITE_LINE_MEMBER(irq_enable_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); DECLARE_READ8_MEMBER(tp84_sh_timer_r); DECLARE_WRITE8_MEMBER(tp84_filter_w); DECLARE_WRITE8_MEMBER(tp84_sh_irqtrigger_w); @@ -52,6 +59,7 @@ public: virtual void video_start() override; DECLARE_PALETTE_INIT(tp84); uint32_t screen_update_tp84(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + INTERRUPT_GEN_MEMBER(main_vblank_irq); INTERRUPT_GEN_MEMBER(sub_vblank_irq); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); }; diff --git a/src/mame/includes/triplhnt.h b/src/mame/includes/triplhnt.h index 325c5fedd4d..55b5b6de9c3 100644 --- a/src/mame/includes/triplhnt.h +++ b/src/mame/includes/triplhnt.h @@ -6,6 +6,7 @@ *************************************************************************/ +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/discrete.h" #include "sound/samples.h" @@ -31,6 +32,7 @@ public: triplhnt_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + m_latch(*this, "latch"), m_watchdog(*this, "watchdog"), m_discrete(*this, "discrete"), m_samples(*this, "samples"), @@ -44,6 +46,7 @@ public: m_code_ram(*this, "code_ram") { } required_device<cpu_device> m_maincpu; + required_device<f9334_device> m_latch; required_device<watchdog_timer_device> m_watchdog; required_device<discrete_device> m_discrete; required_device<samples_device> m_samples; @@ -59,7 +62,6 @@ public: uint8_t m_cmos[16]; uint8_t m_da_latch; - uint8_t m_misc_flags; uint8_t m_cmos_latch; uint8_t m_hit_code; int m_sprite_zoom; @@ -68,7 +70,13 @@ public: emu_timer *m_hit_timer; tilemap_t* m_bg_tilemap; - DECLARE_WRITE8_MEMBER(misc_w); + DECLARE_WRITE_LINE_MEMBER(ram_2_w); + DECLARE_WRITE_LINE_MEMBER(sprite_zoom_w); + DECLARE_WRITE_LINE_MEMBER(sprite_bank_w); + DECLARE_WRITE_LINE_MEMBER(lamp1_w); + DECLARE_WRITE_LINE_MEMBER(coin_lockout_w); + DECLARE_WRITE_LINE_MEMBER(tape_control_w); + DECLARE_READ8_MEMBER(cmos_r); DECLARE_READ8_MEMBER(input_port_4_r); DECLARE_READ8_MEMBER(misc_r); @@ -82,7 +90,6 @@ public: uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); void set_collision(int code); - void update_misc(address_space &space, int offset); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; diff --git a/src/mame/includes/tsamurai.h b/src/mame/includes/tsamurai.h index aa0c024e940..4b30a28ac30 100644 --- a/src/mame/includes/tsamurai.h +++ b/src/mame/includes/tsamurai.h @@ -56,15 +56,16 @@ public: int m_key_count; //debug only // common - DECLARE_WRITE8_MEMBER(nmi_enable_w); - DECLARE_WRITE8_MEMBER(coincounter_w); - DECLARE_WRITE8_MEMBER(textbank1_w); + DECLARE_WRITE_LINE_MEMBER(nmi_enable_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); + DECLARE_WRITE_LINE_MEMBER(textbank1_w); DECLARE_WRITE8_MEMBER(fg_videoram_w); // tsamurai and m660 specific DECLARE_WRITE8_MEMBER(bg_videoram_w); DECLARE_WRITE8_MEMBER(fg_colorram_w); - DECLARE_WRITE8_MEMBER(flip_screen_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_w); DECLARE_WRITE8_MEMBER(scrolly_w); DECLARE_WRITE8_MEMBER(scrollx_w); DECLARE_WRITE8_MEMBER(bgcolor_w); @@ -80,7 +81,7 @@ public: DECLARE_READ8_MEMBER(tsamurai_unknown_d803_r); // m660 specific - DECLARE_WRITE8_MEMBER(m660_textbank2_w); + DECLARE_WRITE_LINE_MEMBER(textbank2_w); DECLARE_READ8_MEMBER(m660_unknown_d803_r); DECLARE_WRITE8_MEMBER(m660_sound_command3_w); DECLARE_READ8_MEMBER(m660_sound_command3_r); diff --git a/src/mame/includes/tubep.h b/src/mame/includes/tubep.h index 1df6d5e6472..e4c9cb5e339 100644 --- a/src/mame/includes/tubep.h +++ b/src/mame/includes/tubep.h @@ -59,21 +59,22 @@ public: uint8_t m_ls175_e8; uint8_t m_ls377_data; uint32_t m_page; - DECLARE_WRITE8_MEMBER(tubep_LS259_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); DECLARE_WRITE8_MEMBER(main_cpu_irq_line_clear_w); DECLARE_WRITE8_MEMBER(tubep_soundlatch_w); DECLARE_WRITE8_MEMBER(second_cpu_irq_line_clear_w); DECLARE_READ8_MEMBER(tubep_soundlatch_r); DECLARE_READ8_MEMBER(tubep_sound_irq_ack); DECLARE_WRITE8_MEMBER(tubep_sound_unknown); - DECLARE_WRITE8_MEMBER(rjammer_LS259_w); DECLARE_WRITE8_MEMBER(rjammer_soundlatch_w); DECLARE_READ8_MEMBER(rjammer_soundlatch_r); DECLARE_WRITE8_MEMBER(rjammer_voice_input_w); DECLARE_WRITE8_MEMBER(rjammer_voice_intensity_control_w); DECLARE_WRITE8_MEMBER(tubep_textram_w); - DECLARE_WRITE8_MEMBER(tubep_background_romselect_w); - DECLARE_WRITE8_MEMBER(tubep_colorproms_A4_line_w); + DECLARE_WRITE_LINE_MEMBER(screen_flip_w); + DECLARE_WRITE_LINE_MEMBER(background_romselect_w); + DECLARE_WRITE_LINE_MEMBER(colorproms_A4_line_w); DECLARE_WRITE8_MEMBER(tubep_background_a000_w); DECLARE_WRITE8_MEMBER(tubep_background_c000_w); DECLARE_WRITE8_MEMBER(tubep_sprite_control_w); diff --git a/src/mame/includes/tutankhm.h b/src/mame/includes/tutankhm.h index d7ac01137db..81a424768e0 100644 --- a/src/mame/includes/tutankhm.h +++ b/src/mame/includes/tutankhm.h @@ -1,5 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Mirko Buffoni + +#include "audio/timeplt.h" + class tutankhm_state : public driver_device { public: @@ -8,11 +11,12 @@ public: m_videoram(*this, "videoram"), m_scroll(*this, "scroll"), m_maincpu(*this, "maincpu"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_timeplt_audio(*this, "timeplt_audio") { } /* memory pointers */ required_shared_ptr<uint8_t> m_videoram; - required_shared_ptr<uint8_t> m_scroll; + optional_shared_ptr<uint8_t> m_scroll; /* video-related */ tilemap_t *m_bg_tilemap; @@ -26,12 +30,14 @@ public: /* devices */ required_device<cpu_device> m_maincpu; required_device<palette_device> m_palette; - DECLARE_WRITE8_MEMBER(irq_enable_w); + optional_device<timeplt_audio_device> m_timeplt_audio; + DECLARE_WRITE_LINE_MEMBER(irq_enable_w); DECLARE_WRITE8_MEMBER(tutankhm_bankselect_w); - DECLARE_WRITE8_MEMBER(sound_mute_w); - DECLARE_WRITE8_MEMBER(tutankhm_coin_counter_w); - DECLARE_WRITE8_MEMBER(tutankhm_flip_screen_x_w); - DECLARE_WRITE8_MEMBER(tutankhm_flip_screen_y_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); + DECLARE_WRITE8_MEMBER(sound_on_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); DECLARE_MACHINE_START(tutankhm); DECLARE_MACHINE_RESET(tutankhm); uint32_t screen_update_tutankhm(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/ultratnk.h b/src/mame/includes/ultratnk.h index a2c5ce72c2e..1e5936e0256 100644 --- a/src/mame/includes/ultratnk.h +++ b/src/mame/includes/ultratnk.h @@ -51,14 +51,12 @@ public: DECLARE_WRITE8_MEMBER(wram_w); DECLARE_WRITE8_MEMBER(collision_reset_w); DECLARE_WRITE8_MEMBER(da_latch_w); - DECLARE_WRITE8_MEMBER(led_1_w); - DECLARE_WRITE8_MEMBER(led_2_w); - DECLARE_WRITE8_MEMBER(lockout_w); + DECLARE_WRITE_LINE_MEMBER(led_1_w); + DECLARE_WRITE_LINE_MEMBER(led_2_w); + DECLARE_WRITE_LINE_MEMBER(lockout_w); DECLARE_WRITE8_MEMBER(video_ram_w); DECLARE_CUSTOM_INPUT_MEMBER(get_collision); DECLARE_CUSTOM_INPUT_MEMBER(get_joystick); - DECLARE_WRITE8_MEMBER(fire_1_w); - DECLARE_WRITE8_MEMBER(fire_2_w); DECLARE_WRITE8_MEMBER(attract_w); DECLARE_WRITE8_MEMBER(explosion_w); diff --git a/src/mame/includes/vastar.h b/src/mame/includes/vastar.h index f5d024931dd..c6885f1c5f4 100644 --- a/src/mame/includes/vastar.h +++ b/src/mame/includes/vastar.h @@ -38,9 +38,8 @@ public: tilemap_t *m_bg2_tilemap; uint8_t m_nmi_mask; - DECLARE_WRITE8_MEMBER(hold_cpu2_w); - DECLARE_WRITE8_MEMBER(flip_screen_w); - DECLARE_WRITE8_MEMBER(nmi_mask_w); + DECLARE_WRITE_LINE_MEMBER(flip_screen_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(fgvideoram_w); DECLARE_WRITE8_MEMBER(bg1videoram_w); DECLARE_WRITE8_MEMBER(bg2videoram_w); diff --git a/src/mame/includes/warpwarp.h b/src/mame/includes/warpwarp.h index 92ff10e8264..42a43fedb7c 100644 --- a/src/mame/includes/warpwarp.h +++ b/src/mame/includes/warpwarp.h @@ -62,7 +62,14 @@ public: //geebee and navarone DECLARE_READ8_MEMBER(geebee_in_r); DECLARE_WRITE8_MEMBER(geebee_out6_w); - DECLARE_WRITE8_MEMBER(geebee_out7_w); + DECLARE_WRITE_LINE_MEMBER(lamp_1_w); + DECLARE_WRITE_LINE_MEMBER(lamp_2_w); + DECLARE_WRITE_LINE_MEMBER(lamp_3_w); + DECLARE_WRITE_LINE_MEMBER(counter_w); + DECLARE_WRITE_LINE_MEMBER(lock_out_w); + DECLARE_WRITE_LINE_MEMBER(geebee_bgw_w); + DECLARE_WRITE_LINE_MEMBER(ball_on_w); + DECLARE_WRITE_LINE_MEMBER(inv_w); DECLARE_WRITE8_MEMBER(geebee_videoram_w); virtual void machine_start() override; diff --git a/src/mame/includes/wiping.h b/src/mame/includes/wiping.h index 0728804e624..be19ae94cb6 100644 --- a/src/mame/includes/wiping.h +++ b/src/mame/includes/wiping.h @@ -28,10 +28,9 @@ public: uint8_t m_sound_irq_mask; DECLARE_READ8_MEMBER(ports_r); - DECLARE_WRITE8_MEMBER(subcpu_reset_w); - DECLARE_WRITE8_MEMBER(main_irq_mask_w); - DECLARE_WRITE8_MEMBER(sound_irq_mask_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(main_irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(sound_irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_PALETTE_INIT(wiping); virtual void machine_start() override; diff --git a/src/mame/includes/wrally.h b/src/mame/includes/wrally.h index f8529e52599..cd1a289dca6 100644 --- a/src/mame/includes/wrally.h +++ b/src/mame/includes/wrally.h @@ -5,6 +5,8 @@ #pragma once +#include "machine/74259.h" + class wrally_state : public driver_device { public: @@ -13,6 +15,7 @@ public: m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), + m_outlatch(*this, "outlatch"), m_videoram(*this, "videoram"), m_vregs(*this, "vregs"), m_spriteram(*this, "spriteram"), @@ -24,10 +27,13 @@ public: DECLARE_READ8_MEMBER(shareram_r); DECLARE_WRITE8_MEMBER(shareram_w); DECLARE_WRITE16_MEMBER(vram_w); - DECLARE_WRITE16_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_WRITE16_MEMBER(okim6295_bankswitch_w); - DECLARE_WRITE16_MEMBER(coin_counter_w); - DECLARE_WRITE16_MEMBER(coin_lockout_w); + DECLARE_WRITE8_MEMBER(latch_w); + DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); + DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w); + DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w); TILE_GET_INFO_MEMBER(get_tile_info_screen0); TILE_GET_INFO_MEMBER(get_tile_info_screen1); @@ -44,6 +50,7 @@ private: required_device<cpu_device> m_maincpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_device<ls259_device> m_outlatch; required_shared_ptr<uint16_t> m_videoram; required_shared_ptr<uint16_t> m_vregs; diff --git a/src/mame/includes/xorworld.h b/src/mame/includes/xorworld.h index 1f073192f93..0d5733b855c 100644 --- a/src/mame/includes/xorworld.h +++ b/src/mame/includes/xorworld.h @@ -27,9 +27,6 @@ public: DECLARE_WRITE16_MEMBER(irq2_ack_w); DECLARE_WRITE16_MEMBER(irq6_ack_w); DECLARE_WRITE16_MEMBER(videoram_w); - DECLARE_WRITE16_MEMBER(eeprom_chip_select_w); - DECLARE_WRITE16_MEMBER(eeprom_serial_clock_w); - DECLARE_WRITE16_MEMBER(eeprom_data_w); TILE_GET_INFO_MEMBER(get_bg_tile_info); diff --git a/src/mame/machine/asteroid.cpp b/src/mame/machine/asteroid.cpp index eb236c12fd1..593af819b68 100644 --- a/src/mame/machine/asteroid.cpp +++ b/src/mame/machine/asteroid.cpp @@ -105,16 +105,14 @@ WRITE8_MEMBER(asteroid_state::asteroid_bank_switch_w) } -WRITE8_MEMBER(asteroid_state::astdelux_bank_switch_w) +WRITE_LINE_MEMBER(asteroid_state::start1_led_w) { - int bank = BIT(data, 7); - m_ram1->set_entry(bank); - m_ram2->set_entry(bank); + output().set_led_value(0, state ? 0 : 1); } -WRITE8_MEMBER(asteroid_state::astdelux_led_w) +WRITE_LINE_MEMBER(asteroid_state::start2_led_w) { - output().set_led_value(offset, (data & 0x80) ? 0 : 1); + output().set_led_value(1, state ? 0 : 1); } void asteroid_state::machine_start() diff --git a/src/mame/machine/bsktball.cpp b/src/mame/machine/bsktball.cpp index 8621570341a..81fe442ad17 100644 --- a/src/mame/machine/bsktball.cpp +++ b/src/mame/machine/bsktball.cpp @@ -12,9 +12,10 @@ /*************************************************************************** bsktball_nmion_w ***************************************************************************/ -WRITE8_MEMBER(bsktball_state::bsktball_nmion_w) + +WRITE_LINE_MEMBER(bsktball_state::nmion_w) { - m_nmi_on = offset & 0x01; + m_nmi_on = state; } /*************************************************************************** @@ -36,14 +37,14 @@ TIMER_DEVICE_CALLBACK_MEMBER(bsktball_state::bsktball_scanline) bsktball_ld_w ***************************************************************************/ -WRITE8_MEMBER(bsktball_state::bsktball_ld1_w) +WRITE_LINE_MEMBER(bsktball_state::ld1_w) { - m_ld1 = (offset & 0x01); + m_ld1 = state; } -WRITE8_MEMBER(bsktball_state::bsktball_ld2_w) +WRITE_LINE_MEMBER(bsktball_state::ld2_w) { - m_ld2 = (offset & 0x01); + m_ld2 = state; } @@ -156,12 +157,13 @@ READ8_MEMBER(bsktball_state::bsktball_in0_r) /*************************************************************************** bsktball_led_w ***************************************************************************/ -WRITE8_MEMBER(bsktball_state::bsktball_led1_w) + +WRITE_LINE_MEMBER(bsktball_state::led1_w) { - output().set_led_value(0, offset & 0x01); + output().set_led_value(0, state); } -WRITE8_MEMBER(bsktball_state::bsktball_led2_w) +WRITE_LINE_MEMBER(bsktball_state::led2_w) { - output().set_led_value(1, offset & 0x01); + output().set_led_value(1, state); } diff --git a/src/mame/machine/gaelco2.cpp b/src/mame/machine/gaelco2.cpp index 3b92aed9a81..ef6d67fcc1e 100644 --- a/src/mame/machine/gaelco2.cpp +++ b/src/mame/machine/gaelco2.cpp @@ -161,37 +161,40 @@ READ8_MEMBER(gaelco2_state::shareram_r) ***************************************************************************/ -WRITE16_MEMBER(gaelco2_state::gaelco2_coin_w) +WRITE16_MEMBER(gaelco2_state::wrally2_latch_w) { - /* Coin Lockouts */ - machine().bookkeeping().coin_lockout_w(0, ~data & 0x01); - machine().bookkeeping().coin_lockout_w(1, ~data & 0x02); + m_mainlatch->write_bit(offset >> 2, BIT(data, 0)); +} - /* Coin Counters */ - machine().bookkeeping().coin_counter_w(0, data & 0x04); - machine().bookkeeping().coin_counter_w(1, data & 0x08); +WRITE_LINE_MEMBER(gaelco2_state::coin1_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); } -WRITE16_MEMBER(gaelco2_state::gaelco2_coin2_w) +WRITE_LINE_MEMBER(gaelco2_state::coin2_counter_w) { - /* coin counters */ - machine().bookkeeping().coin_counter_w(offset & 0x01, data & 0x01); + machine().bookkeeping().coin_counter_w(1, state); } -WRITE16_MEMBER(wrally2_state::wrally2_coin_w) +WRITE_LINE_MEMBER(gaelco2_state::coin3_counter_w) { - /* coin counters */ - machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01); + machine().bookkeeping().coin_counter_w(2, state); } -WRITE16_MEMBER(gaelco2_state::touchgo_coin_w) +WRITE_LINE_MEMBER(gaelco2_state::coin4_counter_w) { - if ((offset >> 2) == 0){ - machine().bookkeeping().coin_counter_w(0, data & 0x01); - machine().bookkeeping().coin_counter_w(1, data & 0x02); - machine().bookkeeping().coin_counter_w(2, data & 0x04); - machine().bookkeeping().coin_counter_w(3, data & 0x08); - } + machine().bookkeeping().coin_counter_w(3, state); +} + +WRITE16_MEMBER(gaelco2_state::alighunt_coin_w) +{ + /* Coin Lockouts */ + machine().bookkeeping().coin_lockout_w(0, ~data & 0x01); + machine().bookkeeping().coin_lockout_w(1, ~data & 0x02); + + /* Coin Counters */ + machine().bookkeeping().coin_counter_w(0, data & 0x04); + machine().bookkeeping().coin_counter_w(1, data & 0x08); } /*************************************************************************** @@ -248,59 +251,25 @@ CUSTOM_INPUT_MEMBER(wrally2_state::wrally2_analog_bit_r) } -WRITE16_MEMBER(wrally2_state::wrally2_adc_clk) +WRITE_LINE_MEMBER(wrally2_state::wrally2_adc_clk) { /* a zero/one combo is written here to clock the next analog port bit */ - if (ACCESSING_BITS_0_7) + if (!state) { - if (!(data & 0xff)) - { - m_analog_ports[0] <<= 1; - m_analog_ports[1] <<= 1; - } + m_analog_ports[0] <<= 1; + m_analog_ports[1] <<= 1; } - else - logerror("%06X:analog_port_clock_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); } -WRITE16_MEMBER(wrally2_state::wrally2_adc_cs) +WRITE_LINE_MEMBER(wrally2_state::wrally2_adc_cs) { /* a zero is written here to read the analog ports, and a one is written when finished */ - if (ACCESSING_BITS_0_7) + if (!state) { - if (!(data & 0xff)) - { - m_analog_ports[0] = m_analog0->read(); - m_analog_ports[1] = m_analog1->read(); - } + m_analog_ports[0] = m_analog0->read(); + m_analog_ports[1] = m_analog1->read(); } - else - logerror("%06X:analog_port_latch_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask); -} - -/*************************************************************************** - - EEPROM (93C66) - -***************************************************************************/ - -WRITE16_MEMBER(gaelco2_state::gaelco2_eeprom_cs_w) -{ - /* bit 0 is CS (active low) */ - m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); -} - -WRITE16_MEMBER(gaelco2_state::gaelco2_eeprom_sk_w) -{ - /* bit 0 is SK (active high) */ - m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE); -} - -WRITE16_MEMBER(gaelco2_state::gaelco2_eeprom_data_w) -{ - /* bit 0 is EEPROM data (DIN) */ - m_eeprom->di_write(data & 0x01); } /*************************************************************************** diff --git a/src/mame/machine/gaelco3d.cpp b/src/mame/machine/gaelco3d.cpp index 331c0a62774..315cba86b4c 100644 --- a/src/mame/machine/gaelco3d.cpp +++ b/src/mame/machine/gaelco3d.cpp @@ -343,12 +343,12 @@ TIMER_CALLBACK_MEMBER( gaelco_serial_device::link_cb ) -WRITE8_MEMBER( gaelco_serial_device::irq_enable ) +WRITE_LINE_MEMBER(gaelco_serial_device::irq_enable) { - LOGMSG(("???? irq enable %d\n", data)); + LOGMSG(("???? irq enable %d\n", state)); } -READ8_MEMBER( gaelco_serial_device::status_r) +READ8_MEMBER(gaelco_serial_device::status_r) { uint8_t ret = 0; @@ -363,7 +363,7 @@ READ8_MEMBER( gaelco_serial_device::status_r) return ret; } -WRITE8_MEMBER( gaelco_serial_device::data_w) +WRITE8_MEMBER(gaelco_serial_device::data_w) { std::lock_guard<std::mutex> guard(m_mutex); @@ -394,18 +394,18 @@ READ8_MEMBER( gaelco_serial_device::data_r) return ret; } -WRITE8_MEMBER( gaelco_serial_device::unknown_w) +WRITE_LINE_MEMBER(gaelco_serial_device::unknown_w) { std::lock_guard<std::mutex> guard(m_mutex); - LOGMSG(("???? unknown serial access %d\n", data)); + LOGMSG(("???? unknown serial access %d\n", state)); } -WRITE8_MEMBER( gaelco_serial_device::rts_w ) +WRITE_LINE_MEMBER(gaelco_serial_device::rts_w) { std::lock_guard<std::mutex> guard(m_mutex); - if (data == 0) + if (state == 0) m_out_ptr->stat |= GAELCOSER_STATUS_RTS; else { @@ -415,11 +415,11 @@ WRITE8_MEMBER( gaelco_serial_device::rts_w ) } } -WRITE8_MEMBER( gaelco_serial_device::tr_w) +WRITE_LINE_MEMBER(gaelco_serial_device::tr_w) { LOGMSG(("set transmit %d\n", data)); std::lock_guard<std::mutex> guard(m_mutex); - if ((data & 0x01) != 0) + if (state != 0) m_status |= GAELCOSER_STATUS_SEND; else m_status &= ~GAELCOSER_STATUS_SEND; diff --git a/src/mame/machine/gaelco3d.h b/src/mame/machine/gaelco3d.h index 85ba9283a3e..7e3b6ee6ad4 100644 --- a/src/mame/machine/gaelco3d.h +++ b/src/mame/machine/gaelco3d.h @@ -35,12 +35,12 @@ public: template <class Object> static devcb_base &set_irq_handler(device_t &device, Object &&cb) { return downcast<gaelco_serial_device &>(device).m_irq_handler.set_callback(std::forward<Object>(cb)); } - DECLARE_READ8_MEMBER( status_r); - DECLARE_WRITE8_MEMBER( data_w); - DECLARE_READ8_MEMBER( data_r); - DECLARE_WRITE8_MEMBER( rts_w ); + DECLARE_READ8_MEMBER(status_r); + DECLARE_WRITE8_MEMBER(data_w); + DECLARE_READ8_MEMBER(data_r); + DECLARE_WRITE_LINE_MEMBER(rts_w); /* Set to 1 during transmit, 0 for receive */ - DECLARE_WRITE8_MEMBER( tr_w); + DECLARE_WRITE_LINE_MEMBER(tr_w); /* Big questions marks, related to serial i/o */ @@ -48,11 +48,11 @@ public: /* Not used in surfplnt, but in radikalb * Set at beginning of transfer sub, cleared at end */ - DECLARE_WRITE8_MEMBER( unknown_w); + DECLARE_WRITE_LINE_MEMBER(unknown_w); /* only used in radikalb, set at beginning of receive isr, cleared at end */ - DECLARE_WRITE8_MEMBER( irq_enable ); + DECLARE_WRITE_LINE_MEMBER(irq_enable); protected: // device-level overrides diff --git a/src/mame/machine/lisa.cpp b/src/mame/machine/lisa.cpp index 0c5b73c0826..a7da401a0a8 100644 --- a/src/mame/machine/lisa.cpp +++ b/src/mame/machine/lisa.cpp @@ -1607,61 +1607,67 @@ WRITE16_MEMBER(lisa_state::lisa_w) void lisa_state::cpu_board_control_access(offs_t offset) { - switch ((offset & 0x03ff) << 1) - { - case 0x0002: /* Set DIAG1 Latch */ - case 0x0000: /* Reset DIAG1 Latch */ - break; - case 0x0006: /* Set Diag2 Latch */ - m_diag2 = 1; - break; - case 0x0004: /* ReSet Diag2 Latch */ - m_diag2 = 0; - break; - case 0x000A: /* SEG1 Context Selection bit SET */ - /*logerror("seg bit 0 set\n");*/ + m_latch->write_bit(offset >> 1, offset & 1); +} + +WRITE_LINE_MEMBER(lisa_state::diag1_w) +{ + // Set/reset DIAG1 +} + +WRITE_LINE_MEMBER(lisa_state::diag2_w) +{ + // Set/reset DIAG2 + m_diag2 = state; +} + +WRITE_LINE_MEMBER(lisa_state::seg1_w) +{ + // Set/reset SEG1 Context Selection bit + //logerror("seg bit 0 %s\n", state ? "set" : "clear"); + if (state) m_seg |= 1; - break; - case 0x0008: /* SEG1 Context Selection bit RESET */ - /*logerror("seg bit 0 clear\n");*/ + else m_seg &= ~1; - break; - case 0x000E: /* SEG2 Context Selection bit SET */ - /*logerror("seg bit 1 set\n");*/ +} + +WRITE_LINE_MEMBER(lisa_state::seg2_w) +{ + // Set/reset SEG2 Context Selection bit + //logerror("seg bit 1 %s\n", state ? "set" : "clear"); + if (state) m_seg |= 2; - break; - case 0x000C: /* SEG2 Context Selection bit RESET */ - /*logerror("seg bit 1 clear\n");*/ + else m_seg &= ~2; - break; - case 0x0010: /* SETUP register SET */ - logerror("setup SET %s\n", machine().describe_context()); - m_setup = 1; - break; - case 0x0012: /* SETUP register RESET */ - logerror("setup UNSET %s\n", machine().describe_context()); - m_setup = 0; - break; - case 0x001A: /* Enable Vertical Retrace Interrupt */ - logerror("enable retrace %s\n", machine().describe_context()); - m_VTMSK = 1; - break; - case 0x0018: /* Disable Vertical Retrace Interrupt */ - logerror("disable retrace %s\n", machine().describe_context()); - m_VTMSK = 0; +} + +WRITE_LINE_MEMBER(lisa_state::setup_w) +{ + // Reset/set SETUP register + logerror("setup %s %s\n", state ? "UNSET" : "SET", machine().describe_context()); + m_setup = !state; +} + +WRITE_LINE_MEMBER(lisa_state::vtmsk_w) +{ + // Enable/disable Vertical Retrace Interrupt + logerror("%s retrace %s\n", state ? "enable" : "disable", machine().describe_context()); + m_VTMSK = state; + if (!state) set_VTIR(2); - break; - case 0x0016: /* Enable Soft Error Detect. */ - case 0x0014: /* Disable Soft Error Detect. */ - break; - case 0x001E: /* Enable Hard Error Detect */ - m_test_parity = 1; - break; - case 0x001C: /* Disable Hard Error Detect */ - m_test_parity = 0; +} + +WRITE_LINE_MEMBER(lisa_state::sfmsk_w) +{ + // Enable/disable Soft Error Detect +} + +WRITE_LINE_MEMBER(lisa_state::hdmsk_w) +{ + // Enable/disable Hard Error Detect + m_test_parity = state; + if (!state) set_parity_error_pending(0); - break; - } } READ16_MEMBER(lisa_state::lisa_IO_r) diff --git a/src/mame/machine/playch10.cpp b/src/mame/machine/playch10.cpp index aec05bfadb3..bc260701840 100644 --- a/src/mame/machine/playch10.cpp +++ b/src/mame/machine/playch10.cpp @@ -82,7 +82,7 @@ CUSTOM_INPUT_MEMBER(playch10_state::pc10_int_detect_r) return ~m_pc10_int_detect & 1; } -WRITE8_MEMBER(playch10_state::pc10_SDCS_w) +WRITE_LINE_MEMBER(playch10_state::SDCS_w) { /* Hooked to CLR on LS194A - Sheet 2, bottom left. @@ -90,47 +90,37 @@ WRITE8_MEMBER(playch10_state::pc10_SDCS_w) It's used to keep the screen black during redraws. Also hooked to the video sram. Prevent writes. */ - m_pc10_sdcs = ~data & 1; + m_pc10_sdcs = !state; } -WRITE8_MEMBER(playch10_state::pc10_CNTRLMASK_w) +WRITE_LINE_MEMBER(playch10_state::CNTRLMASK_w) { - m_cntrl_mask = ~data & 1; + m_cntrl_mask = !state; } -WRITE8_MEMBER(playch10_state::pc10_DISPMASK_w) +WRITE_LINE_MEMBER(playch10_state::DISPMASK_w) { - m_pc10_dispmask = ~data & 1; + m_pc10_dispmask = !state; } -WRITE8_MEMBER(playch10_state::pc10_SOUNDMASK_w) +WRITE_LINE_MEMBER(playch10_state::SOUNDMASK_w) { /* should mute the APU - unimplemented yet */ } -WRITE8_MEMBER(playch10_state::pc10_NMIENABLE_w) +WRITE_LINE_MEMBER(playch10_state::NMIENABLE_w) { - m_pc10_nmi_enable = data & 1; + m_pc10_nmi_enable = state; } -WRITE8_MEMBER(playch10_state::pc10_DOGDI_w) +WRITE_LINE_MEMBER(playch10_state::DOGDI_w) { - m_pc10_dog_di = data & 1; + m_pc10_dog_di = state; } -WRITE8_MEMBER(playch10_state::pc10_GAMERES_w) +WRITE_LINE_MEMBER(playch10_state::PPURES_w) { - machine().device("cart")->execute().set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE ); -} - -WRITE8_MEMBER(playch10_state::pc10_GAMESTOP_w) -{ - machine().device("cart")->execute().set_input_line(INPUT_LINE_HALT, (data & 1) ? CLEAR_LINE : ASSERT_LINE ); -} - -WRITE8_MEMBER(playch10_state::pc10_PPURES_w) -{ - if (data & 1) + if (state) machine().device("ppu")->reset(); } @@ -141,10 +131,9 @@ READ8_MEMBER(playch10_state::pc10_detectclr_r) return 0; } -WRITE8_MEMBER(playch10_state::pc10_CARTSEL_w) +WRITE8_MEMBER(playch10_state::CARTSEL_w) { - m_cart_sel &= ~(1 << offset); - m_cart_sel |= (data & 1) << offset; + m_cart_sel = data; } diff --git a/src/mame/machine/starwars.cpp b/src/mame/machine/starwars.cpp index 610f11df544..90e4b0d4d31 100644 --- a/src/mame/machine/starwars.cpp +++ b/src/mame/machine/starwars.cpp @@ -42,7 +42,6 @@ TIMER_CALLBACK_MEMBER(starwars_state::math_run_clear) m_math_run = 0; } - /************************************* * * X2212 nvram store @@ -56,48 +55,40 @@ WRITE8_MEMBER(starwars_state::starwars_nstore_w) machine().device<x2212_device>("x2212")->store(0); } +WRITE_LINE_MEMBER(starwars_state::recall_w) +{ + machine().device<x2212_device>("x2212")->recall(!state); +} + /************************************* * - * Output latch + * Coin counters and LEDs * *************************************/ -WRITE8_MEMBER(starwars_state::starwars_out_w) +WRITE_LINE_MEMBER(starwars_state::coin1_counter_w) { - switch (offset & 7) - { - case 0: /* Coin counter 1 */ - machine().bookkeeping().coin_counter_w(0, data); - break; - - case 1: /* Coin counter 2 */ - machine().bookkeeping().coin_counter_w(1, data); - break; - - case 2: /* LED 3 */ - output().set_led_value(2, ~data & 0x80); - break; + machine().bookkeeping().coin_counter_w(0, state); +} - case 3: /* LED 2 */ - output().set_led_value(1, ~data & 0x80); - break; +WRITE_LINE_MEMBER(starwars_state::coin2_counter_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} - case 4: /* bank switch */ - membank("bank1")->set_entry((data >> 7) & 1); - if (m_is_esb) - membank("bank2")->set_entry((data >> 7) & 1); - break; - case 5: /* reset PRNG */ - break; +WRITE_LINE_MEMBER(starwars_state::led1_w) +{ + output().set_led_value(0, !state); +} - case 6: /* LED 1 */ - output().set_led_value(0, ~data & 0x80); - break; +WRITE_LINE_MEMBER(starwars_state::led2_w) +{ + output().set_led_value(1, !state); +} - case 7: /* NVRAM array recall */ - machine().device<x2212_device>("x2212")->recall(~data & 0x80); - break; - } +WRITE_LINE_MEMBER(starwars_state::led3_w) +{ + output().set_led_value(2, !state); } @@ -381,6 +372,10 @@ READ8_MEMBER(starwars_state::starwars_prng_r) return machine().rand(); } +WRITE_LINE_MEMBER(starwars_state::prng_reset_w) +{ +} + /************************************* diff --git a/src/mame/machine/subs.cpp b/src/mame/machine/subs.cpp index 9df1a1ced33..6182a972e8e 100644 --- a/src/mame/machine/subs.cpp +++ b/src/mame/machine/subs.cpp @@ -179,15 +179,15 @@ READ8_MEMBER(subs_state::options_r) /*************************************************************************** lamp1_w ***************************************************************************/ -WRITE8_MEMBER(subs_state::lamp1_w) +WRITE_LINE_MEMBER(subs_state::lamp1_w) { - output().set_led_value(0,~offset & 1); + output().set_led_value(0, !state); } /*************************************************************************** lamp2_w ***************************************************************************/ -WRITE8_MEMBER(subs_state::lamp2_w) +WRITE_LINE_MEMBER(subs_state::lamp2_w) { - output().set_led_value(1,~offset & 1); + output().set_led_value(1, !state); } diff --git a/src/mame/machine/toaplan1.cpp b/src/mame/machine/toaplan1.cpp index 8e790267d76..406aaab77bf 100644 --- a/src/mame/machine/toaplan1.cpp +++ b/src/mame/machine/toaplan1.cpp @@ -182,21 +182,27 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_reset_sound_w) } -WRITE8_MEMBER(toaplan1_rallybik_state::rallybik_coin_w) +WRITE_LINE_MEMBER(toaplan1_rallybik_state::coin_counter_1_w) { - switch (data) { - case 0x08: if (m_coin_count) { machine().bookkeeping().coin_counter_w(0, 1); machine().bookkeeping().coin_counter_w(0, 0); } break; - case 0x09: if (m_coin_count) { machine().bookkeeping().coin_counter_w(2, 1); machine().bookkeeping().coin_counter_w(2, 0); } break; - case 0x0a: if (m_coin_count) { machine().bookkeeping().coin_counter_w(1, 1); machine().bookkeeping().coin_counter_w(1, 0); } break; - case 0x0b: if (m_coin_count) { machine().bookkeeping().coin_counter_w(3, 1); machine().bookkeeping().coin_counter_w(3, 0); } break; - case 0x0c: machine().bookkeeping().coin_lockout_w(0, 1); machine().bookkeeping().coin_lockout_w(2, 1); break; - case 0x0d: machine().bookkeeping().coin_lockout_w(0, 0); machine().bookkeeping().coin_lockout_w(2, 0); break; - case 0x0e: machine().bookkeeping().coin_lockout_w(1, 1); machine().bookkeeping().coin_lockout_w(3, 1); break; - case 0x0f: machine().bookkeeping().coin_lockout_w(1, 0); machine().bookkeeping().coin_lockout_w(3, 0); m_coin_count=1; break; - default: logerror("PC:%04x Writing unknown data (%04x) to coin count/lockout port\n",space.device().safe_pcbase(),data); break; - } + machine().bookkeeping().coin_counter_w(0, state); } +WRITE_LINE_MEMBER(toaplan1_rallybik_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} + +WRITE_LINE_MEMBER(toaplan1_rallybik_state::coin_lockout_1_w) +{ + machine().bookkeeping().coin_lockout_w(0, !state); +} + +WRITE_LINE_MEMBER(toaplan1_rallybik_state::coin_lockout_2_w) +{ + machine().bookkeeping().coin_lockout_w(1, !state); +} + + WRITE8_MEMBER(toaplan1_state::toaplan1_coin_w) { logerror("Z80 writing %02x to coin control\n",data); @@ -247,7 +253,6 @@ WRITE_LINE_MEMBER(toaplan1_state::toaplan1_reset_callback) MACHINE_RESET_MEMBER(toaplan1_state,toaplan1) { m_intenable = 0; - m_coin_count = 0; machine().bookkeeping().coin_lockout_global_w(0); } @@ -276,7 +281,6 @@ MACHINE_RESET_MEMBER(toaplan1_state,vimana) void toaplan1_state::toaplan1_driver_savestate() { save_item(NAME(m_intenable)); - save_item(NAME(m_coin_count)); } void toaplan1_state::demonwld_driver_savestate() diff --git a/src/mame/machine/wrally.cpp b/src/mame/machine/wrally.cpp index 49f8e718982..abc42f636a4 100644 --- a/src/mame/machine/wrally.cpp +++ b/src/mame/machine/wrally.cpp @@ -46,9 +46,14 @@ WRITE16_MEMBER(wrally_state::vram_w) m_pant[(offset & 0x1fff) >> 12]->mark_tile_dirty(((offset << 1) & 0x1fff) >> 2); } -WRITE16_MEMBER(wrally_state::flipscreen_w) +WRITE8_MEMBER(wrally_state::latch_w) { - flip_screen_set(data & 0x01); + m_outlatch->write_bit(offset >> 3, BIT(data, 0)); +} + +WRITE_LINE_MEMBER(wrally_state::flipscreen_w) +{ + flip_screen_set(state); } WRITE16_MEMBER(wrally_state::okim6295_bankswitch_w) @@ -58,12 +63,22 @@ WRITE16_MEMBER(wrally_state::okim6295_bankswitch_w) } } -WRITE16_MEMBER(wrally_state::coin_counter_w) +WRITE_LINE_MEMBER(wrally_state::coin1_counter_w) +{ + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(wrally_state::coin2_counter_w) +{ + machine().bookkeeping().coin_counter_w(1, state); +} + +WRITE_LINE_MEMBER(wrally_state::coin1_lockout_w) { - machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01); + machine().bookkeeping().coin_lockout_w(0, !state); } -WRITE16_MEMBER(wrally_state::coin_lockout_w) +WRITE_LINE_MEMBER(wrally_state::coin2_lockout_w) { - machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01); + machine().bookkeeping().coin_lockout_w(1, !state); } diff --git a/src/mame/video/atarisy1.cpp b/src/mame/video/atarisy1.cpp index feb9abb05c2..85728f3536c 100644 --- a/src/mame/video/atarisy1.cpp +++ b/src/mame/video/atarisy1.cpp @@ -192,10 +192,11 @@ WRITE16_MEMBER( atarisy1_state::atarisy1_bankselect_w ) diff = oldselect ^ newselect; /* sound CPU reset */ - if (diff & 0x0080) + if (BIT(diff, 7)) { - m_audiocpu->set_input_line(INPUT_LINE_RESET, (newselect & 0x0080) ? CLEAR_LINE : ASSERT_LINE); - if (!(newselect & 0x0080)) m_soundcomm->sound_cpu_reset(); + m_outlatch->clear_w(BIT(newselect, 7)); + m_audiocpu->set_input_line(INPUT_LINE_RESET, BIT(newselect, 7) ? CLEAR_LINE : ASSERT_LINE); + if (!BIT(newselect, 7)) m_soundcomm->sound_cpu_reset(); } /* if MO or playfield banks change, force a partial update */ diff --git a/src/mame/video/bagman.cpp b/src/mame/video/bagman.cpp index 7fda8d78c9e..4e3406ce724 100644 --- a/src/mame/video/bagman.cpp +++ b/src/mame/video/bagman.cpp @@ -82,9 +82,19 @@ PALETTE_INIT_MEMBER(bagman_state,bagman) } } -WRITE8_MEMBER(bagman_state::flipscreen_w) +WRITE_LINE_MEMBER(bagman_state::flipscreen_x_w) { - flip_screen_set(data & 0x01); + flip_screen_x_set(state); +} + +WRITE_LINE_MEMBER(bagman_state::flipscreen_y_w) +{ + flip_screen_y_set(state); +} + +WRITE_LINE_MEMBER(bagman_state::video_enable_w) +{ + m_video_enable = state; } TILE_GET_INFO_MEMBER(bagman_state::get_bg_tile_info) @@ -134,7 +144,7 @@ void bagman_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) uint32_t bagman_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { bitmap.fill(0, cliprect); - if (*m_video_enable == 0) + if (!m_video_enable) return 0; m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); diff --git a/src/mame/video/bosco.cpp b/src/mame/video/bosco.cpp index 07f2f428eac..2936382386e 100644 --- a/src/mame/video/bosco.cpp +++ b/src/mame/video/bosco.cpp @@ -239,8 +239,8 @@ void bosco_state::draw_stars(bitmap_ind16 &bitmap, const rectangle &cliprect, in int set_a, set_b; /* two sets of stars controlled by these bits */ - set_a = (m_bosco_starblink[0] & 1); - set_b = (m_bosco_starblink[1] & 1) | 2; + set_a = m_videolatch->q4_r(); + set_b = m_videolatch->q5_r() | 2; for (star_cntr = 0;star_cntr < MAX_STARS;star_cntr++) { diff --git a/src/mame/video/cclimber.cpp b/src/mame/video/cclimber.cpp index 407c9d1b271..f2aeac11cfe 100644 --- a/src/mame/video/cclimber.cpp +++ b/src/mame/video/cclimber.cpp @@ -13,8 +13,6 @@ #include "includes/cclimber.h" -#define CCLIMBER_FLIP_X (m_flip_screen[0] & 0x01) -#define CCLIMBER_FLIP_Y (m_flip_screen[1] & 0x01) #define CCLIMBER_BG_PEN (0) #define SWIMMER_SIDE_BG_PEN (0x120) #define SWIMMER_BG_SPLIT (0x18 * 8) @@ -338,10 +336,27 @@ WRITE8_MEMBER(cclimber_state::cclimber_colorram_w) } -WRITE8_MEMBER(cclimber_state::cannonb_flip_screen_w) +WRITE_LINE_MEMBER(cclimber_state::flip_screen_x_w) { - m_flip_screen[0] = data; - m_flip_screen[1] = data; + m_flip_x = state; +} + + +WRITE_LINE_MEMBER(cclimber_state::flip_screen_y_w) +{ + m_flip_y = state; +} + + +WRITE_LINE_MEMBER(cclimber_state::sidebg_enable_w) +{ + m_swimmer_side_background_enabled = state; +} + + +WRITE_LINE_MEMBER(cclimber_state::palette_bank_w) +{ + m_swimmer_palettebank = state; } @@ -376,7 +391,7 @@ TILE_GET_INFO_MEMBER(cclimber_state::swimmer_get_pf_tile_info) tile_index = tile_index ^ 0x20; code = ((m_colorram[tile_index] & 0x10) << 4) | m_videoram[tile_index]; - color = ((*m_swimmer_palettebank & 0x01) << 4) | (m_colorram[tile_index] & 0x0f); + color = (m_swimmer_palettebank << 4) | (m_colorram[tile_index] & 0x0f); SET_TILE_INFO_MEMBER(0, code, color, flags); } @@ -448,6 +463,9 @@ VIDEO_START_MEMBER(cclimber_state,cclimber) m_bs_tilemap->set_scroll_rows(1); m_bs_tilemap->set_transmask(0, 0x01, 0); /* pen 0 is transaprent */ m_bs_tilemap->set_transmask(1, 0x0f, 0); /* all 4 pens are transparent */ + + save_item(NAME(m_flip_x)); + save_item(NAME(m_flip_y)); } @@ -462,6 +480,11 @@ VIDEO_START_MEMBER(cclimber_state,swimmer) m_bs_tilemap->set_scroll_rows(1); m_bs_tilemap->set_transmask(0, 0x01, 0); /* pen 0 is transaprent */ m_bs_tilemap->set_transmask(1, 0xff, 0); /* all 8 pens are transparent */ + + save_item(NAME(m_flip_x)); + save_item(NAME(m_flip_y)); + save_item(NAME(m_swimmer_side_background_enabled)); + save_item(NAME(m_swimmer_palettebank)); } @@ -478,6 +501,9 @@ VIDEO_START_MEMBER(cclimber_state,toprollr) m_bs_tilemap->set_scroll_rows(1); m_bs_tilemap->set_transmask(0, 0x01, 0); /* pen 0 is transaprent */ m_bs_tilemap->set_transmask(1, 0x0f, 0); /* all 4 pens are transparent */ + + save_item(NAME(m_flip_x)); + save_item(NAME(m_flip_y)); } @@ -486,8 +512,8 @@ void cclimber_state::draw_playfield(screen_device &screen, bitmap_ind16 &bitmap, int i; m_pf_tilemap->mark_all_dirty(); - m_pf_tilemap->set_flip((CCLIMBER_FLIP_X ? TILEMAP_FLIPX : 0) | - (CCLIMBER_FLIP_Y ? TILEMAP_FLIPY : 0)); + m_pf_tilemap->set_flip((m_flip_x ? TILEMAP_FLIPX : 0) | + (m_flip_y ? TILEMAP_FLIPY : 0)); for (i = 0; i < 32; i++) m_pf_tilemap->set_scrolly(i, m_column_scroll[i]); @@ -511,7 +537,7 @@ void cclimber_state::cclimber_draw_bigsprite(screen_device &screen, bitmap_ind16 m_bs_tilemap->mark_all_dirty(); m_bs_tilemap->set_flip((bigsprite_flip_x ? TILEMAP_FLIPX : 0) | - (CCLIMBER_FLIP_Y ^ bigsprite_flip_y ? TILEMAP_FLIPY : 0)); + (m_flip_y ^ bigsprite_flip_y ? TILEMAP_FLIPY : 0)); m_bs_tilemap->set_scrollx(0, x); m_bs_tilemap->set_scrolly(0, y); @@ -527,7 +553,7 @@ void cclimber_state::toprollr_draw_bigsprite(screen_device &screen, bitmap_ind16 m_bs_tilemap->mark_all_dirty(); - m_bs_tilemap->set_flip(CCLIMBER_FLIP_Y ? TILEMAP_FLIPY : 0); + m_bs_tilemap->set_flip(m_flip_y ? TILEMAP_FLIPY : 0); m_bs_tilemap->set_scrollx(0, x); m_bs_tilemap->set_scrolly(0, y); @@ -559,13 +585,13 @@ void cclimber_state::cclimber_draw_sprites(bitmap_ind16 &bitmap, const rectangle int flipx = m_spriteram[offs + 0] & 0x40; int flipy = m_spriteram[offs + 0] & 0x80; - if (CCLIMBER_FLIP_X) + if (m_flip_x) { x = 242 - x; flipx = !flipx; } - if (CCLIMBER_FLIP_Y) + if (m_flip_y) { y = 240 - y; flipy = !flipy; @@ -596,13 +622,13 @@ void cclimber_state::toprollr_draw_sprites(bitmap_ind16 &bitmap, const rectangle int flipx = m_spriteram[offs + 0] & 0x40; int flipy = m_spriteram[offs + 0] & 0x80; - if (CCLIMBER_FLIP_X) + if (m_flip_x) { x = 240 - x; flipx = !flipx; } - if (CCLIMBER_FLIP_Y) + if (m_flip_y) { y = 240 - y; flipy = !flipy; @@ -627,19 +653,19 @@ void cclimber_state::swimmer_draw_sprites(bitmap_ind16 &bitmap, const rectangle int code = ((m_spriteram[offs + 1] & 0x10) << 2) | (m_spriteram[offs + 0] & 0x3f); - int color = ((*m_swimmer_palettebank & 0x01) << 4) | + int color = (m_swimmer_palettebank << 4) | (m_spriteram[offs + 1] & 0x0f); int flipx = m_spriteram[offs + 0] & 0x40; int flipy = m_spriteram[offs + 0] & 0x80; - if (CCLIMBER_FLIP_X) + if (m_flip_x) { x = 240 - x; flipx = !flipx; } - if (CCLIMBER_FLIP_Y) + if (m_flip_y) { y = 240 - y; flipy = !flipy; @@ -681,7 +707,7 @@ uint32_t cclimber_state::screen_update_yamato(screen_device &screen, bitmap_ind1 for (i = 0; i < 0x100; i++) { int j; - pen_t pen = YAMATO_SKY_PEN_BASE + sky_rom[(CCLIMBER_FLIP_X ? 0x80 : 0) + (i >> 1)]; + pen_t pen = YAMATO_SKY_PEN_BASE + sky_rom[(m_flip_x ? 0x80 : 0) + (i >> 1)]; for (j = 0; j < 0x100; j++) bitmap.pix16(j, (i - 8) & 0xff) = pen; @@ -711,9 +737,9 @@ uint32_t cclimber_state::screen_update_swimmer(screen_device &screen, bitmap_ind { swimmer_set_background_pen(); - if (*m_swimmer_side_background_enabled & 0x01) + if (m_swimmer_side_background_enabled) { - if (CCLIMBER_FLIP_X) + if (m_flip_x) { rectangle split_rect_left(0, 0xff - SWIMMER_BG_SPLIT, 0, 0xff); rectangle split_rect_right(0x100 - SWIMMER_BG_SPLIT, 0xff, 0, 0xff); @@ -768,8 +794,8 @@ uint32_t cclimber_state::screen_update_toprollr(screen_device &screen, bitmap_in bitmap.fill(CCLIMBER_BG_PEN, cliprect); m_toproller_bg_tilemap->set_scrollx(0, m_toprollr_bg_videoram[0]); - m_toproller_bg_tilemap->set_flip((CCLIMBER_FLIP_X ? TILEMAP_FLIPX : 0) | - (CCLIMBER_FLIP_Y ? TILEMAP_FLIPY : 0)); + m_toproller_bg_tilemap->set_flip((m_flip_x ? TILEMAP_FLIPX : 0) | + (m_flip_y ? TILEMAP_FLIPY : 0)); m_toproller_bg_tilemap->mark_all_dirty(); m_toproller_bg_tilemap->draw(screen, bitmap, scroll_area_clip, 0, 0); @@ -788,8 +814,8 @@ uint32_t cclimber_state::screen_update_toprollr(screen_device &screen, bitmap_in } m_pf_tilemap->mark_all_dirty(); - m_pf_tilemap->set_flip((CCLIMBER_FLIP_X ? TILEMAP_FLIPX : 0) | - (CCLIMBER_FLIP_Y ? TILEMAP_FLIPY : 0)); + m_pf_tilemap->set_flip((m_flip_x ? TILEMAP_FLIPX : 0) | + (m_flip_y ? TILEMAP_FLIPY : 0)); m_pf_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; diff --git a/src/mame/video/centiped.cpp b/src/mame/video/centiped.cpp index 725b704badf..0918e4df3bd 100644 --- a/src/mame/video/centiped.cpp +++ b/src/mame/video/centiped.cpp @@ -150,9 +150,9 @@ WRITE8_MEMBER(centiped_state::centiped_videoram_w) * *************************************/ -WRITE8_MEMBER(centiped_state::centiped_flip_screen_w) +WRITE_LINE_MEMBER(centiped_state::flip_screen_w) { - m_flipscreen = data >> 7; + m_flipscreen = state; } diff --git a/src/mame/video/champbas.cpp b/src/mame/video/champbas.cpp index 062a861ade6..9faf3776944 100644 --- a/src/mame/video/champbas.cpp +++ b/src/mame/video/champbas.cpp @@ -183,26 +183,21 @@ WRITE8_MEMBER(champbas_state::tilemap_w) m_bg_tilemap->mark_tile_dirty(offset & 0x3ff); } -WRITE8_MEMBER(champbas_state::gfxbank_w) +WRITE_LINE_MEMBER(champbas_state::gfxbank_w) { - data &= 1; - - if (m_gfx_bank != data) - { - m_gfx_bank = data; - m_bg_tilemap->mark_all_dirty(); - } + m_gfx_bank = state; + m_bg_tilemap->mark_all_dirty(); } -WRITE8_MEMBER(champbas_state::palette_bank_w) +WRITE_LINE_MEMBER(champbas_state::palette_bank_w) { - m_palette_bank = data & 1; + m_palette_bank = state; m_bg_tilemap->set_palette_offset(m_palette_bank << 8); } -WRITE8_MEMBER(champbas_state::flipscreen_w) +WRITE_LINE_MEMBER(champbas_state::flipscreen_w) { - flip_screen_set(~data & 1); + flip_screen_set(!state); } diff --git a/src/mame/video/cinemat.cpp b/src/mame/video/cinemat.cpp index fb90344d2ea..56d5de46629 100644 --- a/src/mame/video/cinemat.cpp +++ b/src/mame/video/cinemat.cpp @@ -69,7 +69,7 @@ void cinemat_state::cinemat_vector_callback(int16_t sx, int16_t sy, int16_t ex, * *************************************/ -WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w) +WRITE_LINE_MEMBER(cinemat_state::vector_control_w) { int r, g, b, i; cpu_device *cpu = m_maincpu; @@ -78,13 +78,13 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w) { case COLOR_BILEVEL: /* color is either bright or dim, selected by the value sent to the port */ - m_vector_color = (data & 1) ? rgb_t(0x80,0x80,0x80) : rgb_t(0xff,0xff,0xff); + m_vector_color = state ? rgb_t(0x80,0x80,0x80) : rgb_t(0xff,0xff,0xff); break; case COLOR_16LEVEL: /* on the rising edge of the data value, latch bits 0-3 of the */ /* X register as the intensity */ - if (data != m_last_control && data) + if (state) { int xval = cpu->state_int(ccpu_cpu_device::CCPU_X) & 0x0f; i = (xval + 1) * 255 / 16; @@ -95,7 +95,7 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w) case COLOR_64LEVEL: /* on the rising edge of the data value, latch bits 2-7 of the */ /* X register as the intensity */ - if (data != m_last_control && data) + if (state) { int xval = cpu->state_int(ccpu_cpu_device::CCPU_X); xval = (~xval >> 2) & 0x3f; @@ -107,7 +107,7 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w) case COLOR_RGB: /* on the rising edge of the data value, latch the X register */ /* as 4-4-4 BGR values */ - if (data != m_last_control && data) + if (state) { int xval = cpu->state_int(ccpu_cpu_device::CCPU_X); r = (~xval >> 0) & 0x0f; @@ -126,7 +126,7 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w) /* they will be restored on the rising edge; this is to simulate the fact */ /* that the Rockola color hardware did not overwrite the beam X,Y position */ /* on an IV instruction if data == 0 here */ - if (data != m_last_control && !data) + if (!state) { m_qb3_lastx = cpu->state_int(ccpu_cpu_device::CCPU_X); m_qb3_lasty = cpu->state_int(ccpu_cpu_device::CCPU_Y); @@ -134,7 +134,7 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w) /* on the rising edge of the data value, latch the Y register */ /* as 2-3-3 BGR values */ - if (data != m_last_control && data) + if (state) { int yval = cpu->state_int(ccpu_cpu_device::CCPU_Y); r = (~yval >> 0) & 0x07; @@ -152,9 +152,6 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w) } break; } - - /* remember the last value */ - m_last_control = data; } diff --git a/src/mame/video/cloak.cpp b/src/mame/video/cloak.cpp index 969ab3ba1bd..b4b0fae8e82 100644 --- a/src/mame/video/cloak.cpp +++ b/src/mame/video/cloak.cpp @@ -146,9 +146,9 @@ WRITE8_MEMBER(cloak_state::cloak_videoram_w) m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(cloak_state::cloak_flipscreen_w) +WRITE_LINE_MEMBER(cloak_state::cocktail_w) { - flip_screen_set(data & 0x80); + flip_screen_set(state); } TILE_GET_INFO_MEMBER(cloak_state::get_bg_tile_info) diff --git a/src/mame/video/cloud9.cpp b/src/mame/video/cloud9.cpp index 69161e88745..69049a30f44 100644 --- a/src/mame/video/cloud9.cpp +++ b/src/mame/video/cloud9.cpp @@ -41,7 +41,6 @@ void cloud9_state::video_start() /* register for savestates */ save_pointer(NAME(m_videoram.get()), 0x8000); - save_item(NAME(m_video_control)); save_item(NAME(m_bitmode_addr)); } @@ -49,20 +48,6 @@ void cloud9_state::video_start() /************************************* * - * Video control registers - * - *************************************/ - -WRITE8_MEMBER(cloud9_state::cloud9_video_control_w) -{ - /* only D7 matters */ - m_video_control[offset] = (data >> 7) & 1; -} - - - -/************************************* - * * Palette RAM accesses * *************************************/ @@ -127,8 +112,8 @@ inline void cloud9_state::cloud9_write_vram( uint16_t addr, uint8_t data, uint8_ Bit 0 = PIXA */ promaddr |= bitmd << 7; - promaddr |= m_video_control[4] << 6; - promaddr |= m_video_control[6] << 5; + promaddr |= m_videolatch->q4_r() << 6; + promaddr |= m_videolatch->q6_r() << 5; promaddr |= ((addr & 0xf000) != 0x4000) << 4; promaddr |= ((addr & 0x3800) == 0x0000) << 3; promaddr |= ((addr & 0x0600) == 0x0600) << 2; @@ -159,11 +144,11 @@ inline void cloud9_state::cloud9_write_vram( uint16_t addr, uint8_t data, uint8_ inline void cloud9_state::bitmode_autoinc( ) { /* auto increment in the x-direction if it's enabled */ - if (!m_video_control[0]) /* /AX */ + if (!m_videolatch->q0_r()) /* /AX */ m_bitmode_addr[0]++; /* auto increment in the y-direction if it's enabled */ - if (!m_video_control[1]) /* /AY */ + if (!m_videolatch->q1_r()) /* /AY */ m_bitmode_addr[1]++; } @@ -239,7 +224,7 @@ WRITE8_MEMBER(cloud9_state::cloud9_bitmode_addr_w) uint32_t cloud9_state::screen_update_cloud9(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { uint8_t *spriteaddr = m_spriteram; - int flip = m_video_control[5] ? 0xff : 0x00; /* PLAYER2 */ + int flip = m_videolatch->q5_r() ? 0xff : 0x00; /* PLAYER2 */ pen_t black = m_palette->black_pen(); int x, y, offs; @@ -304,7 +289,7 @@ uint32_t cloud9_state::screen_update_cloud9(screen_device &screen, bitmap_ind16 pix = mopix | 0x10; /* the high bit is the bank select */ - pix |= m_video_control[7] << 5; + pix |= m_videolatch->q7_r() << 5; /* store the pixel value and also a priority value based on the topmost bit */ dst[x] = pix; diff --git a/src/mame/video/clshroad.cpp b/src/mame/video/clshroad.cpp index b9acf71c862..6e6e14b5730 100644 --- a/src/mame/video/clshroad.cpp +++ b/src/mame/video/clshroad.cpp @@ -36,9 +36,9 @@ #include "includes/clshroad.h" -WRITE8_MEMBER(clshroad_state::flipscreen_w) +WRITE_LINE_MEMBER(clshroad_state::flipscreen_w) { - flip_screen_set(data & 1 ); + flip_screen_set(state); } diff --git a/src/mame/video/crgolf.cpp b/src/mame/video/crgolf.cpp index b3cb5b2f574..5f1572eba0a 100644 --- a/src/mame/video/crgolf.cpp +++ b/src/mame/video/crgolf.cpp @@ -67,7 +67,7 @@ PALETTE_INIT_MEMBER(crgolf_state, mastrglf) uint32_t crgolf_state::screen_update_crgolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int flip = *m_screen_flip & 1; + int flip = m_screen_flip; offs_t offs; @@ -99,10 +99,10 @@ uint32_t crgolf_state::screen_update_crgolf(screen_device &screen, bitmap_ind16 uint8_t data_b = 0; uint8_t data_a = 0; - if (~*m_screena_enable & 1) + if (!m_screena_enable) data_a = ((data_a0 & 0x80) >> 7) | ((data_a1 & 0x80) >> 6) | ((data_a2 & 0x80) >> 5); - if (~*m_screenb_enable & 1) + if (!m_screenb_enable) data_b = ((data_b0 & 0x80) >> 7) | ((data_b1 & 0x80) >> 6) | ((data_b2 & 0x80) >> 5); /* screen A has priority over B */ @@ -112,7 +112,7 @@ uint32_t crgolf_state::screen_update_crgolf(screen_device &screen, bitmap_ind16 color = data_b | 0x08; /* add HI bit if enabled */ - if (*m_color_select) + if (m_color_select) color = color | 0x10; bitmap.pix16(y, x) = color; diff --git a/src/mame/video/digdug.cpp b/src/mame/video/digdug.cpp index 9c105830094..bfd31abe377 100644 --- a/src/mame/video/digdug.cpp +++ b/src/mame/video/digdug.cpp @@ -172,61 +172,35 @@ WRITE8_MEMBER( digdug_state::digdug_videoram_w ) m_fg_tilemap->mark_tile_dirty(offset & 0x3ff); } -WRITE8_MEMBER( digdug_state::digdug_PORT_w ) +WRITE8_MEMBER(digdug_state::bg_select_w) { - switch (offset) + // select background picture + if (m_bg_select != (data & 0x03)) { - case 0: /* select background picture */ - case 1: - { - int shift = offset; - int mask = 1 << shift; - - if ((m_bg_select & mask) != ((data & 1) << shift)) - { - m_bg_select = (m_bg_select & ~mask) | ((data & 1) << shift); - m_bg_tilemap->mark_all_dirty(); - } - } - break; - - case 2: /* select alpha layer color mode (see tx_get_tile_info) */ - if (m_tx_color_mode != (data & 1)) - { - m_tx_color_mode = data & 1; - m_fg_tilemap->mark_all_dirty(); - } - break; - - case 3: /* "disable" background (see bg_get_tile_info) */ - if (m_bg_disable != (data & 1)) - { - m_bg_disable = data & 1; - m_bg_tilemap->mark_all_dirty(); - } - break; + m_bg_select = data & 0x03; + m_bg_tilemap->mark_all_dirty(); + } - case 4: /* background color bank */ - case 5: - { - int shift = offset; - int mask = 1 << shift; - - if ((m_bg_color_bank & mask) != ((data & 1) << shift)) - { - m_bg_color_bank = (m_bg_color_bank & ~mask) | ((data & 1) << shift); - m_bg_tilemap->mark_all_dirty(); - } - } - break; + // background color bank + if (m_bg_color_bank != (data & 0x30)) + { + m_bg_color_bank = data & 0x30; + m_bg_tilemap->mark_all_dirty(); + } +} - case 6: /* n.c. */ - break; +WRITE_LINE_MEMBER(digdug_state::tx_color_mode_w) +{ + // select alpha layer color mode (see tx_get_tile_info) + m_tx_color_mode = state; + m_fg_tilemap->mark_all_dirty(); +} - case 7: /* FLIP */ - flip_screen_set(data & 1); - break; - } +WRITE_LINE_MEMBER(digdug_state::bg_disable_w) +{ + // "disable" background (see bg_get_tile_info) + m_bg_disable = state; + m_bg_tilemap->mark_all_dirty(); } diff --git a/src/mame/video/dynax.cpp b/src/mame/video/dynax.cpp index ec62f409503..2819be2245b 100644 --- a/src/mame/video/dynax.cpp +++ b/src/mame/video/dynax.cpp @@ -203,42 +203,52 @@ WRITE8_MEMBER(dynax_state::dynax_blit_palette67_w) /* Layers Palettes (High Bits) */ -WRITE8_MEMBER(dynax_state::dynax_blit_palbank_w) +WRITE_LINE_MEMBER(dynax_state::blit_palbank_w) { - m_blit_palbank = data; - LOG(("PB=%02X ", data)); + m_blit_palbank = state; + LOG(("PB=%d ", state)); } -WRITE8_MEMBER(dynax_state::dynax_blit2_palbank_w) +WRITE_LINE_MEMBER(dynax_state::blit2_palbank_w) { - m_blit2_palbank = data; - LOG(("PB'=%02X ", data)); + m_blit2_palbank = state; + LOG(("PB'=%d ", state)); +} + +WRITE8_MEMBER(dynax_state::hnoridur_palbank_w) +{ + m_palbank = data & 0x0f; + m_blit_palbank = data; // ??? } /* Which half of the layers to write to (interleaved games only) */ -WRITE8_MEMBER(dynax_state::hanamai_layer_half_w) +WRITE_LINE_MEMBER(dynax_state::layer_half_w) { - m_hanamai_layer_half = (~data) & 1; - LOG(("H=%02X ", data)); + m_hanamai_layer_half = !state; + LOG(("H=%d ", state)); } /* Write to both halves of the layers (interleaved games only) */ -WRITE8_MEMBER(dynax_state::hnoridur_layer_half2_w) +WRITE_LINE_MEMBER(dynax_state::layer_half2_w) { - m_hnoridur_layer_half2 = (~data) & 1; - LOG(("H2=%02X ", data)); + m_hnoridur_layer_half2 = !state; + LOG(("H2=%d ", state)); } -WRITE8_MEMBER(dynax_state::mjdialq2_blit_dest_w) +WRITE_LINE_MEMBER(dynax_state::mjdialq2_blit_dest0_w) { - int mask = (2 >> offset); /* 1 or 2 */ - - m_blit_dest &= ~mask; + m_blit_dest &= ~1; + if (!state) + m_blit_dest |= 1; +} - if (~data & 1) - m_blit_dest |= mask; +WRITE_LINE_MEMBER(dynax_state::mjdialq2_blit_dest1_w) +{ + m_blit_dest &= ~2; + if (!state) + m_blit_dest |= 2; } @@ -256,22 +266,25 @@ WRITE8_MEMBER(dynax_state::jantouki_layer_enable_w) m_layer_enable |= 1; } -WRITE8_MEMBER(dynax_state::mjdialq2_layer_enable_w) +WRITE_LINE_MEMBER(dynax_state::mjdialq2_layer0_enable_w) { - int mask = (2 >> offset); /* 1 or 2 */ + m_layer_enable &= ~1; + if (!state) + m_layer_enable |= 1; +} - m_layer_enable &= ~mask; - if (~data & 1) - m_layer_enable |= mask; +WRITE_LINE_MEMBER(dynax_state::mjdialq2_layer1_enable_w) +{ + m_layer_enable &= ~2; + if (!state) + m_layer_enable |= 2; } -WRITE8_MEMBER(dynax_state::dynax_flipscreen_w) +WRITE_LINE_MEMBER(dynax_state::flipscreen_w) { - m_flipscreen = data & 1; - if (data & ~1) - logerror("CPU#0 PC %06X: Warning, flip screen <- %02X\n", space.device().safe_pc(), data); - LOG(("F=%02X ", data)); + m_flipscreen = state; + LOG(("F=%d ", state)); } @@ -747,12 +760,12 @@ WRITE8_MEMBER(dynax_state::cdracula_blitter_rev2_w) if (data & 0xf0) { - hanamai_layer_half_w(space, offset, 0, mem_mask); + layer_half_w(0); dynax_blit_dest_w(space, offset, data >> 4, mem_mask); } if (data & 0x0f) { - hanamai_layer_half_w(space, offset, 1, mem_mask); + layer_half_w(1); dynax_blit_dest_w(space, offset, data & 0x0f, mem_mask); } break; diff --git a/src/mame/video/equites.cpp b/src/mame/video/equites.cpp index 954b11d2540..5e2b5cd62b0 100644 --- a/src/mame/video/equites.cpp +++ b/src/mame/video/equites.cpp @@ -187,28 +187,16 @@ WRITE16_MEMBER(equites_state::equites_scrollreg_w) m_bg_tilemap->set_scrollx(0, data >> 8); } -WRITE16_MEMBER(equites_state::splndrbt_selchar_w) +WRITE_LINE_MEMBER(equites_state::splndrbt_selchar_w) { - // data bit is A16 (offset) - data = (offset == 0) ? 0 : 1; - // select active char map - if (m_fg_char_bank != data) - { - m_fg_char_bank = data; - m_fg_tilemap->mark_all_dirty(); - } -} - -WRITE16_MEMBER(equites_state::equites_flipw_w) -{ - // data bit is A16 (offset) - flip_screen_set(offset != 0); + m_fg_char_bank = (state == 0) ? 0 : 1; + m_fg_tilemap->mark_all_dirty(); } -WRITE8_MEMBER(equites_state::equites_flipb_w) +WRITE_LINE_MEMBER(equites_state::flip_screen_w) { - flip_screen_set(data); + flip_screen_set(state); } WRITE16_MEMBER(equites_state::splndrbt_bg_scrollx_w) diff --git a/src/mame/video/fastfred.cpp b/src/mame/video/fastfred.cpp index 8bb2eec1f3b..c32c7eefe1c 100644 --- a/src/mame/video/fastfred.cpp +++ b/src/mame/video/fastfred.cpp @@ -142,9 +142,9 @@ WRITE8_MEMBER(fastfred_state::fastfred_attributes_w ) } -WRITE8_MEMBER(fastfred_state::fastfred_charbank1_w ) +WRITE_LINE_MEMBER(fastfred_state::charbank1_w) { - uint16_t new_data = (m_charbank & 0x0200) | ((data & 0x01) << 8); + uint16_t new_data = (m_charbank & 0x0200) | (state << 8); if (new_data != m_charbank) { @@ -154,9 +154,9 @@ WRITE8_MEMBER(fastfred_state::fastfred_charbank1_w ) } } -WRITE8_MEMBER(fastfred_state::fastfred_charbank2_w ) +WRITE_LINE_MEMBER(fastfred_state::charbank2_w) { - uint16_t new_data = (m_charbank & 0x0100) | ((data & 0x01) << 9); + uint16_t new_data = (m_charbank & 0x0100) | (state << 9); if (new_data != m_charbank) { @@ -167,9 +167,9 @@ WRITE8_MEMBER(fastfred_state::fastfred_charbank2_w ) } -WRITE8_MEMBER(fastfred_state::fastfred_colorbank1_w ) +WRITE_LINE_MEMBER(fastfred_state::colorbank1_w) { - uint8_t new_data = (m_colorbank & 0x10) | ((data & 0x01) << 3); + uint8_t new_data = (m_colorbank & 0x10) | (state << 3); if (new_data != m_colorbank) { @@ -179,9 +179,9 @@ WRITE8_MEMBER(fastfred_state::fastfred_colorbank1_w ) } } -WRITE8_MEMBER(fastfred_state::fastfred_colorbank2_w ) +WRITE_LINE_MEMBER(fastfred_state::colorbank2_w) { - uint8_t new_data = (m_colorbank & 0x08) | ((data & 0x01) << 4); + uint8_t new_data = (m_colorbank & 0x08) | (state << 4); if (new_data != m_colorbank) { @@ -193,24 +193,18 @@ WRITE8_MEMBER(fastfred_state::fastfred_colorbank2_w ) -WRITE8_MEMBER(fastfred_state::fastfred_flip_screen_x_w ) +WRITE_LINE_MEMBER(fastfred_state::flip_screen_x_w) { - if (flip_screen_x() != (data & 0x01)) - { - flip_screen_x_set(data & 0x01); + flip_screen_x_set(state); - m_bg_tilemap->set_flip((flip_screen_x() ? TILEMAP_FLIPX : 0) | (flip_screen_y() ? TILEMAP_FLIPY : 0)); - } + m_bg_tilemap->set_flip((flip_screen_x() ? TILEMAP_FLIPX : 0) | (flip_screen_y() ? TILEMAP_FLIPY : 0)); } -WRITE8_MEMBER(fastfred_state::fastfred_flip_screen_y_w ) +WRITE_LINE_MEMBER(fastfred_state::flip_screen_y_w) { - if (flip_screen_y() != (data & 0x01)) - { - flip_screen_y_set(data & 0x01); + flip_screen_y_set(state); - m_bg_tilemap->set_flip((flip_screen_x() ? TILEMAP_FLIPX : 0) | (flip_screen_y() ? TILEMAP_FLIPY : 0)); - } + m_bg_tilemap->set_flip((flip_screen_x() ? TILEMAP_FLIPX : 0) | (flip_screen_y() ? TILEMAP_FLIPY : 0)); } @@ -322,11 +316,11 @@ WRITE8_MEMBER(fastfred_state::imago_fg_videoram_w ) m_fg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(fastfred_state::imago_charbank_w ) +WRITE_LINE_MEMBER(fastfred_state::imago_charbank_w) { - if( m_charbank != data ) + if (m_charbank != state) { - m_charbank = data; + m_charbank = state; m_bg_tilemap->mark_all_dirty(); } } diff --git a/src/mame/video/funkybee.cpp b/src/mame/video/funkybee.cpp index 3d00eca424f..08bdaf7f3a4 100644 --- a/src/mame/video/funkybee.cpp +++ b/src/mame/video/funkybee.cpp @@ -54,13 +54,10 @@ WRITE8_MEMBER(funkybee_state::funkybee_colorram_w) m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(funkybee_state::funkybee_gfx_bank_w) +WRITE_LINE_MEMBER(funkybee_state::gfx_bank_w) { - if (m_gfx_bank != (data & 0x01)) - { - m_gfx_bank = data & 0x01; - machine().tilemap().mark_all_dirty(); - } + m_gfx_bank = state; + machine().tilemap().mark_all_dirty(); } WRITE8_MEMBER(funkybee_state::funkybee_scroll_w) @@ -68,9 +65,9 @@ WRITE8_MEMBER(funkybee_state::funkybee_scroll_w) m_bg_tilemap->set_scrollx(0, flip_screen() ? -data : data); } -WRITE8_MEMBER(funkybee_state::funkybee_flipscreen_w) +WRITE_LINE_MEMBER(funkybee_state::flipscreen_w) { - flip_screen_set(data & 0x01); + flip_screen_set(state); } TILE_GET_INFO_MEMBER(funkybee_state::get_bg_tile_info) diff --git a/src/mame/video/galaga.cpp b/src/mame/video/galaga.cpp index e8f0ea17c9d..e86c2350e98 100644 --- a/src/mame/video/galaga.cpp +++ b/src/mame/video/galaga.cpp @@ -455,9 +455,9 @@ WRITE8_MEMBER(galaga_state::galaga_videoram_w) m_fg_tilemap->mark_tile_dirty(offset & 0x3ff); } -WRITE8_MEMBER(galaga_state::gatsbee_bank_w) +WRITE_LINE_MEMBER(galaga_state::gatsbee_bank_w) { - m_galaga_gfxbank = data & 0x1; + m_galaga_gfxbank = state; m_fg_tilemap->mark_all_dirty(); } @@ -524,14 +524,14 @@ void galaga_state::draw_stars(bitmap_ind16 &bitmap, const rectangle &cliprect ) /* draw the stars */ /* $a005 controls the stars ON/OFF */ - if ( (m_galaga_starcontrol[5] & 1) == 1 ) + if ( m_videolatch->q5_r() == 1 ) { int star_cntr; int set_a, set_b; /* two sets of stars controlled by these bits */ - set_a = (m_galaga_starcontrol[3] & 1); - set_b = (m_galaga_starcontrol[4] & 1) | 2; + set_a = m_videolatch->q3_r(); + set_b = m_videolatch->q4_r() | 2; for (star_cntr = 0;star_cntr < MAX_STARS ;star_cntr++) { @@ -571,9 +571,9 @@ WRITE_LINE_MEMBER(galaga_state::screen_vblank_galaga) int s0,s1,s2; static const int speeds[8] = { -1, -2, -3, 0, 3, 2, 1, 0 }; - s0 = (m_galaga_starcontrol[0] & 1); - s1 = (m_galaga_starcontrol[1] & 1); - s2 = (m_galaga_starcontrol[2] & 1); + s0 = m_videolatch->q0_r(); + s1 = m_videolatch->q1_r(); + s2 = m_videolatch->q2_r(); m_stars_scrollx += speeds[s0 + s1*2 + s2*4]; } diff --git a/src/mame/video/gladiatr.cpp b/src/mame/video/gladiatr.cpp index 2d206ac5975..02c2ab24fcc 100644 --- a/src/mame/video/gladiatr.cpp +++ b/src/mame/video/gladiatr.cpp @@ -127,14 +127,19 @@ WRITE8_MEMBER(gladiatr_state_base::paletteram_w) } +WRITE_LINE_MEMBER(gladiatr_state_base::spritebuffer_w) +{ + m_sprite_buffer = state; +} + WRITE8_MEMBER(gladiatr_state_base::spritebuffer_w) { - m_sprite_buffer = data & 1; + m_sprite_buffer = data & 0x01; } -WRITE8_MEMBER(gladiatr_state::gladiatr_spritebank_w) +WRITE_LINE_MEMBER(gladiatr_state::spritebank_w) { - m_sprite_bank = (data & 1) ? 4 : 2; + m_sprite_bank = state ? 4 : 2; } diff --git a/src/mame/video/gng.cpp b/src/mame/video/gng.cpp index de8c68c131c..4dc7a7d08b7 100644 --- a/src/mame/video/gng.cpp +++ b/src/mame/video/gng.cpp @@ -88,9 +88,9 @@ WRITE8_MEMBER(gng_state::gng_bgscrolly_w) } -WRITE8_MEMBER(gng_state::gng_flipscreen_w) +WRITE_LINE_MEMBER(gng_state::flipscreen_w) { - flip_screen_set(~data & 1); + flip_screen_set(!state); } diff --git a/src/mame/video/gomoku.cpp b/src/mame/video/gomoku.cpp index a879f48cdaf..5ab4917fc5a 100644 --- a/src/mame/video/gomoku.cpp +++ b/src/mame/video/gomoku.cpp @@ -86,14 +86,14 @@ WRITE8_MEMBER(gomoku_state::gomoku_bgram_w) m_bgram[offset] = data; } -WRITE8_MEMBER(gomoku_state::gomoku_flipscreen_w) +WRITE_LINE_MEMBER(gomoku_state::flipscreen_w) { - m_flipscreen = (data & 0x02) ? 0 : 1; + m_flipscreen = state ? 0 : 1; } -WRITE8_MEMBER(gomoku_state::gomoku_bg_dispsw_w) +WRITE_LINE_MEMBER(gomoku_state::bg_dispsw_w) { - m_bg_dispsw = (data & 0x02) ? 0 : 1; + m_bg_dispsw = state ? 0 : 1; } diff --git a/src/mame/video/gridlee.cpp b/src/mame/video/gridlee.cpp index 9f064431b56..07e5cac92b7 100644 --- a/src/mame/video/gridlee.cpp +++ b/src/mame/video/gridlee.cpp @@ -82,9 +82,9 @@ void gridlee_state::video_start() * *************************************/ -WRITE8_MEMBER(gridlee_state::gridlee_cocktail_flip_w) +WRITE_LINE_MEMBER(gridlee_state::cocktail_flip_w) { - m_cocktail_flip = data & 1; + m_cocktail_flip = state; } diff --git a/src/mame/video/gyruss.cpp b/src/mame/video/gyruss.cpp index 9659660dbaa..d20ff38ef5a 100644 --- a/src/mame/video/gyruss.cpp +++ b/src/mame/video/gyruss.cpp @@ -116,6 +116,8 @@ void gyruss_state::video_start() m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gyruss_state::gyruss_get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_tilemap->set_transmask(0, 0x00, 0); /* opaque */ m_tilemap->set_transmask(1, 0x0f, 0); /* transparent */ + + save_item(NAME(m_flipscreen)); } @@ -127,6 +129,12 @@ READ8_MEMBER(gyruss_state::gyruss_scanline_r) } +WRITE_LINE_MEMBER(gyruss_state::flipscreen_w) +{ + m_flipscreen = state; +} + + void gyruss_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) { int offs; @@ -152,7 +160,7 @@ uint32_t gyruss_state::screen_update_gyruss(screen_device &screen, bitmap_ind16 if (cliprect.min_y == screen.visible_area().min_y) { machine().tilemap().mark_all_dirty(); - machine().tilemap().set_flip_all((*m_flipscreen & 0x01) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0); + machine().tilemap().set_flip_all(m_flipscreen ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0); } m_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); diff --git a/src/mame/video/holeland.cpp b/src/mame/video/holeland.cpp index 599b89a8262..bff53ad15e8 100644 --- a/src/mame/video/holeland.cpp +++ b/src/mame/video/holeland.cpp @@ -62,7 +62,6 @@ VIDEO_START_MEMBER(holeland_state,holeland) m_bg_tilemap->set_transmask(0, 0xff, 0x00); /* split type 0 is totally transparent in front half */ m_bg_tilemap->set_transmask(1, 0x01, 0xfe); /* split type 1 has pen 0? transparent in front half */ - save_item(NAME(m_po)); save_item(NAME(m_palette_offset)); } @@ -70,7 +69,6 @@ VIDEO_START_MEMBER(holeland_state,crzrally) { m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(holeland_state::crzrally_get_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32); - save_item(NAME(m_po)); save_item(NAME(m_palette_offset)); } @@ -88,10 +86,9 @@ WRITE8_MEMBER(holeland_state::colorram_w) WRITE8_MEMBER(holeland_state::pal_offs_w) { - if ((data & 1) != m_po[offset]) + if ((m_palette_offset >> 4) != (data & 3)) { - m_po[offset] = data & 1; - m_palette_offset = (m_po[0] + (m_po[1] << 1)) << 4; + m_palette_offset = (data & 3) << 4; machine().tilemap().mark_all_dirty(); } } @@ -101,12 +98,14 @@ WRITE8_MEMBER(holeland_state::scroll_w) m_bg_tilemap->set_scrollx(0, data); } -WRITE8_MEMBER(holeland_state::flipscreen_w) +WRITE_LINE_MEMBER(holeland_state::flipscreen_x_w) { - if (offset) - flip_screen_y_set(data); - else - flip_screen_x_set(data); + flip_screen_x_set(state); +} + +WRITE_LINE_MEMBER(holeland_state::flipscreen_y_w) +{ + flip_screen_y_set(state); } diff --git a/src/mame/video/jedi.cpp b/src/mame/video/jedi.cpp index 0597d14cd8c..f1bf6f6e138 100644 --- a/src/mame/video/jedi.cpp +++ b/src/mame/video/jedi.cpp @@ -35,9 +35,22 @@ VIDEO_START_MEMBER(jedi_state,jedi) /* register for saving */ save_item(NAME(m_vscroll)); save_item(NAME(m_hscroll)); + save_item(NAME(m_foreground_bank)); + save_item(NAME(m_video_off)); } +WRITE_LINE_MEMBER(jedi_state::foreground_bank_w) +{ + m_foreground_bank = state; +} + + +WRITE_LINE_MEMBER(jedi_state::video_off_w) +{ + m_video_off = state; +} + /************************************* * @@ -139,7 +152,7 @@ void jedi_state::draw_background_and_text(bitmap_rgb32 &bitmap, const rectangle uint8_t *prom2 = &memregion("proms")->base()[0x0800 | ((*m_smoothing_table & 0x03) << 8)]; int vscroll = m_vscroll; int hscroll = m_hscroll; - int tx_bank = *m_foreground_bank; + int tx_bank = m_foreground_bank; uint8_t *tx_ram = m_foregroundram; uint8_t *bg_ram = m_backgroundram; @@ -165,7 +178,7 @@ void jedi_state::draw_background_and_text(bitmap_rgb32 &bitmap, const rectangle offs_t bg_offs = ((sy & 0x1f0) << 1) | ((sx & 0x1f0) >> 4); /* get the character codes */ - int tx_code = ((tx_bank & 0x80) << 1) | tx_ram[tx_offs]; + int tx_code = (tx_bank << 8) | tx_ram[tx_offs]; int bg_bank = bg_ram[0x0400 | bg_offs]; int bg_code = bg_ram[0x0000 | bg_offs] | ((bg_bank & 0x01) << 8) | @@ -326,7 +339,7 @@ void jedi_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect) uint32_t jedi_state::screen_update_jedi(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { /* if no video, clear it all to black */ - if (*m_video_off & 0x01) + if (m_video_off) bitmap.fill(rgb_t::black(), cliprect); else { diff --git a/src/mame/video/kchamp.cpp b/src/mame/video/kchamp.cpp index dc98cf94070..2e3e608627e 100644 --- a/src/mame/video/kchamp.cpp +++ b/src/mame/video/kchamp.cpp @@ -39,9 +39,9 @@ WRITE8_MEMBER(kchamp_state::kchamp_colorram_w) m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(kchamp_state::kchamp_flipscreen_w) +WRITE_LINE_MEMBER(kchamp_state::flipscreen_w) { - flip_screen_set(data & 0x01); + flip_screen_set(state); } TILE_GET_INFO_MEMBER(kchamp_state::get_bg_tile_info) diff --git a/src/mame/video/kyugo.cpp b/src/mame/video/kyugo.cpp index 1eb06d0ff2b..5e3edcac2fb 100644 --- a/src/mame/video/kyugo.cpp +++ b/src/mame/video/kyugo.cpp @@ -127,9 +127,9 @@ WRITE8_MEMBER(kyugo_state::kyugo_scroll_y_w) } -WRITE8_MEMBER(kyugo_state::kyugo_flipscreen_w) +WRITE_LINE_MEMBER(kyugo_state::flipscreen_w) { - flip_screen_set(data & 0x01); + flip_screen_set(state); } diff --git a/src/mame/video/ladybug.cpp b/src/mame/video/ladybug.cpp index 0f72b78192b..3f2baa4148e 100644 --- a/src/mame/video/ladybug.cpp +++ b/src/mame/video/ladybug.cpp @@ -110,11 +110,11 @@ WRITE8_MEMBER(ladybug_state::ladybug_colorram_w) m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(ladybug_state::ladybug_flipscreen_w) +WRITE_LINE_MEMBER(ladybug_state::flipscreen_w) { - if (flip_screen() != (data & 0x01)) + if (flip_screen() != state) { - flip_screen_set(data & 0x01); + flip_screen_set(state); machine().tilemap().mark_all_dirty(); } } diff --git a/src/mame/video/liberatr.cpp b/src/mame/video/liberatr.cpp index c5ce2ef9251..c97b1cd66ad 100644 --- a/src/mame/video/liberatr.cpp +++ b/src/mame/video/liberatr.cpp @@ -54,6 +54,11 @@ WRITE8_MEMBER( liberatr_state::bitmap_w ) } +WRITE_LINE_MEMBER(liberatr_state::planet_select_w) +{ + m_planet_select = state; +} + /******************************************************************************************** liberatr_init_planet() @@ -216,6 +221,8 @@ void liberatr_state::video_start() // for each planet in the planet ROMs init_planet(m_planets[0], &memregion("gfx1")->base()[0x2000]); init_planet(m_planets[1], &memregion("gfx1")->base()[0x0000]); + + save_item(NAME(m_planet_select)); } @@ -249,7 +256,7 @@ void liberatr_state::draw_planet(bitmap_rgb32 &bitmap, pen_t *pens) { uint8_t latitude; - uint8_t *buffer = m_planets[(*m_planet_select >> 4) & 0x01].frames[*m_planet_frame]; + uint8_t *buffer = m_planets[m_planet_select].frames[*m_planet_frame]; /* for each latitude */ for (latitude = 0; latitude < 0x80; latitude++) diff --git a/src/mame/video/marineb.cpp b/src/mame/video/marineb.cpp index 6544fab5b27..6404dd213af 100644 --- a/src/mame/video/marineb.cpp +++ b/src/mame/video/marineb.cpp @@ -131,16 +131,16 @@ WRITE8_MEMBER(marineb_state::marineb_palette_bank_1_w) } -WRITE8_MEMBER(marineb_state::marineb_flipscreen_x_w) +WRITE_LINE_MEMBER(marineb_state::flipscreen_x_w) { - m_flipscreen_x = data ^ m_marineb_active_low_flipscreen; + m_flipscreen_x = state; m_bg_tilemap->set_flip((m_flipscreen_x ? TILEMAP_FLIPX : 0) | (m_flipscreen_y ? TILEMAP_FLIPY : 0)); } -WRITE8_MEMBER(marineb_state::marineb_flipscreen_y_w) +WRITE_LINE_MEMBER(marineb_state::flipscreen_y_w) { - m_flipscreen_y = data ^ m_marineb_active_low_flipscreen; + m_flipscreen_y = state; m_bg_tilemap->set_flip((m_flipscreen_x ? TILEMAP_FLIPX : 0) | (m_flipscreen_y ? TILEMAP_FLIPY : 0)); } diff --git a/src/mame/video/megazone.cpp b/src/mame/video/megazone.cpp index 5b8585c5f78..7080e948617 100644 --- a/src/mame/video/megazone.cpp +++ b/src/mame/video/megazone.cpp @@ -96,9 +96,9 @@ PALETTE_INIT_MEMBER(megazone_state, megazone) } } -WRITE8_MEMBER(megazone_state::megazone_flipscreen_w) +WRITE_LINE_MEMBER(megazone_state::flipscreen_w) { - m_flipscreen = data & 1; + m_flipscreen = state; } void megazone_state::video_start() diff --git a/src/mame/video/mermaid.cpp b/src/mame/video/mermaid.cpp index 77a8aeb3ba2..88ece334dab 100644 --- a/src/mame/video/mermaid.cpp +++ b/src/mame/video/mermaid.cpp @@ -79,14 +79,14 @@ WRITE8_MEMBER(mermaid_state::mermaid_colorram_w) m_fg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(mermaid_state::mermaid_flip_screen_x_w) +WRITE_LINE_MEMBER(mermaid_state::flip_screen_x_w) { - flip_screen_x_set(data & 0x01); + flip_screen_x_set(state); } -WRITE8_MEMBER(mermaid_state::mermaid_flip_screen_y_w) +WRITE_LINE_MEMBER(mermaid_state::flip_screen_y_w) { - flip_screen_y_set(data & 0x01); + flip_screen_y_set(state); } WRITE8_MEMBER(mermaid_state::mermaid_bg_scroll_w) @@ -101,14 +101,14 @@ WRITE8_MEMBER(mermaid_state::mermaid_fg_scroll_w) m_fg_tilemap->set_scrolly(offset, data); } -WRITE8_MEMBER(mermaid_state::rougien_gfxbankswitch1_w) +WRITE_LINE_MEMBER(mermaid_state::rougien_gfxbankswitch1_w) { - m_rougien_gfxbank1 = data & 0x01; + m_rougien_gfxbank1 = state; } -WRITE8_MEMBER(mermaid_state::rougien_gfxbankswitch2_w) +WRITE_LINE_MEMBER(mermaid_state::rougien_gfxbankswitch2_w) { - m_rougien_gfxbank2 = data & 0x01; + m_rougien_gfxbank2 = state; } READ8_MEMBER(mermaid_state::mermaid_collision_r) diff --git a/src/mame/video/mouser.cpp b/src/mame/video/mouser.cpp index c3659383ec6..f716464d970 100644 --- a/src/mame/video/mouser.cpp +++ b/src/mame/video/mouser.cpp @@ -47,14 +47,14 @@ PALETTE_INIT_MEMBER(mouser_state, mouser) } } -WRITE8_MEMBER(mouser_state::mouser_flip_screen_x_w) +WRITE_LINE_MEMBER(mouser_state::flip_screen_x_w) { - flip_screen_x_set(~data & 1); + flip_screen_x_set(!state); } -WRITE8_MEMBER(mouser_state::mouser_flip_screen_y_w) +WRITE_LINE_MEMBER(mouser_state::flip_screen_y_w) { - flip_screen_y_set(~data & 1); + flip_screen_y_set(!state); } uint32_t mouser_state::screen_update_mouser(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) diff --git a/src/mame/video/nemesis.cpp b/src/mame/video/nemesis.cpp index 71dc0f8ca42..aebbf5f7078 100644 --- a/src/mame/video/nemesis.cpp +++ b/src/mame/video/nemesis.cpp @@ -95,38 +95,26 @@ TILE_GET_INFO_MEMBER(nemesis_state::get_fg_tile_info) } -WRITE16_MEMBER(nemesis_state::nemesis_gfx_flipx_word_w) +WRITE_LINE_MEMBER(nemesis_state::gfx_flipx_w) { - if (ACCESSING_BITS_0_7) - { - m_flipscreen = data & 0x01; + m_flipscreen = state; - if (data & 0x01) - m_tilemap_flip |= TILEMAP_FLIPX; - else - m_tilemap_flip &= ~TILEMAP_FLIPX; - - machine().tilemap().set_flip_all(m_tilemap_flip); - } + if (state) + m_tilemap_flip |= TILEMAP_FLIPX; + else + m_tilemap_flip &= ~TILEMAP_FLIPX; - if (ACCESSING_BITS_8_15) - { - if (data & 0x0100) - m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); - } + machine().tilemap().set_flip_all(m_tilemap_flip); } -WRITE16_MEMBER(nemesis_state::nemesis_gfx_flipy_word_w) +WRITE_LINE_MEMBER(nemesis_state::gfx_flipy_w) { - if (ACCESSING_BITS_0_7) - { - if (data & 0x01) - m_tilemap_flip |= TILEMAP_FLIPY; - else - m_tilemap_flip &= ~TILEMAP_FLIPY; + if (state) + m_tilemap_flip |= TILEMAP_FLIPY; + else + m_tilemap_flip &= ~TILEMAP_FLIPY; - machine().tilemap().set_flip_all(m_tilemap_flip); - } + machine().tilemap().set_flip_all(m_tilemap_flip); } diff --git a/src/mame/video/pacman.cpp b/src/mame/video/pacman.cpp index badb887ece7..e46ae8cbb75 100644 --- a/src/mame/video/pacman.cpp +++ b/src/mame/video/pacman.cpp @@ -195,9 +195,9 @@ WRITE8_MEMBER(pacman_state::pacman_colorram_w) m_bg_tilemap->mark_tile_dirty(offset ); } -WRITE8_MEMBER(pacman_state::pacman_flipscreen_w) +WRITE_LINE_MEMBER(pacman_state::flipscreen_w) { - m_flipscreen = data & 1; + m_flipscreen = state; m_bg_tilemap->set_flip(m_flipscreen * ( TILEMAP_FLIPX + TILEMAP_FLIPY ) ); } @@ -325,32 +325,23 @@ VIDEO_START_MEMBER(pacman_state,pengo) m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(pacman_state::pacman_get_tile_info),this), tilemap_mapper_delegate(FUNC(pacman_state::pacman_scan_rows),this), 8, 8, 36, 28 ); } -WRITE8_MEMBER(pacman_state::pengo_palettebank_w) +WRITE_LINE_MEMBER(pacman_state::pengo_palettebank_w) { - if (m_palettebank != data) - { - m_palettebank = data; - m_bg_tilemap->mark_all_dirty(); - } + m_palettebank = state; + m_bg_tilemap->mark_all_dirty(); } -WRITE8_MEMBER(pacman_state::pengo_colortablebank_w) +WRITE_LINE_MEMBER(pacman_state::pengo_colortablebank_w) { - if (m_colortablebank != data) - { - m_colortablebank = data; - m_bg_tilemap->mark_all_dirty(); - } + m_colortablebank = state; + m_bg_tilemap->mark_all_dirty(); } -WRITE8_MEMBER(pacman_state::pengo_gfxbank_w) +WRITE_LINE_MEMBER(pacman_state::pengo_gfxbank_w) { - if (m_charbank != (data & 1)) - { - m_spritebank = data & 1; - m_charbank = data & 1; - m_bg_tilemap->mark_all_dirty(); - } + m_spritebank = state; + m_charbank = state; + m_bg_tilemap->mark_all_dirty(); } @@ -565,18 +556,15 @@ WRITE8_MEMBER(pacman_state::jrpacman_videoram_w) jrpacman_mark_tile_dirty(offset); } -WRITE8_MEMBER(pacman_state::jrpacman_charbank_w) +WRITE_LINE_MEMBER(pacman_state::jrpacman_charbank_w) { - if (m_charbank != (data & 1)) - { - m_charbank = data & 1; - m_bg_tilemap->mark_all_dirty(); - } + m_charbank = state; + m_bg_tilemap->mark_all_dirty(); } -WRITE8_MEMBER(pacman_state::jrpacman_spritebank_w) +WRITE_LINE_MEMBER(pacman_state::jrpacman_spritebank_w) { - m_spritebank = (data & 1); + m_spritebank = state; } WRITE8_MEMBER(pacman_state::jrpacman_scroll_w) @@ -588,7 +576,7 @@ WRITE8_MEMBER(pacman_state::jrpacman_scroll_w) } } -WRITE8_MEMBER(pacman_state::jrpacman_bgpriority_w) +WRITE_LINE_MEMBER(pacman_state::jrpacman_bgpriority_w) { - m_bgpriority = (data & 1); + m_bgpriority = state; } diff --git a/src/mame/video/pandoras.cpp b/src/mame/video/pandoras.cpp index 1159ac9223b..9464063fef0 100644 --- a/src/mame/video/pandoras.cpp +++ b/src/mame/video/pandoras.cpp @@ -133,9 +133,9 @@ WRITE8_MEMBER(pandoras_state::pandoras_scrolly_w) m_layer0->set_scrolly(0, data); } -WRITE8_MEMBER(pandoras_state::pandoras_flipscreen_w) +WRITE_LINE_MEMBER(pandoras_state::flipscreen_w) { - m_flipscreen = data; + m_flipscreen = state; machine().tilemap().set_flip_all(m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); } diff --git a/src/mame/video/pooyan.cpp b/src/mame/video/pooyan.cpp index c79e28f71e8..0e1210a5849 100644 --- a/src/mame/video/pooyan.cpp +++ b/src/mame/video/pooyan.cpp @@ -140,9 +140,9 @@ WRITE8_MEMBER(pooyan_state::colorram_w) } -WRITE8_MEMBER(pooyan_state::flipscreen_w) +WRITE_LINE_MEMBER(pooyan_state::flipscreen_w) { - flip_screen_set(~data & 0x01); + flip_screen_set(!state); } diff --git a/src/mame/video/rallyx.cpp b/src/mame/video/rallyx.cpp index df2e839dc11..b41a5e74a4a 100644 --- a/src/mame/video/rallyx.cpp +++ b/src/mame/video/rallyx.cpp @@ -406,9 +406,9 @@ WRITE8_MEMBER(rallyx_state::rallyx_scrolly_w) m_bg_tilemap->set_scrolly(0, data); } -WRITE8_MEMBER(rallyx_state::tactcian_starson_w) +WRITE_LINE_MEMBER(rallyx_state::stars_enable_w) { - m_stars_enable = data & 1; + m_stars_enable = state; } diff --git a/src/mame/video/rocnrope.cpp b/src/mame/video/rocnrope.cpp index 05cfcd391ea..4e532a67dc8 100644 --- a/src/mame/video/rocnrope.cpp +++ b/src/mame/video/rocnrope.cpp @@ -94,13 +94,9 @@ WRITE8_MEMBER(rocnrope_state::rocnrope_colorram_w) m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(rocnrope_state::rocnrope_flipscreen_w) +WRITE_LINE_MEMBER(rocnrope_state::flip_screen_w) { - if (flip_screen() != (~data & 0x01)) - { - flip_screen_set(~data & 0x01); - machine().tilemap().mark_all_dirty(); - } + flip_screen_set(!state); } TILE_GET_INFO_MEMBER(rocnrope_state::get_bg_tile_info) diff --git a/src/mame/video/rollrace.cpp b/src/mame/video/rollrace.cpp index 56247f3f755..4a365cccb98 100644 --- a/src/mame/video/rollrace.cpp +++ b/src/mame/video/rollrace.cpp @@ -92,10 +92,15 @@ PALETTE_INIT_MEMBER(rollrace_state, rollrace) } } -WRITE8_MEMBER(rollrace_state::charbank_w) +WRITE_LINE_MEMBER(rollrace_state::charbank_0_w) { - m_charbank[offset&1] = data; - m_chrbank = m_charbank[0] | (m_charbank[1] << 1) ; + m_chrbank = state | (m_chrbank & 2); + m_fg_tilemap->mark_all_dirty(); +} + +WRITE_LINE_MEMBER(rollrace_state::charbank_1_w) +{ + m_chrbank = (m_chrbank & 1) | (state << 1); m_fg_tilemap->mark_all_dirty(); } @@ -104,9 +109,9 @@ WRITE8_MEMBER(rollrace_state::bkgpen_w) m_bkgpen = data; } -WRITE8_MEMBER(rollrace_state::spritebank_w) +WRITE_LINE_MEMBER(rollrace_state::spritebank_w) { - m_spritebank = data; + m_spritebank = state; } WRITE8_MEMBER(rollrace_state::backgroundpage_w) @@ -128,9 +133,9 @@ WRITE8_MEMBER(rollrace_state::flipy_w) // bit 2: cleared at night stage in attract, unknown purpose } -WRITE8_MEMBER(rollrace_state::flipx_w) +WRITE_LINE_MEMBER(rollrace_state::flipx_w) { - m_flipx = data & 0x01; + m_flipx = state; m_fg_tilemap->set_flip(m_flipx ? TILEMAP_FLIPX|TILEMAP_FLIPY : 0); } diff --git a/src/mame/video/sauro.cpp b/src/mame/video/sauro.cpp index ceb33472191..c6b7965e3e8 100644 --- a/src/mame/video/sauro.cpp +++ b/src/mame/video/sauro.cpp @@ -65,9 +65,21 @@ TILE_GET_INFO_MEMBER(sauro_state::get_tile_info_fg) static const int scroll2_map[8] = {2, 1, 4, 3, 6, 5, 0, 7}; static const int scroll2_map_flip[8] = {0, 7, 2, 1, 4, 3, 6, 5}; -WRITE8_MEMBER(sauro_state::sauro_palette_bank_w) +WRITE_LINE_MEMBER(sauro_state::sauro_palette_bank0_w) { - m_palette_bank = (data & 0x03) << 4; + if (state) + m_palette_bank |= 0x10; + else + m_palette_bank &= ~0x10; + machine().tilemap().mark_all_dirty(); +} + +WRITE_LINE_MEMBER(sauro_state::sauro_palette_bank1_w) +{ + if (state) + m_palette_bank |= 0x20; + else + m_palette_bank &= ~0x20; machine().tilemap().mark_all_dirty(); } diff --git a/src/mame/video/skydiver.cpp b/src/mame/video/skydiver.cpp index 4e58f9c735d..6b5c1dcd49b 100644 --- a/src/mame/video/skydiver.cpp +++ b/src/mame/video/skydiver.cpp @@ -13,21 +13,6 @@ void skydiver_state::machine_reset() { - address_space &space = m_maincpu->space(AS_PROGRAM); - - /* reset all latches */ - start_lamp_1_w(space, 0, 0); - start_lamp_2_w(space, 0, 0); - lamp_s_w(space, 0, 0); - lamp_k_w(space, 0, 0); - lamp_y_w(space, 0, 0); - lamp_d_w(space, 0, 0); - output().set_value("lampi", 0); - output().set_value("lampv", 0); - output().set_value("lampe", 0); - output().set_value("lampr", 0); - width_w(space, 0, 0); - coin_lockout_w(space, 0, 0); } @@ -84,79 +69,73 @@ WRITE8_MEMBER(skydiver_state::wram_w) } -WRITE8_MEMBER(skydiver_state::width_w) +WRITE_LINE_MEMBER(skydiver_state::width_w) { - m_width = offset; + m_width = state; } -WRITE8_MEMBER(skydiver_state::coin_lockout_w) +WRITE_LINE_MEMBER(skydiver_state::coin_lockout_w) { - machine().bookkeeping().coin_lockout_global_w(!offset); + machine().bookkeeping().coin_lockout_global_w(!state); } -WRITE8_MEMBER(skydiver_state::start_lamp_1_w) +WRITE_LINE_MEMBER(skydiver_state::start_lamp_1_w) { - output().set_led_value(0, offset); + output().set_led_value(0, state); } -WRITE8_MEMBER(skydiver_state::start_lamp_2_w) +WRITE_LINE_MEMBER(skydiver_state::start_lamp_2_w) { - output().set_led_value(1, offset); + output().set_led_value(1, state); } -WRITE8_MEMBER(skydiver_state::lamp_s_w) +WRITE_LINE_MEMBER(skydiver_state::lamp_s_w) { - output().set_value("lamps", offset); + output().set_value("lamps", state); } -WRITE8_MEMBER(skydiver_state::lamp_k_w) +WRITE_LINE_MEMBER(skydiver_state::lamp_k_w) { - output().set_value("lampk", offset); + output().set_value("lampk", state); } -WRITE8_MEMBER(skydiver_state::lamp_y_w) +WRITE_LINE_MEMBER(skydiver_state::lamp_y_w) { - output().set_value("lampy", offset); + output().set_value("lampy", state); } -WRITE8_MEMBER(skydiver_state::lamp_d_w) +WRITE_LINE_MEMBER(skydiver_state::lamp_d_w) { - output().set_value("lampd", offset); + output().set_value("lampd", state); } -WRITE8_MEMBER(skydiver_state::_2000_201F_w) +WRITE_LINE_MEMBER(skydiver_state::lamp_i_w) { - int bit = offset & 0x01; + output().set_value("lampi", state); +} - m_watchdog->reset_w(space,0,0); +WRITE_LINE_MEMBER(skydiver_state::lamp_v_w) +{ + output().set_value("lampv", state); +} - switch (offset & 0x0e) - { - case (0x02): - output().set_value("lampi", bit); - break; - case (0x04): - output().set_value("lampv", bit); - break; - case (0x06): - output().set_value("lampe", bit); - break; - case (0x08): - output().set_value("lampr", bit); - break; - case (0x0a): - m_discrete->write(space, SKYDIVER_OCT1_EN, bit); - break; - case (0x0c): - m_discrete->write(space, SKYDIVER_OCT2_EN, bit); - break; - case (0x0e): - m_discrete->write(space, SKYDIVER_NOISE_RST, bit); - break; - } +WRITE_LINE_MEMBER(skydiver_state::lamp_e_w) +{ + output().set_value("lampe", state); +} + +WRITE_LINE_MEMBER(skydiver_state::lamp_r_w) +{ + output().set_value("lampr", state); +} + +WRITE8_MEMBER(skydiver_state::latch3_watchdog_w) +{ + m_watchdog->reset_w(space, 0, 0); + m_latch3->write_a0(space, offset, 0); } diff --git a/src/mame/video/slapfght.cpp b/src/mame/video/slapfght.cpp index 3a584fab746..cd1ef5465e9 100644 --- a/src/mame/video/slapfght.cpp +++ b/src/mame/video/slapfght.cpp @@ -116,14 +116,14 @@ WRITE8_MEMBER(slapfght_state::scrolly_w) m_scrolly = data; } -WRITE8_MEMBER(slapfght_state::flipscreen_w) +WRITE_LINE_MEMBER(slapfght_state::flipscreen_w) { - flip_screen_set(offset ? 0 : 1); + flip_screen_set(state ? 0 : 1); } -WRITE8_MEMBER(slapfght_state::palette_bank_w) +WRITE_LINE_MEMBER(slapfght_state::palette_bank_w) { - m_palette_bank = offset; + m_palette_bank = state; } diff --git a/src/mame/video/sonson.cpp b/src/mame/video/sonson.cpp index 322c2010c6e..d27377b3756 100644 --- a/src/mame/video/sonson.cpp +++ b/src/mame/video/sonson.cpp @@ -114,9 +114,9 @@ WRITE8_MEMBER(sonson_state::sonson_scrollx_w) m_bg_tilemap->set_scrollx(row, data); } -WRITE8_MEMBER(sonson_state::sonson_flipscreen_w) +WRITE_LINE_MEMBER(sonson_state::flipscreen_w) { - flip_screen_set(~data & 0x01); + flip_screen_set(!state); } TILE_GET_INFO_MEMBER(sonson_state::get_bg_tile_info) diff --git a/src/mame/video/sprint8.cpp b/src/mame/video/sprint8.cpp index 1bd241cfb19..9971b6d627e 100644 --- a/src/mame/video/sprint8.cpp +++ b/src/mame/video/sprint8.cpp @@ -29,7 +29,7 @@ void sprint8_state::set_pens() { for (int i = 0; i < 0x10; i += 8) { - if (*m_team & 1) + if (m_team) { m_palette->set_indirect_color(i + 0, rgb_t(0xff, 0x00, 0x00)); /* red */ m_palette->set_indirect_color(i + 1, rgb_t(0x00, 0x00, 0xff)); /* blue */ diff --git a/src/mame/video/subs.cpp b/src/mame/video/subs.cpp index 513ab9ff8c6..7fb8c6bf2e4 100644 --- a/src/mame/video/subs.cpp +++ b/src/mame/video/subs.cpp @@ -10,9 +10,9 @@ #include "includes/subs.h" #include "sound/discrete.h" -WRITE8_MEMBER(subs_state::invert1_w) +WRITE_LINE_MEMBER(subs_state::invert1_w) { - if ((offset & 0x01) == 1) + if (state) { m_palette->set_pen_color(0, rgb_t(0x00, 0x00, 0x00)); m_palette->set_pen_color(1, rgb_t(0xFF, 0xFF, 0xFF)); @@ -24,9 +24,9 @@ WRITE8_MEMBER(subs_state::invert1_w) } } -WRITE8_MEMBER(subs_state::invert2_w) +WRITE_LINE_MEMBER(subs_state::invert2_w) { - if ((offset & 0x01) == 1) + if (state) { m_palette->set_pen_color(2, rgb_t(0x00, 0x00, 0x00)); m_palette->set_pen_color(3, rgb_t(0xFF, 0xFF, 0xFF)); diff --git a/src/mame/video/thepit.cpp b/src/mame/video/thepit.cpp index 1380261c9be..cafd9733df8 100644 --- a/src/mame/video/thepit.cpp +++ b/src/mame/video/thepit.cpp @@ -167,13 +167,11 @@ WRITE8_MEMBER(thepit_state::colorram_w) } -WRITE8_MEMBER(thepit_state::flip_screen_x_w) +WRITE_LINE_MEMBER(thepit_state::flip_screen_x_w) { - int flip; + m_flip_x = state; - m_flip_x = data & 0x01; - - flip = m_flip_x ? TILEMAP_FLIPX : 0; + int flip = m_flip_x ? TILEMAP_FLIPX : 0; if (m_flip_y) flip |= TILEMAP_FLIPY ; @@ -183,13 +181,11 @@ WRITE8_MEMBER(thepit_state::flip_screen_x_w) } -WRITE8_MEMBER(thepit_state::flip_screen_y_w) +WRITE_LINE_MEMBER(thepit_state::flip_screen_y_w) { - int flip; - - m_flip_y = data & 0x01; + m_flip_y = state; - flip = m_flip_x ? TILEMAP_FLIPX : 0; + int flip = m_flip_x ? TILEMAP_FLIPX : 0; if (m_flip_y) flip |= TILEMAP_FLIPY ; @@ -199,14 +195,11 @@ WRITE8_MEMBER(thepit_state::flip_screen_y_w) } -WRITE8_MEMBER(thepit_state::intrepid_graphics_bank_w) +WRITE_LINE_MEMBER(thepit_state::intrepid_graphics_bank_w) { - if (m_graphics_bank != (data & 0x01)) - { - m_graphics_bank = data & 0x01; + m_graphics_bank = state; - m_tilemap->mark_all_dirty(); - } + m_tilemap->mark_all_dirty(); } diff --git a/src/mame/video/timeplt.cpp b/src/mame/video/timeplt.cpp index ab1f46ba74f..f2c80dd4b62 100644 --- a/src/mame/video/timeplt.cpp +++ b/src/mame/video/timeplt.cpp @@ -166,14 +166,14 @@ WRITE8_MEMBER(timeplt_state::colorram_w) } -WRITE8_MEMBER(timeplt_state::flipscreen_w) +WRITE_LINE_MEMBER(timeplt_state::flipscreen_w) { - flip_screen_set(~data & 1); + flip_screen_set(!state); } -WRITE8_MEMBER(timeplt_state::video_enable_w) +WRITE_LINE_MEMBER(timeplt_state::video_enable_w) { - m_video_enable = data & 1; + m_video_enable = state; } READ8_MEMBER(timeplt_state::scanline_r) diff --git a/src/mame/video/tp84.cpp b/src/mame/video/tp84.cpp index 634262ae41b..d6534f36e43 100644 --- a/src/mame/video/tp84.cpp +++ b/src/mame/video/tp84.cpp @@ -183,8 +183,8 @@ uint32_t tp84_state::screen_update_tp84(screen_device &screen, bitmap_ind16 &bit m_bg_tilemap->set_scrollx(0, *m_scroll_x); m_bg_tilemap->set_scrolly(0, *m_scroll_y); - machine().tilemap().set_flip_all(((*m_flipscreen_x & 0x01) ? TILEMAP_FLIPX : 0) | - ((*m_flipscreen_y & 0x01) ? TILEMAP_FLIPY : 0)); + machine().tilemap().set_flip_all((m_flipscreen_x ? TILEMAP_FLIPX : 0) | + (m_flipscreen_y ? TILEMAP_FLIPY : 0)); } m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); diff --git a/src/mame/video/triplhnt.cpp b/src/mame/video/triplhnt.cpp index 79d8863f6e1..e1b95963282 100644 --- a/src/mame/video/triplhnt.cpp +++ b/src/mame/video/triplhnt.cpp @@ -28,7 +28,6 @@ void triplhnt_state::video_start() save_item(NAME(m_cmos)); save_item(NAME(m_da_latch)); - save_item(NAME(m_misc_flags)); save_item(NAME(m_cmos_latch)); save_item(NAME(m_hit_code)); save_item(NAME(m_sprite_zoom)); diff --git a/src/mame/video/tsamurai.cpp b/src/mame/video/tsamurai.cpp index c2e2bcb6452..9b59bcd4d8a 100644 --- a/src/mame/video/tsamurai.cpp +++ b/src/mame/video/tsamurai.cpp @@ -91,22 +91,16 @@ WRITE8_MEMBER(tsamurai_state::bgcolor_w) m_bgcolor = data; } -WRITE8_MEMBER(tsamurai_state::textbank1_w) +WRITE_LINE_MEMBER(tsamurai_state::textbank1_w) { - if( m_textbank1!=data ) - { - m_textbank1 = data; - m_foreground ->mark_all_dirty(); - } + m_textbank1 = state; + m_foreground->mark_all_dirty(); } -WRITE8_MEMBER(tsamurai_state::m660_textbank2_w) +WRITE_LINE_MEMBER(tsamurai_state::textbank2_w) { - if( m_textbank2!=data ) - { - m_textbank2 = data; - m_foreground ->mark_all_dirty(); - } + m_textbank2 = state; + m_foreground->mark_all_dirty(); } WRITE8_MEMBER(tsamurai_state::bg_videoram_w) diff --git a/src/mame/video/tubep.cpp b/src/mame/video/tubep.cpp index 63fb519ab92..9e4d72fd705 100644 --- a/src/mame/video/tubep.cpp +++ b/src/mame/video/tubep.cpp @@ -403,15 +403,23 @@ WRITE8_MEMBER(tubep_state::tubep_textram_w) } -WRITE8_MEMBER(tubep_state::tubep_background_romselect_w) +WRITE_LINE_MEMBER(tubep_state::screen_flip_w) { - m_background_romsel = data & 1; + // screen flip, active high } -WRITE8_MEMBER(tubep_state::tubep_colorproms_A4_line_w) +WRITE_LINE_MEMBER(tubep_state::background_romselect_w) { - m_color_A4 = (data & 1)<<4; + // 0->select roms: B1,B3,B5; 1->select roms: B2,B4,B6 + m_background_romsel = state; +} + + +WRITE_LINE_MEMBER(tubep_state::colorproms_A4_line_w) +{ + // line A4 (color proms address) state + m_color_A4 = state << 4; } diff --git a/src/mame/video/tutankhm.cpp b/src/mame/video/tutankhm.cpp index caa41b84e5d..8cd1a5a4bf6 100644 --- a/src/mame/video/tutankhm.cpp +++ b/src/mame/video/tutankhm.cpp @@ -18,15 +18,15 @@ * *************************************/ -WRITE8_MEMBER(tutankhm_state::tutankhm_flip_screen_x_w) +WRITE_LINE_MEMBER(tutankhm_state::flip_screen_x_w) { - m_flip_x = data & 0x01; + m_flip_x = state; } -WRITE8_MEMBER(tutankhm_state::tutankhm_flip_screen_y_w) +WRITE_LINE_MEMBER(tutankhm_state::flip_screen_y_w) { - m_flip_y = data & 0x01; + m_flip_y = state; } @@ -48,7 +48,7 @@ uint32_t tutankhm_state::screen_update_tutankhm(screen_device &screen, bitmap_rg for (int x = cliprect.min_x; x <= cliprect.max_x; x++) { uint8_t effx = x ^ xorx; - uint8_t yscroll = (effx < 192) ? *m_scroll : 0; + uint8_t yscroll = (effx < 192 && m_scroll.found()) ? *m_scroll : 0; uint8_t effy = (y ^ xory) + yscroll; uint8_t vrambyte = m_videoram[effy * 128 + effx / 2]; uint8_t shifted = vrambyte >> (4 * (effx % 2)); diff --git a/src/mame/video/wiping.cpp b/src/mame/video/wiping.cpp index 7b38928260c..89a69353254 100644 --- a/src/mame/video/wiping.cpp +++ b/src/mame/video/wiping.cpp @@ -79,9 +79,9 @@ PALETTE_INIT_MEMBER(wiping_state, wiping) -WRITE8_MEMBER(wiping_state::flipscreen_w) +WRITE_LINE_MEMBER(wiping_state::flipscreen_w) { - m_flipscreen = (data & 1); + m_flipscreen = state; } |