From 2ed6f56c368b8c1257f029b7bab35070dba7907d Mon Sep 17 00:00:00 2001 From: Manuel Abadia Date: Mon, 12 May 2008 16:15:04 +0000 Subject: [PATCH] added cocktail mode support to world rally --- src/mame/drivers/wrally.c | 7 ++++--- src/mame/machine/wrally.c | 4 ++++ src/mame/video/wrally.c | 23 +++++++++++++++++------ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/mame/drivers/wrally.c b/src/mame/drivers/wrally.c index a78ab80dc5f..074e111bb37 100644 --- a/src/mame/drivers/wrally.c +++ b/src/mame/drivers/wrally.c @@ -92,7 +92,6 @@ extern UINT16 *wrally_vregs; extern UINT16 *wrally_videoram; extern UINT16 *wrally_spriteram; -WRITE16_HANDLER( wrally_vram_w ); VIDEO_START( wrally ); VIDEO_UPDATE( wrally ); @@ -100,6 +99,8 @@ VIDEO_UPDATE( wrally ); DRIVER_INIT( wrally ); MACHINE_RESET( wrally ); READ32_HANDLER( wrally_external_ram_iaddr ); +WRITE16_HANDLER( wrally_vram_w ); +WRITE16_HANDLER( wrally_flipscreen_w ); WRITE16_HANDLER( OKIM6295_bankswitch_w ); WRITE16_HANDLER( wrally_coin_counter_w ); WRITE16_HANDLER( wrally_coin_lockout_w ); @@ -119,8 +120,8 @@ static ADDRESS_MAP_START( wrally_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x70000e, 0x70000f) AM_READWRITE(OKIM6295_status_0_lsb_r, OKIM6295_data_0_lsb_w) /* OKI6295 status/data register */ AM_RANGE(0x70000a, 0x70001b) AM_WRITE(wrally_coin_lockout_w) /* Coin lockouts */ AM_RANGE(0x70002a, 0x70003b) AM_WRITE(wrally_coin_counter_w) /* Coin counters */ - AM_RANGE(0x70004a, 0x70004b) AM_WRITE(SMH_NOP) /* sound muting */ - AM_RANGE(0x70005a, 0x70005b) AM_WRITE(SMH_NOP) /* flip screen */ + AM_RANGE(0x70004a, 0x70004b) AM_WRITE(SMH_NOP) /* Sound muting */ + AM_RANGE(0x70005a, 0x70005b) AM_WRITE(wrally_flipscreen_w) /* Flip screen */ AM_RANGE(0x70006a, 0x70007b) AM_WRITE(SMH_NOP) /* ??? */ AM_RANGE(0xfec000, 0xfeffff) AM_RAM AM_SHARE(1) /* Work RAM (shared with DS5002FP) */ ADDRESS_MAP_END diff --git a/src/mame/machine/wrally.c b/src/mame/machine/wrally.c index 2e1d79394d4..6adabe550b6 100644 --- a/src/mame/machine/wrally.c +++ b/src/mame/machine/wrally.c @@ -29,6 +29,10 @@ WRITE16_HANDLER( wrally_vram_w ) tilemap_mark_tile_dirty(wrally_pant[(offset & 0x1fff) >> 12], ((offset << 1) & 0x1fff) >> 2); } +WRITE16_HANDLER( wrally_flipscreen_w ) +{ + flip_screen_set(data & 0x01); +} WRITE16_HANDLER( OKIM6295_bankswitch_w ) { diff --git a/src/mame/video/wrally.c b/src/mame/video/wrally.c index 93ef40a0d52..956aa733d7f 100644 --- a/src/mame/video/wrally.c +++ b/src/mame/video/wrally.c @@ -125,6 +125,10 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta if (high_priority != priority) continue; + if (flip_screen_get()) { + sy = sy + 248; + } + if (!color_effect) { drawgfx(bitmap,gfx,number, 0x20 + color,xflip,yflip, @@ -136,7 +140,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta for (py = 0; py < gfx->height; py++){ /* get a pointer to the current line in the screen bitmap */ - int ypos = ((sy + py) & 0xff); + int ypos = ((sy + py) & 0x1ff); UINT16 *srcy = BITMAP_ADDR16(bitmap, ypos, 0); int gfx_py = yflip ? (gfx->height - 1 - py) : py; @@ -174,12 +178,19 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta ***************************************************************************/ VIDEO_UPDATE( wrally ) -{ +{ /* set scroll registers */ - tilemap_set_scrolly(wrally_pant[0], 0, wrally_vregs[0]); - tilemap_set_scrollx(wrally_pant[0], 0, wrally_vregs[1]+4); - tilemap_set_scrolly(wrally_pant[1], 0, wrally_vregs[2]); - tilemap_set_scrollx(wrally_pant[1], 0, wrally_vregs[3]); + if (!flip_screen_get()) { + tilemap_set_scrolly(wrally_pant[0], 0, wrally_vregs[0]); + tilemap_set_scrollx(wrally_pant[0], 0, wrally_vregs[1]+4); + tilemap_set_scrolly(wrally_pant[1], 0, wrally_vregs[2]); + tilemap_set_scrollx(wrally_pant[1], 0, wrally_vregs[3]); + } else { + tilemap_set_scrolly(wrally_pant[0], 0, 248 - wrally_vregs[0]); + tilemap_set_scrollx(wrally_pant[0], 0, 1024 - wrally_vregs[1] - 4); + tilemap_set_scrolly(wrally_pant[1], 0, 248 - wrally_vregs[2]); + tilemap_set_scrollx(wrally_pant[1], 0, 1024 - wrally_vregs[3]); + } /* draw tilemaps + sprites */ tilemap_draw(bitmap,cliprect,wrally_pant[1],TILEMAP_DRAW_OPAQUE,0);