summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/midzeus.c
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2012-04-04 15:08:19 +0000
committer Miodrag Milanovic <mmicko@gmail.com>2012-04-04 15:08:19 +0000
commit7dabd8b524510582d7f6ee96f430395d2f60cb78 (patch)
tree9641ea5111636c5963ac77e7130ace2773ddd1a3 /src/mame/drivers/midzeus.c
parent62d9c8ba4fd4be6fc3225e8a3850526db7d78357 (diff)
MAME going modern part 5 (no whatsnew)
Tomorrow and next days just bug fixing from my side, no big changes
Diffstat (limited to 'src/mame/drivers/midzeus.c')
-rw-r--r--src/mame/drivers/midzeus.c129
1 files changed, 63 insertions, 66 deletions
diff --git a/src/mame/drivers/midzeus.c b/src/mame/drivers/midzeus.c
index 59f22c0a9f2..a49b034bcb3 100644
--- a/src/mame/drivers/midzeus.c
+++ b/src/mame/drivers/midzeus.c
@@ -126,25 +126,23 @@ static INTERRUPT_GEN( display_irq )
*
*************************************/
-static WRITE32_HANDLER( cmos_w )
+WRITE32_MEMBER(midzeus_state::cmos_w)
{
- midzeus_state *state = space->machine().driver_data<midzeus_state>();
if (bitlatch[2] && !cmos_protected)
- COMBINE_DATA(&state->m_nvram[offset]);
+ COMBINE_DATA(&m_nvram[offset]);
else
- logerror("%06X:timekeeper_w with bitlatch[2] = %d, cmos_protected = %d\n", cpu_get_pc(&space->device()), bitlatch[2], cmos_protected);
+ logerror("%06X:timekeeper_w with bitlatch[2] = %d, cmos_protected = %d\n", cpu_get_pc(&space.device()), bitlatch[2], cmos_protected);
cmos_protected = TRUE;
}
-static READ32_HANDLER( cmos_r )
+READ32_MEMBER(midzeus_state::cmos_r)
{
- midzeus_state *state = space->machine().driver_data<midzeus_state>();
- return state->m_nvram[offset] | 0xffffff00;
+ return m_nvram[offset] | 0xffffff00;
}
-static WRITE32_HANDLER( cmos_protect_w )
+WRITE32_MEMBER(midzeus_state::cmos_protect_w)
{
cmos_protected = FALSE;
}
@@ -174,20 +172,18 @@ static WRITE32_DEVICE_HANDLER( zeus2_timekeeper_w )
}
-static READ32_HANDLER( zpram_r )
+READ32_MEMBER(midzeus_state::zpram_r)
{
- midzeus_state *state = space->machine().driver_data<midzeus_state>();
- return state->m_nvram[offset] | 0xffffff00;
+ return m_nvram[offset] | 0xffffff00;
}
-static WRITE32_HANDLER( zpram_w )
+WRITE32_MEMBER(midzeus_state::zpram_w)
{
- midzeus_state *state = space->machine().driver_data<midzeus_state>();
if (bitlatch[2])
- COMBINE_DATA(&state->m_nvram[offset]);
+ COMBINE_DATA(&m_nvram[offset]);
else
- logerror("%06X:zpram_w with bitlatch[2] = %d\n", cpu_get_pc(&space->device()), bitlatch[2]);
+ logerror("%06X:zpram_w with bitlatch[2] = %d\n", cpu_get_pc(&space.device()), bitlatch[2]);
}
@@ -198,7 +194,7 @@ static WRITE32_HANDLER( zpram_w )
*
*************************************/
-static READ32_HANDLER( bitlatches_r )
+READ32_MEMBER(midzeus_state::bitlatches_r)
{
switch (offset)
{
@@ -228,14 +224,14 @@ static READ32_HANDLER( bitlatches_r )
/* unknown purpose */
default:
- logerror("%06X:bitlatches_r(%X)\n", cpu_get_pc(&space->device()), offset);
+ logerror("%06X:bitlatches_r(%X)\n", cpu_get_pc(&space.device()), offset);
break;
}
return ~0;
}
-static WRITE32_HANDLER( bitlatches_w )
+WRITE32_MEMBER(midzeus_state::bitlatches_w)
{
UINT32 oldval = bitlatch[offset];
bitlatch[offset] = data;
@@ -245,19 +241,19 @@ static WRITE32_HANDLER( bitlatches_w )
/* unknown purpose */
default:
if (oldval ^ data)
- logerror("%06X:bitlatches_w(%X) = %X\n", cpu_get_pc(&space->device()), offset, data);
+ logerror("%06X:bitlatches_w(%X) = %X\n", cpu_get_pc(&space.device()), offset, data);
break;
/* unknown purpose; crusnexo toggles this between 0 and 1 every 20 frames; thegrid writes 1 */
case 0:
if (data != 0 && data != 1)
- logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space->device()), offset, data);
+ logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space.device()), offset, data);
break;
/* unknown purpose; mk4/invasn write 1 here at initialization; crusnexo/thegrid write 3 */
case 1:
if (data != 1 && data != 3)
- logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space->device()), offset, data);
+ logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space.device()), offset, data);
break;
/* CMOS/ZPRAM extra enable latch; only low bit is used */
@@ -267,30 +263,30 @@ static WRITE32_HANDLER( bitlatches_w )
/* unknown purpose; invasn writes 2 here at startup */
case 4:
if (data != 2)
- logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space->device()), offset, data);
+ logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space.device()), offset, data);
break;
/* ROM bank selection on Zeus 2 */
case 5:
- memory_set_bank(space->machine(), "bank1", bitlatch[offset] & 3);
+ memory_set_bank(machine(), "bank1", bitlatch[offset] & 3);
break;
/* unknown purpose; crusnexo/thegrid write 1 at startup */
case 7:
if (data != 1)
- logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space->device()), offset, data);
+ logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space.device()), offset, data);
break;
/* unknown purpose; crusnexo writes 4 at startup; thegrid writes 6 */
case 8:
if (data != 4 && data != 6)
- logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space->device()), offset, data);
+ logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space.device()), offset, data);
break;
/* unknown purpose; thegrid writes 1 at startup */
case 9:
if (data != 1)
- logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space->device()), offset, data);
+ logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", cpu_get_pc(&space.device()), offset, data);
break;
}
}
@@ -303,14 +299,14 @@ static WRITE32_HANDLER( bitlatches_w )
*
*************************************/
-static READ32_HANDLER( crusnexo_leds_r )
+READ32_MEMBER(midzeus_state::crusnexo_leds_r)
{
/* reads appear to just be for synchronization */
return ~0;
}
-static WRITE32_HANDLER( crusnexo_leds_w )
+WRITE32_MEMBER(midzeus_state::crusnexo_leds_w)
{
int bit, led;
@@ -354,9 +350,9 @@ static WRITE32_HANDLER( crusnexo_leds_w )
// read 8d0003, check bit 1, skip some stuff if 0
// write junk to 9e0000
-static READ32_HANDLER( linkram_r )
+READ32_MEMBER(midzeus_state::linkram_r)
{
- logerror("%06X:unknown_8a000_r(%02X)\n", cpu_get_pc(&space->device()), offset);
+ logerror("%06X:unknown_8a000_r(%02X)\n", cpu_get_pc(&space.device()), offset);
if (offset == 0)
return 0x30313042;
else if (offset == 0x3c)
@@ -364,9 +360,9 @@ static READ32_HANDLER( linkram_r )
return linkram[offset];
}
-static WRITE32_HANDLER( linkram_w )
+WRITE32_MEMBER(midzeus_state::linkram_w)
{
- logerror("%06X:unknown_8a000_w(%02X) = %08X\n", cpu_get_pc(&space->device()), offset, data);
+ logerror("%06X:unknown_8a000_w(%02X) = %08X\n", cpu_get_pc(&space.device()), offset, data);
COMBINE_DATA(&linkram[offset]);
}
@@ -378,7 +374,7 @@ static WRITE32_HANDLER( linkram_w )
*
*************************************/
-static READ32_HANDLER( tms32031_control_r )
+READ32_MEMBER(midzeus_state::tms32031_control_r)
{
/* watch for accesses to the timers */
if (offset == 0x24 || offset == 0x34)
@@ -391,13 +387,13 @@ static READ32_HANDLER( tms32031_control_r )
/* log anything else except the memory control register */
if (offset != 0x64)
- logerror("%06X:tms32031_control_r(%02X)\n", cpu_get_pc(&space->device()), offset);
+ logerror("%06X:tms32031_control_r(%02X)\n", cpu_get_pc(&space.device()), offset);
return tms32031_control[offset];
}
-static WRITE32_HANDLER( tms32031_control_w )
+WRITE32_MEMBER(midzeus_state::tms32031_control_w)
{
COMBINE_DATA(&tms32031_control[offset]);
@@ -413,7 +409,7 @@ static WRITE32_HANDLER( tms32031_control_w )
timer[which]->adjust(attotime::never);
}
else
- logerror("%06X:tms32031_control_w(%02X) = %08X\n", cpu_get_pc(&space->device()), offset, data);
+ logerror("%06X:tms32031_control_w(%02X) = %08X\n", cpu_get_pc(&space.device()), offset, data);
}
@@ -433,7 +429,7 @@ static CUSTOM_INPUT( custom_49way_r )
}
-static WRITE32_HANDLER( keypad_select_w )
+WRITE32_MEMBER(midzeus_state::keypad_select_w)
{
if (offset == 1)
keypad_select = data;
@@ -460,16 +456,16 @@ static CUSTOM_INPUT( keypad_r )
*
*************************************/
-static READ32_HANDLER( analog_r )
+READ32_MEMBER(midzeus_state::analog_r)
{
static const char * const tags[] = { "ANALOG0", "ANALOG1", "ANALOG2", "ANALOG3" };
if (offset < 8 || offset > 11)
- logerror("%06X:analog_r(%X)\n", cpu_get_pc(&space->device()), offset);
- return input_port_read(space->machine(), tags[offset & 3]);
+ logerror("%06X:analog_r(%X)\n", cpu_get_pc(&space.device()), offset);
+ return input_port_read(machine(), tags[offset & 3]);
}
-static WRITE32_HANDLER( analog_w )
+WRITE32_MEMBER(midzeus_state::analog_w)
{
/* 16 writes to the location before a read */
}
@@ -508,7 +504,7 @@ static TIMER_CALLBACK( invasn_gun_callback )
}
-static WRITE32_HANDLER( invasn_gun_w )
+WRITE32_MEMBER(midzeus_state::invasn_gun_w)
{
UINT32 old_control = gun_control;
int player;
@@ -518,31 +514,31 @@ static WRITE32_HANDLER( invasn_gun_w )
/* bits 0-1 enable IRQs (?) */
/* bits 2-3 reset IRQ states */
gun_irq_state &= ~((gun_control >> 2) & 3);
- update_gun_irq(space->machine());
+ update_gun_irq(machine());
for (player = 0; player < 2; player++)
{
UINT8 pmask = 0x04 << player;
if (((old_control ^ gun_control) & pmask) != 0 && (gun_control & pmask) == 0)
{
- const rectangle &visarea = space->machine().primary_screen->visible_area();
+ const rectangle &visarea = machine().primary_screen->visible_area();
static const char *const names[2][2] =
{
{ "GUNX1", "GUNY1" },
{ "GUNX2", "GUNY2" }
};
- gun_x[player] = input_port_read(space->machine(), names[player][0]) * visarea.width() / 255 + visarea.min_x + BEAM_XOFFS;
- gun_y[player] = input_port_read(space->machine(), names[player][1]) * visarea.height() / 255 + visarea.min_y;
- gun_timer[player]->adjust(space->machine().primary_screen->time_until_pos(MAX(0, gun_y[player] - BEAM_DY), MAX(0, gun_x[player] - BEAM_DX)), player);
+ gun_x[player] = input_port_read(machine(), names[player][0]) * visarea.width() / 255 + visarea.min_x + BEAM_XOFFS;
+ gun_y[player] = input_port_read(machine(), names[player][1]) * visarea.height() / 255 + visarea.min_y;
+ gun_timer[player]->adjust(machine().primary_screen->time_until_pos(MAX(0, gun_y[player] - BEAM_DY), MAX(0, gun_x[player] - BEAM_DX)), player);
}
}
}
-static READ32_HANDLER( invasn_gun_r )
+READ32_MEMBER(midzeus_state::invasn_gun_r)
{
- int beamx = space->machine().primary_screen->hpos();
- int beamy = space->machine().primary_screen->vpos();
+ int beamx = machine().primary_screen->hpos();
+ int beamy = machine().primary_screen->vpos();
UINT32 result = 0xffff;
int player;
@@ -568,13 +564,13 @@ static ADDRESS_MAP_START( zeus_map, AS_PROGRAM, 32, midzeus_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x03ffff) AM_RAM AM_BASE_LEGACY(&ram_base)
AM_RANGE(0x400000, 0x41ffff) AM_RAM
- AM_RANGE(0x808000, 0x80807f) AM_READWRITE_LEGACY(tms32031_control_r, tms32031_control_w) AM_BASE_LEGACY(&tms32031_control)
+ AM_RANGE(0x808000, 0x80807f) AM_READWRITE(tms32031_control_r, tms32031_control_w) AM_BASE_LEGACY(&tms32031_control)
AM_RANGE(0x880000, 0x8803ff) AM_READWRITE_LEGACY(zeus_r, zeus_w) AM_BASE_LEGACY(&zeusbase)
- AM_RANGE(0x8d0000, 0x8d0004) AM_READWRITE_LEGACY(bitlatches_r, bitlatches_w)
+ AM_RANGE(0x8d0000, 0x8d0004) AM_READWRITE(bitlatches_r, bitlatches_w)
AM_RANGE(0x990000, 0x99000f) AM_READWRITE_LEGACY(midway_ioasic_r, midway_ioasic_w)
AM_RANGE(0x9e0000, 0x9e0000) AM_WRITENOP // watchdog?
- AM_RANGE(0x9f0000, 0x9f7fff) AM_READWRITE_LEGACY(cmos_r, cmos_w) AM_SHARE("nvram")
- AM_RANGE(0x9f8000, 0x9f8000) AM_WRITE_LEGACY(cmos_protect_w)
+ AM_RANGE(0x9f0000, 0x9f7fff) AM_READWRITE(cmos_r, cmos_w) AM_SHARE("nvram")
+ AM_RANGE(0x9f8000, 0x9f8000) AM_WRITE(cmos_protect_w)
AM_RANGE(0xa00000, 0xffffff) AM_ROM AM_REGION("user1", 0)
ADDRESS_MAP_END
@@ -583,16 +579,16 @@ static ADDRESS_MAP_START( zeus2_map, AS_PROGRAM, 32, midzeus_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x03ffff) AM_RAM AM_BASE_LEGACY(&ram_base)
AM_RANGE(0x400000, 0x43ffff) AM_RAM
- AM_RANGE(0x808000, 0x80807f) AM_READWRITE_LEGACY(tms32031_control_r, tms32031_control_w) AM_BASE_LEGACY(&tms32031_control)
+ AM_RANGE(0x808000, 0x80807f) AM_READWRITE(tms32031_control_r, tms32031_control_w) AM_BASE_LEGACY(&tms32031_control)
AM_RANGE(0x880000, 0x88007f) AM_READWRITE_LEGACY(zeus2_r, zeus2_w) AM_BASE_LEGACY(&zeusbase)
- AM_RANGE(0x8a0000, 0x8a003f) AM_READWRITE_LEGACY(linkram_r, linkram_w) AM_BASE_LEGACY(&linkram)
- AM_RANGE(0x8d0000, 0x8d000a) AM_READWRITE_LEGACY(bitlatches_r, bitlatches_w)
- AM_RANGE(0x900000, 0x91ffff) AM_READWRITE_LEGACY(zpram_r, zpram_w) AM_SHARE("nvram") AM_MIRROR(0x020000)
+ AM_RANGE(0x8a0000, 0x8a003f) AM_READWRITE(linkram_r, linkram_w) AM_BASE_LEGACY(&linkram)
+ AM_RANGE(0x8d0000, 0x8d000a) AM_READWRITE(bitlatches_r, bitlatches_w)
+ AM_RANGE(0x900000, 0x91ffff) AM_READWRITE(zpram_r, zpram_w) AM_SHARE("nvram") AM_MIRROR(0x020000)
AM_RANGE(0x990000, 0x99000f) AM_READWRITE_LEGACY(midway_ioasic_r, midway_ioasic_w)
- AM_RANGE(0x9c0000, 0x9c000f) AM_READWRITE_LEGACY(analog_r, analog_w)
+ AM_RANGE(0x9c0000, 0x9c000f) AM_READWRITE(analog_r, analog_w)
AM_RANGE(0x9e0000, 0x9e0000) AM_WRITENOP // watchdog?
AM_RANGE(0x9f0000, 0x9f7fff) AM_DEVREADWRITE_LEGACY("m48t35", zeus2_timekeeper_r, zeus2_timekeeper_w)
- AM_RANGE(0x9f8000, 0x9f8000) AM_WRITE_LEGACY(cmos_protect_w)
+ AM_RANGE(0x9f8000, 0x9f8000) AM_WRITE(cmos_protect_w)
AM_RANGE(0xa00000, 0xbfffff) AM_ROM AM_REGION("user1", 0)
AM_RANGE(0xc00000, 0xffffff) AM_ROMBANK("bank1") AM_REGION("user2", 0)
ADDRESS_MAP_END
@@ -1113,13 +1109,13 @@ static MACHINE_CONFIG_START( midzeus, midzeus_state )
MCFG_FRAGMENT_ADD(dcs2_audio_2104)
MACHINE_CONFIG_END
-static READ8_HANDLER( PIC16C5X_T0_clk_r )
+READ8_MEMBER(midzeus_state::PIC16C5X_T0_clk_r)
{
return 0;
}
static ADDRESS_MAP_START( pic_io_map, AS_IO, 8, midzeus_state )
- AM_RANGE(PIC16C5x_T0, PIC16C5x_T0) AM_READ_LEGACY(PIC16C5X_T0_clk_r)
+ AM_RANGE(PIC16C5x_T0, PIC16C5x_T0) AM_READ(PIC16C5X_T0_clk_r)
ADDRESS_MAP_END
@@ -1436,7 +1432,8 @@ static DRIVER_INIT( invasn )
{
dcs2_init(machine, 0, 0);
midway_ioasic_init(machine, MIDWAY_IOASIC_STANDARD, 468/* or 488 */, 94, NULL);
- machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0x9c0000, 0x9c0000, FUNC(invasn_gun_r), FUNC(invasn_gun_w));
+ midzeus_state *state = machine.driver_data<midzeus_state>();
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0x9c0000, 0x9c0000, read32_delegate(FUNC(midzeus_state::invasn_gun_r),state), write32_delegate(FUNC(midzeus_state::invasn_gun_w),state));
}
@@ -1445,9 +1442,9 @@ static DRIVER_INIT( crusnexo )
dcs2_init(machine, 0, 0);
midway_ioasic_init(machine, MIDWAY_IOASIC_STANDARD, 472/* or 476,477,478,110 */, 99, NULL);
memory_configure_bank(machine, "bank1", 0, 3, machine.region("user2")->base(), 0x400000*4);
-
- machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0x9b0004, 0x9b0007, FUNC(crusnexo_leds_r), FUNC(crusnexo_leds_w));
- machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler (0x8d0009, 0x8d000a, FUNC(keypad_select_w));
+ midzeus_state *state = machine.driver_data<midzeus_state>();
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0x9b0004, 0x9b0007, read32_delegate(FUNC(midzeus_state::crusnexo_leds_r),state), write32_delegate(FUNC(midzeus_state::crusnexo_leds_w),state));
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler (0x8d0009, 0x8d000a, write32_delegate(FUNC(midzeus_state::keypad_select_w),state));
}