diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2017-04-21 21:30:49 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2017-04-21 21:41:33 -0400 |
commit | e30034b35dae70f65b7f5bd9320e9aa76d673c40 (patch) | |
tree | 571d6ffc5e71593685c4e5413a75d46ebbe8259a | |
parent | 456d8c8921c560a27f83fbc96b4adf81429cacde (diff) |
segas32.cpp: Input modernization, phase 2
* Use Sega 315-5296 device for primary I/O
* Restore Coin 2 inputs to f1lap, radm, radr, slipstrm
* Identify onboard service inputs and restore them to practically all games
* Disable some (probably strictly unnecessary) address mirroring due to memory init thrashing when combined with DEVREADWRITE8(0x00ff) (nw)
Remove device clocks for 315-5296 (not used by the emulation) where not verified (nw)
-rw-r--r-- | src/mame/drivers/model2.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/segajw.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/segam1.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/segas32.cpp | 334 | ||||
-rw-r--r-- | src/mame/includes/segas32.h | 21 | ||||
-rw-r--r-- | src/mame/machine/315_5296.cpp | 3 |
6 files changed, 140 insertions, 230 deletions
diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index 88c12b3b9d3..c10056d5646 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -2543,12 +2543,12 @@ static MACHINE_CONFIG_DERIVED( srallyc, model2a ) MCFG_CPU_IO_MAP(drive_io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", model2_state, irq0_line_hold) - MCFG_DEVICE_ADD("driveio1", SEGA_315_5296, 16000000/4) //??? + MCFG_DEVICE_ADD("driveio1", SEGA_315_5296, 0) // unknown clock MCFG_315_5296_OUT_PORTD_CB(WRITE8(model2_state, driveio_port_w)) MCFG_315_5296_IN_PORTG_CB(READ8(model2_state, driveio_portg_r)) MCFG_315_5296_IN_PORTH_CB(READ8(model2_state, driveio_porth_r)) - MCFG_DEVICE_ADD("driveio2", SEGA_315_5296, 16000000/4) //??? + MCFG_DEVICE_ADD("driveio2", SEGA_315_5296, 0) // unknown clock MCFG_DEVICE_ADD("driveadc", MSM6253, 0) MACHINE_CONFIG_END diff --git a/src/mame/drivers/segajw.cpp b/src/mame/drivers/segajw.cpp index f2eb201ff46..6cce002e225 100644 --- a/src/mame/drivers/segajw.cpp +++ b/src/mame/drivers/segajw.cpp @@ -370,14 +370,14 @@ static MACHINE_CONFIG_START( segajw, segajw_state ) MCFG_NVRAM_ADD_NO_FILL("nvram") - MCFG_DEVICE_ADD("io1a", SEGA_315_5296, 8000000) // unknown clock + MCFG_DEVICE_ADD("io1a", SEGA_315_5296, 0) // unknown clock MCFG_315_5296_OUT_PORTA_CB(WRITE8(segajw_state, coin_counter_w)) MCFG_315_5296_OUT_PORTB_CB(WRITE8(segajw_state, lamps1_w)) MCFG_315_5296_OUT_PORTC_CB(WRITE8(segajw_state, lamps2_w)) MCFG_315_5296_OUT_PORTD_CB(WRITE8(segajw_state, hopper_w)) MCFG_315_5296_IN_PORTF_CB(READ8(segajw_state, coin_counter_r)) - MCFG_DEVICE_ADD("io1c", SEGA_315_5296, 8000000) // unknown clock + MCFG_DEVICE_ADD("io1c", SEGA_315_5296, 0) // unknown clock MCFG_315_5296_IN_PORTA_CB(IOPORT("IN0")) MCFG_315_5296_IN_PORTB_CB(IOPORT("IN1")) MCFG_315_5296_IN_PORTC_CB(IOPORT("IN2")) diff --git a/src/mame/drivers/segam1.cpp b/src/mame/drivers/segam1.cpp index 6c7069a785c..2560fd55265 100644 --- a/src/mame/drivers/segam1.cpp +++ b/src/mame/drivers/segam1.cpp @@ -92,8 +92,8 @@ static MACHINE_CONFIG_START( segam1, segam1_state ) MCFG_CPU_PROGRAM_MAP(segam1_map) // MCFG_CPU_VBLANK_INT_DRIVER("screen", segam1_state, irq1_line_hold) - MCFG_DEVICE_ADD("io1", SEGA_315_5296, 10000000) // ??? - MCFG_DEVICE_ADD("io2", SEGA_315_5296, 10000000) // ??? + MCFG_DEVICE_ADD("io1", SEGA_315_5296, 0) // unknown clock + MCFG_DEVICE_ADD("io2", SEGA_315_5296, 0) // unknown clock MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/segas32.cpp b/src/mame/drivers/segas32.cpp index 304630a2272..101608c19e9 100644 --- a/src/mame/drivers/segas32.cpp +++ b/src/mame/drivers/segas32.cpp @@ -536,6 +536,7 @@ orunners: Interleaved with the dj and << >> buttons is the data the drives the #include "machine/mb8421.h" //#include "machine/mb89352.h" #include "machine/msm6253.h" +#include "machine/315_5296.h" #include "sound/2612intf.h" #include "sound/rf5c68.h" @@ -559,12 +560,9 @@ segas32_state::segas32_state(const machine_config &mconfig, device_type type, co m_system32_videoram(*this,"videoram", 0), m_system32_spriteram(*this,"spriteram", 0), m_system32_paletteram(*this,"paletteram.%u", 0, uint8_t(0)), - m_ports_a(*this, {"P1_A", "P2_A", "PORTC_A", "PORTD_A", "SERVICE12_A", "SERVICE34_A", "PORTG_A", "PORTH_A"}), - m_ports_b(*this, {"P1_B", "P2_B", "PORTC_B", "PORTD_B", "SERVICE12_B", "SERVICE34_B", "PORTG_B", "PORTH_B"}), m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), m_multipcm(*this, "sega"), - m_eeprom(*this, "eeprom"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), @@ -597,6 +595,9 @@ segas32_state::segas32_state(const machine_config &mconfig, device_type type, co #define SOUND_IRQ_YM3438 0 #define SOUND_IRQ_V60 1 +#define AM_MIRROR_IS_SLOW(xxx) \ + /* replace this by AM_MIRROR to cause excessive slowdown in address_space::populate_from_map */ + /************************************* @@ -845,159 +846,60 @@ INTERRUPT_GEN_MEMBER(segas32_state::start_of_vblank_int) * *************************************/ -uint16_t segas32_state::common_io_chip_r(address_space &space, int which, offs_t offset, uint16_t mem_mask) -{ - offset &= 0x1f/2; - - switch (offset) - { - /* I/O ports */ - case 0x00/2: - case 0x02/2: - case 0x04/2: - case 0x06/2: - case 0x08/2: - case 0x0a/2: - case 0x0c/2: - case 0x0e/2: - /* if the port is configured as an output, return the last thing written */ - if (m_misc_io_data[which][0x1e/2] & (1 << offset)) - return m_misc_io_data[which][offset]; - - /* otherwise, return an input port */ - return (which ? m_ports_b : m_ports_a)[offset].read_safe(0xffff); - - /* 'SEGA' protection */ - case 0x10/2: - return 'S'; - case 0x12/2: - return 'E'; - case 0x14/2: - return 'G'; - case 0x16/2: - return 'A'; - - /* CNT register & mirror */ - case 0x18/2: - case 0x1c/2: - return m_misc_io_data[which][0x1c/2]; - - /* port direction register & mirror */ - case 0x1a/2: - case 0x1e/2: - return m_misc_io_data[which][0x1e/2]; - } - return 0xffff; -} - -void segas32_state::common_io_chip_w(address_space &space, int which, offs_t offset, uint16_t data, uint16_t mem_mask) +WRITE8_MEMBER(segas32_state::misc_output_0_w) { -// uint8_t old; - - /* only LSB matters */ - if (!ACCESSING_BITS_0_7) - return; - - /* generic implementation */ - offset &= 0x1f/2; -// old = m_misc_io_data[which][offset]; - m_misc_io_data[which][offset] = data; - - switch (offset) - { - /* I/O ports */ - case 0x00/2: - case 0x02/2: - case 0x04/2: - case 0x08/2: - case 0x0a/2: - case 0x0c/2: - if (m_sw2_output) - (this->*m_sw2_output)(which, data); - break; - - /* miscellaneous output */ - case 0x06/2: - if (m_sw1_output) - (this->*m_sw1_output)(which, data); + if (m_sw1_output) + (this->*m_sw1_output)(0, data); - if (which == 0) - { - m_eeprom->di_write((data & 0x80) >> 7); - m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); - m_eeprom->clk_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); - } -/* machine().bookkeeping().coin_lockout_w(1 + 2*which, data & 0x08); - machine().bookkeeping().coin_lockout_w(0 + 2*which, data & 0x04);*/ - machine().bookkeeping().coin_counter_w(1 + 2*which, data & 0x02); - machine().bookkeeping().coin_counter_w(0 + 2*which, data & 0x01); - break; - - /* tile banking */ - case 0x0e/2: - if (which == 0) - m_system32_tilebank_external = data; - else - { - /* multi-32 EEPROM access */ - m_eeprom->di_write((data & 0x80) >> 7); - m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); - m_eeprom->clk_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); - } - break; - - /* CNT register */ - case 0x1c/2: - m_system32_displayenable[which] = (data & 0x02); - if (which == 0) - m_soundcpu->set_input_line(INPUT_LINE_RESET, (data & 0x04) ? CLEAR_LINE : ASSERT_LINE); - break; - } + //machine().bookkeeping().coin_lockout_w(1 + 2*0, data & 0x08); + //machine().bookkeeping().coin_lockout_w(0 + 2*0, data & 0x04); + machine().bookkeeping().coin_counter_w(1 + 2*0, data & 0x02); + machine().bookkeeping().coin_counter_w(0 + 2*0, data & 0x01); } -READ16_MEMBER(segas32_state::io_chip_r) +WRITE8_MEMBER(segas32_state::misc_output_1_w) { - return common_io_chip_r(space, 0, offset, mem_mask); + if (m_sw1_output) + (this->*m_sw1_output)(1, data); + + //machine().bookkeeping().coin_lockout_w(1 + 2*1, data & 0x08); + //machine().bookkeeping().coin_lockout_w(0 + 2*1, data & 0x04); + machine().bookkeeping().coin_counter_w(1 + 2*1, data & 0x02); + machine().bookkeeping().coin_counter_w(0 + 2*1, data & 0x01); } -WRITE16_MEMBER(segas32_state::io_chip_w) +WRITE8_MEMBER(segas32_state::sw2_output_0_w) { - common_io_chip_w(space, 0, offset, data, mem_mask); + if (m_sw2_output) + (this->*m_sw2_output)(0, data); } -READ32_MEMBER(segas32_state::io_chip_0_r) +WRITE8_MEMBER(segas32_state::sw2_output_1_w) { - return common_io_chip_r(space, 0, offset*2+0, mem_mask) | - (common_io_chip_r(space, 0, offset*2+1, mem_mask >> 16) << 16); + if (m_sw2_output) + (this->*m_sw2_output)(1, data); } -WRITE32_MEMBER(segas32_state::io_chip_0_w) +WRITE8_MEMBER(segas32_state::tilebank_external_w) { - if (ACCESSING_BITS_0_15) - common_io_chip_w(space, 0, offset*2+0, data, mem_mask); - if (ACCESSING_BITS_16_31) - common_io_chip_w(space, 0, offset*2+1, data >> 16, mem_mask >> 16); + m_system32_tilebank_external = data; } -READ32_MEMBER(segas32_state::io_chip_1_r) +WRITE_LINE_MEMBER(segas32_state::display_enable_0_w) { - return common_io_chip_r(space, 1, offset*2+0, mem_mask) | - (common_io_chip_r(space, 1, offset*2+1, mem_mask >> 16) << 16); + m_system32_displayenable[0] = state; } -WRITE32_MEMBER(segas32_state::io_chip_1_w) +WRITE_LINE_MEMBER(segas32_state::display_enable_1_w) { - if (ACCESSING_BITS_0_15) - common_io_chip_w(space, 1, offset*2+0, data, mem_mask); - if (ACCESSING_BITS_16_31) - common_io_chip_w(space, 1, offset*2+1, data >> 16, mem_mask >> 16); + m_system32_displayenable[1] = state; } @@ -1270,8 +1172,8 @@ static ADDRESS_MAP_START( system32_map, AS_PROGRAM, 16, segas32_state ) AM_RANGE(0x800000, 0x800fff) AM_DEVREADWRITE8("s32comm", s32comm_device, share_r, share_w, 0x00ff) AM_RANGE(0x801000, 0x801001) AM_DEVREADWRITE8("s32comm", s32comm_device, cn_r, cn_w, 0x00ff) AM_RANGE(0x801002, 0x801003) AM_DEVREADWRITE8("s32comm", s32comm_device, fg_r, fg_w, 0x00ff) - AM_RANGE(0xc00000, 0xc0001f) AM_MIRROR(0x0fff80) AM_READWRITE(io_chip_r, io_chip_w) - AM_RANGE(0xc00040, 0xc0007f) AM_MIRROR(0x0fff80) AM_UNMAP // I/O expansion area + AM_RANGE(0xc00000, 0xc0001f) AM_MIRROR_IS_SLOW(0x0fff80) AM_DEVREADWRITE8("io_chip", sega_315_5296_device, read, write, 0x00ff) + AM_RANGE(0xc00040, 0xc0007f) AM_MIRROR_IS_SLOW(0x0fff80) AM_UNMAP // I/O expansion area AM_RANGE(0xd00000, 0xd0000f) AM_MIRROR(0x07fff0) AM_READWRITE(interrupt_control_16_r, interrupt_control_16_w) AM_RANGE(0xd80000, 0xdfffff) AM_READWRITE(random_number_16_r, random_number_16_w) AM_RANGE(0xf00000, 0xffffff) AM_ROM AM_REGION("maincpu", 0) @@ -1294,10 +1196,10 @@ static ADDRESS_MAP_START( multi32_map, AS_PROGRAM, 32, segas32_state ) AM_RANGE(0x800000, 0x800fff) AM_DEVREADWRITE8("s32comm", s32comm_device, share_r, share_w, 0x00ff00ff) AM_RANGE(0x801000, 0x801003) AM_DEVREADWRITE8("s32comm", s32comm_device, cn_r, cn_w, 0x000000ff) AM_RANGE(0x801000, 0x801003) AM_DEVREADWRITE8("s32comm", s32comm_device, fg_r, fg_w, 0x00ff0000) - AM_RANGE(0xc00000, 0xc0001f) AM_MIRROR(0x07ff80) AM_READWRITE(io_chip_0_r, io_chip_0_w) - AM_RANGE(0xc00040, 0xc0007f) AM_MIRROR(0x07ff80) AM_UNMAP // I/O expansion area 0 - AM_RANGE(0xc80000, 0xc8001f) AM_MIRROR(0x07ff80) AM_READWRITE(io_chip_1_r, io_chip_1_w) - AM_RANGE(0xc80040, 0xc8007f) AM_MIRROR(0x07ff80) AM_UNMAP // I/O expansion area 1 + AM_RANGE(0xc00000, 0xc0001f) AM_MIRROR_IS_SLOW(0x07ff80) AM_DEVREADWRITE8("io_chip_0", sega_315_5296_device, read, write, 0x00ff00ff) + AM_RANGE(0xc00040, 0xc0007f) AM_MIRROR_IS_SLOW(0x07ff80) AM_UNMAP // I/O expansion area 0 + AM_RANGE(0xc80000, 0xc8001f) AM_MIRROR_IS_SLOW(0x07ff80) AM_DEVREADWRITE8("io_chip_1", sega_315_5296_device, read, write, 0x00ff00ff) + AM_RANGE(0xc80040, 0xc8007f) AM_MIRROR_IS_SLOW(0x07ff80) AM_UNMAP // I/O expansion area 1 AM_RANGE(0xd00000, 0xd0000f) AM_MIRROR(0x07fff0) AM_READWRITE(interrupt_control_32_r, interrupt_control_32_w) AM_RANGE(0xd80000, 0xdfffff) AM_READWRITE(random_number_32_r, random_number_32_w) AM_RANGE(0xf00000, 0xffffff) AM_ROM AM_REGION("maincpu", 0) @@ -1409,10 +1311,8 @@ static INPUT_PORTS_START( system32_generic ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_START("mainpcb:PORTC_A") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("mainpcb:PORTD_A") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("mainpcb:SERVICE12_A") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) @@ -1425,45 +1325,37 @@ static INPUT_PORTS_START( system32_generic ) PORT_START("mainpcb:SERVICE34_A") PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 ) /* sometimes mirrors SERVICE1 */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE4 ) /* tends to also work as a test switch */ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Push SW1 (Service)") // on PCB + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME("Push SW2 (Test)") // on PCB PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("mainpcb:eeprom", eeprom_serial_93cxx_device, do_read) - - PORT_START("mainpcb:PORTG_A") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("mainpcb:PORTH_A") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END static INPUT_PORTS_START( system32_generic_slave ) PORT_START("slavepcb:P1_A") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) PORT_START("slavepcb:P2_A") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4) PORT_START("slavepcb:PORTC_A") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("slavepcb:PORTD_A") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("slavepcb:SERVICE12_A") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) @@ -1476,16 +1368,10 @@ static INPUT_PORTS_START( system32_generic_slave ) PORT_START("slavepcb:SERVICE34_A") PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 ) /* sometimes mirrors SERVICE1 */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE4 ) /* tends to also work as a test switch */ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("slavepcb:Push SW1 (Service)") PORT_CODE(KEYCODE_OPENBRACE) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("slavepcb:Push SW2 (Test)") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("slavepcb:eeprom", eeprom_serial_93cxx_device, do_read) - - PORT_START("slavepcb:PORTG_A") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("slavepcb:PORTH_A") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END static INPUT_PORTS_START( multi32_generic ) @@ -1500,9 +1386,6 @@ static INPUT_PORTS_START( multi32_generic ) PORT_START("mainpcb:PORTC_B") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("mainpcb:PORTD_B") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_MODIFY("mainpcb:SERVICE12_A") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -1515,14 +1398,10 @@ static INPUT_PORTS_START( multi32_generic ) PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("mainpcb:SERVICE34_B") - PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x4f, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Push SW3 (Service)") PORT_CODE(KEYCODE_OPENBRACE) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Push SW4 (Test)") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("mainpcb:eeprom", eeprom_serial_93cxx_device, do_read) - - PORT_START("mainpcb:PORTG_B") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("mainpcb:PORTH_B") - PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END @@ -1720,6 +1599,15 @@ INPUT_PORTS_END static INPUT_PORTS_START( dbzvrvs ) PORT_INCLUDE( system32_generic ) + + PORT_START("mainpcb:ANALOG1") + PORT_BIT( 0xff, 0xff, IPT_UNKNOWN ) + + PORT_START("mainpcb:ANALOG2") + PORT_BIT( 0xff, 0xff, IPT_UNKNOWN ) + + PORT_START("mainpcb:ANALOG3") + PORT_BIT( 0xff, 0xff, IPT_UNKNOWN ) INPUT_PORTS_END @@ -1751,7 +1639,6 @@ static INPUT_PORTS_START( f1en ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("mainpcb:ANALOG1") PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_NAME("mainpcb:Steering Wheel") @@ -1789,7 +1676,6 @@ static INPUT_PORTS_START( f1en ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("slavepcb:ANALOG1") PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_NAME("slavepcb:Steering Wheel") PORT_PLAYER(2) @@ -1816,7 +1702,6 @@ static INPUT_PORTS_START( f1lap ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("mainpcb:SERVICE12_A") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("mainpcb:SERVICE34_A") @@ -1832,15 +1717,6 @@ static INPUT_PORTS_START( f1lap ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) // service coin mirror - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) // seems to be a service switch mirror - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("mainpcb:ANALOG1") PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(20) PORT_NAME("mainpcb:Steering Wheel") @@ -1995,6 +1871,10 @@ static INPUT_PORTS_START( jpark ) PORT_MODIFY("mainpcb:P2_A") PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_MODIFY("mainpcb:PORTC_A") + PORT_BIT( 0x07, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT ) PORT_NAME("Emergency") // recognized in input test only? + PORT_START("mainpcb:ANALOG1") PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) @@ -2102,7 +1982,6 @@ static INPUT_PORTS_START( radm ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("mainpcb:SERVICE12_A") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("mainpcb:SERVICE34_A") @@ -2118,7 +1997,6 @@ static INPUT_PORTS_START( radm ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("mainpcb:ANALOG1") PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) @@ -2142,7 +2020,6 @@ static INPUT_PORTS_START( radr ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("mainpcb:SERVICE12_A") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("mainpcb:SERVICE34_A") @@ -2158,7 +2035,6 @@ static INPUT_PORTS_START( radr ) PORT_DIPNAME( 0x08, 0x08, "Transmission" ) PORT_DIPSETTING( 0x08, "Manual" ) PORT_DIPSETTING( 0x00, "Automatic" ) - PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("mainpcb:ANALOG1") PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) @@ -2216,7 +2092,6 @@ static INPUT_PORTS_START( slipstrm ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("mainpcb:SERVICE12_A") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("mainpcb:SERVICE34_A") @@ -2232,7 +2107,6 @@ static INPUT_PORTS_START( slipstrm ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("mainpcb:ANALOG1") PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(30) PORT_KEYDELTA(10) @@ -2420,6 +2294,20 @@ static MACHINE_CONFIG_FRAGMENT( system32 ) MCFG_CPU_PROGRAM_MAP(system32_sound_map) MCFG_CPU_IO_MAP(system32_sound_portmap) + MCFG_DEVICE_ADD("io_chip", SEGA_315_5296, 0) // unknown clock + MCFG_315_5296_IN_PORTA_CB(IOPORT("P1_A")) + MCFG_315_5296_IN_PORTB_CB(IOPORT("P2_A")) + MCFG_315_5296_IN_PORTC_CB(IOPORT("PORTC_A")) + MCFG_315_5296_OUT_PORTD_CB(WRITE8(segas32_state, misc_output_0_w)) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(7) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(5) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(6) + MCFG_315_5296_IN_PORTE_CB(IOPORT("SERVICE12_A")) + MCFG_315_5296_IN_PORTF_CB(IOPORT("SERVICE34_A")) + MCFG_315_5296_OUT_PORTG_CB(WRITE8(segas32_state, sw2_output_0_w)) + MCFG_315_5296_OUT_PORTH_CB(WRITE8(segas32_state, tilebank_external_w)) + MCFG_315_5296_OUT_CNT1_CB(WRITELINE(segas32_state, display_enable_0_w)) + MCFG_315_5296_OUT_CNT2_CB(INPUTLINE("soundcpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") @@ -2473,7 +2361,7 @@ machine_config_constructor segas32_regular_state::device_mconfig_additions() con static ADDRESS_MAP_START( system32_analog_map, AS_PROGRAM, 16, segas32_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0xc00050, 0xc00057) AM_DEVREADWRITE8("adc", msm6253_device, d7_r, address_w, 0x00ff) + AM_RANGE(0xc00050, 0xc00057) AM_MIRROR_IS_SLOW(0x0fff80) AM_DEVREADWRITE8("adc", msm6253_device, d7_r, address_w, 0x00ff) AM_IMPORT_FROM(system32_map) ADDRESS_MAP_END @@ -2508,7 +2396,7 @@ machine_config_constructor segas32_analog_state::device_mconfig_additions() cons static ADDRESS_MAP_START( system32_trackball_map, AS_PROGRAM, 16, segas32_trackball_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0xc00040, 0xc0005f) AM_READWRITE8(sonic_custom_io_r, sonic_custom_io_w, 0x00ff) + AM_RANGE(0xc00040, 0xc0005f) AM_MIRROR_IS_SLOW(0x0fff80) AM_READWRITE8(sonic_custom_io_r, sonic_custom_io_w, 0x00ff) AM_IMPORT_FROM(system32_map) ADDRESS_MAP_END @@ -2538,7 +2426,7 @@ machine_config_constructor segas32_trackball_state::device_mconfig_additions() c static ADDRESS_MAP_START( system32_4player_map, AS_PROGRAM, 16, segas32_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0xc00060, 0xc00067) AM_DEVREADWRITE8("ppi", i8255_device, read, write, 0x00ff) + AM_RANGE(0xc00060, 0xc00067) AM_MIRROR_IS_SLOW(0x0fff80) AM_DEVREADWRITE8("ppi", i8255_device, read, write, 0x00ff) AM_IMPORT_FROM(system32_map) ADDRESS_MAP_END @@ -2649,8 +2537,8 @@ WRITE8_MEMBER(segas32_cd_state::lamps2_w) static ADDRESS_MAP_START( system32_cd_map, AS_PROGRAM, 16, segas32_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0xc00040, 0xc0005f) AM_NOP //AM_DEVREADWRITE8("mb89352", mb89352_device, mb89352_r, mb89352_w, 0x00ff) - AM_RANGE(0xc00060, 0xc0006f) AM_DEVREADWRITE8("cxdio", cxd1095_device, read, write, 0x00ff) + AM_RANGE(0xc00040, 0xc0005f) AM_MIRROR_IS_SLOW(0x0fff80) AM_NOP //AM_DEVREADWRITE8("mb89352", mb89352_device, mb89352_r, mb89352_w, 0x00ff) + AM_RANGE(0xc00060, 0xc0006f) AM_MIRROR_IS_SLOW(0x0fff80) AM_DEVREADWRITE8("cxdio", cxd1095_device, read, write, 0x00ff) AM_IMPORT_FROM(system32_map) ADDRESS_MAP_END @@ -2693,6 +2581,31 @@ static MACHINE_CONFIG_FRAGMENT( multi32 ) MCFG_CPU_PROGRAM_MAP(multi32_sound_map) MCFG_CPU_IO_MAP(multi32_sound_portmap) + MCFG_DEVICE_ADD("io_chip_0", SEGA_315_5296, 0) // unknown clock + MCFG_315_5296_IN_PORTA_CB(IOPORT("P1_A")) + MCFG_315_5296_IN_PORTB_CB(IOPORT("P2_A")) + MCFG_315_5296_IN_PORTC_CB(IOPORT("PORTC_A")) + MCFG_315_5296_OUT_PORTD_CB(WRITE8(segas32_state, misc_output_0_w)) + MCFG_315_5296_IN_PORTE_CB(IOPORT("SERVICE12_A")) + MCFG_315_5296_IN_PORTF_CB(IOPORT("SERVICE34_A")) + MCFG_315_5296_OUT_PORTG_CB(WRITE8(segas32_state, sw2_output_0_w)) + MCFG_315_5296_OUT_PORTH_CB(WRITE8(segas32_state, tilebank_external_w)) + MCFG_315_5296_OUT_CNT1_CB(WRITELINE(segas32_state, display_enable_0_w)) + MCFG_315_5296_OUT_CNT2_CB(INPUTLINE("soundcpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT + + MCFG_DEVICE_ADD("io_chip_1", SEGA_315_5296, 0) // unknown clock + MCFG_315_5296_IN_PORTA_CB(IOPORT("P1_B")) + MCFG_315_5296_IN_PORTB_CB(IOPORT("P2_B")) + MCFG_315_5296_IN_PORTC_CB(IOPORT("PORTC_B")) + MCFG_315_5296_OUT_PORTD_CB(WRITE8(segas32_state, misc_output_1_w)) + MCFG_315_5296_IN_PORTE_CB(IOPORT("SERVICE12_B")) + MCFG_315_5296_IN_PORTF_CB(IOPORT("SERVICE34_B")) + MCFG_315_5296_OUT_PORTG_CB(WRITE8(segas32_state, sw2_output_1_w)) + MCFG_315_5296_OUT_PORTH_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(7) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(5) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(6) + MCFG_315_5296_OUT_CNT1_CB(WRITELINE(segas32_state, display_enable_1_w)) + MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") MCFG_TIMER_DRIVER_ADD("v60_irq0", segas32_state, signal_v60_irq_callback) @@ -2747,8 +2660,8 @@ machine_config_constructor sega_multi32_state::device_mconfig_additions() const static ADDRESS_MAP_START( multi32_analog_map, AS_PROGRAM, 32, sega_multi32_analog_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xffffff) - AM_RANGE(0xc00050, 0xc00057) AM_MIRROR(0x07ff80) AM_DEVREADWRITE8("adc", msm6253_device, d7_r, address_w, 0x00ff00ff) - AM_RANGE(0xc00060, 0xc00063) AM_MIRROR(0x07ff80) AM_WRITE8(analog_bank_w, 0x000000ff) + AM_RANGE(0xc00050, 0xc00057) AM_MIRROR_IS_SLOW(0x07ff80) AM_DEVREADWRITE8("adc", msm6253_device, d7_r, address_w, 0x00ff00ff) + AM_RANGE(0xc00060, 0xc00063) AM_MIRROR_IS_SLOW(0x07ff80) AM_WRITE8(analog_bank_w, 0x000000ff) AM_IMPORT_FROM(multi32_map) ADDRESS_MAP_END @@ -2797,7 +2710,7 @@ machine_config_constructor sega_multi32_analog_state::device_mconfig_additions() static ADDRESS_MAP_START( multi32_6player_map, AS_PROGRAM, 32, segas32_state ) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xffffff) - AM_RANGE(0xc00060, 0xc00067) AM_MIRROR(0x07ff80) AM_DEVREADWRITE8("ppi", i8255_device, read, write, 0x00ff00ff) + AM_RANGE(0xc00060, 0xc00067) AM_MIRROR_IS_SLOW(0x07ff80) AM_DEVREADWRITE8("ppi", i8255_device, read, write, 0x00ff00ff) AM_IMPORT_FROM(multi32_map) ADDRESS_MAP_END @@ -5570,6 +5483,7 @@ void segas32_state::init_dbzvrvs(void) /* install protection handlers */ m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa00000, 0xa7ffff, read16_delegate(FUNC(segas32_state::dbzvrvs_protection_r),this), write16_delegate(FUNC(segas32_state::dbzvrvs_protection_w),this)); + // 0x810000 to 0x8107ff = link RAM? probably not a dual cabinet, though... } @@ -5742,7 +5656,7 @@ GAME( 1992, brivalj, brival, sega_system32_4p, brival, segas32_new_state, GAME( 1992, darkedge, 0, sega_system32_4p, darkedge, segas32_new_state, darkedge, ROT0, "Sega", "Dark Edge (World)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1992, darkedgej, darkedge, sega_system32_4p, darkedge, segas32_new_state, darkedge, ROT0, "Sega", "Dark Edge (Japan)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1994, dbzvrvs, 0, sega_system32, dbzvrvs, segas32_new_state, dbzvrvs, ROT0, "Sega / Banpresto", "Dragon Ball Z V.R.V.S. (Japan)", MACHINE_IMPERFECT_GRAPHICS) +GAME( 1994, dbzvrvs, 0, sega_system32_analog, dbzvrvs, segas32_new_state, dbzvrvs, ROT0, "Sega / Banpresto", "Dragon Ball Z V.R.V.S. (Japan)", MACHINE_IMPERFECT_GRAPHICS) GAME( 1991, f1en, 0, sega_system32_dual_direct, f1en, segas32_new_state, f1en, ROT0, "Sega", "F1 Exhaust Note (World)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1991, f1enu, f1en, sega_system32_dual_direct, f1en, segas32_new_state, f1en, ROT0, "Sega", "F1 Exhaust Note (US)", MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/includes/segas32.h b/src/mame/includes/segas32.h index ce9f810b3fb..f3371b6c28e 100644 --- a/src/mame/includes/segas32.h +++ b/src/mame/includes/segas32.h @@ -6,7 +6,6 @@ ***************************************************************************/ -#include "machine/eepromser.h" #include "sound/multipcm.h" #include "machine/s32comm.h" #include "screen.h" @@ -26,13 +25,9 @@ public: required_shared_ptr<uint16_t> m_system32_spriteram; optional_shared_ptr_array<uint16_t, 2> m_system32_paletteram; - optional_ioport_array<8> m_ports_a; - optional_ioport_array<8> m_ports_b; - required_device<cpu_device> m_maincpu; required_device<cpu_device> m_soundcpu; optional_device<multipcm_device> m_multipcm; - required_device<eeprom_serial_93cxx_device> m_eeprom; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; @@ -70,7 +65,6 @@ public: uint8_t m_sound_irq_input; uint8_t m_sound_dummy_value; uint16_t m_sound_bank; - uint8_t m_misc_io_data[2][0x10]; sys32_output_callback m_sw1_output; sys32_output_callback m_sw2_output; sys32_output_callback m_sw3_output; @@ -132,12 +126,13 @@ public: DECLARE_WRITE16_MEMBER(interrupt_control_16_w); DECLARE_READ32_MEMBER(interrupt_control_32_r); DECLARE_WRITE32_MEMBER(interrupt_control_32_w); - DECLARE_READ16_MEMBER(io_chip_r); - DECLARE_WRITE16_MEMBER(io_chip_w); - DECLARE_READ32_MEMBER(io_chip_0_r); - DECLARE_WRITE32_MEMBER(io_chip_0_w); - DECLARE_READ32_MEMBER(io_chip_1_r); - DECLARE_WRITE32_MEMBER(io_chip_1_w); + DECLARE_WRITE8_MEMBER(misc_output_0_w); + DECLARE_WRITE8_MEMBER(misc_output_1_w); + DECLARE_WRITE8_MEMBER(sw2_output_0_w); + DECLARE_WRITE8_MEMBER(sw2_output_1_w); + DECLARE_WRITE8_MEMBER(tilebank_external_w); + DECLARE_WRITE_LINE_MEMBER(display_enable_0_w); + DECLARE_WRITE_LINE_MEMBER(display_enable_1_w); DECLARE_WRITE16_MEMBER(random_number_16_w); DECLARE_READ16_MEMBER(random_number_16_r); DECLARE_WRITE32_MEMBER(random_number_32_w); @@ -188,8 +183,6 @@ public: void update_irq_state(); void signal_v60_irq(int which); void int_control_w(address_space &space, int offset, uint8_t data); - uint16_t common_io_chip_r(address_space &space, int which, offs_t offset, uint16_t mem_mask); - void common_io_chip_w(address_space &space, int which, offs_t offset, uint16_t data, uint16_t mem_mask); void update_sound_irq_state(); void segas32_common_init(); void radm_sw1_output( int which, uint16_t data ); diff --git a/src/mame/machine/315_5296.cpp b/src/mame/machine/315_5296.cpp index 15621dc3cda..d51d0bcea77 100644 --- a/src/mame/machine/315_5296.cpp +++ b/src/mame/machine/315_5296.cpp @@ -190,7 +190,10 @@ WRITE8_MEMBER( sega_315_5296_device::write ) for (int i = 0; i < 8; i++) { if ((m_dir ^ data) & (1 << i)) + { + logerror("Port %c configured for output\n", 'A' + i); (*m_out_port_cb[i])((offs_t)i, (data & 1 << i) ? m_output_latch[i] : 0); + } } m_dir = data; |