From 1e21b12b9ecf1f6d8e5fca888fc930d6abceb4ab Mon Sep 17 00:00:00 2001 From: Fabio Priuli Date: Mon, 19 Apr 2010 08:00:59 +0000 Subject: [PATCH] Added driver data class and save states to playmark.c, powerbal.c, pushman.c and pzletime.c [Fabio Priuli] --- .gitattributes | 1 + src/mame/drivers/playmark.c | 246 ++++++++++++++------- src/mame/drivers/powerbal.c | 132 +++++++---- src/mame/drivers/pushman.c | 178 +++++++++------ src/mame/drivers/pzletime.c | 187 ++++++++++------ src/mame/includes/playmark.h | 61 +++++- src/mame/includes/pushman.h | 41 ++++ src/mame/video/playmark.c | 413 +++++++++++++++++++---------------- src/mame/video/pushman.c | 90 ++++---- 9 files changed, 847 insertions(+), 502 deletions(-) create mode 100644 src/mame/includes/pushman.h diff --git a/.gitattributes b/.gitattributes index 19782015e34..0d5785262d9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2745,6 +2745,7 @@ src/mame/includes/psikyo.h svneol=native#text/plain src/mame/includes/psikyo4.h svneol=native#text/plain src/mame/includes/psikyosh.h svneol=native#text/plain src/mame/includes/psx.h svneol=native#text/plain +src/mame/includes/pushman.h svneol=native#text/plain src/mame/includes/qix.h svneol=native#text/plain src/mame/includes/raiden2.h svneol=native#text/plain src/mame/includes/rainbow.h svneol=native#text/plain diff --git a/src/mame/drivers/playmark.c b/src/mame/drivers/playmark.c index b35de70698d..cfaac7c0859 100644 --- a/src/mame/drivers/playmark.c +++ b/src/mame/drivers/playmark.c @@ -47,21 +47,15 @@ TODO: #include "includes/playmark.h" -static UINT16 playmark_snd_command; -static UINT16 playmark_snd_flag; -static UINT8 playmark_oki_control; -static UINT8 playmark_oki_command; - - static WRITE16_HANDLER( coinctrl_w ) { if (ACCESSING_BITS_8_15) { - coin_counter_w(space->machine, 0,data & 0x0100); - coin_counter_w(space->machine, 1,data & 0x0200); + coin_counter_w(space->machine, 0, data & 0x0100); + coin_counter_w(space->machine, 1, data & 0x0200); } if (data & 0xfcff) - logerror("Writing %04x to unknown coin control bits\n",data); + logerror("Writing %04x to unknown coin control bits\n", data); } @@ -86,62 +80,69 @@ static const eeprom_interface eeprom_intf = static WRITE16_HANDLER( wbeachvl_coin_eeprom_w ) { + playmark_state *state = (playmark_state *)space->machine->driver_data; + if (ACCESSING_BITS_0_7) { - running_device *eeprom = devtag_get_device(space->machine, "eeprom"); - /* bits 0-3 are coin counters? (only 0 used?) */ - coin_counter_w(space->machine, 0,data & 0x01); - coin_counter_w(space->machine, 1,data & 0x02); - coin_counter_w(space->machine, 2,data & 0x04); - coin_counter_w(space->machine, 3,data & 0x08); + coin_counter_w(space->machine, 0, data & 0x01); + coin_counter_w(space->machine, 1, data & 0x02); + coin_counter_w(space->machine, 2, data & 0x04); + coin_counter_w(space->machine, 3, data & 0x08); /* bits 5-7 control EEPROM */ - eeprom_set_cs_line(eeprom, (data & 0x20) ? CLEAR_LINE : ASSERT_LINE); - eeprom_write_bit(eeprom, data & 0x80); - eeprom_set_clock_line(eeprom, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE); + eeprom_set_cs_line(state->eeprom, (data & 0x20) ? CLEAR_LINE : ASSERT_LINE); + eeprom_write_bit(state->eeprom, data & 0x80); + eeprom_set_clock_line(state->eeprom, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE); } } static WRITE16_HANDLER( hotmind_coin_eeprom_w ) { + playmark_state *state = (playmark_state *)space->machine->driver_data; + if (ACCESSING_BITS_0_7) { - running_device *eeprom = devtag_get_device(space->machine, "eeprom"); coin_counter_w(space->machine, 0,data & 0x20); - eeprom_set_cs_line(eeprom, (data & 1) ? CLEAR_LINE : ASSERT_LINE); - eeprom_write_bit(eeprom, data & 4); - eeprom_set_clock_line(eeprom, (data & 2) ? ASSERT_LINE : CLEAR_LINE ); + eeprom_set_cs_line(state->eeprom, (data & 1) ? CLEAR_LINE : ASSERT_LINE); + eeprom_write_bit(state->eeprom, data & 4); + eeprom_set_clock_line(state->eeprom, (data & 2) ? ASSERT_LINE : CLEAR_LINE ); } } static WRITE16_HANDLER( hrdtimes_coin_w ) { - coin_counter_w(space->machine, 0,data & 0x01); - coin_counter_w(space->machine, 1,data & 0x02); + coin_counter_w(space->machine, 0, data & 0x01); + coin_counter_w(space->machine, 1, data & 0x02); } static WRITE16_HANDLER( playmark_snd_command_w ) { - if (ACCESSING_BITS_0_7) { - playmark_snd_command = (data & 0xff); - playmark_snd_flag = 1; + playmark_state *state = (playmark_state *)space->machine->driver_data; + + if (ACCESSING_BITS_0_7) + { + state->snd_command = (data & 0xff); + state->snd_flag = 1; cpu_yield(space->cpu); } } static READ8_HANDLER( playmark_snd_command_r ) { + playmark_state *state = (playmark_state *)space->machine->driver_data; int data = 0; - if ((playmark_oki_control & 0x38) == 0x30) { - data = playmark_snd_command; -// logerror("PC$%03x PortB reading %02x from the 68K\n",cpu_get_previouspc(space->cpu),data); + if ((state->oki_control & 0x38) == 0x30) + { + data = state->snd_command; + // logerror("PC$%03x PortB reading %02x from the 68K\n", cpu_get_previouspc(space->cpu), data); } - else if ((playmark_oki_control & 0x38) == 0x28) { - data = (okim6295_r(devtag_get_device(space->machine, "oki"),0) & 0x0f); -// logerror("PC$%03x PortB reading %02x from the OKI status port\n",cpu_get_previouspc(space->cpu),data); + else if ((state->oki_control & 0x38) == 0x28) + { + data = (okim6295_r(state->oki, 0) & 0x0f); + // logerror("PC$%03x PortB reading %02x from the OKI status port\n", cpu_get_previouspc(space->cpu), data); } return data; @@ -149,8 +150,11 @@ static READ8_HANDLER( playmark_snd_command_r ) static READ8_HANDLER( playmark_snd_flag_r ) { - if (playmark_snd_flag) { - playmark_snd_flag = 0; + playmark_state *state = (playmark_state *)space->machine->driver_data; + + if (state->snd_flag) + { + state->snd_flag = 0; return 0x00; } @@ -160,26 +164,28 @@ static READ8_HANDLER( playmark_snd_flag_r ) static WRITE8_DEVICE_HANDLER( playmark_oki_banking_w ) { - static int old_bank = 0; + playmark_state *state = (playmark_state *)device->machine->driver_data; - if(old_bank != (data & 7)) + if (state->old_oki_bank != (data & 7)) { - old_bank = data & 7; + state->old_oki_bank = data & 7; - if(((old_bank - 1) * 0x40000) < memory_region_length(device->machine, "oki")) + if (((state->old_oki_bank - 1) * 0x40000) < memory_region_length(device->machine, "oki")) { - okim6295_set_bank_base(device, 0x40000 * (old_bank - 1)); + okim6295_set_bank_base(device, 0x40000 * (state->old_oki_bank - 1)); } } } static WRITE8_HANDLER( playmark_oki_w ) { - playmark_oki_command = data; + playmark_state *state = (playmark_state *)space->machine->driver_data; + state->oki_command = data; } static WRITE8_DEVICE_HANDLER( playmark_snd_control_w ) { + playmark_state *state = (playmark_state *)device->machine->driver_data; // const address_space *space = cputag_get_address_space(device->machine, "audiocpu", ADDRESS_SPACE_PROGRAM); /* This port controls communications to and from the 68K, and the OKI @@ -195,12 +201,12 @@ static WRITE8_DEVICE_HANDLER( playmark_snd_control_w ) 1 Not used 0 Not used */ - playmark_oki_control = data; + state->oki_control = data; if ((data & 0x38) == 0x18) { -// logerror("PC$%03x Writing %02x to OKI1, PortC=%02x, Code=%02x\n",cpu_get_previouspc(space->cpu),playmark_oki_command,playmark_oki_control,playmark_snd_command); - okim6295_w(device, 0, playmark_oki_command); + // logerror("PC$%03x Writing %02x to OKI1, PortC=%02x, Code=%02x\n",cpu_get_previouspc(space->cpu),playmark_oki_command,playmark_oki_control,playmark_snd_command); + okim6295_w(device, 0, state->oki_command); } } @@ -216,14 +222,14 @@ static READ8_HANDLER( PIC16C5X_T0_clk_r ) static ADDRESS_MAP_START( bigtwin_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x304000, 0x304001) AM_NOP /* watchdog? irq ack? */ - AM_RANGE(0x440000, 0x4403ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x500000, 0x500fff) AM_WRITE(wbeachvl_fgvideoram_w) AM_BASE(&wbeachvl_videoram2) + AM_RANGE(0x440000, 0x4403ff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) + AM_RANGE(0x500000, 0x500fff) AM_WRITE(wbeachvl_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2) AM_RANGE(0x501000, 0x501fff) AM_WRITENOP /* unused RAM? */ - AM_RANGE(0x502000, 0x503fff) AM_WRITE(wbeachvl_txvideoram_w) AM_BASE(&wbeachvl_videoram1) + AM_RANGE(0x502000, 0x503fff) AM_WRITE(wbeachvl_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) AM_RANGE(0x504000, 0x50ffff) AM_WRITENOP /* unused RAM? */ AM_RANGE(0x510000, 0x51000b) AM_WRITE(bigtwin_scroll_w) AM_RANGE(0x51000c, 0x51000d) AM_WRITENOP /* always 3? */ - AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE(&bigtwin_bgvideoram) + AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE_MEMBER(playmark_state, bgvideoram) AM_RANGE(0x700010, 0x700011) AM_READ_PORT("SYSTEM") AM_RANGE(0x700012, 0x700013) AM_READ_PORT("P1") AM_RANGE(0x700014, 0x700015) AM_READ_PORT("P2") @@ -238,11 +244,11 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( wbeachvl_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x440000, 0x440fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(wbeachvl_bgvideoram_w) AM_BASE(&wbeachvl_videoram3) - AM_RANGE(0x504000, 0x505fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE(&wbeachvl_videoram2) - AM_RANGE(0x508000, 0x509fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE(&wbeachvl_videoram1) - AM_RANGE(0x50f000, 0x50ffff) AM_RAM AM_BASE(&wbeachvl_rowscroll) + AM_RANGE(0x440000, 0x440fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) + AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(wbeachvl_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram3) + AM_RANGE(0x504000, 0x505fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2) + AM_RANGE(0x508000, 0x509fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) + AM_RANGE(0x50f000, 0x50ffff) AM_RAM AM_BASE_MEMBER(playmark_state, rowscroll) AM_RANGE(0x510000, 0x51000b) AM_WRITE(wbeachvl_scroll_w) AM_RANGE(0x51000c, 0x51000d) AM_WRITENOP /* 2 and 3 */ // AM_RANGE(0x700000, 0x700001) ?? written on startup @@ -261,12 +267,12 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( excelsr_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x2fffff) AM_ROM AM_RANGE(0x304000, 0x304001) AM_WRITENOP /* watchdog? irq ack? */ - AM_RANGE(0x440000, 0x440cff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE(&wbeachvl_videoram2) - AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE(&wbeachvl_videoram1) + AM_RANGE(0x440000, 0x440cff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) + AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2) + AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) AM_RANGE(0x510000, 0x51000b) AM_WRITE(excelsr_scroll_w) AM_RANGE(0x51000c, 0x51000d) AM_WRITENOP /* 2 and 3 */ - AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE(&bigtwin_bgvideoram) + AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE_MEMBER(playmark_state, bgvideoram) AM_RANGE(0x700010, 0x700011) AM_READ_PORT("SYSTEM") AM_RANGE(0x700012, 0x700013) AM_READ_PORT("P1") AM_RANGE(0x700014, 0x700015) AM_READ_PORT("P2") @@ -280,11 +286,11 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( hotmind_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM - AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE(&wbeachvl_videoram3) - AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE(&wbeachvl_videoram2) - AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE(&wbeachvl_videoram1) + AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram3) + AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2) + AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) AM_RANGE(0x110000, 0x11000d) AM_WRITE(hrdtimes_scroll_w) - AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) + AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) AM_RANGE(0x280000, 0x2807ff) AM_RAM_WRITE(bigtwin_paletteram_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x300010, 0x300011) AM_READ_PORT("SYSTEM") AM_RANGE(0x300012, 0x300013) AM_READ_PORT("P1") @@ -300,11 +306,11 @@ static ADDRESS_MAP_START( hrdtimes_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x080000, 0x0bffff) AM_RAM AM_RANGE(0x0c0000, 0x0fffff) AM_ROM AM_REGION("maincpu", 0x0c0000) - AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE(&wbeachvl_videoram3) - AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE(&wbeachvl_videoram2) - AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE(&wbeachvl_videoram1) + AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram3) + AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2) + AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) AM_RANGE(0x110000, 0x11000d) AM_WRITE(hrdtimes_scroll_w) - AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) + AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) AM_RANGE(0x280000, 0x2807ff) AM_RAM_WRITE(bigtwin_paletteram_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x280800, 0x280fff) AM_RAM // unused AM_RANGE(0x300010, 0x300011) AM_READ_PORT("SYSTEM") @@ -894,13 +900,56 @@ static const gfx_layout hrdtimes_charlayout = static GFXDECODE_START( hrdtimes ) - GFXDECODE_ENTRY( "gfx2", 0, hrdtimes_tilelayout, 0x200, 32 ) /* colors 0x200-0x2ff */ - GFXDECODE_ENTRY( "gfx1", 0, hrdtimes_tilelayout, 0x000, 16 ) /* colors 0x000-0x0ff */ + GFXDECODE_ENTRY( "gfx2", 0, hrdtimes_tilelayout, 0x200, 32 ) /* colors 0x200-0x2ff */ + GFXDECODE_ENTRY( "gfx1", 0, hrdtimes_tilelayout, 0x000, 16 ) /* colors 0x000-0x0ff */ GFXDECODE_ENTRY( "gfx1", 0, hrdtimes_charlayout, 0x100, 8 ) /* colors 0x100-0x17f */ GFXDECODE_END +static MACHINE_START( playmark ) +{ + playmark_state *state = (playmark_state *)machine->driver_data; + + state->oki = devtag_get_device(machine, "oki"); + state->eeprom = devtag_get_device(machine, "eeprom"); + + state_save_register_global(machine, state->bgscrollx); + state_save_register_global(machine, state->bgscrolly); + state_save_register_global(machine, state->bg_enable); + state_save_register_global(machine, state->bg_full_size); + state_save_register_global(machine, state->fgscrollx); + state_save_register_global(machine, state->fg_rowscroll_enable); + state_save_register_global_array(machine, state->scroll); + + state_save_register_global(machine, state->snd_command); + state_save_register_global(machine, state->snd_flag); + state_save_register_global(machine, state->oki_control); + state_save_register_global(machine, state->oki_command); + state_save_register_global(machine, state->old_oki_bank); +} + +static MACHINE_RESET( playmark ) +{ + playmark_state *state = (playmark_state *)machine->driver_data; + + state->bgscrollx = 0; + state->bgscrolly = 0; + state->bg_enable = 0; + state->bg_full_size = 0; + state->fgscrollx = 0; + state->fg_rowscroll_enable = 0; + memset(state->scroll, 0, ARRAY_LENGTH(state->scroll)); + + state->snd_command = 0; + state->oki_control = 0; + state->oki_command = 0; + state->old_oki_bank = 0; +} + static MACHINE_DRIVER_START( bigtwin ) + /* driver data */ + MDRV_DRIVER_DATA(playmark_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */ MDRV_CPU_PROGRAM_MAP(bigtwin_main_map) @@ -910,6 +959,9 @@ static MACHINE_DRIVER_START( bigtwin ) /* Program and Data Maps are internal to the MCU */ MDRV_CPU_IO_MAP(playmark_sound_io_map) + MDRV_MACHINE_START(playmark) + MDRV_MACHINE_RESET(playmark) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(58) @@ -935,6 +987,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( wbeachvl ) + /* driver data */ + MDRV_DRIVER_DATA(playmark_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */ MDRV_CPU_PROGRAM_MAP(wbeachvl_main_map) @@ -947,6 +1002,9 @@ static MACHINE_DRIVER_START( wbeachvl ) MDRV_EEPROM_ADD("eeprom", eeprom_intf) MDRV_EEPROM_DEFAULT_VALUE(0) + MDRV_MACHINE_START(playmark) + MDRV_MACHINE_RESET(playmark) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(58) @@ -971,6 +1029,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( excelsr ) + /* driver data */ + MDRV_DRIVER_DATA(playmark_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */ MDRV_CPU_PROGRAM_MAP(excelsr_main_map) @@ -980,6 +1041,9 @@ static MACHINE_DRIVER_START( excelsr ) /* Program and Data Maps are internal to the MCU */ MDRV_CPU_IO_MAP(playmark_sound_io_map) + MDRV_MACHINE_START(playmark) + MDRV_MACHINE_RESET(playmark) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(58) @@ -1004,6 +1068,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( hotmind ) + /* driver data */ + MDRV_DRIVER_DATA(playmark_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) /* verified on pcb */ MDRV_CPU_PROGRAM_MAP(hotmind_main_map) @@ -1016,6 +1083,9 @@ static MACHINE_DRIVER_START( hotmind ) MDRV_EEPROM_ADD("eeprom", eeprom_intf) MDRV_EEPROM_DEFAULT_VALUE(0) + MDRV_MACHINE_START(playmark) + MDRV_MACHINE_RESET(playmark) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(58) @@ -1040,6 +1110,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( hrdtimes ) + /* driver data */ + MDRV_DRIVER_DATA(playmark_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) /* verified on pcb */ MDRV_CPU_PROGRAM_MAP(hrdtimes_main_map) @@ -1049,6 +1122,9 @@ static MACHINE_DRIVER_START( hrdtimes ) /* Program and Data Maps are internal to the MCU */ // MDRV_CPU_IO_MAP(playmark_sound_io_map) + MDRV_MACHINE_START(playmark) + MDRV_MACHINE_RESET(playmark) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(58) @@ -1391,15 +1467,15 @@ static UINT8 playmark_asciitohex(UINT8 data) static DRIVER_INIT( bigtwin ) { + playmark_state *state = (playmark_state *)machine->driver_data; UINT8 *playmark_PICROM_HEX = memory_region(machine, "user1"); UINT16 *playmark_PICROM = (UINT16 *)memory_region(machine, "audiocpu"); - INT32 offs, data; - UINT16 src_pos = 0; - UINT16 dst_pos = 0; - UINT8 data_hi, data_lo; + INT32 offs, data; + UINT16 src_pos = 0; + UINT16 dst_pos = 0; + UINT8 data_hi, data_lo; - - playmark_snd_flag = 0; + state->snd_flag = 0; /**** Convert the PIC16C57 ASCII HEX dumps to pure HEX ****/ do @@ -1414,12 +1490,14 @@ static DRIVER_INIT( bigtwin ) { data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 0])); data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 1])); - if ((data_hi <= 0x0f) && (data_lo <= 0x0f)) { - data = (data_hi << 4) | (data_lo << 0); + if ((data_hi <= 0x0f) && (data_lo <= 0x0f)) + { + data = (data_hi << 4) | (data_lo << 0); data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 2])); data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 3])); - if ((data_hi <= 0x0f) && (data_lo <= 0x0f)) { + if ((data_hi <= 0x0f) && (data_lo <= 0x0f)) + { data |= (data_hi << 12) | (data_lo << 8); playmark_PICROM[dst_pos] = data; dst_pos += 1; @@ -1440,7 +1518,7 @@ static DRIVER_INIT( bigtwin ) data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 0])); data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 1])); - data = (data_hi << 4) | (data_lo << 0); + data = (data_hi << 4) | (data_lo << 0); data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 2])); data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 3])); data |= (data_hi << 12) | (data_lo << 8); @@ -1453,10 +1531,10 @@ static DRIVER_INIT( bigtwin ) } while (src_pos < 0x2d4c); /* 0x2d4c is the size of the HEX rom loaded */ } -GAME( 1995, bigtwin, 0, bigtwin, bigtwin, bigtwin, ROT0, "Playmark", "Big Twin", GAME_NO_COCKTAIL ) -GAME( 1995, wbeachvl, 0, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 1)", GAME_NO_COCKTAIL | GAME_NO_SOUND ) -GAME( 1995, wbeachvl2,wbeachvl, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 2)", GAME_NO_COCKTAIL | GAME_NO_SOUND ) -GAME( 1996, excelsr, 0, excelsr, excelsr, bigtwin, ROT0, "Playmark", "Excelsior", 0 ) -GAME( 1995, hotmind, 0, hotmind, hotmind, bigtwin, ROT0, "Playmark", "Hot Mind", 0 ) -GAME( 1994, hrdtimes, 0, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 1)", GAME_NO_SOUND ) -GAME( 1994, hrdtimesa,hrdtimes, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 2)", GAME_NO_SOUND ) +GAME( 1995, bigtwin, 0, bigtwin, bigtwin, bigtwin, ROT0, "Playmark", "Big Twin", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) +GAME( 1995, wbeachvl, 0, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 1)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1995, wbeachvl2, wbeachvl, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 2)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1996, excelsr, 0, excelsr, excelsr, bigtwin, ROT0, "Playmark", "Excelsior", GAME_SUPPORTS_SAVE ) +GAME( 1995, hotmind, 0, hotmind, hotmind, bigtwin, ROT0, "Playmark", "Hot Mind", GAME_SUPPORTS_SAVE ) +GAME( 1994, hrdtimes, 0, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 1)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1994, hrdtimesa, hrdtimes, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 2)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/powerbal.c b/src/mame/drivers/powerbal.c index 65d7e5436da..787d1dcbb20 100644 --- a/src/mame/drivers/powerbal.c +++ b/src/mame/drivers/powerbal.c @@ -19,14 +19,6 @@ Magic Sticks: #include "sound/okim6295.h" #include "includes/playmark.h" -static tilemap_t *bg_tilemap; -static UINT16 *magicstk_videoram; -static int magicstk_tilebank; - -static int bg_yoffset; -static int xoffset; -static int yoffset; - static const eeprom_interface eeprom_intf = { 6, /* address bits */ @@ -44,7 +36,7 @@ static WRITE16_DEVICE_HANDLER( magicstk_coin_eeprom_w ) { if (ACCESSING_BITS_0_7) { - coin_counter_w(device->machine, 0,data & 0x20); + coin_counter_w(device->machine, 0, data & 0x20); eeprom_set_cs_line(device, (data & 8) ? CLEAR_LINE : ASSERT_LINE); eeprom_write_bit(device, data & 2); @@ -54,26 +46,30 @@ static WRITE16_DEVICE_HANDLER( magicstk_coin_eeprom_w ) static WRITE16_HANDLER( magicstk_bgvideoram_w ) { - COMBINE_DATA(&magicstk_videoram[offset]); - tilemap_mark_tile_dirty(bg_tilemap,offset); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + COMBINE_DATA(&state->videoram1[offset]); + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } static WRITE16_HANDLER( tile_banking_w ) { - if(((data >> 12) & 0x0f) != magicstk_tilebank) + playmark_state *state = (playmark_state *)space->machine->driver_data; + + if (((data >> 12) & 0x0f) != state->tilebank) { - magicstk_tilebank = (data >> 12) & 0x0f; - tilemap_mark_all_tiles_dirty(bg_tilemap); + state->tilebank = (data >> 12) & 0x0f; + tilemap_mark_all_tiles_dirty(state->bg_tilemap); } } static WRITE16_DEVICE_HANDLER( oki_banking ) { - if(data & 3) + if (data & 3) { int addr = 0x40000 * ((data & 3) - 1); - if(addr < memory_region_length(device->machine, "oki")) + if (addr < memory_region_length(device->machine, "oki")) okim6295_set_bank_base(device, addr); } } @@ -84,7 +80,7 @@ static ADDRESS_MAP_START( magicstk_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x094000, 0x094001) AM_WRITENOP AM_RANGE(0x094002, 0x094003) AM_WRITENOP AM_RANGE(0x094004, 0x094005) AM_WRITE(tile_banking_w) - AM_RANGE(0x098180, 0x09917f) AM_RAM_WRITE(magicstk_bgvideoram_w) AM_BASE(&magicstk_videoram) + AM_RANGE(0x098180, 0x09917f) AM_RAM_WRITE(magicstk_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) AM_RANGE(0x0c2010, 0x0c2011) AM_READ_PORT("IN0") AM_RANGE(0x0c2012, 0x0c2013) AM_READ_PORT("IN1") AM_RANGE(0x0c2014, 0x0c2015) AM_READ_PORT("IN2") AM_DEVWRITE("eeprom", magicstk_coin_eeprom_w) @@ -94,7 +90,7 @@ static ADDRESS_MAP_START( magicstk_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0c201e, 0x0c201f) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff) AM_RANGE(0x0c4000, 0x0c4001) AM_WRITENOP AM_RANGE(0x0e0000, 0x0fffff) AM_RAM - AM_RANGE(0x100000, 0x100fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) + AM_RANGE(0x100000, 0x100fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) ADDRESS_MAP_END static ADDRESS_MAP_START( powerbal_main_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -103,7 +99,7 @@ static ADDRESS_MAP_START( powerbal_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x094000, 0x094001) AM_WRITENOP AM_RANGE(0x094002, 0x094003) AM_WRITENOP AM_RANGE(0x094004, 0x094005) AM_WRITE(tile_banking_w) - AM_RANGE(0x098000, 0x098fff) AM_RAM_WRITE(magicstk_bgvideoram_w) AM_BASE(&magicstk_videoram) + AM_RANGE(0x098000, 0x098fff) AM_RAM_WRITE(magicstk_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) AM_RANGE(0x099000, 0x09bfff) AM_RAM // not used AM_RANGE(0x0c2010, 0x0c2011) AM_READ_PORT("IN0") AM_RANGE(0x0c2012, 0x0c2013) AM_READ_PORT("IN1") @@ -114,7 +110,7 @@ static ADDRESS_MAP_START( powerbal_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0c201e, 0x0c201f) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff) AM_RANGE(0x0c4000, 0x0c4001) AM_WRITENOP AM_RANGE(0x0f0000, 0x0fffff) AM_RAM - AM_RANGE(0x101000, 0x101fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) + AM_RANGE(0x101000, 0x101fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) AM_RANGE(0x102000, 0x10200d) AM_WRITENOP // not used scroll regs? AM_RANGE(0x103000, 0x103fff) AM_RAM ADDRESS_MAP_END @@ -381,54 +377,62 @@ INPUT_PORTS_END static TILE_GET_INFO( powerbal_get_bg_tile_info ) { - int code = (magicstk_videoram[tile_index] & 0x07ff) + magicstk_tilebank * 0x800; - int colr = magicstk_videoram[tile_index] & 0xf000; + playmark_state *state = (playmark_state *)machine->driver_data; + int code = (state->videoram1[tile_index] & 0x07ff) + state->tilebank * 0x800; + int colr = state->videoram1[tile_index] & 0xf000; - if (magicstk_videoram[tile_index] & 0x800) code |= 0x8000; + if (state->videoram1[tile_index] & 0x800) + code |= 0x8000; - SET_TILE_INFO(1,code,colr >> 12,0); + SET_TILE_INFO(1, code, colr >> 12, 0); } -static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { - UINT16 *spriteram16 = machine->generic.spriteram.u16; + playmark_state *state = (playmark_state *)machine->driver_data; + UINT16 *spriteram = state->spriteram; int offs; int height = machine->gfx[0]->height; - for (offs = 4;offs < machine->generic.spriteram_size/2;offs += 4) + for (offs = 4; offs < state->spriteram_size / 2; offs += 4) { - int sx,sy,code,color,flipx; + int sx, sy, code, color, flipx; - sy = spriteram16[offs+3-4]; /* typical Playmark style... */ - if (sy & 0x8000) return; /* end of list marker */ + sy = spriteram[offs + 3 - 4]; /* typical Playmark style... */ + if (sy & 0x8000) + return; /* end of list marker */ flipx = sy & 0x4000; - sx = (spriteram16[offs+1] & 0x01ff) - 16-7; - sy = (256-8-height - sy) & 0xff; - code = spriteram16[offs+2]; - color = (spriteram16[offs+1] & 0xf000) >> 12; + sx = (spriteram[offs + 1] & 0x01ff) - 16 - 7; + sy = (256 - 8 - height - sy) & 0xff; + code = spriteram[offs + 2]; + color = (spriteram[offs + 1] & 0xf000) >> 12; drawgfx_transpen(bitmap,cliprect,machine->gfx[0], code, color, flipx,0, - sx + xoffset,sy + yoffset,0); + sx + state->xoffset,sy + state->yoffset,0); } } static VIDEO_START( powerbal ) { - bg_tilemap = tilemap_create(machine, powerbal_get_bg_tile_info,tilemap_scan_rows,8, 8,64,32); + playmark_state *state = (playmark_state *)machine->driver_data; - xoffset = -20; + state->bg_tilemap = tilemap_create(machine, powerbal_get_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 32); - tilemap_set_scrolly(bg_tilemap, 0, bg_yoffset); + state->xoffset = -20; + + tilemap_set_scrolly(state->bg_tilemap, 0, state->bg_yoffset); } static VIDEO_UPDATE( powerbal ) { - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); - draw_sprites(screen->machine,bitmap,cliprect); + playmark_state *state = (playmark_state *)screen->machine->driver_data; + + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect); return 0; } @@ -463,12 +467,35 @@ static GFXDECODE_START( powerbal ) GFXDECODE_ENTRY( "gfx1", 0, magicstk_charlayout, 0x000, 16 ) /* colors 0x000-0x0ff */ GFXDECODE_END + + +static MACHINE_START( powerbal ) +{ + playmark_state *state = (playmark_state *)machine->driver_data; + + state_save_register_global(machine, state->tilebank); +} + +static MACHINE_RESET( powerbal ) +{ + playmark_state *state = (playmark_state *)machine->driver_data; + + state->tilebank = 0; +} + static MACHINE_DRIVER_START( powerbal ) + + /* driver data */ + MDRV_DRIVER_DATA(playmark_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */ MDRV_CPU_PROGRAM_MAP(powerbal_main_map) MDRV_CPU_VBLANK_INT("screen", irq2_line_hold) + MDRV_MACHINE_START(powerbal) + MDRV_MACHINE_RESET(powerbal) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(61) @@ -492,6 +519,10 @@ static MACHINE_DRIVER_START( powerbal ) MACHINE_DRIVER_END static MACHINE_DRIVER_START( magicstk ) + + /* driver data */ + MDRV_DRIVER_DATA(playmark_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */ MDRV_CPU_PROGRAM_MAP(magicstk_main_map) @@ -500,6 +531,9 @@ static MACHINE_DRIVER_START( magicstk ) MDRV_EEPROM_ADD("eeprom", eeprom_intf) MDRV_EEPROM_DEFAULT_VALUE(0) + MDRV_MACHINE_START(powerbal) + MDRV_MACHINE_RESET(powerbal) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(61) @@ -656,14 +690,18 @@ ROM_END static DRIVER_INIT( powerbal ) { - bg_yoffset = 16; - yoffset = -8; + playmark_state *state = (playmark_state *)machine->driver_data; + + state->bg_yoffset = 16; + state->yoffset = -8; } static DRIVER_INIT( magicstk ) { - bg_yoffset = 0; - yoffset = -5; + playmark_state *state = (playmark_state *)machine->driver_data; + + state->bg_yoffset = 0; + state->yoffset = -5; } /************************* @@ -671,6 +709,6 @@ static DRIVER_INIT( magicstk ) *************************/ /* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS */ -GAME( 1994, powerbal, 0, powerbal, powerbal, powerbal, ROT0, "Playmark", "Power Balls", 0 ) -GAME( 1995, magicstk, 0, magicstk, magicstk, magicstk, ROT0, "Playmark", "Magic Sticks", 0 ) -GAME( 1995, hotminda, hotmind, magicstk, hotminda, magicstk, ROT0, "Playmark", "Hot Mind (adjustable prize)", 0 ) +GAME( 1994, powerbal, 0, powerbal, powerbal, powerbal, ROT0, "Playmark", "Power Balls", GAME_SUPPORTS_SAVE ) +GAME( 1995, magicstk, 0, magicstk, magicstk, magicstk, ROT0, "Playmark", "Magic Sticks", GAME_SUPPORTS_SAVE ) +GAME( 1995, hotminda, hotmind, magicstk, hotminda, magicstk, ROT0, "Playmark", "Hot Mind (adjustable prize)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/pushman.c b/src/mame/drivers/pushman.c index cbcdfe15ef9..1467f8d4b06 100644 --- a/src/mame/drivers/pushman.c +++ b/src/mame/drivers/pushman.c @@ -28,18 +28,9 @@ #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "cpu/m6805/m6805.h" +#include "includes/pushman.h" #include "sound/2203intf.h" -VIDEO_UPDATE( pushman ); -WRITE16_HANDLER( pushman_scroll_w ); -WRITE16_HANDLER( pushman_videoram_w ); -VIDEO_START( pushman ); - -static UINT8 shared_ram[8]; -static UINT16 latch,new_latch=0; - -/******************************************************************************/ - static WRITE16_HANDLER( pushman_flipscreen_w ) { if (ACCESSING_BITS_8_15) @@ -58,68 +49,81 @@ static WRITE16_HANDLER( pushman_control_w ) static READ16_HANDLER( pushman_68705_r ) { + pushman_state *state = (pushman_state *)space->machine->driver_data; + if (offset == 0) - return latch; + return state->latch; - if (offset == 3 && new_latch) { new_latch = 0; return 0; } - if (offset == 3 && !new_latch) return 0xff; + if (offset == 3 && state->new_latch) + { + state->new_latch = 0; + return 0; + } + if (offset == 3 && !state->new_latch) + return 0xff; - return (shared_ram[2 * offset + 1] << 8) + shared_ram[2 * offset]; + return (state->shared_ram[2 * offset + 1] << 8) + state->shared_ram[2 * offset]; } static WRITE16_HANDLER( pushman_68705_w ) { + pushman_state *state = (pushman_state *)space->machine->driver_data; + if (ACCESSING_BITS_8_15) - shared_ram[2 * offset] = data >> 8; + state->shared_ram[2 * offset] = data >> 8; if (ACCESSING_BITS_0_7) - shared_ram[2 * offset + 1] = data & 0xff; + state->shared_ram[2 * offset + 1] = data & 0xff; if (offset == 1) { - cputag_set_input_line(space->machine, "mcu", M68705_IRQ_LINE, HOLD_LINE); + cpu_set_input_line(state->mcu, M68705_IRQ_LINE, HOLD_LINE); cpu_spin(space->cpu); - new_latch = 0; + state->new_latch = 0; } } /* ElSemi - Bouncing balls protection. */ static READ16_HANDLER( bballs_68705_r ) { + pushman_state *state = (pushman_state *)space->machine->driver_data; + if (offset == 0) - return latch; - if(offset == 3 && new_latch) + return state->latch; + if (offset == 3 && state->new_latch) { - new_latch = 0; + state->new_latch = 0; return 0; } - if(offset == 3 && !new_latch) + if (offset == 3 && !state->new_latch) return 0xff; - return (shared_ram[2 * offset + 1] << 8) + shared_ram[2 * offset]; + return (state->shared_ram[2 * offset + 1] << 8) + state->shared_ram[2 * offset]; } static WRITE16_HANDLER( bballs_68705_w ) { - if (ACCESSING_BITS_8_15) - shared_ram[2 * offset] = data >> 8; - if (ACCESSING_BITS_0_7) - shared_ram[2 * offset + 1] = data & 0xff; + pushman_state *state = (pushman_state *)space->machine->driver_data; - if(offset == 0) + if (ACCESSING_BITS_8_15) + state->shared_ram[2 * offset] = data >> 8; + if (ACCESSING_BITS_0_7) + state->shared_ram[2 * offset + 1] = data & 0xff; + + if (offset == 0) { - latch = 0; - if(shared_ram[0] <= 0xf) + state->latch = 0; + if (state->shared_ram[0] <= 0xf) { - latch = shared_ram[0] << 2; - if(shared_ram[1]) - latch |= 2; - new_latch = 1; + state->latch = state->shared_ram[0] << 2; + if (state->shared_ram[1]) + state->latch |= 2; + state->new_latch = 1; } - else if(shared_ram[0]) + else if (state->shared_ram[0]) { - if(shared_ram[1]) - latch |= 2; - new_latch = 1; + if (state->shared_ram[1]) + state->latch |= 2; + state->new_latch = 1; } } } @@ -127,42 +131,40 @@ static WRITE16_HANDLER( bballs_68705_w ) static READ8_HANDLER( pushman_68000_r ) { - return shared_ram[offset]; + pushman_state *state = (pushman_state *)space->machine->driver_data; + return state->shared_ram[offset]; } static WRITE8_HANDLER( pushman_68000_w ) { - if (offset == 2 && (shared_ram[2] & 2) == 0 && data & 2) - { - latch = (shared_ram[1] << 8) | shared_ram[0]; - new_latch = 1; - } - shared_ram[offset] = data; -} + pushman_state *state = (pushman_state *)space->machine->driver_data; -static MACHINE_RESET( bballs ) -{ - latch = 0x400; + if (offset == 2 && (state->shared_ram[2] & 2) == 0 && data & 2) + { + state->latch = (state->shared_ram[1] << 8) | state->shared_ram[0]; + state->new_latch = 1; + } + state->shared_ram[offset] = data; } /******************************************************************************/ static ADDRESS_MAP_START( pushman_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x01ffff) AM_ROM - AM_RANGE(0x060000, 0x060007) AM_READWRITE(pushman_68705_r,pushman_68705_w) - AM_RANGE(0xfe0800, 0xfe17ff) AM_RAM AM_BASE_GENERIC(spriteram) + AM_RANGE(0x060000, 0x060007) AM_READWRITE(pushman_68705_r, pushman_68705_w) + AM_RANGE(0xfe0800, 0xfe17ff) AM_RAM AM_BASE_MEMBER(pushman_state, spriteram) AM_RANGE(0xfe4000, 0xfe4001) AM_READ_PORT("INPUTS") AM_WRITE(pushman_flipscreen_w) AM_RANGE(0xfe4002, 0xfe4003) AM_READ_PORT("SYSTEM") AM_WRITE(pushman_control_w) AM_RANGE(0xfe4004, 0xfe4005) AM_READ_PORT("DSW") AM_RANGE(0xfe8000, 0xfe8003) AM_WRITE(pushman_scroll_w) AM_RANGE(0xfe800e, 0xfe800f) AM_WRITENOP /* ? */ - AM_RANGE(0xfec000, 0xfec7ff) AM_RAM_WRITE(pushman_videoram_w) AM_BASE_GENERIC(videoram) + AM_RANGE(0xfec000, 0xfec7ff) AM_RAM_WRITE(pushman_videoram_w) AM_BASE_MEMBER(pushman_state, videoram) AM_RANGE(0xff8000, 0xff87ff) AM_RAM_WRITE(paletteram16_xxxxRRRRGGGGBBBB_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xffc000, 0xffffff) AM_RAM ADDRESS_MAP_END static ADDRESS_MAP_START( mcu_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0007) AM_READWRITE(pushman_68000_r,pushman_68000_w) + AM_RANGE(0x0000, 0x0007) AM_READWRITE(pushman_68000_r, pushman_68000_w) AM_RANGE(0x0010, 0x007f) AM_RAM AM_RANGE(0x0080, 0x0fff) AM_ROM ADDRESS_MAP_END @@ -182,14 +184,14 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( bballs_map, ADDRESS_SPACE_PROGRAM, 16 ) ADDRESS_MAP_GLOBAL_MASK(0xfffff) AM_RANGE(0x00000, 0x1ffff) AM_ROM - AM_RANGE(0x60000, 0x60007) AM_READWRITE(bballs_68705_r,bballs_68705_w) - AM_RANGE(0xe0800, 0xe17ff) AM_RAM AM_BASE_GENERIC(spriteram) + AM_RANGE(0x60000, 0x60007) AM_READWRITE(bballs_68705_r, bballs_68705_w) + AM_RANGE(0xe0800, 0xe17ff) AM_RAM AM_BASE_MEMBER(pushman_state, spriteram) AM_RANGE(0xe4000, 0xe4001) AM_READ_PORT("INPUTS") AM_WRITE(pushman_flipscreen_w) AM_RANGE(0xe4002, 0xe4003) AM_READ_PORT("SYSTEM") AM_WRITE(pushman_control_w) AM_RANGE(0xe4004, 0xe4005) AM_READ_PORT("DSW") AM_RANGE(0xe8000, 0xe8003) AM_WRITE(pushman_scroll_w) AM_RANGE(0xe800e, 0xe800f) AM_WRITENOP /* ? */ - AM_RANGE(0xec000, 0xec7ff) AM_RAM_WRITE(pushman_videoram_w) AM_BASE_GENERIC(videoram) + AM_RANGE(0xec000, 0xec7ff) AM_RAM_WRITE(pushman_videoram_w) AM_BASE_MEMBER(pushman_state, videoram) AM_RANGE(0xf8000, 0xf87ff) AM_RAM_WRITE(paletteram16_xxxxRRRRGGGGBBBB_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xfc000, 0xfffff) AM_RAM ADDRESS_MAP_END @@ -401,22 +403,52 @@ GFXDECODE_END static void irqhandler(running_device *device, int irq) { - cputag_set_input_line(device->machine, "audiocpu", 0, irq ? ASSERT_LINE : CLEAR_LINE); + pushman_state *state = (pushman_state *)device->machine->driver_data; + cpu_set_input_line(state->audiocpu, 0, irq ? ASSERT_LINE : CLEAR_LINE); } static const ym2203_interface ym2203_config = { { - AY8910_LEGACY_OUTPUT, - AY8910_DEFAULT_LOADS, - DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, + AY8910_LEGACY_OUTPUT, + AY8910_DEFAULT_LOADS, + DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, }, irqhandler }; +static MACHINE_START( pushman ) +{ + pushman_state *state = (pushman_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->mcu = devtag_get_device(machine, "mcu"); + + state_save_register_global_array(machine, state->control); + state_save_register_global_array(machine, state->shared_ram); + state_save_register_global(machine, state->latch); + state_save_register_global(machine, state->new_latch); +} + +static MACHINE_RESET( pushman ) +{ + pushman_state *state = (pushman_state *)machine->driver_data; + + state->latch = 0; + state->new_latch = 0; + state->control[0] = 0; + state->control[1] = 0; + + memset(state->shared_ram, 0, ARRAY_LENGTH(state->shared_ram)); +} + static MACHINE_DRIVER_START( pushman ) + /* driver data */ + MDRV_DRIVER_DATA(pushman_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 8000000) MDRV_CPU_PROGRAM_MAP(pushman_map) @@ -432,6 +464,9 @@ static MACHINE_DRIVER_START( pushman ) MDRV_QUANTUM_TIME(HZ(3600)) + MDRV_MACHINE_START(pushman) + MDRV_MACHINE_RESET(pushman) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -457,8 +492,20 @@ static MACHINE_DRIVER_START( pushman ) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MACHINE_DRIVER_END +static MACHINE_RESET( bballs ) +{ + pushman_state *state = (pushman_state *)machine->driver_data; + + MACHINE_RESET_CALL(pushman); + + state->latch = 0x400; +} + static MACHINE_DRIVER_START( bballs ) + /* driver data */ + MDRV_DRIVER_DATA(pushman_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 8000000) MDRV_CPU_PROGRAM_MAP(bballs_map) @@ -470,6 +517,7 @@ static MACHINE_DRIVER_START( bballs ) MDRV_QUANTUM_TIME(HZ(3600)) + MDRV_MACHINE_START(pushman) MDRV_MACHINE_RESET(bballs) /* video hardware */ @@ -665,8 +713,8 @@ ROM_START( bballs ) ROM_LOAD( "bb_prom.e9", 0x0000, 0x0100, CRC(ec80ae36) SHA1(397ec8fc1b106c8b8d4bf6798aa429e8768a101a) ) /* priority (not used) N82S129 BPROM */ ROM_END -GAME( 1990, pushman, 0, pushman, pushman, 0, ROT0, "Comad", "Pushman (Korea, set 1)", 0 ) -GAME( 1990, pushmana, pushman, pushman, pushman, 0, ROT0, "Comad", "Pushman (Korea, set 2)", 0 ) -GAME( 1990, pushmans, pushman, pushman, pushman, 0, ROT0, "Comad (American Sammy license)", "Pushman (American Sammy license)", 0 ) -GAME( 1990, pushmant, pushman, pushman, pushman, 0, ROT0, "Comad (Top Tronic license)", "Pushman (Top Tronic license)", 0 ) -GAME( 1991, bballs, 0, bballs, bballs, 0, ROT0, "Comad", "Bouncing Balls", 0 ) +GAME( 1990, pushman, 0, pushman, pushman, 0, ROT0, "Comad", "Pushman (Korea, set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1990, pushmana, pushman, pushman, pushman, 0, ROT0, "Comad", "Pushman (Korea, set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1990, pushmans, pushman, pushman, pushman, 0, ROT0, "Comad (American Sammy license)", "Pushman (American Sammy license)", GAME_SUPPORTS_SAVE ) +GAME( 1990, pushmant, pushman, pushman, pushman, 0, ROT0, "Comad (Top Tronic license)", "Pushman (Top Tronic license)", GAME_SUPPORTS_SAVE ) +GAME( 1991, bballs, 0, bballs, bballs, 0, ROT0, "Comad", "Bouncing Balls", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/pzletime.c b/src/mame/drivers/pzletime.c index 1778fafbbfd..9b6256317b1 100644 --- a/src/mame/drivers/pzletime.c +++ b/src/mame/drivers/pzletime.c @@ -19,117 +19,138 @@ #include "sound/okim6295.h" #include "machine/eeprom.h" -static UINT16 *bg_videoram, *mid_videoram, *txt_videoram, *tilemap_regs, *video_regs; -static tilemap_t *mid_tilemap, *txt_tilemap; -static int ticket = 0; +class pzletime_state +{ +public: + static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, pzletime_state(machine)); } + + pzletime_state(running_machine &machine) { } + + /* memory pointers */ + UINT16 * bg_videoram; + UINT16 * mid_videoram; + UINT16 * txt_videoram; + UINT16 * tilemap_regs; + UINT16 * video_regs; + UINT16 * spriteram; +// UINT16 * paletteram; // currently this uses generic palette handling + + /* video-related */ + tilemap_t *mid_tilemap, *txt_tilemap; + + /* misc */ + int ticket; +}; + static TILE_GET_INFO( get_mid_tile_info ) { - int tileno,colour; - - tileno = mid_videoram[tile_index] & 0x0fff; - colour = mid_videoram[tile_index] & 0xf000; + pzletime_state *state = (pzletime_state *)machine->driver_data; + int tileno = state->mid_videoram[tile_index] & 0x0fff; + int colour = state->mid_videoram[tile_index] & 0xf000; colour = colour >> 12; - SET_TILE_INFO(2,tileno,colour,0); + SET_TILE_INFO(2, tileno, colour, 0); } static TILE_GET_INFO( get_txt_tile_info ) { - int tileno,colour; - - tileno = txt_videoram[tile_index] & 0x0fff; - colour = txt_videoram[tile_index] & 0xf000; + pzletime_state *state = (pzletime_state *)machine->driver_data; + int tileno = state->txt_videoram[tile_index] & 0x0fff; + int colour = state->txt_videoram[tile_index] & 0xf000; colour = colour >> 12; - SET_TILE_INFO(0,tileno,colour,0); + SET_TILE_INFO(0, tileno, colour, 0); - tileinfo->category = (colour & 8) ? 1 : 0; + tileinfo->category = BIT(colour, 3); } static VIDEO_START( pzletime ) { - mid_tilemap = tilemap_create(machine, get_mid_tile_info,tilemap_scan_cols, 16,16,64,16); - txt_tilemap = tilemap_create(machine, get_txt_tile_info,tilemap_scan_rows, 8, 8,64,32); + pzletime_state *state = (pzletime_state *)machine->driver_data; - tilemap_set_transparent_pen(mid_tilemap,0); - tilemap_set_transparent_pen(txt_tilemap,0); + state->mid_tilemap = tilemap_create(machine, get_mid_tile_info, tilemap_scan_cols, 16, 16, 64, 16); + state->txt_tilemap = tilemap_create(machine, get_txt_tile_info, tilemap_scan_rows, 8, 8, 64, 32); + + tilemap_set_transparent_pen(state->mid_tilemap, 0); + tilemap_set_transparent_pen(state->txt_tilemap, 0); } static VIDEO_UPDATE( pzletime ) { + pzletime_state *state = (pzletime_state *)screen->machine->driver_data; int count; - int y,x; + int y, x; bitmap_fill(bitmap, cliprect, screen->machine->pens[0]); //bg pen - tilemap_set_scrolly(txt_tilemap, 0, tilemap_regs[0]-3); - tilemap_set_scrollx(txt_tilemap, 0, tilemap_regs[1]); + tilemap_set_scrolly(state->txt_tilemap, 0, state->tilemap_regs[0] - 3); + tilemap_set_scrollx(state->txt_tilemap, 0, state->tilemap_regs[1]); - tilemap_set_scrolly(mid_tilemap, 0, tilemap_regs[2]-3); - tilemap_set_scrollx(mid_tilemap, 0, tilemap_regs[3]-7); + tilemap_set_scrolly(state->mid_tilemap, 0, state->tilemap_regs[2] - 3); + tilemap_set_scrollx(state->mid_tilemap, 0, state->tilemap_regs[3] - 7); - if(video_regs[2] & 1) + if (state->video_regs[2] & 1) { count = 0; - for(y=255;y>=0;y--) + for (y = 255; y >= 0; y--) { - for(x=0;x<512;x++) + for (x = 0; x < 512; x++) { - if(bg_videoram[count] & 0x8000) - { - *BITMAP_ADDR16(bitmap, (y - 18) & 0xff, (x - 32) & 0x1ff) = 0x300 + (bg_videoram[count] & 0x7fff); - } + if (state->bg_videoram[count] & 0x8000) + *BITMAP_ADDR16(bitmap, (y - 18) & 0xff, (x - 32) & 0x1ff) = 0x300 + (state->bg_videoram[count] & 0x7fff); count++; } } } - tilemap_draw(bitmap,cliprect,mid_tilemap, 0,0); + tilemap_draw(bitmap, cliprect, state->mid_tilemap, 0, 0); { - UINT16 *spriteram16 = screen->machine->generic.spriteram.u16; - int offs,spr_offs,colour,sx,sy; + UINT16 *spriteram = state->spriteram; + int offs, spr_offs, colour, sx, sy; - for(offs = 0; offs < 0x2000/2; offs += 4) + for(offs = 0; offs < 0x2000 / 2; offs += 4) { - if(spriteram16[offs+0] == 8) + if(spriteram[offs + 0] == 8) break; - spr_offs = spriteram16[offs+3] & 0x0fff; - sy = 0x200-(spriteram16[offs+0] & 0x1ff)-35; - sx = (spriteram16[offs+1] & 0x1ff)-30; - colour = (spriteram16[offs+0] & 0xf000)>>12; + spr_offs = spriteram[offs + 3] & 0x0fff; + sy = 0x200 - (spriteram[offs + 0] & 0x1ff) - 35; + sx = (spriteram[offs + 1] & 0x1ff) - 30; + colour = (spriteram[offs + 0] & 0xf000) >> 12; - // is spriteram16[offs+0] & 0x200 flipy? it's always set + // is spriteram[offs + 0] & 0x200 flipy? it's always set - drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[1],spr_offs,colour,0,1,sx,sy,0); + drawgfx_transpen(bitmap, cliprect, screen->machine->gfx[1], spr_offs, colour, 0, 1, sx, sy, 0); } } - tilemap_draw(bitmap,cliprect,txt_tilemap,0,0); - if((video_screen_get_frame_number(screen) % 16) != 0) - tilemap_draw(bitmap,cliprect,txt_tilemap,1,0); + tilemap_draw(bitmap, cliprect, state->txt_tilemap, 0, 0); + if ((video_screen_get_frame_number(screen) % 16) != 0) + tilemap_draw(bitmap, cliprect, state->txt_tilemap, 1, 0); return 0; } static WRITE16_HANDLER( mid_videoram_w ) { - COMBINE_DATA(&mid_videoram[offset]); - tilemap_mark_tile_dirty(mid_tilemap,offset); + pzletime_state *state = (pzletime_state *)space->machine->driver_data; + COMBINE_DATA(&state->mid_videoram[offset]); + tilemap_mark_tile_dirty(state->mid_tilemap, offset); } static WRITE16_HANDLER( txt_videoram_w ) { - COMBINE_DATA(&txt_videoram[offset]); - tilemap_mark_tile_dirty(txt_tilemap,offset); + pzletime_state *state = (pzletime_state *)space->machine->driver_data; + COMBINE_DATA(&state->txt_videoram[offset]); + tilemap_mark_tile_dirty(state->txt_tilemap, offset); } static WRITE16_DEVICE_HANDLER( eeprom_w ) { - if( ACCESSING_BITS_0_7 ) + if (ACCESSING_BITS_0_7) { eeprom_write_bit(device, data & 0x01); eeprom_set_cs_line(device, (data & 0x02) ? CLEAR_LINE : ASSERT_LINE ); @@ -139,35 +160,36 @@ static WRITE16_DEVICE_HANDLER( eeprom_w ) static WRITE16_HANDLER( ticket_w ) { - if( ACCESSING_BITS_0_7 ) - { - ticket = data & 1; - } + pzletime_state *state = (pzletime_state *)space->machine->driver_data; + + if (ACCESSING_BITS_0_7) + state->ticket = data & 1; } static WRITE16_HANDLER( video_regs_w ) { + pzletime_state *state = (pzletime_state *)space->machine->driver_data; int i; - COMBINE_DATA(&video_regs[offset]); + COMBINE_DATA(&state->video_regs[offset]); - if(offset == 0) + if (offset == 0) { - if(video_regs[0] > 0) + if (state->video_regs[0] > 0) { - for (i=0;i<0x300;i++) + for (i = 0; i < 0x300; i++) { - palette_set_pen_contrast(space->machine, i, (double)0x8000/(double)video_regs[0]); + palette_set_pen_contrast(space->machine, i, (double)0x8000/(double)state->video_regs[0]); } } } - else if(offset == 1) + else if (offset == 1) { - if(video_regs[1] > 0) + if (state->video_regs[1] > 0) { - for (i=0x300;i<32768 + 0x300;i++) + for (i = 0x300; i < 32768 + 0x300; i++) { - palette_set_pen_contrast(space->machine, i, (double)0x8000/(double)video_regs[1]); + palette_set_pen_contrast(space->machine, i, (double)0x8000/(double)state->video_regs[1]); } } } @@ -180,19 +202,20 @@ static WRITE16_DEVICE_HANDLER( oki_bank_w ) static CUSTOM_INPUT( ticket_status_r ) { - return ticket && !(video_screen_get_frame_number(field->port->machine->primary_screen)%128); + pzletime_state *state = (pzletime_state *)field->port->machine->driver_data; + return (state->ticket && !(video_screen_get_frame_number(field->port->machine->primary_screen) % 128)); } static ADDRESS_MAP_START( pzletime_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x3fffff) AM_ROM - AM_RANGE(0x700000, 0x700005) AM_RAM_WRITE(video_regs_w) AM_BASE(&video_regs) + AM_RANGE(0x700000, 0x700005) AM_RAM_WRITE(video_regs_w) AM_BASE_MEMBER(pzletime_state, video_regs) AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff) AM_RANGE(0x900000, 0x9005ff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0xa00000, 0xa00007) AM_RAM AM_BASE(&tilemap_regs) - AM_RANGE(0xb00000, 0xb3ffff) AM_RAM AM_BASE(&bg_videoram) - AM_RANGE(0xc00000, 0xc00fff) AM_RAM_WRITE(mid_videoram_w) AM_BASE(&mid_videoram) - AM_RANGE(0xc01000, 0xc01fff) AM_RAM_WRITE(txt_videoram_w) AM_BASE(&txt_videoram) - AM_RANGE(0xd00000, 0xd01fff) AM_RAM AM_BASE_GENERIC(spriteram) + AM_RANGE(0xa00000, 0xa00007) AM_RAM AM_BASE_MEMBER(pzletime_state, tilemap_regs) + AM_RANGE(0xb00000, 0xb3ffff) AM_RAM AM_BASE_MEMBER(pzletime_state, bg_videoram) + AM_RANGE(0xc00000, 0xc00fff) AM_RAM_WRITE(mid_videoram_w) AM_BASE_MEMBER(pzletime_state, mid_videoram) + AM_RANGE(0xc01000, 0xc01fff) AM_RAM_WRITE(txt_videoram_w) AM_BASE_MEMBER(pzletime_state, txt_videoram) + AM_RANGE(0xd00000, 0xd01fff) AM_RAM AM_BASE_MEMBER(pzletime_state, spriteram) AM_RANGE(0xe00000, 0xe00001) AM_READ_PORT("INPUT") AM_DEVWRITE("eeprom", eeprom_w) AM_RANGE(0xe00002, 0xe00003) AM_READ_PORT("SYSTEM") AM_WRITE(ticket_w) AM_RANGE(0xe00004, 0xe00005) AM_DEVWRITE("oki", oki_bank_w) @@ -266,17 +289,37 @@ static PALETTE_INIT( pzletime ) /* first 0x300 colors are dynamic */ /* initialize 555 RGB lookup */ - for (i = 0;i < 32768;i++) - palette_set_color_rgb(machine,i+0x300,pal5bit(i >> 10),pal5bit(i >> 5),pal5bit(i >> 0)); + for (i = 0; i < 32768; i++) + palette_set_color_rgb(machine, i + 0x300, pal5bit(i >> 10), pal5bit(i >> 5), pal5bit(i >> 0)); +} + +static MACHINE_START( pzletime ) +{ + pzletime_state *state = (pzletime_state *)machine->driver_data; + + state_save_register_global(machine, state->ticket); +} + +static MACHINE_RESET( pzletime ) +{ + pzletime_state *state = (pzletime_state *)machine->driver_data; + + state->ticket = 0; } static MACHINE_DRIVER_START( pzletime ) + /* driver data */ + MDRV_DRIVER_DATA(pzletime_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu",M68000,10000000) MDRV_CPU_PROGRAM_MAP(pzletime_map) MDRV_CPU_VBLANK_INT("screen",irq4_line_hold) + MDRV_MACHINE_START(pzletime) + MDRV_MACHINE_RESET(pzletime) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -342,4 +385,4 @@ ROM_START( pzletime ) ROM_LOAD( "pzletime.nv", 0x0000, 0x0080, CRC(e5ed3d40) SHA1(8c163a6e5839e5c82d52f046d3268202fdf9f4d1) ) ROM_END -GAME( 199?, pzletime, 0, pzletime, pzletime, 0, ROT0, "Elettronica Video-Games S.R.L.", "Puzzle Time (Prototype)", 0 ) +GAME( 199?, pzletime, 0, pzletime, pzletime, 0, ROT0, "Elettronica Video-Games S.R.L.", "Puzzle Time (Prototype)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/playmark.h b/src/mame/includes/playmark.h index 56e7085d3a4..9a269c8d111 100644 --- a/src/mame/includes/playmark.h +++ b/src/mame/includes/playmark.h @@ -1,14 +1,50 @@ + +class playmark_state +{ +public: + static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, playmark_state(machine)); } + + playmark_state(running_machine &machine) { } + + /* memory pointers */ + UINT16 * bgvideoram; + UINT16 * videoram1; + UINT16 * videoram2; + UINT16 * videoram3; + UINT16 * rowscroll; + UINT16 * spriteram; +// UINT16 * paletteram; // currently this uses generic palette handling + size_t spriteram_size; + + /* video-related */ + tilemap_t *tx_tilemap, *fg_tilemap, *bg_tilemap; + int bgscrollx, bgscrolly, bg_enable, bg_full_size; + int fgscrollx, fg_rowscroll_enable; + + int xoffset; + int yoffset; + int txt_tile_offset; + int pri_masks[3]; + UINT16 scroll[7]; + + /* powerbal-specific */ + int tilebank; + int bg_yoffset; + + /* misc */ + UINT16 snd_command; + UINT16 snd_flag; + UINT8 oki_control; + UINT8 oki_command; + int old_oki_bank; + + /* devices */ + running_device *oki; + running_device *eeprom; +}; + /*----------- defined in video/playmark.c -----------*/ -extern UINT16 *bigtwin_bgvideoram; -extern UINT16 *wbeachvl_videoram1,*wbeachvl_videoram2,*wbeachvl_videoram3; -extern UINT16 *wbeachvl_rowscroll; - -VIDEO_START( bigtwin ); -VIDEO_START( wbeachvl ); -VIDEO_START( excelsr ); -VIDEO_START( hotmind ); -VIDEO_START( hrdtimes ); WRITE16_HANDLER( wbeachvl_txvideoram_w ); WRITE16_HANDLER( wbeachvl_fgvideoram_w ); WRITE16_HANDLER( wbeachvl_bgvideoram_w ); @@ -20,6 +56,13 @@ WRITE16_HANDLER( bigtwin_scroll_w ); WRITE16_HANDLER( wbeachvl_scroll_w ); WRITE16_HANDLER( excelsr_scroll_w ); WRITE16_HANDLER( hrdtimes_scroll_w ); + +VIDEO_START( bigtwin ); +VIDEO_START( wbeachvl ); +VIDEO_START( excelsr ); +VIDEO_START( hotmind ); +VIDEO_START( hrdtimes ); + VIDEO_UPDATE( bigtwin ); VIDEO_UPDATE( wbeachvl ); VIDEO_UPDATE( excelsr ); diff --git a/src/mame/includes/pushman.h b/src/mame/includes/pushman.h new file mode 100644 index 00000000000..0e2eff59ea7 --- /dev/null +++ b/src/mame/includes/pushman.h @@ -0,0 +1,41 @@ +/************************************************************************* + + Pushman + +*************************************************************************/ + +class pushman_state +{ +public: + static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, pushman_state(machine)); } + + pushman_state(running_machine &machine) { } + + /* memory pointers */ + UINT16 * videoram; + UINT16 * spriteram; +// UINT16 * paletteram; // currently this uses generic palette handling + + /* video-related */ + tilemap_t *bg_tilemap, *tx_tilemap; + UINT16 control[2]; + + /* misc */ + UINT8 shared_ram[8]; + UINT16 latch, new_latch; + + /* devices */ + running_device *maincpu; + running_device *audiocpu; + running_device *mcu; +}; + + +/*----------- defined in video/pushman.c -----------*/ + +WRITE16_HANDLER( pushman_scroll_w ); +WRITE16_HANDLER( pushman_videoram_w ); + +VIDEO_START( pushman ); + +VIDEO_UPDATE( pushman ); diff --git a/src/mame/video/playmark.c b/src/mame/video/playmark.c index b165c3d8abb..089950e42ad 100644 --- a/src/mame/video/playmark.c +++ b/src/mame/video/playmark.c @@ -2,21 +2,6 @@ #include "includes/playmark.h" -UINT16 *bigtwin_bgvideoram; -UINT16 *wbeachvl_videoram1,*wbeachvl_videoram2,*wbeachvl_videoram3; -UINT16 *wbeachvl_rowscroll; - -static int bgscrollx,bgscrolly,bg_enable,bg_full_size; -static int fgscrollx,fg_rowscroll_enable; -static tilemap_t *tx_tilemap,*fg_tilemap,*bg_tilemap; - -static int xoffset = 0; -static int yoffset = 0; -static int txt_tile_offset = 0; -static int pri_masks[3]; -static UINT16 playmark_scroll[7]; - - /*************************************************************************** Callbacks for the TileMap code @@ -25,8 +10,9 @@ static UINT16 playmark_scroll[7]; static TILE_GET_INFO( bigtwin_get_tx_tile_info ) { - UINT16 code = wbeachvl_videoram1[2*tile_index]; - UINT16 color = wbeachvl_videoram1[2*tile_index+1]; + playmark_state *state = (playmark_state *)machine->driver_data; + UINT16 code = state->videoram1[2 * tile_index]; + UINT16 color = state->videoram1[2 * tile_index + 1]; SET_TILE_INFO( 2, code, @@ -36,8 +22,9 @@ static TILE_GET_INFO( bigtwin_get_tx_tile_info ) static TILE_GET_INFO( bigtwin_get_fg_tile_info ) { - UINT16 code = wbeachvl_videoram2[2*tile_index]; - UINT16 color = wbeachvl_videoram2[2*tile_index+1]; + playmark_state *state = (playmark_state *)machine->driver_data; + UINT16 code = state->videoram2[2 * tile_index]; + UINT16 color = state->videoram2[2 * tile_index + 1]; SET_TILE_INFO( 1, code, @@ -47,8 +34,9 @@ static TILE_GET_INFO( bigtwin_get_fg_tile_info ) static TILE_GET_INFO( wbeachvl_get_tx_tile_info ) { - UINT16 code = wbeachvl_videoram1[2*tile_index]; - UINT16 color = wbeachvl_videoram1[2*tile_index+1]; + playmark_state *state = (playmark_state *)machine->driver_data; + UINT16 code = state->videoram1[2 * tile_index]; + UINT16 color = state->videoram1[2 * tile_index + 1]; SET_TILE_INFO( 2, @@ -59,8 +47,9 @@ static TILE_GET_INFO( wbeachvl_get_tx_tile_info ) static TILE_GET_INFO( wbeachvl_get_fg_tile_info ) { - UINT16 code = wbeachvl_videoram2[2*tile_index]; - UINT16 color = wbeachvl_videoram2[2*tile_index+1]; + playmark_state *state = (playmark_state *)machine->driver_data; + UINT16 code = state->videoram2[2 * tile_index]; + UINT16 color = state->videoram2[2 * tile_index + 1]; SET_TILE_INFO( 1, @@ -71,8 +60,9 @@ static TILE_GET_INFO( wbeachvl_get_fg_tile_info ) static TILE_GET_INFO( wbeachvl_get_bg_tile_info ) { - UINT16 code = wbeachvl_videoram3[2*tile_index]; - UINT16 color = wbeachvl_videoram3[2*tile_index+1]; + playmark_state *state = (playmark_state *)machine->driver_data; + UINT16 code = state->videoram3[2 * tile_index]; + UINT16 color = state->videoram3[2 * tile_index + 1]; SET_TILE_INFO( 1, @@ -83,26 +73,29 @@ static TILE_GET_INFO( wbeachvl_get_bg_tile_info ) static TILE_GET_INFO( hrdtimes_get_tx_tile_info ) { - int code = wbeachvl_videoram1[tile_index] & 0x03ff; - int colr = wbeachvl_videoram1[tile_index] & 0xe000; + playmark_state *state = (playmark_state *)machine->driver_data; + int code = state->videoram1[tile_index] & 0x03ff; + int colr = state->videoram1[tile_index] & 0xe000; - SET_TILE_INFO(2,code + txt_tile_offset,colr >> 13,0); + SET_TILE_INFO(2,code + state->txt_tile_offset, colr >> 13, 0); } static TILE_GET_INFO( hrdtimes_get_fg_tile_info ) { - int code = wbeachvl_videoram2[tile_index] & 0x1fff; - int colr = wbeachvl_videoram2[tile_index] & 0xe000; + playmark_state *state = (playmark_state *)machine->driver_data; + int code = state->videoram2[tile_index] & 0x1fff; + int colr = state->videoram2[tile_index] & 0xe000; SET_TILE_INFO(1,code + 0x2000,(colr >> 13) + 8,0); } static TILE_GET_INFO( hrdtimes_get_bg_tile_info ) { - int code = wbeachvl_videoram3[tile_index] & 0x1fff; - int colr = wbeachvl_videoram3[tile_index] & 0xe000; + playmark_state *state = (playmark_state *)machine->driver_data; + int code = state->videoram3[tile_index] & 0x1fff; + int colr = state->videoram3[tile_index] & 0xe000; - SET_TILE_INFO(1,code,colr >> 13,0); + SET_TILE_INFO(1, code, colr >> 13, 0); } /*************************************************************************** @@ -113,85 +106,107 @@ static TILE_GET_INFO( hrdtimes_get_bg_tile_info ) VIDEO_START( bigtwin ) { - tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,32); - fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info,tilemap_scan_rows, 16,16,32,32); + playmark_state *state = (playmark_state *)machine->driver_data; - tilemap_set_transparent_pen(tx_tilemap,0); + state->tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 32); + state->fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32); - pri_masks[0] = 0; - pri_masks[1] = 0; - pri_masks[2] = 0; + tilemap_set_transparent_pen(state->tx_tilemap, 0); + + state->xoffset = 0; + state->yoffset = 0; + state->txt_tile_offset = 0; + + state->pri_masks[0] = 0; + state->pri_masks[1] = 0; + state->pri_masks[2] = 0; } VIDEO_START( wbeachvl ) { - tx_tilemap = tilemap_create(machine, wbeachvl_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,32); - fg_tilemap = tilemap_create(machine, wbeachvl_get_fg_tile_info,tilemap_scan_rows,16,16,64,32); - bg_tilemap = tilemap_create(machine, wbeachvl_get_bg_tile_info,tilemap_scan_rows, 16,16,64,32); + playmark_state *state = (playmark_state *)machine->driver_data; - tilemap_set_transparent_pen(tx_tilemap,0); - tilemap_set_transparent_pen(fg_tilemap,0); + state->tx_tilemap = tilemap_create(machine, wbeachvl_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 32); + state->fg_tilemap = tilemap_create(machine, wbeachvl_get_fg_tile_info, tilemap_scan_rows, 16, 16, 64, 32); + state->bg_tilemap = tilemap_create(machine, wbeachvl_get_bg_tile_info, tilemap_scan_rows, 16, 16, 64, 32); - pri_masks[0] = 0xfff0; - pri_masks[1] = 0xfffc; - pri_masks[2] = 0; + tilemap_set_transparent_pen(state->tx_tilemap, 0); + tilemap_set_transparent_pen(state->fg_tilemap, 0); + + state->xoffset = 0; + state->yoffset = 0; + state->txt_tile_offset = 0; + + state->pri_masks[0] = 0xfff0; + state->pri_masks[1] = 0xfffc; + state->pri_masks[2] = 0; } VIDEO_START( excelsr ) { - tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info,tilemap_scan_rows,16,16,32,32); - fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info,tilemap_scan_rows, 16,16,32,32); + playmark_state *state = (playmark_state *)machine->driver_data; - tilemap_set_transparent_pen(tx_tilemap,0); + state->tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info, tilemap_scan_rows, 16, 16, 32, 32); + state->fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32); - pri_masks[0] = 0; - pri_masks[1] = 0xfffc; - pri_masks[2] = 0xfff0; + tilemap_set_transparent_pen(state->tx_tilemap, 0); + + state->xoffset = 0; + state->yoffset = 0; + state->txt_tile_offset = 0; + + state->pri_masks[0] = 0; + state->pri_masks[1] = 0xfffc; + state->pri_masks[2] = 0xfff0; } VIDEO_START( hotmind ) { - tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,64); - fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info,tilemap_scan_rows,16,16,32,32); - bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info,tilemap_scan_rows, 16,16,32,32); + playmark_state *state = (playmark_state *)machine->driver_data; - tilemap_set_transparent_pen(tx_tilemap,0); - tilemap_set_transparent_pen(fg_tilemap,0); + state->tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 64); + state->fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32); + state->bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info, tilemap_scan_rows, 16, 16, 32, 32); - tilemap_set_scrolldx(tx_tilemap, -14, -14); - tilemap_set_scrolldx(fg_tilemap, -14, -14); - tilemap_set_scrolldx(bg_tilemap, -14, -14); + tilemap_set_transparent_pen(state->tx_tilemap, 0); + tilemap_set_transparent_pen(state->fg_tilemap, 0); - xoffset = -9; - yoffset = -8; - txt_tile_offset = 0x9000; + tilemap_set_scrolldx(state->tx_tilemap, -14, -14); + tilemap_set_scrolldx(state->fg_tilemap, -14, -14); + tilemap_set_scrolldx(state->bg_tilemap, -14, -14); - pri_masks[0] = 0xfff0; - pri_masks[1] = 0xfffc; - pri_masks[2] = 0; + state->xoffset = -9; + state->yoffset = -8; + state->txt_tile_offset = 0x9000; + + state->pri_masks[0] = 0xfff0; + state->pri_masks[1] = 0xfffc; + state->pri_masks[2] = 0; } VIDEO_START( hrdtimes ) { - tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,64); - fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info,tilemap_scan_rows,16,16,32,32); - bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info,tilemap_scan_rows, 16,16,32,32); + playmark_state *state = (playmark_state *)machine->driver_data; - tilemap_set_transparent_pen(tx_tilemap,0); - tilemap_set_transparent_pen(fg_tilemap,0); + state->tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info,tilemap_scan_rows, 8, 8, 64, 64); + state->fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info,tilemap_scan_rows, 16, 16, 32, 32); + state->bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info,tilemap_scan_rows, 16, 16, 32, 32); - tilemap_set_scrolldx(tx_tilemap, -14, -14); - tilemap_set_scrolldx(fg_tilemap, -10, -10); - tilemap_set_scrolldx(bg_tilemap, -12, -12); + tilemap_set_transparent_pen(state->tx_tilemap, 0); + tilemap_set_transparent_pen(state->fg_tilemap, 0); - xoffset = -8; - yoffset = -8; - txt_tile_offset = 0xfc00; + tilemap_set_scrolldx(state->tx_tilemap, -14, -14); + tilemap_set_scrolldx(state->fg_tilemap, -10, -10); + tilemap_set_scrolldx(state->bg_tilemap, -12, -12); - pri_masks[0] = 0xfff0; - pri_masks[1] = 0xfffc; - pri_masks[2] = 0; + state->xoffset = -8; + state->yoffset = -8; + state->txt_tile_offset = 0xfc00; + + state->pri_masks[0] = 0xfff0; + state->pri_masks[1] = 0xfffc; + state->pri_masks[2] = 0; } /*************************************************************************** @@ -202,44 +217,56 @@ VIDEO_START( hrdtimes ) WRITE16_HANDLER( wbeachvl_txvideoram_w ) { - COMBINE_DATA(&wbeachvl_videoram1[offset]); - tilemap_mark_tile_dirty(tx_tilemap,offset / 2); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + COMBINE_DATA(&state->videoram1[offset]); + tilemap_mark_tile_dirty(state->tx_tilemap, offset / 2); } WRITE16_HANDLER( wbeachvl_fgvideoram_w ) { - COMBINE_DATA(&wbeachvl_videoram2[offset]); - tilemap_mark_tile_dirty(fg_tilemap,offset / 2); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + COMBINE_DATA(&state->videoram2[offset]); + tilemap_mark_tile_dirty(state->fg_tilemap, offset / 2); } WRITE16_HANDLER( wbeachvl_bgvideoram_w ) { - COMBINE_DATA(&wbeachvl_videoram3[offset]); - tilemap_mark_tile_dirty(bg_tilemap,offset / 2); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + COMBINE_DATA(&state->videoram3[offset]); + tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2); } WRITE16_HANDLER( hrdtimes_txvideoram_w ) { - COMBINE_DATA(&wbeachvl_videoram1[offset]); - tilemap_mark_tile_dirty(tx_tilemap,offset); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + COMBINE_DATA(&state->videoram1[offset]); + tilemap_mark_tile_dirty(state->tx_tilemap, offset); } WRITE16_HANDLER( hrdtimes_fgvideoram_w ) { - COMBINE_DATA(&wbeachvl_videoram2[offset]); - tilemap_mark_tile_dirty(fg_tilemap,offset); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + COMBINE_DATA(&state->videoram2[offset]); + tilemap_mark_tile_dirty(state->fg_tilemap, offset); } WRITE16_HANDLER( hrdtimes_bgvideoram_w ) { - COMBINE_DATA(&wbeachvl_videoram3[offset]); - tilemap_mark_tile_dirty(bg_tilemap,offset); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + COMBINE_DATA(&state->videoram3[offset]); + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } WRITE16_HANDLER( bigtwin_paletteram_w ) { - int r,g,b,val; + int r, g, b, val; COMBINE_DATA(&space->machine->generic.paletteram.u16[offset]); @@ -252,74 +279,82 @@ WRITE16_HANDLER( bigtwin_paletteram_w ) g |= ((val & 0x04) >> 2); b |= ((val & 0x02) >> 1); - palette_set_color_rgb(space->machine,offset,pal5bit(r),pal5bit(g),pal5bit(b)); + palette_set_color_rgb(space->machine, offset, pal5bit(r), pal5bit(g), pal5bit(b)); } WRITE16_HANDLER( bigtwin_scroll_w ) { - data = COMBINE_DATA(&playmark_scroll[offset]); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + data = COMBINE_DATA(&state->scroll[offset]); switch (offset) { - case 0: tilemap_set_scrollx(tx_tilemap,0,data+2); break; - case 1: tilemap_set_scrolly(tx_tilemap,0,data); break; - case 2: bgscrollx = -(data+4); break; - case 3: bgscrolly = (-data) & 0x1ff; - bg_enable = data & 0x0200; - bg_full_size = data & 0x0400; + case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data + 2); break; + case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break; + case 2: state->bgscrollx = -(data + 4); break; + case 3: state->bgscrolly = (-data) & 0x1ff; + state->bg_enable = data & 0x0200; + state->bg_full_size = data & 0x0400; break; - case 4: tilemap_set_scrollx(fg_tilemap,0,data+6); break; - case 5: tilemap_set_scrolly(fg_tilemap,0,data); break; + case 4: tilemap_set_scrollx(state->fg_tilemap, 0, data + 6); break; + case 5: tilemap_set_scrolly(state->fg_tilemap, 0, data); break; } } WRITE16_HANDLER( wbeachvl_scroll_w ) { - data = COMBINE_DATA(&playmark_scroll[offset]); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + data = COMBINE_DATA(&state->scroll[offset]); switch (offset) { - case 0: tilemap_set_scrollx(tx_tilemap,0,data+2); break; - case 1: tilemap_set_scrolly(tx_tilemap,0,data); break; - case 2: fgscrollx = data+4;break; - case 3: tilemap_set_scrolly(fg_tilemap,0,data & 0x3ff); - fg_rowscroll_enable = data & 0x0800; + case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data + 2); break; + case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break; + case 2: state->fgscrollx = data + 4;break; + case 3: tilemap_set_scrolly(state->fg_tilemap, 0, data & 0x3ff); + state->fg_rowscroll_enable = data & 0x0800; break; - case 4: tilemap_set_scrollx(bg_tilemap,0,data+6); break; - case 5: tilemap_set_scrolly(bg_tilemap,0,data); break; + case 4: tilemap_set_scrollx(state->bg_tilemap, 0, data + 6); break; + case 5: tilemap_set_scrolly(state->bg_tilemap, 0, data); break; } } WRITE16_HANDLER( excelsr_scroll_w ) { - data = COMBINE_DATA(&playmark_scroll[offset]); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + data = COMBINE_DATA(&state->scroll[offset]); switch (offset) { - case 0: tilemap_set_scrollx(tx_tilemap,0,data+2); break; - case 1: tilemap_set_scrolly(tx_tilemap,0,data); break; - case 2: bgscrollx = -data; break; - case 3: bgscrolly = (-data+2)& 0x1ff; - bg_enable = data & 0x0200; - bg_full_size = data & 0x0400; + case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data + 2); break; + case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break; + case 2: state->bgscrollx = -data; break; + case 3: state->bgscrolly = (-data + 2)& 0x1ff; + state->bg_enable = data & 0x0200; + state->bg_full_size = data & 0x0400; break; - case 4: tilemap_set_scrollx(fg_tilemap,0,data+6); break; - case 5: tilemap_set_scrolly(fg_tilemap,0,data); break; + case 4: tilemap_set_scrollx(state->fg_tilemap, 0, data + 6); break; + case 5: tilemap_set_scrolly(state->fg_tilemap, 0, data); break; } } WRITE16_HANDLER( hrdtimes_scroll_w ) { - data = COMBINE_DATA(&playmark_scroll[offset]); + playmark_state *state = (playmark_state *)space->machine->driver_data; + + data = COMBINE_DATA(&state->scroll[offset]); switch (offset) { - case 0: tilemap_set_scrollx(tx_tilemap,0,data); break; - case 1: tilemap_set_scrolly(tx_tilemap,0,data); break; - case 2: tilemap_set_scrollx(fg_tilemap,0,data); break; - case 3: tilemap_set_scrolly(fg_tilemap,0,data); break; - case 4: tilemap_set_scrollx(bg_tilemap,0,data); break; - case 5: tilemap_set_scrolly(bg_tilemap,0,data); break; + case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data); break; + case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break; + case 2: tilemap_set_scrollx(state->fg_tilemap, 0, data); break; + case 3: tilemap_set_scrolly(state->fg_tilemap, 0, data); break; + case 4: tilemap_set_scrollx(state->bg_tilemap, 0, data); break; + case 5: tilemap_set_scrolly(state->bg_tilemap, 0, data); break; } } @@ -329,35 +364,36 @@ WRITE16_HANDLER( hrdtimes_scroll_w ) ***************************************************************************/ -static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,int codeshift) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int codeshift ) { - int offs, start_offset = machine->generic.spriteram_size/2 - 4; + playmark_state *state = (playmark_state *)machine->driver_data; + int offs, start_offset = state->spriteram_size / 2 - 4; int height = machine->gfx[0]->height; int colordiv = machine->gfx[0]->color_granularity / 16; - UINT16 *spriteram16 = machine->generic.spriteram.u16; + UINT16 *spriteram = state->spriteram; // find the "end of list" to draw the sprites in reverse order - for (offs = 4;offs < machine->generic.spriteram_size/2;offs += 4) + for (offs = 4; offs < state->spriteram_size / 2; offs += 4) { - if (spriteram16[offs+3-4] == 0x2000) /* end of list marker */ + if (spriteram[offs + 3 - 4] == 0x2000) /* end of list marker */ { start_offset = offs - 4; break; } } - for (offs = start_offset;offs >= 4;offs -= 4) + for (offs = start_offset; offs >= 4; offs -= 4) { - int sx,sy,code,color,flipx,pri; + int sx, sy, code, color, flipx, pri; - sy = spriteram16[offs+3-4]; /* -4? what the... ??? */ + sy = spriteram[offs + 3 - 4]; /* -4? what the... ??? */ flipx = sy & 0x4000; - sx = (spriteram16[offs+1] & 0x01ff) - 16-7; - sy = (256-8-height - sy) & 0xff; - code = spriteram16[offs+2] >> codeshift; - color = ((spriteram16[offs+1] & 0x3e00) >> 9) / colordiv; - pri = (spriteram16[offs+1] & 0x8000) >> 15; + sx = (spriteram[offs + 1] & 0x01ff) - 16 - 7; + sy = (256 - 8 - height - sy) & 0xff; + code = spriteram[offs + 2] >> codeshift; + color = ((spriteram[offs + 1] & 0x3e00) >> 9) / colordiv; + pri = (spriteram[offs + 1] & 0x8000) >> 15; if(!pri && (color & 0x0c) == 0x0c) pri = 2; @@ -366,42 +402,43 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan code, color, flipx,0, - sx + xoffset,sy + yoffset, - machine->priority_bitmap,pri_masks[pri],0); + sx + state->xoffset,sy + state->yoffset, + machine->priority_bitmap,state->pri_masks[pri],0); } } -static void draw_bitmap(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) +static void draw_bitmap( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { - int x,y,count; + playmark_state *state = (playmark_state *)machine->driver_data; + int x, y, count; int color; UINT8 *pri; count = 0; - for (y=0;y<512;y++) + for (y = 0; y < 512; y++) { - for (x=0;x<512;x++) + for (x = 0; x < 512; x++) { - color = bigtwin_bgvideoram[count] & 0xff; + color = state->bgvideoram[count] & 0xff; - if(color) + if (color) { - if(bg_full_size) + if (state->bg_full_size) { - *BITMAP_ADDR16(bitmap, (y + bgscrolly) & 0x1ff, (x + bgscrollx) & 0x1ff) = 0x100 + color; + *BITMAP_ADDR16(bitmap, (y + state->bgscrolly) & 0x1ff, (x + state->bgscrollx) & 0x1ff) = 0x100 + color; - pri = BITMAP_ADDR8(machine->priority_bitmap, (y + bgscrolly) & 0x1ff, 0); - pri[(x + bgscrollx) & 0x1ff] |= 2; + pri = BITMAP_ADDR8(machine->priority_bitmap, (y + state->bgscrolly) & 0x1ff, 0); + pri[(x + state->bgscrollx) & 0x1ff] |= 2; } else { /* 50% size */ if(!(x % 2) && !(y % 2)) { - *BITMAP_ADDR16(bitmap, (y / 2 + bgscrolly) & 0x1ff, (x / 2 + bgscrollx) & 0x1ff) = 0x100 + color; + *BITMAP_ADDR16(bitmap, (y / 2 + state->bgscrolly) & 0x1ff, (x / 2 + state->bgscrollx) & 0x1ff) = 0x100 + color; - pri = BITMAP_ADDR8(machine->priority_bitmap, (y / 2 + bgscrolly) & 0x1ff, 0); - pri[(x / 2 + bgscrollx) & 0x1ff] |= 2; + pri = BITMAP_ADDR8(machine->priority_bitmap, (y / 2 + state->bgscrolly) & 0x1ff, 0); + pri[(x / 2 + state->bgscrollx) & 0x1ff] |= 2; } } } @@ -413,66 +450,74 @@ static void draw_bitmap(running_machine *machine, bitmap_t *bitmap, const rectan VIDEO_UPDATE( bigtwin ) { - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + playmark_state *state = (playmark_state *)screen->machine->driver_data; - tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); - if (bg_enable) + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + + tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0); + if (state->bg_enable) draw_bitmap(screen->machine, bitmap, cliprect); - draw_sprites(screen->machine, bitmap,cliprect,4); - tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); + draw_sprites(screen->machine, bitmap, cliprect, 4); + tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0); return 0; } VIDEO_UPDATE( excelsr ) { - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + playmark_state *state = (playmark_state *)screen->machine->driver_data; - tilemap_draw(bitmap,cliprect,fg_tilemap,0,1); - if (bg_enable) + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + + tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 1); + if (state->bg_enable) draw_bitmap(screen->machine, bitmap, cliprect); - tilemap_draw(bitmap,cliprect,tx_tilemap,0,4); - draw_sprites(screen->machine,bitmap,cliprect,2); + tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 4); + draw_sprites(screen->machine, bitmap, cliprect, 2); return 0; } VIDEO_UPDATE( wbeachvl ) { - if (fg_rowscroll_enable) + playmark_state *state = (playmark_state *)screen->machine->driver_data; + + if (state->fg_rowscroll_enable) { int i; - tilemap_set_scroll_rows(fg_tilemap,512); - for (i = 0;i < 256;i++) - tilemap_set_scrollx(fg_tilemap,i+1,wbeachvl_rowscroll[8*i]); + tilemap_set_scroll_rows(state->fg_tilemap, 512); + for (i = 0; i < 256; i++) + tilemap_set_scrollx(state->fg_tilemap, i + 1, state->rowscroll[8 * i]); } else { - tilemap_set_scroll_rows(fg_tilemap,1); - tilemap_set_scrollx(fg_tilemap,0,fgscrollx); + tilemap_set_scroll_rows(state->fg_tilemap, 1); + tilemap_set_scrollx(state->fg_tilemap, 0, state->fgscrollx); } - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,1); - tilemap_draw(bitmap,cliprect,fg_tilemap,0,2); - draw_sprites(screen->machine,bitmap,cliprect,0); - tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 1); + tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 2); + draw_sprites(screen->machine, bitmap, cliprect, 0); + tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0); return 0; } VIDEO_UPDATE( hrdtimes ) { - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + playmark_state *state = (playmark_state *)screen->machine->driver_data; + + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); // video enabled - if(playmark_scroll[6] & 1) + if (state->scroll[6] & 1) { - tilemap_draw(bitmap,cliprect,bg_tilemap,0,1); - tilemap_draw(bitmap,cliprect,fg_tilemap,0,2); - draw_sprites(screen->machine,bitmap,cliprect,2); - tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 1); + tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 2); + draw_sprites(screen->machine, bitmap, cliprect, 2); + tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0); } else - bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); + bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); return 0; } diff --git a/src/mame/video/pushman.c b/src/mame/video/pushman.c index d218afaea5e..6324416efd9 100644 --- a/src/mame/video/pushman.c +++ b/src/mame/video/pushman.c @@ -1,8 +1,5 @@ #include "emu.h" - -static tilemap_t *bg_tilemap,*tx_tilemap; -static UINT16 control[2]; - +#include "includes/pushman.h" /*************************************************************************** @@ -13,30 +10,32 @@ static UINT16 control[2]; static TILEMAP_MAPPER( background_scan_rows ) { /* logical (col,row) -> memory offset */ - return ((col & 0x7)) + ((7-(row & 0x7)) << 3) + ((col & 0x78) <<3) + ((0x38-(row&0x38))<<7); + return ((col & 0x7)) + ((7 - (row & 0x7)) << 3) + ((col & 0x78) << 3) + ((0x38 - (row & 0x38)) << 7); } static TILE_GET_INFO( get_back_tile_info ) { - UINT8 *bgMap = memory_region(machine, "gfx4"); + UINT8 *bg_map = memory_region(machine, "gfx4"); int tile; - tile=bgMap[tile_index<<1]+(bgMap[(tile_index<<1)+1]<<8); + tile = bg_map[tile_index << 1] + (bg_map[(tile_index << 1) + 1] << 8); SET_TILE_INFO( 2, - (tile&0xff)|((tile&0x4000)>>6), - (tile>>8)&0xf, - (tile&0x2000)?TILE_FLIPX:0); + (tile & 0xff) | ((tile & 0x4000) >> 6), + (tile >> 8) & 0xf, + (tile & 0x2000) ? TILE_FLIPX : 0); } static TILE_GET_INFO( get_text_tile_info ) { - int tile = machine->generic.videoram.u16[tile_index]; + pushman_state *state = (pushman_state *)machine->driver_data; + + int tile = state->videoram[tile_index]; SET_TILE_INFO( 0, - (tile&0xff)|((tile&0xc000)>>6)|((tile&0x2000)>>3), - (tile>>8)&0xf, - (tile&0x1000)?TILE_FLIPY:0); /* not used? from Tiger Road */ + (tile & 0xff) | ((tile & 0xc000) >> 6) | ((tile & 0x2000) >> 3), + (tile >> 8) & 0xf, + (tile & 0x1000) ? TILE_FLIPY : 0); /* not used? from Tiger Road */ } @@ -49,10 +48,12 @@ static TILE_GET_INFO( get_text_tile_info ) VIDEO_START( pushman ) { - bg_tilemap = tilemap_create(machine, get_back_tile_info,background_scan_rows, 32,32,128,64); - tx_tilemap = tilemap_create(machine, get_text_tile_info,tilemap_scan_rows, 8, 8, 32,32); + pushman_state *state = (pushman_state *)machine->driver_data; - tilemap_set_transparent_pen(tx_tilemap,3); + state->bg_tilemap = tilemap_create(machine, get_back_tile_info, background_scan_rows, 32, 32, 128, 64); + state->tx_tilemap = tilemap_create(machine, get_text_tile_info, tilemap_scan_rows, 8, 8, 32, 32); + + tilemap_set_transparent_pen(state->tx_tilemap, 3); } @@ -65,13 +66,15 @@ VIDEO_START( pushman ) WRITE16_HANDLER( pushman_scroll_w ) { - COMBINE_DATA(&control[offset]); + pushman_state *state = (pushman_state *)space->machine->driver_data; + COMBINE_DATA(&state->control[offset]); } WRITE16_HANDLER( pushman_videoram_w ) { - COMBINE_DATA(&space->machine->generic.videoram.u16[offset]); - tilemap_mark_tile_dirty(tx_tilemap,offset); + pushman_state *state = (pushman_state *)space->machine->driver_data; + COMBINE_DATA(&state->videoram[offset]); + tilemap_mark_tile_dirty(state->tx_tilemap, offset); } @@ -82,23 +85,27 @@ WRITE16_HANDLER( pushman_videoram_w ) ***************************************************************************/ -static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { - UINT16 *spriteram16 = machine->generic.spriteram.u16; - int offs,x,y,color,sprite,flipx,flipy; + pushman_state *state = (pushman_state *)machine->driver_data; + UINT16 *spriteram = state->spriteram; + int offs, x, y, color, sprite, flipx, flipy; - for (offs = 0x0800-4;offs >=0;offs -= 4) + for (offs = 0x0800 - 4; offs >=0; offs -= 4) { /* Don't draw empty sprite table entries */ - x = spriteram16[offs+3]&0x1ff; - if (x==0x180) continue; - if (x>0xff) x=0-(0x200-x); - y = 240-spriteram16[offs+2]; - color = ((spriteram16[offs+1]>>2)&0xf); - sprite = spriteram16[offs]&0x7ff; + x = spriteram[offs + 3] & 0x1ff; + if (x == 0x180) + continue; + if (x > 0xff) + x = 0 - (0x200 - x); + + y = 240 - spriteram[offs + 2]; + color = ((spriteram[offs + 1] >> 2) & 0xf); + sprite = spriteram[offs] & 0x7ff; /* ElSemi - Sprite flip info */ - flipx=spriteram16[offs+1]&2; - flipy=spriteram16[offs+1]&1; /* flip y untested */ + flipx = spriteram[offs + 1] & 2; + flipy = spriteram[offs + 1] & 1; /* flip y untested */ if (flip_screen_get(machine)) { @@ -108,20 +115,21 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan flipy = !flipy; } - drawgfx_transpen(bitmap,cliprect,machine->gfx[1], - sprite, - color,flipx,flipy,x,y,15); + drawgfx_transpen(bitmap,cliprect,machine->gfx[1], sprite, + color, flipx, flipy, x, y, 15); } } VIDEO_UPDATE( pushman ) { - /* Setup the tilemaps */ - tilemap_set_scrollx( bg_tilemap,0, control[0] ); - tilemap_set_scrolly( bg_tilemap,0, 0xf00-control[1] ); + pushman_state *state = (pushman_state *)screen->machine->driver_data; - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); - draw_sprites(screen->machine,bitmap,cliprect); - tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); + /* Setup the tilemaps */ + tilemap_set_scrollx(state->bg_tilemap, 0, state->control[0]); + tilemap_set_scrolly(state->bg_tilemap, 0, 0xf00 - state->control[1]); + + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect); + tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0); return 0; }