diff --git a/.gitattributes b/.gitattributes index c494859ad80..e46399f8aa9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2725,6 +2725,7 @@ src/mame/includes/pandoras.h svneol=native#text/plain src/mame/includes/paradise.h svneol=native#text/plain src/mame/includes/parodius.h svneol=native#text/plain src/mame/includes/pass.h svneol=native#text/plain +src/mame/includes/pbaction.h svneol=native#text/plain src/mame/includes/pgm.h svneol=native#text/plain src/mame/includes/phoenix.h svneol=native#text/plain src/mame/includes/pitnrun.h svneol=native#text/plain diff --git a/src/mame/drivers/paradise.c b/src/mame/drivers/paradise.c index 6f452115283..28ab19105b8 100644 --- a/src/mame/drivers/paradise.c +++ b/src/mame/drivers/paradise.c @@ -1,8 +1,8 @@ /*************************************************************************** - -= Paradise / Target Ball / Torus =- + -= Paradise / Target Ball / Torus =- - driver by Luca Elia (l.elia@tin.it) + driver by Luca Elia (l.elia@tin.it) CPU : Z8400B @@ -44,20 +44,21 @@ paradise: I'm not sure it's working correctly: static WRITE8_HANDLER( paradise_rombank_w ) { int bank = data; - int bank_n = memory_region_length(space->machine, "maincpu")/0x4000 - 1; + int bank_n = memory_region_length(space->machine, "maincpu") / 0x4000 - 1; + if (bank >= bank_n) { - logerror("PC %04X - invalid rom bank %x\n",cpu_get_pc(space->cpu),bank); + logerror("PC %04X - invalid rom bank %x\n", cpu_get_pc(space->cpu), bank); bank %= bank_n; } - if (bank >= 3) bank+=1; - memory_set_bankptr(space->machine, "bank1", memory_region(space->machine, "maincpu") + bank * 0x4000); + memory_set_bank(space->machine, "bank1", bank); } static WRITE8_DEVICE_HANDLER( paradise_okibank_w ) { - if (data & ~0x02) logerror("%s: unknown oki bank bits %02X\n",cpuexec_describe_context(device->machine),data); + if (data & ~0x02) + logerror("%s: unknown oki bank bits %02X\n", cpuexec_describe_context(device->machine), data); okim6295_set_bank_base(device, (data & 0x02) ? 0x40000 : 0); } @@ -70,61 +71,61 @@ static WRITE8_HANDLER( torus_coin_counter_w ) #define STANDARD_MAP \ AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM */ \ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") /* ROM (banked) */ \ - AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(paradise_vram_2_w) AM_BASE(¶dise_vram_2 ) /* Background */ \ - AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(paradise_vram_1_w) AM_BASE(¶dise_vram_1 ) /* Midground */ \ - AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(paradise_vram_0_w) AM_BASE(¶dise_vram_0 ) /* Foreground */ \ + AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(paradise_vram_2_w) AM_BASE_MEMBER(paradise_state, vram_2) /* Background */ \ + AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(paradise_vram_1_w) AM_BASE_MEMBER(paradise_state, vram_1) /* Midground */ \ + AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(paradise_vram_0_w) AM_BASE_MEMBER(paradise_state, vram_0) /* Foreground */ \ static ADDRESS_MAP_START( paradise_map, ADDRESS_SPACE_PROGRAM, 8 ) STANDARD_MAP AM_RANGE(0xd800, 0xd8ff) AM_RAM // RAM - AM_RANGE(0xd900, 0xe0ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + AM_RANGE(0xd900, 0xe0ff) AM_RAM AM_BASE_SIZE_MEMBER(paradise_state, spriteram, spriteram_size) // Sprites AM_RANGE(0xe100, 0xffff) AM_RAM // RAM ADDRESS_MAP_END static ADDRESS_MAP_START( tgtball_map, ADDRESS_SPACE_PROGRAM, 8 ) STANDARD_MAP AM_RANGE(0xd800, 0xd8ff) AM_RAM // RAM - AM_RANGE(0xd900, 0xd9ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + AM_RANGE(0xd900, 0xd9ff) AM_RAM AM_BASE_SIZE_MEMBER(paradise_state, spriteram, spriteram_size) // Sprites AM_RANGE(0xda00, 0xffff) AM_RAM // RAM ADDRESS_MAP_END static ADDRESS_MAP_START( torus_map, ADDRESS_SPACE_PROGRAM, 8 ) STANDARD_MAP - AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // Sprites + AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE_SIZE_MEMBER(paradise_state, spriteram, spriteram_size) // Sprites AM_RANGE(0xe000, 0xffff) AM_RAM // RAM ADDRESS_MAP_END static ADDRESS_MAP_START( paradise_io_map, ADDRESS_SPACE_IO, 8 ) - AM_RANGE(0x0000, 0x17ff) AM_RAM_WRITE(paradise_palette_w) AM_BASE_GENERIC(paletteram) // Palette - AM_RANGE(0x1800, 0x1800) AM_WRITE(paradise_priority_w ) // Layers priority - AM_RANGE(0x2001, 0x2001) AM_WRITE(paradise_flipscreen_w ) // Flip Screen - AM_RANGE(0x2004, 0x2004) AM_WRITE(paradise_palbank_w ) // Layers palette bank - AM_RANGE(0x2006, 0x2006) AM_WRITE(paradise_rombank_w ) // ROM bank - AM_RANGE(0x2007, 0x2007) AM_DEVWRITE("oki2", paradise_okibank_w ) // OKI 1 samples bank + AM_RANGE(0x0000, 0x17ff) AM_RAM_WRITE(paradise_palette_w) AM_BASE_MEMBER(paradise_state, paletteram) // Palette + AM_RANGE(0x1800, 0x1800) AM_WRITE(paradise_priority_w) // Layers priority + AM_RANGE(0x2001, 0x2001) AM_WRITE(paradise_flipscreen_w) // Flip Screen + AM_RANGE(0x2004, 0x2004) AM_WRITE(paradise_palbank_w) // Layers palette bank + AM_RANGE(0x2006, 0x2006) AM_WRITE(paradise_rombank_w) // ROM bank + AM_RANGE(0x2007, 0x2007) AM_DEVWRITE("oki2", paradise_okibank_w) // OKI 1 samples bank AM_RANGE(0x2010, 0x2010) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w) // OKI 0 - AM_RANGE(0x2020, 0x2020) AM_READ_PORT("DSW1" ) - AM_RANGE(0x2021, 0x2021) AM_READ_PORT("DSW2" ) - AM_RANGE(0x2022, 0x2022) AM_READ_PORT("P1" ) - AM_RANGE(0x2023, 0x2023) AM_READ_PORT("P2" ) - AM_RANGE(0x2024, 0x2024) AM_READ_PORT("SYSTEM" ) + AM_RANGE(0x2020, 0x2020) AM_READ_PORT("DSW1") + AM_RANGE(0x2021, 0x2021) AM_READ_PORT("DSW2") + AM_RANGE(0x2022, 0x2022) AM_READ_PORT("P1") + AM_RANGE(0x2023, 0x2023) AM_READ_PORT("P2") + AM_RANGE(0x2024, 0x2024) AM_READ_PORT("SYSTEM") AM_RANGE(0x2030, 0x2030) AM_DEVREADWRITE("oki2", okim6295_r, okim6295_w) // OKI 1 - AM_RANGE(0x8000, 0xffff) AM_RAM_WRITE(paradise_pixmap_w ) AM_BASE_GENERIC(videoram) // Pixmap + AM_RANGE(0x8000, 0xffff) AM_RAM_WRITE(paradise_pixmap_w) AM_BASE_MEMBER(paradise_state, videoram) // Pixmap ADDRESS_MAP_END static ADDRESS_MAP_START( torus_io_map, ADDRESS_SPACE_IO, 8 ) - AM_RANGE(0x0000, 0x17ff) AM_RAM_WRITE(paradise_palette_w) AM_BASE_GENERIC(paletteram) // Palette - AM_RANGE(0x1800, 0x1800) AM_WRITE(paradise_priority_w ) // Layers priority - AM_RANGE(0x2001, 0x2001) AM_WRITE(paradise_flipscreen_w ) // Flip Screen - AM_RANGE(0x2004, 0x2004) AM_WRITE(paradise_palbank_w ) // Layers palette bank - AM_RANGE(0x2006, 0x2006) AM_WRITE(paradise_rombank_w ) // ROM bank + AM_RANGE(0x0000, 0x17ff) AM_RAM_WRITE(paradise_palette_w) AM_BASE_MEMBER(paradise_state, paletteram) // Palette + AM_RANGE(0x1800, 0x1800) AM_WRITE(paradise_priority_w) // Layers priority + AM_RANGE(0x2001, 0x2001) AM_WRITE(paradise_flipscreen_w) // Flip Screen + AM_RANGE(0x2004, 0x2004) AM_WRITE(paradise_palbank_w) // Layers palette bank + AM_RANGE(0x2006, 0x2006) AM_WRITE(paradise_rombank_w) // ROM bank AM_RANGE(0x2010, 0x2010) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w) // OKI 0 - AM_RANGE(0x2020, 0x2020) AM_READ_PORT("DSW1" ) - AM_RANGE(0x2021, 0x2021) AM_READ_PORT("DSW2" ) - AM_RANGE(0x2022, 0x2022) AM_READ_PORT("P1" ) - AM_RANGE(0x2023, 0x2023) AM_READ_PORT("P2" ) - AM_RANGE(0x2024, 0x2024) AM_READ_PORT("SYSTEM" ) - AM_RANGE(0x8000, 0xffff) AM_RAM_WRITE(paradise_pixmap_w ) AM_BASE_GENERIC(videoram) // Pixmap + AM_RANGE(0x2020, 0x2020) AM_READ_PORT("DSW1") + AM_RANGE(0x2021, 0x2021) AM_READ_PORT("DSW2") + AM_RANGE(0x2022, 0x2022) AM_READ_PORT("P1") + AM_RANGE(0x2023, 0x2023) AM_READ_PORT("P2") + AM_RANGE(0x2024, 0x2024) AM_READ_PORT("SYSTEM") + AM_RANGE(0x8000, 0xffff) AM_RAM_WRITE(paradise_pixmap_w) AM_BASE_MEMBER(paradise_state, videoram) // Pixmap ADDRESS_MAP_END @@ -540,14 +541,41 @@ GFXDECODE_END ***************************************************************************/ +static MACHINE_START( paradise ) +{ + paradise_state *state = (paradise_state *)machine->driver_data; + int bank_n = memory_region_length(machine, "maincpu") / 0x4000 - 1; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 3, &ROM[0x00000], 0x4000); + memory_configure_bank(machine, "bank1", 3, bank_n - 4, &ROM[0x10000], 0x4000); + + state_save_register_global(machine, state->palbank); + state_save_register_global(machine, state->priority); +} + +static MACHINE_RESET( paradise ) +{ + paradise_state *state = (paradise_state *)machine->driver_data; + + state->palbank = 0; + state->priority = 0; +} + static MACHINE_DRIVER_START( paradise ) + /* driver data */ + MDRV_DRIVER_DATA(paradise_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80, XTAL_12MHz/2) /* Z8400B - 6mhz Verified */ MDRV_CPU_PROGRAM_MAP(paradise_map) MDRV_CPU_IO_MAP(paradise_io_map) MDRV_CPU_VBLANK_INT_HACK(irq0_line_hold,4) /* No nmi routine */ + MDRV_MACHINE_START(paradise) + MDRV_MACHINE_RESET(paradise) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(54) /* 54 verified */ @@ -1017,19 +1045,22 @@ ROM_END static DRIVER_INIT (paradise) { - paradise_sprite_inc = 0x20; + paradise_state *state = (paradise_state *)machine->driver_data; + state->sprite_inc = 0x20; } // Inverted flipscreen and sprites are packed in less memory (same number though) static DRIVER_INIT (tgtball) { - paradise_sprite_inc = 4; + paradise_state *state = (paradise_state *)machine->driver_data; + state->sprite_inc = 4; memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_IO), 0x2001, 0x2001, 0, 0, tgtball_flipscreen_w ); } static DRIVER_INIT (torus) { - paradise_sprite_inc = 4; + paradise_state *state = (paradise_state *)machine->driver_data; + state->sprite_inc = 4; memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_IO), 0x2070, 0x2070, 0, 0, torus_coin_counter_w); } @@ -1040,11 +1071,11 @@ static DRIVER_INIT (torus) ***************************************************************************/ -GAME( 1994+, paradise, 0, paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise", 0 ) -GAME( 1994+, paradlx, 0, paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise Deluxe", GAME_IMPERFECT_GRAPHICS ) -GAME( 1994+, para2dx , 0, paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise 2 Deluxe", GAME_IMPERFECT_GRAPHICS ) -GAME( 1995, tgtball, 0, tgtball, tgtball, tgtball, ROT0, "Yun Sung", "Target Ball (Nude)", 0 ) -GAME( 1995, tgtballa, tgtball, tgtball, tgtball, tgtball, ROT0, "Yun Sung", "Target Ball", 0 ) -GAME( 1996, torus, 0, torus, torus, torus, ROT90, "Yun Sung", "Torus", 0 ) -GAME( 1998, madball, 0, madball, madball, tgtball, ROT0, "Yun Sung", "Mad Ball V2.0", 0 ) -GAME( 1997, madballn, madball, madball, madball, tgtball, ROT0, "Yun Sung", "Mad Ball V2.0 (With Nudity)", 0 ) +GAME( 1994+, paradise, 0, paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise", GAME_SUPPORTS_SAVE ) +GAME( 1994+, paradlx, 0, paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise Deluxe", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1994+, para2dx , 0, paradise, paradise, paradise, ROT90, "Yun Sung", "Paradise 2 Deluxe", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1995, tgtball, 0, tgtball, tgtball, tgtball, ROT0, "Yun Sung", "Target Ball (Nude)", GAME_SUPPORTS_SAVE ) +GAME( 1995, tgtballa, tgtball, tgtball, tgtball, tgtball, ROT0, "Yun Sung", "Target Ball", GAME_SUPPORTS_SAVE ) +GAME( 1996, torus, 0, torus, torus, torus, ROT90, "Yun Sung", "Torus", GAME_SUPPORTS_SAVE ) +GAME( 1998, madball, 0, madball, madball, tgtball, ROT0, "Yun Sung", "Mad Ball V2.0", GAME_SUPPORTS_SAVE ) +GAME( 1997, madballn, madball, madball, madball, tgtball, ROT0, "Yun Sung", "Mad Ball V2.0 (With Nudity)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/pasha2.c b/src/mame/drivers/pasha2.c index e6f20f9b223..9cb1ef9b984 100644 --- a/src/mame/drivers/pasha2.c +++ b/src/mame/drivers/pasha2.c @@ -76,23 +76,40 @@ Notes: #include "machine/eeprom.h" #include "sound/okim6295.h" -static UINT16 *bitmap0, *bitmap1, *wram; -static int vbuffer = 0; -static int old_bank; +class pasha2_state +{ +public: + static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, pasha2_state(machine)); } + + pasha2_state(running_machine &machine) { } + + /* memory pointers */ + UINT16 * bitmap0; + UINT16 * bitmap1; + UINT16 * paletteram; + UINT16 * wram; + + /* video-related */ + int vbuffer; + int old_bank; +}; + static WRITE16_HANDLER( pasha2_misc_w ) { - if(offset) + pasha2_state *state = (pasha2_state *)space->machine->driver_data; + + if (offset) { - if(data & 0x0800) + if (data & 0x0800) { int bank = data & 0xf000; - if(bank != old_bank) + if (bank != state->old_bank) { - old_bank = bank; + state->old_bank = bank; - switch(bank) + switch (bank) { case 0x8000: case 0x9000: @@ -109,60 +126,67 @@ static WRITE16_HANDLER( pasha2_misc_w ) static WRITE16_HANDLER( pasha2_palette_w ) { + pasha2_state *state = (pasha2_state *)space->machine->driver_data; int color; - COMBINE_DATA(&space->machine->generic.paletteram.u16[offset]); + + COMBINE_DATA(&state->paletteram[offset]); offset &= 0xff; - color = (space->machine->generic.paletteram.u16[offset] >> 8) | (space->machine->generic.paletteram.u16[offset+0x100] & 0xff00); - palette_set_color_rgb(space->machine,offset*2+0,pal5bit(color),pal5bit(color >> 5),pal5bit(color >> 10)); + color = (state->paletteram[offset] >> 8) | (state->paletteram[offset + 0x100] & 0xff00); + palette_set_color_rgb(space->machine, offset * 2 + 0, pal5bit(color), pal5bit(color >> 5), pal5bit(color >> 10)); - color = (space->machine->generic.paletteram.u16[offset] & 0xff) | ((space->machine->generic.paletteram.u16[offset+0x100] & 0xff) << 8); - palette_set_color_rgb(space->machine,offset*2+1,pal5bit(color),pal5bit(color >> 5),pal5bit(color >> 10)); + color = (state->paletteram[offset] & 0xff) | ((state->paletteram[offset + 0x100] & 0xff) << 8); + palette_set_color_rgb(space->machine, offset * 2 + 1, pal5bit(color), pal5bit(color >> 5), pal5bit(color >> 10)); } static WRITE16_HANDLER( vbuffer_set_w ) { - vbuffer = 1; + pasha2_state *state = (pasha2_state *)space->machine->driver_data; + state->vbuffer = 1; } static WRITE16_HANDLER( vbuffer_clear_w ) { - vbuffer = 0; + pasha2_state *state = (pasha2_state *)space->machine->driver_data; + state->vbuffer = 0; } static WRITE16_HANDLER( bitmap_0_w ) { - COMBINE_DATA(&bitmap0[offset + vbuffer*0x20000/2]); + pasha2_state *state = (pasha2_state *)space->machine->driver_data; + COMBINE_DATA(&state->bitmap0[offset + state->vbuffer * 0x20000 / 2]); } static WRITE16_HANDLER( bitmap_1_w ) { + pasha2_state *state = (pasha2_state *)space->machine->driver_data; + // handle overlapping pixels without writing them - switch(mem_mask) + switch (mem_mask) { case 0xffff: - bitmap_1_w(space,offset,data,0xff00); - bitmap_1_w(space,offset,data,0x00ff); + bitmap_1_w(space, offset, data, 0xff00); + bitmap_1_w(space, offset, data, 0x00ff); return; case 0xff00: - if((data & 0xff00) == 0xff00) + if ((data & 0xff00) == 0xff00) return; break; case 0x00ff: - if((data & 0x00ff) == 0x00ff) + if ((data & 0x00ff) == 0x00ff) return; break; } - COMBINE_DATA(&bitmap1[offset + vbuffer*0x20000/2]); + COMBINE_DATA(&state->bitmap1[offset + state->vbuffer * 0x20000 / 2]); } static READ16_DEVICE_HANDLER( oki_r ) { - if(offset) + if (offset) return okim6295_r(device, 0); else return 0; @@ -170,19 +194,19 @@ static READ16_DEVICE_HANDLER( oki_r ) static WRITE16_DEVICE_HANDLER( oki_w ) { - if(offset) + if (offset) okim6295_w(device, 0, data); } static WRITE16_DEVICE_HANDLER( oki_bank_w ) { - if(offset) + if (offset) okim6295_set_bank_base(device, (data & 1) * 0x40000); } static WRITE16_HANDLER( pasha2_lamps_w ) { - if(data) + if (data) popmessage("1P: %c%c%c 2P: %c%c%c 3P: %c%c%c", (data & 0x001) ? 'R' : '-', (data & 0x002) ? 'G' : '-', @@ -196,7 +220,7 @@ static WRITE16_HANDLER( pasha2_lamps_w ) } static ADDRESS_MAP_START( pasha2_map, ADDRESS_SPACE_PROGRAM, 16 ) - AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_BASE(&wram) + AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_BASE_MEMBER(pasha2_state, wram) AM_RANGE(0x40000000, 0x4001ffff) AM_RAM_WRITE(bitmap_0_w) AM_RANGE(0x40020000, 0x4003ffff) AM_RAM_WRITE(bitmap_1_w) AM_RANGE(0x40060000, 0x40060001) AM_WRITENOP @@ -207,7 +231,7 @@ static ADDRESS_MAP_START( pasha2_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x40074000, 0x40074001) AM_WRITE(vbuffer_set_w) AM_RANGE(0x40078000, 0x40078001) AM_WRITENOP //once at startup -> to disable the eeprom? AM_RANGE(0x80000000, 0x803fffff) AM_ROMBANK("bank1") - AM_RANGE(0xe0000000, 0xe00003ff) AM_RAM_WRITE(pasha2_palette_w) AM_BASE_GENERIC(paletteram) //tilemap? palette? + AM_RANGE(0xe0000000, 0xe00003ff) AM_RAM_WRITE(pasha2_palette_w) AM_BASE_MEMBER(pasha2_state, paletteram) //tilemap? palette? AM_RANGE(0xfff80000, 0xffffffff) AM_ROM AM_REGION("user1",0) ADDRESS_MAP_END @@ -315,29 +339,34 @@ INPUT_PORTS_END static VIDEO_START( pasha2 ) { - bitmap0 = auto_alloc_array(machine, UINT16, 0x40000/2); - bitmap1 = auto_alloc_array(machine, UINT16, 0x40000/2); + pasha2_state *state = (pasha2_state *)machine->driver_data; + state->bitmap0 = auto_alloc_array(machine, UINT16, 0x40000/2); + state->bitmap1 = auto_alloc_array(machine, UINT16, 0x40000/2); + + state_save_register_global_pointer(machine, state->bitmap0, 0x40000/2); + state_save_register_global_pointer(machine, state->bitmap1, 0x40000/2); } static VIDEO_UPDATE( pasha2 ) { - int x,y,count; + pasha2_state *state = (pasha2_state *)screen->machine->driver_data; + int x, y, count; int color; /* 2 512x256 bitmaps */ count = 0; - for (y=0;y <= cliprect->max_y;y++) + for (y = 0; y <= cliprect->max_y; y++) { - for (x=0;x < 512/2;x++) + for (x = 0; x < 512 / 2; x++) { - if(x*2 < cliprect->max_x) + if (x * 2 < cliprect->max_x) { - color = (bitmap0[count + (vbuffer^1)*0x20000/2] & 0xff00) >> 8; - *BITMAP_ADDR16(bitmap, y, x*2 + 0) = color + 0x100; + color = (state->bitmap0[count + (state->vbuffer ^ 1) * 0x20000 / 2] & 0xff00) >> 8; + *BITMAP_ADDR16(bitmap, y, x * 2 + 0) = color + 0x100; - color = bitmap0[count + (vbuffer^1)*0x20000/2] & 0xff; - *BITMAP_ADDR16(bitmap, y, x*2 + 1) = color + 0x100; + color = state->bitmap0[count + (state->vbuffer ^ 1) * 0x20000 / 2] & 0xff; + *BITMAP_ADDR16(bitmap, y, x * 2 + 1) = color + 0x100; } count++; @@ -345,19 +374,19 @@ static VIDEO_UPDATE( pasha2 ) } count = 0; - for (y=0;y <= cliprect->max_y;y++) + for (y = 0; y <= cliprect->max_y; y++) { - for (x=0;x < 512/2;x++) + for (x = 0; x < 512 / 2; x++) { - if(x*2 < cliprect->max_x) + if (x * 2 < cliprect->max_x) { - color = bitmap1[count + (vbuffer^1)*0x20000/2] & 0xff; - if(color != 0) - *BITMAP_ADDR16(bitmap, y, x*2 + 1) = color; + color = state->bitmap1[count + (state->vbuffer ^ 1) * 0x20000 / 2] & 0xff; + if (color != 0) + *BITMAP_ADDR16(bitmap, y, x * 2 + 1) = color; - color = (bitmap1[count + (vbuffer^1)*0x20000/2] & 0xff00) >> 8; - if(color != 0) - *BITMAP_ADDR16(bitmap, y, x*2 + 0) = color; + color = (state->bitmap1[count + (state->vbuffer ^ 1) * 0x20000 / 2] & 0xff00) >> 8; + if (color != 0) + *BITMAP_ADDR16(bitmap, y, x * 2 + 0) = color; } count++; @@ -367,18 +396,34 @@ static VIDEO_UPDATE( pasha2 ) return 0; } +static MACHINE_START( pasha2 ) +{ + pasha2_state *state = (pasha2_state *)machine->driver_data; + + state_save_register_global(machine, state->old_bank); + state_save_register_global(machine, state->vbuffer); +} + static MACHINE_RESET( pasha2 ) { - old_bank = -1; - vbuffer = 0; + pasha2_state *state = (pasha2_state *)machine->driver_data; + + state->old_bank = -1; + state->vbuffer = 0; } static MACHINE_DRIVER_START( pasha2 ) + + /* driver data */ + MDRV_DRIVER_DATA(pasha2_state) + + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", E116XT, 20000000*4) /* 4x internal multiplier */ MDRV_CPU_PROGRAM_MAP(pasha2_map) MDRV_CPU_IO_MAP(pasha2_io) MDRV_CPU_VBLANK_INT("screen", irq0_line_hold) + MDRV_MACHINE_START(pasha2) MDRV_MACHINE_RESET(pasha2) MDRV_EEPROM_93C46_ADD("eeprom") @@ -435,12 +480,12 @@ ROM_END static READ16_HANDLER( pasha2_speedup_r ) { - if(cpu_get_pc(space->cpu) == 0x8302) - { - cpu_spinuntil_int(space->cpu); - } + pasha2_state *state = (pasha2_state *)space->machine->driver_data; - return wram[(0x95744/2)+offset]; + if(cpu_get_pc(space->cpu) == 0x8302) + cpu_spinuntil_int(space->cpu); + + return state->wram[(0x95744 / 2) + offset]; } static DRIVER_INIT( pasha2 ) @@ -450,4 +495,4 @@ static DRIVER_INIT( pasha2 ) memory_set_bankptr(machine, "bank1", memory_region(machine, "user2")); } -GAME( 1998, pasha2, 0, pasha2, pasha2, pasha2, ROT0, "Dong Sung", "Pasha Pasha 2", GAME_IMPERFECT_SOUND ) +GAME( 1998, pasha2, 0, pasha2, pasha2, pasha2, ROT0, "Dong Sung", "Pasha Pasha 2", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/pass.c b/src/mame/drivers/pass.c index 93c847ff0d0..8d1ae70b808 100644 --- a/src/mame/drivers/pass.c +++ b/src/mame/drivers/pass.c @@ -111,8 +111,8 @@ static ADDRESS_MAP_START( pass_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x080000, 0x083fff) AM_RAM - AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(pass_bg_videoram_w) AM_BASE_MEMBER(pass_state,bg_videoram) // Background - AM_RANGE(0x210000, 0x213fff) AM_RAM_WRITE(pass_fg_videoram_w) AM_BASE_MEMBER(pass_state,fg_videoram) // Foreground + AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(pass_bg_videoram_w) AM_BASE_MEMBER(pass_state, bg_videoram) // Background + AM_RANGE(0x210000, 0x213fff) AM_RAM_WRITE(pass_fg_videoram_w) AM_BASE_MEMBER(pass_state, fg_videoram) // Foreground AM_RANGE(0x220000, 0x2203ff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x230000, 0x230001) AM_WRITE(soundlatch_word_w) AM_RANGE(0x230100, 0x230101) AM_READ_PORT("DSW") @@ -294,5 +294,4 @@ ROM_START( pass ) ROM_END -GAME( 1992, pass, 0, pass, pass, 0, ROT0, "Oksan", "Pass", 0) - +GAME( 1992, pass, 0, pass, pass, 0, ROT0, "Oksan", "Pass", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/pbaction.c b/src/mame/drivers/pbaction.c index 0a8cb77136e..bddfa930287 100644 --- a/src/mame/drivers/pbaction.c +++ b/src/mame/drivers/pbaction.c @@ -68,41 +68,26 @@ Stephh's notes (based on the game Z80 code and some tests) : #include "deprecat.h" #include "sound/ay8910.h" #include "machine/segacrpt.h" - - -extern UINT8 *pbaction_videoram,*pbaction_colorram; -extern UINT8 *pbaction_videoram2,*pbaction_colorram2; - -extern WRITE8_HANDLER( pbaction_videoram_w ); -extern WRITE8_HANDLER( pbaction_colorram_w ); -extern WRITE8_HANDLER( pbaction_videoram2_w ); -extern WRITE8_HANDLER( pbaction_colorram2_w ); -extern WRITE8_HANDLER( pbaction_flipscreen_w ); -extern WRITE8_HANDLER( pbaction_scroll_w ); - -extern VIDEO_START( pbaction ); -extern VIDEO_UPDATE( pbaction ); +#include "includes/pbaction.h" static WRITE8_HANDLER( pbaction_sh_command_w ) { - soundlatch_w(space,offset,data); - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0x00); + pbaction_state *state = (pbaction_state *)space->machine->driver_data; + soundlatch_w(space, offset, data); + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0x00); } -static UINT8 *work_ram; - - static ADDRESS_MAP_START( pbaction_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xcfff) AM_RAM AM_BASE(&work_ram) - AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(pbaction_videoram2_w) AM_BASE(&pbaction_videoram2) - AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(pbaction_colorram2_w) AM_BASE(&pbaction_colorram2) - AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(pbaction_videoram_w) AM_BASE(&pbaction_videoram) - AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(pbaction_colorram_w) AM_BASE(&pbaction_colorram) - AM_RANGE(0xe000, 0xe07f) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) + AM_RANGE(0xc000, 0xcfff) AM_RAM AM_BASE_MEMBER(pbaction_state, work_ram) + AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(pbaction_videoram2_w) AM_BASE_MEMBER(pbaction_state, videoram2) + AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(pbaction_colorram2_w) AM_BASE_MEMBER(pbaction_state, colorram2) + AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(pbaction_videoram_w) AM_BASE_MEMBER(pbaction_state, videoram) + AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(pbaction_colorram_w) AM_BASE_MEMBER(pbaction_state, colorram) + AM_RANGE(0xe000, 0xe07f) AM_RAM AM_BASE_SIZE_MEMBER(pbaction_state, spriteram, spriteram_size) AM_RANGE(0xe400, 0xe5ff) AM_RAM_WRITE(paletteram_xxxxBBBBGGGGRRRR_le_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xe600, 0xe600) AM_READ_PORT("P1") AM_WRITE(interrupt_enable_w) AM_RANGE(0xe601, 0xe601) AM_READ_PORT("P2") @@ -267,8 +252,28 @@ static INTERRUPT_GEN( pbaction_interrupt ) } +static MACHINE_START( pbaction ) +{ + pbaction_state *state = (pbaction_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + + state_save_register_global(machine, state->scroll); +} + +static MACHINE_RESET( pbaction ) +{ + pbaction_state *state = (pbaction_state *)machine->driver_data; + + state->scroll = 0; +} + static MACHINE_DRIVER_START( pbaction ) + /* driver data */ + MDRV_DRIVER_DATA(pbaction_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz? */ MDRV_CPU_PROGRAM_MAP(pbaction_map) @@ -280,6 +285,9 @@ static MACHINE_DRIVER_START( pbaction ) MDRV_CPU_VBLANK_INT_HACK(pbaction_interrupt,2) /* ??? */ /* IRQs are caused by the main CPU */ + MDRV_MACHINE_START(pbaction) + MDRV_MACHINE_RESET(pbaction) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -455,11 +463,13 @@ ROM_END static READ8_HANDLER( pbactio3_prot_kludge_r ) { + pbaction_state *state = (pbaction_state *)space->machine->driver_data; + /* on startup, the game expect this location to NOT act as RAM */ if (cpu_get_pc(space->cpu) == 0xab80) return 0; - return work_ram[0]; + return state->work_ram[0]; } static DRIVER_INIT( pbactio3 ) @@ -468,7 +478,7 @@ static DRIVER_INIT( pbactio3 ) UINT8 *rom = memory_region(machine, "maincpu"); /* first of all, do a simple bitswap */ - for (i = 0;i < 0xc000;i++) + for (i = 0; i < 0xc000; i++) { rom[i] = BITSWAP8(rom[i], 7,6,5,4,1,2,3,0); } @@ -488,8 +498,8 @@ static DRIVER_INIT( pbactio4 ) -GAME( 1985, pbaction, 0, pbaction, pbaction, 0, ROT90, "Tehkan", "Pinball Action (set 1)", 0 ) -GAME( 1985, pbaction2,pbaction, pbaction, pbaction, 0, ROT90, "Tehkan", "Pinball Action (set 2)", 0 ) -GAME( 1985, pbaction3,pbaction, pbaction, pbaction, pbactio3, ROT90, "Tehkan", "Pinball Action (set 3, encrypted)", 0 ) -GAME( 1985, pbaction4,pbaction, pbaction, pbaction, pbactio4, ROT90, "Tehkan", "Pinball Action (set 4, encrypted)", 0 ) -GAME( 1985, pbaction5,pbaction, pbaction, pbaction, pbactio4, ROT90, "Tehkan", "Pinball Action (set 5, encrypted)", 0 ) +GAME( 1985, pbaction, 0, pbaction, pbaction, 0, ROT90, "Tehkan", "Pinball Action (set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1985, pbaction2, pbaction, pbaction, pbaction, 0, ROT90, "Tehkan", "Pinball Action (set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1985, pbaction3, pbaction, pbaction, pbaction, pbactio3, ROT90, "Tehkan", "Pinball Action (set 3, encrypted)", GAME_SUPPORTS_SAVE ) +GAME( 1985, pbaction4, pbaction, pbaction, pbaction, pbactio4, ROT90, "Tehkan", "Pinball Action (set 4, encrypted)", GAME_SUPPORTS_SAVE ) +GAME( 1985, pbaction5, pbaction, pbaction, pbaction, pbactio4, ROT90, "Tehkan", "Pinball Action (set 5, encrypted)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/paradise.h b/src/mame/includes/paradise.h index 6fc229418fc..6c76b52a5b3 100644 --- a/src/mame/includes/paradise.h +++ b/src/mame/includes/paradise.h @@ -1,7 +1,28 @@ -/*----------- defined in video/paradise.c -----------*/ -extern UINT8 *paradise_vram_0,*paradise_vram_1,*paradise_vram_2; -extern int paradise_sprite_inc; +class paradise_state +{ +public: + static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, paradise_state(machine)); } + + paradise_state(running_machine &machine) { } + + /* memory pointers */ + UINT8 * vram_0; + UINT8 * vram_1; + UINT8 * vram_2; + UINT8 * videoram; + UINT8 * paletteram; + UINT8 * spriteram; + size_t spriteram_size; + + /* video-related */ + tilemap_t *tilemap_0, *tilemap_1, *tilemap_2; + bitmap_t *tmpbitmap; + UINT8 palbank, priority; + int sprite_inc; +}; + +/*----------- defined in video/paradise.c -----------*/ WRITE8_HANDLER( paradise_vram_0_w ); WRITE8_HANDLER( paradise_vram_1_w ); @@ -16,6 +37,7 @@ WRITE8_HANDLER( paradise_priority_w ); WRITE8_HANDLER( paradise_palbank_w ); VIDEO_START( paradise ); + VIDEO_UPDATE( paradise ); VIDEO_UPDATE( torus ); VIDEO_UPDATE( madball ); diff --git a/src/mame/includes/pass.h b/src/mame/includes/pass.h index 00aea3dad6a..7eb9b7a8087 100644 --- a/src/mame/includes/pass.h +++ b/src/mame/includes/pass.h @@ -15,7 +15,8 @@ public: /*----------- defined in video/pass.c -----------*/ -VIDEO_START( pass ); -VIDEO_UPDATE( pass ); WRITE16_HANDLER( pass_fg_videoram_w ); WRITE16_HANDLER( pass_bg_videoram_w ); + +VIDEO_START( pass ); +VIDEO_UPDATE( pass ); diff --git a/src/mame/includes/pbaction.h b/src/mame/includes/pbaction.h new file mode 100644 index 00000000000..42f9097bb43 --- /dev/null +++ b/src/mame/includes/pbaction.h @@ -0,0 +1,44 @@ +/************************************************************************* + + Pinball Action + +*************************************************************************/ + +class pbaction_state +{ +public: + static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, pbaction_state(machine)); } + + pbaction_state(running_machine &machine) { } + + /* memory pointers */ + UINT8 * videoram; + UINT8 * videoram2; + UINT8 * colorram; + UINT8 * colorram2; + UINT8 * work_ram; + UINT8 * spriteram; +// UINT8 * paletteram; // currently this uses generic palette handling + size_t spriteram_size; + + /* video-related */ + tilemap_t *bg_tilemap, *fg_tilemap; + int scroll; + + /* devices */ + running_device *maincpu; + running_device *audiocpu; +}; + + +/*----------- defined in video/pbaction.c -----------*/ + +extern WRITE8_HANDLER( pbaction_videoram_w ); +extern WRITE8_HANDLER( pbaction_colorram_w ); +extern WRITE8_HANDLER( pbaction_videoram2_w ); +extern WRITE8_HANDLER( pbaction_colorram2_w ); +extern WRITE8_HANDLER( pbaction_flipscreen_w ); +extern WRITE8_HANDLER( pbaction_scroll_w ); + +extern VIDEO_START( pbaction ); +extern VIDEO_UPDATE( pbaction ); diff --git a/src/mame/video/paradise.c b/src/mame/video/paradise.c index 9b520e4ee13..fd84b1ee47d 100644 --- a/src/mame/video/paradise.c +++ b/src/mame/video/paradise.c @@ -1,8 +1,8 @@ /*************************************************************************** - -= Paradise / Target Ball / Torus =- + -= Paradise / Target Ball / Torus =- - driver by Luca Elia (l.elia@tin.it) + driver by Luca Elia (l.elia@tin.it) Note: if MAME_DEBUG is defined, pressing Z with: @@ -28,15 +28,6 @@ Note: if MAME_DEBUG is defined, pressing Z with: #include "emu.h" #include "includes/paradise.h" -/* Variables that driver has access to: */ - -UINT8 *paradise_vram_0,*paradise_vram_1,*paradise_vram_2; -int paradise_sprite_inc; - -/* Variables only used here */ - -static UINT8 paradise_palbank, paradise_priority; - WRITE8_HANDLER( paradise_flipscreen_w ) { flip_screen_set(space->machine, data ? 0 : 1); @@ -51,11 +42,11 @@ WRITE8_HANDLER( tgtball_flipscreen_w ) /* 800 bytes for red, followed by 800 bytes for green & 800 bytes for blue */ WRITE8_HANDLER( paradise_palette_w ) { - space->machine->generic.paletteram.u8[offset] = data; + paradise_state *state = (paradise_state *)space->machine->driver_data; + state->paletteram[offset] = data; offset %= 0x800; - palette_set_color_rgb(space->machine,offset, space->machine->generic.paletteram.u8[offset + 0x800 * 0], - space->machine->generic.paletteram.u8[offset + 0x800 * 1], - space->machine->generic.paletteram.u8[offset + 0x800 * 2] ); + palette_set_color_rgb(space->machine, offset, state->paletteram[offset + 0x800 * 0], state->paletteram[offset + 0x800 * 1], + state->paletteram[offset + 0x800 * 2]); } /*************************************************************************** @@ -69,50 +60,53 @@ WRITE8_HANDLER( paradise_palette_w ) ***************************************************************************/ -static tilemap_t *tilemap_0,*tilemap_1,*tilemap_2; - /* Background */ WRITE8_HANDLER( paradise_vram_0_w ) { - paradise_vram_0[offset] = data; - tilemap_mark_tile_dirty(tilemap_0, offset % 0x400); + paradise_state *state = (paradise_state *)space->machine->driver_data; + state->vram_0[offset] = data; + tilemap_mark_tile_dirty(state->tilemap_0, offset % 0x400); } /* 16 color tiles with paradise_palbank as color code */ WRITE8_HANDLER( paradise_palbank_w ) { + paradise_state *state = (paradise_state *)space->machine->driver_data; int i; int bank1 = (data & 0x0e) | 1; int bank2 = (data & 0xf0); for (i = 0; i < 15; i++) - palette_set_color_rgb(space->machine,0x800+i, space->machine->generic.paletteram.u8[0x200 + bank2 + i + 0x800 * 0], - space->machine->generic.paletteram.u8[0x200 + bank2 + i + 0x800 * 1], - space->machine->generic.paletteram.u8[0x200 + bank2 + i + 0x800 * 2] ); - if (paradise_palbank != bank1) + palette_set_color_rgb(space->machine, 0x800 + i, state->paletteram[0x200 + bank2 + i + 0x800 * 0], state->paletteram[0x200 + bank2 + i + 0x800 * 1], + state->paletteram[0x200 + bank2 + i + 0x800 * 2]); + + if (state->palbank != bank1) { - paradise_palbank = bank1; - tilemap_mark_all_tiles_dirty(tilemap_0); + state->palbank = bank1; + tilemap_mark_all_tiles_dirty(state->tilemap_0); } } static TILE_GET_INFO( get_tile_info_0 ) { - int code = paradise_vram_0[tile_index] + (paradise_vram_0[tile_index + 0x400] << 8); - SET_TILE_INFO(1, code, paradise_palbank, 0); + paradise_state *state = (paradise_state *)machine->driver_data; + int code = state->vram_0[tile_index] + (state->vram_0[tile_index + 0x400] << 8); + SET_TILE_INFO(1, code, state->palbank, 0); } /* Midground */ WRITE8_HANDLER( paradise_vram_1_w ) { - paradise_vram_1[offset] = data; - tilemap_mark_tile_dirty(tilemap_1, offset % 0x400); + paradise_state *state = (paradise_state *)space->machine->driver_data; + state->vram_1[offset] = data; + tilemap_mark_tile_dirty(state->tilemap_1, offset % 0x400); } static TILE_GET_INFO( get_tile_info_1 ) { - int code = paradise_vram_1[tile_index] + (paradise_vram_1[tile_index + 0x400] << 8); + paradise_state *state = (paradise_state *)machine->driver_data; + int code = state->vram_1[tile_index] + (state->vram_1[tile_index + 0x400] << 8); SET_TILE_INFO(2, code, 0, 0); } @@ -120,13 +114,15 @@ static TILE_GET_INFO( get_tile_info_1 ) /* Foreground */ WRITE8_HANDLER( paradise_vram_2_w ) { - paradise_vram_2[offset] = data; - tilemap_mark_tile_dirty(tilemap_2, offset % 0x400); + paradise_state *state = (paradise_state *)space->machine->driver_data; + state->vram_2[offset] = data; + tilemap_mark_tile_dirty(state->tilemap_2, offset % 0x400); } static TILE_GET_INFO( get_tile_info_2 ) { - int code = paradise_vram_2[tile_index] + (paradise_vram_2[tile_index + 0x400] << 8); + paradise_state *state = (paradise_state *)machine->driver_data; + int code = state->vram_2[tile_index] + (state->vram_2[tile_index + 0x400] << 8); SET_TILE_INFO(3, code, 0, 0); } @@ -134,15 +130,16 @@ static TILE_GET_INFO( get_tile_info_2 ) WRITE8_HANDLER( paradise_pixmap_w ) { - int x,y; + paradise_state *state = (paradise_state *)space->machine->driver_data; + int x, y; - space->machine->generic.videoram.u8[offset] = data; + state->videoram[offset] = data; x = (offset & 0x7f) << 1; y = (offset >> 7); - *BITMAP_ADDR16(space->machine->generic.tmpbitmap, y, x+0) = 0x80f - (data >> 4); - *BITMAP_ADDR16(space->machine->generic.tmpbitmap, y, x+1) = 0x80f - (data & 0x0f); + *BITMAP_ADDR16(state->tmpbitmap, y, x + 0) = 0x80f - (data >> 4); + *BITMAP_ADDR16(state->tmpbitmap, y, x + 1) = 0x80f - (data & 0x0f); } @@ -154,16 +151,20 @@ WRITE8_HANDLER( paradise_pixmap_w ) VIDEO_START( paradise ) { - tilemap_0 = tilemap_create( machine, get_tile_info_0, tilemap_scan_rows, 8,8, 0x20,0x20 ); - tilemap_1 = tilemap_create( machine, get_tile_info_1, tilemap_scan_rows, 8,8, 0x20,0x20 ); - tilemap_2 = tilemap_create( machine, get_tile_info_2, tilemap_scan_rows, 8,8, 0x20,0x20 ); + paradise_state *state = (paradise_state *)machine->driver_data; + + state->tilemap_0 = tilemap_create(machine, get_tile_info_0, tilemap_scan_rows, 8, 8, 0x20, 0x20); + state->tilemap_1 = tilemap_create(machine, get_tile_info_1, tilemap_scan_rows, 8, 8, 0x20, 0x20); + state->tilemap_2 = tilemap_create(machine, get_tile_info_2, tilemap_scan_rows, 8, 8, 0x20, 0x20); /* pixmap */ - machine->generic.tmpbitmap = video_screen_auto_bitmap_alloc(machine->primary_screen); + state->tmpbitmap = video_screen_auto_bitmap_alloc(machine->primary_screen); - tilemap_set_transparent_pen(tilemap_0,0x0f); - tilemap_set_transparent_pen(tilemap_1,0xff); - tilemap_set_transparent_pen(tilemap_2,0xff); + tilemap_set_transparent_pen(state->tilemap_0, 0x0f); + tilemap_set_transparent_pen(state->tilemap_1, 0xff); + tilemap_set_transparent_pen(state->tilemap_2, 0xff); + + state_save_register_global_bitmap(machine, state->tmpbitmap); } @@ -176,22 +177,24 @@ VIDEO_START( paradise ) /* Sprites / Layers priority */ WRITE8_HANDLER( paradise_priority_w ) { - paradise_priority = data; + paradise_state *state = (paradise_state *)space->machine->driver_data; + state->priority = data; } -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 ) { - UINT8 *spriteram = machine->generic.spriteram.u8; + paradise_state *state = (paradise_state *)machine->driver_data; + UINT8 *spriteram = state->spriteram; int i; - for (i = 0; i < machine->generic.spriteram_size ; i += paradise_sprite_inc) + for (i = 0; i < state->spriteram_size ; i += state->sprite_inc) { - int code = spriteram[i+0]; - int x = spriteram[i+1]; - int y = spriteram[i+2] - 2; - int attr = spriteram[i+3]; + int code = spriteram[i + 0]; + int x = spriteram[i + 1]; + int y = spriteram[i + 2] - 2; + int attr = spriteram[i + 3]; - int flipx = 0; // ? - int flipy = 0; + int flipx = 0; // ? + int flipy = 0; if (flip_screen_get(machine)) { @@ -229,6 +232,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan VIDEO_UPDATE( paradise ) { + paradise_state *state = (paradise_state *)screen->machine->driver_data; int layers_ctrl = -1; #ifdef MAME_DEBUG @@ -244,29 +248,34 @@ if (input_code_pressed(screen->machine, KEYCODE_Z)) } #endif - bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); + bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); - if (!(paradise_priority & 4)) /* Screen blanking */ + if (!(state->priority & 4)) /* Screen blanking */ return 0; - if (paradise_priority & 1) - if (layers_ctrl&16) draw_sprites(screen->machine,bitmap,cliprect); + if (state->priority & 1) + if (layers_ctrl & 16) + draw_sprites(screen->machine, bitmap, cliprect); - if (layers_ctrl&1) tilemap_draw(bitmap,cliprect, tilemap_0, 0,0); - if (layers_ctrl&2) tilemap_draw(bitmap,cliprect, tilemap_1, 0,0); - if (layers_ctrl&4) copybitmap_trans(bitmap,screen->machine->generic.tmpbitmap,flip_screen_get(screen->machine),flip_screen_get(screen->machine),0,0,cliprect, 0x80f); + if (layers_ctrl & 1) tilemap_draw(bitmap, cliprect, state->tilemap_0, 0, 0); + if (layers_ctrl & 2) tilemap_draw(bitmap, cliprect, state->tilemap_1, 0, 0); + if (layers_ctrl & 4) copybitmap_trans(bitmap, state->tmpbitmap, flip_screen_get(screen->machine), flip_screen_get(screen->machine), 0, 0, cliprect, 0x80f); - if (paradise_priority & 2) + if (state->priority & 2) { - if (!(paradise_priority & 1)) - if (layers_ctrl&16) draw_sprites(screen->machine, bitmap,cliprect); - if (layers_ctrl&8) tilemap_draw(bitmap,cliprect, tilemap_2, 0,0); + if (!(state->priority & 1)) + if (layers_ctrl & 16) + draw_sprites(screen->machine, bitmap, cliprect); + if (layers_ctrl & 8) + tilemap_draw(bitmap,cliprect, state->tilemap_2, 0, 0); } else { - if (layers_ctrl&8) tilemap_draw(bitmap,cliprect, tilemap_2, 0,0); - if (!(paradise_priority & 1)) - if (layers_ctrl&16) draw_sprites(screen->machine, bitmap,cliprect); + if (layers_ctrl & 8) + tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0); + if (!(state->priority & 1)) + if (layers_ctrl & 16) + draw_sprites(screen->machine, bitmap, cliprect); } return 0; } @@ -274,28 +283,30 @@ if (input_code_pressed(screen->machine, KEYCODE_Z)) /* no pix layer, no tilemap_0, different priority bits */ VIDEO_UPDATE( torus ) { - bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); + paradise_state *state = (paradise_state *)screen->machine->driver_data; - if (!(paradise_priority & 2)) /* Screen blanking */ + bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); + + if (!(state->priority & 2)) /* Screen blanking */ return 0; - if (paradise_priority & 1) - draw_sprites(screen->machine, bitmap,cliprect); + if (state->priority & 1) + draw_sprites(screen->machine, bitmap, cliprect); - tilemap_draw(bitmap,cliprect, tilemap_1, 0,0); + tilemap_draw(bitmap, cliprect, state->tilemap_1, 0,0); - if(paradise_priority & 4) + if (state->priority & 4) { - if (!(paradise_priority & 1)) - draw_sprites(screen->machine, bitmap,cliprect); + if (!(state->priority & 1)) + draw_sprites(screen->machine, bitmap, cliprect); - tilemap_draw(bitmap,cliprect, tilemap_2, 0,0); + tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0); } else { - tilemap_draw(bitmap,cliprect, tilemap_2, 0,0); + tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0); - if (!(paradise_priority & 1)) + if (!(state->priority & 1)) draw_sprites(screen->machine, bitmap,cliprect); } return 0; @@ -304,12 +315,12 @@ VIDEO_UPDATE( torus ) /* I don't know how the priority bits work on this one */ VIDEO_UPDATE( madball ) { - bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); - tilemap_draw(bitmap,cliprect, tilemap_0, 0,0); - tilemap_draw(bitmap,cliprect, tilemap_1, 0,0); - tilemap_draw(bitmap,cliprect, tilemap_2, 0,0); - draw_sprites(screen->machine, bitmap,cliprect); + paradise_state *state = (paradise_state *)screen->machine->driver_data; + + bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); + tilemap_draw(bitmap, cliprect, state->tilemap_0, 0, 0); + tilemap_draw(bitmap, cliprect, state->tilemap_1, 0, 0); + tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect); return 0; } - - diff --git a/src/mame/video/pass.c b/src/mame/video/pass.c index 82133296413..206220fd362 100644 --- a/src/mame/video/pass.c +++ b/src/mame/video/pass.c @@ -8,11 +8,11 @@ static TILE_GET_INFO( get_pass_bg_tile_info ) { pass_state *state = (pass_state *)machine->driver_data; - int tileno,fx; + int tileno, fx; tileno = state->bg_videoram[tile_index] & 0x1fff; fx = (state->bg_videoram[tile_index] & 0xc000) >> 14; - SET_TILE_INFO(1,tileno,0,TILE_FLIPYX(fx)); + SET_TILE_INFO(1, tileno, 0, TILE_FLIPYX(fx)); } @@ -21,7 +21,7 @@ WRITE16_HANDLER( pass_bg_videoram_w ) pass_state *state = (pass_state *)space->machine->driver_data; state->bg_videoram[offset] = data; - tilemap_mark_tile_dirty(state->bg_tilemap,offset); + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } /* foreground 'sprites' tilemap stuff */ @@ -34,7 +34,7 @@ static TILE_GET_INFO( get_pass_fg_tile_info ) tileno = state->fg_videoram[tile_index] & 0x3fff; flip = (state->fg_videoram[tile_index] & 0xc000) >>14; - SET_TILE_INFO(0,tileno,0,TILE_FLIPYX(flip)); + SET_TILE_INFO(0, tileno, 0, TILE_FLIPYX(flip)); } @@ -42,27 +42,27 @@ WRITE16_HANDLER( pass_fg_videoram_w ) { pass_state *state = (pass_state *)space->machine->driver_data; state->fg_videoram[offset] = data; - tilemap_mark_tile_dirty(state->fg_tilemap,offset); + tilemap_mark_tile_dirty(state->fg_tilemap, offset); } /* video update / start */ -VIDEO_UPDATE( pass ) -{ - pass_state *state = (pass_state *)screen->machine->driver_data; - - tilemap_draw(bitmap,cliprect,state->bg_tilemap,0,0); - tilemap_draw(bitmap,cliprect,state->fg_tilemap,0,0); - - return 0; -} - VIDEO_START( pass ) { pass_state *state = (pass_state *)machine->driver_data; - state->bg_tilemap = tilemap_create(machine, get_pass_bg_tile_info,tilemap_scan_rows, 8, 8,64,32); - state->fg_tilemap = tilemap_create(machine, get_pass_fg_tile_info,tilemap_scan_rows, 4, 4,128,64); + state->bg_tilemap = tilemap_create(machine, get_pass_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 32); + state->fg_tilemap = tilemap_create(machine, get_pass_fg_tile_info, tilemap_scan_rows, 4, 4, 128, 64); - tilemap_set_transparent_pen(state->fg_tilemap,255); + tilemap_set_transparent_pen(state->fg_tilemap, 255); +} + +VIDEO_UPDATE( pass ) +{ + pass_state *state = (pass_state *)screen->machine->driver_data; + + tilemap_draw(bitmap,cliprect,state->bg_tilemap, 0, 0); + tilemap_draw(bitmap,cliprect,state->fg_tilemap, 0, 0); + + return 0; } diff --git a/src/mame/video/pbaction.c b/src/mame/video/pbaction.c index 3a4a91261e9..64b4cb59c18 100644 --- a/src/mame/video/pbaction.c +++ b/src/mame/video/pbaction.c @@ -7,44 +7,45 @@ ***************************************************************************/ #include "emu.h" - -UINT8 *pbaction_videoram, *pbaction_colorram; -UINT8 *pbaction_videoram2, *pbaction_colorram2; - -static int scroll; - -static tilemap_t *bg_tilemap, *fg_tilemap; +#include "includes/pbaction.h" WRITE8_HANDLER( pbaction_videoram_w ) { - pbaction_videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + pbaction_state *state = (pbaction_state *)space->machine->driver_data; + state->videoram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } WRITE8_HANDLER( pbaction_colorram_w ) { - pbaction_colorram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + pbaction_state *state = (pbaction_state *)space->machine->driver_data; + state->colorram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } WRITE8_HANDLER( pbaction_videoram2_w ) { - pbaction_videoram2[offset] = data; - tilemap_mark_tile_dirty(fg_tilemap, offset); + pbaction_state *state = (pbaction_state *)space->machine->driver_data; + state->videoram2[offset] = data; + tilemap_mark_tile_dirty(state->fg_tilemap, offset); } WRITE8_HANDLER( pbaction_colorram2_w ) { - pbaction_colorram2[offset] = data; - tilemap_mark_tile_dirty(fg_tilemap, offset); + pbaction_state *state = (pbaction_state *)space->machine->driver_data; + state->colorram2[offset] = data; + tilemap_mark_tile_dirty(state->fg_tilemap, offset); } WRITE8_HANDLER( pbaction_scroll_w ) { - scroll = data - 3; - if (flip_screen_get(space->machine)) scroll = -scroll; - tilemap_set_scrollx(bg_tilemap, 0, scroll); - tilemap_set_scrollx(fg_tilemap, 0, scroll); + pbaction_state *state = (pbaction_state *)space->machine->driver_data; + state->scroll = data - 3; + if (flip_screen_get(space->machine)) + state->scroll = -state->scroll; + + tilemap_set_scrollx(state->bg_tilemap, 0, state->scroll); + tilemap_set_scrollx(state->fg_tilemap, 0, state->scroll); } WRITE8_HANDLER( pbaction_flipscreen_w ) @@ -54,8 +55,9 @@ WRITE8_HANDLER( pbaction_flipscreen_w ) static TILE_GET_INFO( get_bg_tile_info ) { - int attr = pbaction_colorram[tile_index]; - int code = pbaction_videoram[tile_index] + 0x10 * (attr & 0x70); + pbaction_state *state = (pbaction_state *)machine->driver_data; + int attr = state->colorram[tile_index]; + int code = state->videoram[tile_index] + 0x10 * (attr & 0x70); int color = attr & 0x07; int flags = (attr & 0x80) ? TILE_FLIPY : 0; @@ -64,8 +66,9 @@ static TILE_GET_INFO( get_bg_tile_info ) static TILE_GET_INFO( get_fg_tile_info ) { - int attr = pbaction_colorram2[tile_index]; - int code = pbaction_videoram2[tile_index] + 0x10 * (attr & 0x30); + pbaction_state *state = (pbaction_state *)machine->driver_data; + int attr = state->colorram2[tile_index]; + int code = state->videoram2[tile_index] + 0x10 * (attr & 0x30); int color = attr & 0x0f; int flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0); @@ -74,34 +77,37 @@ static TILE_GET_INFO( get_fg_tile_info ) VIDEO_START( pbaction ) { - bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, - 8, 8, 32, 32); + pbaction_state *state = (pbaction_state *)machine->driver_data; + state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32); + state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8, 32, 32); - fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, - 8, 8, 32, 32); - - tilemap_set_transparent_pen(fg_tilemap, 0); + tilemap_set_transparent_pen(state->fg_tilemap, 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 ) { - UINT8 *spriteram = machine->generic.spriteram.u8; + pbaction_state *state = (pbaction_state *)machine->driver_data; + UINT8 *spriteram = state->spriteram; int offs; - for (offs = machine->generic.spriteram_size - 4;offs >= 0;offs -= 4) + for (offs = state->spriteram_size - 4; offs >= 0; offs -= 4) { - int sx,sy,flipx,flipy; + int sx, sy, flipx, flipy; /* if next sprite is double size, skip this one */ - if (offs > 0 && spriteram[offs - 4] & 0x80) continue; + if (offs > 0 && spriteram[offs - 4] & 0x80) + continue; + + sx = spriteram[offs + 3]; - sx = spriteram[offs+3]; if (spriteram[offs] & 0x80) - sy = 225-spriteram[offs+2]; + sy = 225 - spriteram[offs + 2]; else - sy = 241-spriteram[offs+2]; - flipx = spriteram[offs+1] & 0x40; - flipy = spriteram[offs+1] & 0x80; + sy = 241 - spriteram[offs + 2]; + + flipx = spriteram[offs + 1] & 0x40; + flipy = spriteram[offs + 1] & 0x80; + if (flip_screen_get(machine)) { if (spriteram[offs] & 0x80) @@ -122,14 +128,16 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta spriteram[offs], spriteram[offs + 1] & 0x0f, flipx,flipy, - sx + (flip_screen_get(machine) ? scroll : -scroll), sy,0); + sx + (flip_screen_get(machine) ? state->scroll : -state->scroll), sy,0); } } VIDEO_UPDATE( pbaction ) { - tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + pbaction_state *state = (pbaction_state *)screen->machine->driver_data; + + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); draw_sprites(screen->machine, bitmap, cliprect); - tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0); + tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0); return 0; }