diff options
author | David Haywood <mamehaze@users.noreply.github.com> | 2014-10-28 14:40:22 +0000 |
---|---|---|
committer | David Haywood <mamehaze@users.noreply.github.com> | 2014-10-28 14:40:22 +0000 |
commit | 5f464c923411ae9875e214f2e80f380a7dcd5185 (patch) | |
tree | a2931582edc9c06468d53adfc32ea35cf24506d4 | |
parent | e6a5e406bf00e95d4df741325d4444ab427f2fa0 (diff) |
psychic5.c: a little more 2014 (nw)
-rw-r--r-- | src/mame/drivers/psychic5.c | 61 | ||||
-rw-r--r-- | src/mame/includes/psychic5.h | 47 | ||||
-rw-r--r-- | src/mame/video/psychic5.c | 186 |
3 files changed, 144 insertions, 150 deletions
diff --git a/src/mame/drivers/psychic5.c b/src/mame/drivers/psychic5.c index 1184564424d..4beb550e2a8 100644 --- a/src/mame/drivers/psychic5.c +++ b/src/mame/drivers/psychic5.c @@ -408,7 +408,7 @@ WRITE8_MEMBER(psychic5_state::bombsa_flipscreen_w) static ADDRESS_MAP_START( psychic5_main_map, AS_PROGRAM, 8, psychic5_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_RAMBANK("bank1") - AM_RANGE(0xc000, 0xdfff) AM_READWRITE(psychic5_paged_ram_r, psychic5_paged_ram_w) + AM_RANGE(0xc000, 0xdfff) AM_DEVICE("vrambank", address_map_bank_device, amap8) AM_RANGE(0xe000, 0xefff) AM_RAM AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch_byte_w) AM_RANGE(0xf001, 0xf001) AM_READNOP AM_WRITE(psychic5_coin_counter_w) @@ -421,6 +421,28 @@ static ADDRESS_MAP_START( psychic5_main_map, AS_PROGRAM, 8, psychic5_state ) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END + +static ADDRESS_MAP_START( psychic5_vrambank_map, AS_PROGRAM, 8, psychic5_state ) + AM_RANGE(0x0000, 0x0fff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram") + AM_RANGE(0x1000, 0x1fff) AM_RAM + + AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SYSTEM") + AM_RANGE(0x2001, 0x2001) AM_READ_PORT("P1") + AM_RANGE(0x2002, 0x2002) AM_READ_PORT("P2") + AM_RANGE(0x2003, 0x2003) AM_READ_PORT("DSW1") + AM_RANGE(0x2004, 0x2004) AM_READ_PORT("DSW2") + + AM_RANGE(0x2308, 0x230c) AM_RAM AM_SHARE("bg_control") + + AM_RANGE(0x2400, 0x25ff) AM_RAM_WRITE(sprite_col_w) AM_SHARE("palette_ram_sp") + AM_RANGE(0x2800, 0x29ff) AM_RAM_WRITE(bg_col_w) AM_SHARE("palette_ram_bg") + AM_RANGE(0x2a00, 0x2bff) AM_RAM_WRITE(tx_col_w) AM_SHARE("palette_ram_tx") + + AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram") + +ADDRESS_MAP_END + + static ADDRESS_MAP_START( psychic5_sound_map, AS_PROGRAM, 8, psychic5_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xc000, 0xc7ff) AM_RAM @@ -450,7 +472,7 @@ static ADDRESS_MAP_START( bombsa_main_map, AS_PROGRAM, 8, psychic5_state ) AM_RANGE(0xd200, 0xd7ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0xd800, 0xdfff) AM_RAM - AM_RANGE(0xe000, 0xffff) AM_READWRITE(psychic5_paged_ram_r, bombsa_paged_ram_w) + AM_RANGE(0xe000, 0xffff) AM_DEVICE("vrambank", address_map_bank_device, amap8) ADDRESS_MAP_END static ADDRESS_MAP_START( bombsa_sound_map, AS_PROGRAM, 8, psychic5_state ) @@ -466,6 +488,25 @@ static ADDRESS_MAP_START( bombsa_soundport_map, AS_IO, 8, psychic5_state ) AM_RANGE(0x80, 0x81) AM_DEVREADWRITE("ym2", ym2203_device, read, write) ADDRESS_MAP_END +static ADDRESS_MAP_START( bombsa_vrambank_map, AS_PROGRAM, 8, psychic5_state ) + AM_RANGE(0x0000, 0x0fff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram") + AM_RANGE(0x1000, 0x1fff) AM_RAM + + AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SYSTEM") + AM_RANGE(0x2001, 0x2001) AM_READ_PORT("P1") + AM_RANGE(0x2002, 0x2002) AM_READ_PORT("P2") + AM_RANGE(0x2003, 0x2003) AM_READ_PORT("DSW1") + AM_RANGE(0x2004, 0x2004) AM_READ_PORT("DSW2") + + AM_RANGE(0x2308, 0x230c) AM_RAM AM_SHARE("bg_control") + + AM_RANGE(0x3000, 0x31ff) AM_RAM_WRITE(sprite_col_w) AM_SHARE("palette_ram_sp") + AM_RANGE(0x3200, 0x33ff) AM_RAM_WRITE(bg_col_w) AM_SHARE("palette_ram_bg") + AM_RANGE(0x3400, 0x35ff) AM_RAM_WRITE(tx_col_w) AM_SHARE("palette_ram_tx") + + AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram") +ADDRESS_MAP_END + static INPUT_PORTS_START( psychic5 ) PORT_START("SYSTEM") /* system control */ @@ -655,6 +696,13 @@ static MACHINE_CONFIG_START( psychic5, psychic5_state ) MCFG_CPU_PROGRAM_MAP(psychic5_main_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", psychic5_state, psychic5_scanline, "screen", 0, 1) + MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(psychic5_vrambank_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(14) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000) + MCFG_CPU_ADD("audiocpu", Z80, XTAL_5MHz) MCFG_CPU_PROGRAM_MAP(psychic5_sound_map) MCFG_CPU_IO_MAP(psychic5_soundport_map) @@ -700,6 +748,13 @@ static MACHINE_CONFIG_START( bombsa, psychic5_state ) MCFG_CPU_PROGRAM_MAP(bombsa_main_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", psychic5_state, psychic5_scanline, "screen", 0, 1) + MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(bombsa_vrambank_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(14) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000) + MCFG_CPU_ADD("audiocpu", Z80, XTAL_5MHz ) MCFG_CPU_PROGRAM_MAP(bombsa_sound_map) MCFG_CPU_IO_MAP(bombsa_soundport_map) @@ -718,7 +773,7 @@ static MACHINE_CONFIG_START( bombsa, psychic5_state ) MCFG_PALETTE_ADD("palette", 768) MCFG_VIDEO_START_OVERRIDE(psychic5_state,bombsa) - MCFG_VIDEO_RESET_OVERRIDE(psychic5_state,bombsa) + MCFG_VIDEO_RESET_OVERRIDE(psychic5_state,psychic5) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/includes/psychic5.h b/src/mame/includes/psychic5.h index ed97cb56c3b..9fd56c781ba 100644 --- a/src/mame/includes/psychic5.h +++ b/src/mame/includes/psychic5.h @@ -1,3 +1,5 @@ +#include "machine/bankdev.h" + class psychic5_state : public driver_device { public: @@ -7,23 +9,25 @@ public: m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_vrambank(*this, "vrambank"), + m_fg_videoram(*this, "fg_videoram"), + m_bg_videoram(*this, "bg_videoram"), + m_bg_control(*this, "bg_control"), + + m_ps5_palette_ram_bg(*this, "palette_ram_bg"), + m_ps5_palette_ram_sp(*this, "palette_ram_sp"), + m_ps5_palette_ram_tx(*this, "palette_ram_tx") + + { } UINT8 m_bank_latch; UINT8 m_ps5_vram_page; UINT8 m_bg_clip_mode; UINT8 m_title_screen; - UINT8 m_bg_status; - UINT8 *m_ps5_pagedram[2]; - UINT8 *m_bg_videoram; - UINT8 *m_ps5_dummy_bg_ram; - UINT8 *m_ps5_io_ram; - UINT8 *m_ps5_palette_ram; - UINT8 *m_fg_videoram; + tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; - int m_bg_palette_ram_base; - int m_bg_palette_base; UINT16 m_palette_intensity; UINT8 m_bombsa_unknown; int m_sx1; @@ -38,9 +42,6 @@ public: DECLARE_READ8_MEMBER(psychic5_vram_page_select_r); DECLARE_WRITE8_MEMBER(psychic5_vram_page_select_w); DECLARE_WRITE8_MEMBER(psychic5_title_screen_w); - DECLARE_READ8_MEMBER(psychic5_paged_ram_r); - DECLARE_WRITE8_MEMBER(psychic5_paged_ram_w); - DECLARE_WRITE8_MEMBER(bombsa_paged_ram_w); DECLARE_WRITE8_MEMBER(bombsa_unknown_w); TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info); @@ -48,11 +49,10 @@ public: DECLARE_VIDEO_START(psychic5); DECLARE_VIDEO_RESET(psychic5); DECLARE_VIDEO_START(bombsa); - DECLARE_VIDEO_RESET(bombsa); UINT32 screen_update_psychic5(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); UINT32 screen_update_bombsa(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(psychic5_scanline); - void psychic5_change_palette(int color, int offset); + void psychic5_change_palette(int offset, UINT8* palram, int palbase); void psychic5_change_bg_palette(int color, int lo_offs, int hi_offs); void set_background_palette_intensity(); void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -62,4 +62,21 @@ public: required_device<cpu_device> m_audiocpu; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + optional_device<address_map_bank_device> m_vrambank; + required_shared_ptr<UINT8> m_fg_videoram; + required_shared_ptr<UINT8> m_bg_videoram; + required_shared_ptr<UINT8> m_bg_control; + + required_shared_ptr<UINT8> m_ps5_palette_ram_bg; + required_shared_ptr<UINT8> m_ps5_palette_ram_sp; + required_shared_ptr<UINT8> m_ps5_palette_ram_tx; + + + + DECLARE_WRITE8_MEMBER(fg_videoram_w); + DECLARE_WRITE8_MEMBER(bg_videoram_w); + DECLARE_WRITE8_MEMBER(sprite_col_w); + DECLARE_WRITE8_MEMBER(bg_col_w); + DECLARE_WRITE8_MEMBER(tx_col_w); + }; diff --git a/src/mame/video/psychic5.c b/src/mame/video/psychic5.c index 98bd6e6d58c..6950623770b 100644 --- a/src/mame/video/psychic5.c +++ b/src/mame/video/psychic5.c @@ -10,11 +10,7 @@ #include "video/jalblend.h" #include "includes/psychic5.h" -#define BG_SCROLLX_LSB 0x308 -#define BG_SCROLLX_MSB 0x309 -#define BG_SCROLLY_LSB 0x30a -#define BG_SCROLLY_MSB 0x30b -#define BG_SCREEN_MODE 0x30c + #define BG_PAL_INTENSITY_RG 0x1fe #define BG_PAL_INTENSITY_BU 0x1ff @@ -23,12 +19,15 @@ Palette color ***************************************************************************/ -void psychic5_state::psychic5_change_palette(int color, int offset) +void psychic5_state::psychic5_change_palette(int offset, UINT8* palram, int palbase) { - UINT8 lo = m_ps5_palette_ram[offset & ~1]; - UINT8 hi = m_ps5_palette_ram[offset | 1]; - jal_blend_set(color, hi & 0x0f); - m_palette->set_pen_color(color, pal4bit(lo >> 4), pal4bit(lo), pal4bit(hi >> 4)); + UINT8 lo = palram[(offset) & ~1]; + UINT8 hi = palram[(offset) | 1]; + + int color = offset >> 1; + + jal_blend_set(palbase + color, hi & 0x0f); + m_palette->set_pen_color(palbase + color, pal4bit(lo >> 4), pal4bit(lo), pal4bit(hi >> 4)); } void psychic5_state::psychic5_change_bg_palette(int color, int lo_offs, int hi_offs) @@ -44,8 +43,8 @@ void psychic5_state::psychic5_change_bg_palette(int color, int lo_offs, int hi_o irgb = rgb_t(ir,ig,ib); - lo = m_ps5_palette_ram[lo_offs]; - hi = m_ps5_palette_ram[hi_offs]; + lo = m_ps5_palette_ram_bg[lo_offs]; + hi = m_ps5_palette_ram_bg[hi_offs]; /* red,green,blue component */ r = pal4bit(lo >> 4); @@ -53,7 +52,7 @@ void psychic5_state::psychic5_change_bg_palette(int color, int lo_offs, int hi_o b = pal4bit(hi >> 4); /* Grey background enable */ - if (m_bg_status & 2) + if (m_bg_control[4] & 2) { UINT8 val = (r + g + b) / 3; /* Grey */ /* Just leave plain grey */ @@ -73,12 +72,12 @@ void psychic5_state::psychic5_change_bg_palette(int color, int lo_offs, int hi_o void psychic5_state::set_background_palette_intensity() { int i; - m_palette_intensity = m_ps5_palette_ram[BG_PAL_INTENSITY_BU] | - (m_ps5_palette_ram[BG_PAL_INTENSITY_RG]<<8); + m_palette_intensity = m_ps5_palette_ram_sp[BG_PAL_INTENSITY_BU] | + (m_ps5_palette_ram_sp[BG_PAL_INTENSITY_RG]<<8); /* for all of the background palette */ for (i = 0; i < 0x100; i++) - psychic5_change_bg_palette(m_bg_palette_base+i,m_bg_palette_ram_base+i*2,m_bg_palette_ram_base+i*2+1); + psychic5_change_bg_palette(i+0x100,i*2,i*2+1); } @@ -94,6 +93,7 @@ READ8_MEMBER(psychic5_state::psychic5_vram_page_select_r) WRITE8_MEMBER(psychic5_state::psychic5_vram_page_select_w) { m_ps5_vram_page = data & 1; + m_vrambank->set_bank(data); } WRITE8_MEMBER(psychic5_state::psychic5_title_screen_w) @@ -101,90 +101,41 @@ WRITE8_MEMBER(psychic5_state::psychic5_title_screen_w) m_title_screen = data; } -READ8_MEMBER(psychic5_state::psychic5_paged_ram_r) -{ - if (m_ps5_vram_page == 1) - { - switch (offset) - { - case 0x00: return ioport("SYSTEM")->read(); - case 0x01: return ioport("P1")->read(); - case 0x02: return ioport("P2")->read(); - case 0x03: return ioport("DSW1")->read(); - case 0x04: return ioport("DSW2")->read(); - } - } - return m_ps5_pagedram[m_ps5_vram_page][offset]; + +WRITE8_MEMBER(psychic5_state::sprite_col_w) +{ + m_ps5_palette_ram_sp[offset] = data; + psychic5_change_palette(offset,m_ps5_palette_ram_sp, 0x000); } -WRITE8_MEMBER(psychic5_state::psychic5_paged_ram_w) +WRITE8_MEMBER(psychic5_state::bg_col_w) { - m_ps5_pagedram[m_ps5_vram_page][offset] = data; + m_ps5_palette_ram_bg[offset] = data; + psychic5_change_palette(offset,m_ps5_palette_ram_bg, 0x100); +} - if (m_ps5_vram_page == 0) - { - if (offset <= 0xfff) - m_bg_tilemap->mark_tile_dirty(offset >> 1); - } - else - { - if (offset == BG_SCROLLX_LSB || offset == BG_SCROLLX_MSB) - { - UINT16 bg_scrollx = m_ps5_io_ram[BG_SCROLLX_LSB] | (m_ps5_io_ram[BG_SCROLLX_MSB] << 8); - m_bg_tilemap->set_scrollx(0, bg_scrollx); - } - else if (offset == BG_SCROLLY_LSB || offset == BG_SCROLLY_MSB) - { - UINT16 bg_scrolly = m_ps5_io_ram[BG_SCROLLY_LSB] | (m_ps5_io_ram[BG_SCROLLY_MSB] << 8); - m_bg_tilemap->set_scrolly(0, bg_scrolly); - } - else if (offset == BG_SCREEN_MODE) - { - m_bg_status = m_ps5_io_ram[BG_SCREEN_MODE]; - } - else if (offset >= 0x400 && offset <= 0x5ff) /* Sprite color */ - psychic5_change_palette(((offset >> 1) & 0xff)+0x000,offset-0x400); - else if (offset >= 0x800 && offset <= 0x9ff) /* BG color */ - psychic5_change_palette(((offset >> 1) & 0xff)+0x100,offset-0x400); - else if (offset >= 0xa00 && offset <= 0xbff) /* Text color */ - psychic5_change_palette(((offset >> 1) & 0xff)+0x200,offset-0x400); - else if (offset >= 0x1000) - m_fg_tilemap->mark_tile_dirty((offset-0x1000) >> 1); - } +WRITE8_MEMBER(psychic5_state::tx_col_w) +{ + m_ps5_palette_ram_tx[offset] = data; + psychic5_change_palette(offset,m_ps5_palette_ram_tx, 0x200); } -WRITE8_MEMBER(psychic5_state::bombsa_paged_ram_w) + +WRITE8_MEMBER(psychic5_state::fg_videoram_w) { - m_ps5_pagedram[m_ps5_vram_page][offset] = data; + m_fg_videoram[offset] = data; + m_fg_tilemap->mark_tile_dirty(offset >> 1); +} - if (m_ps5_vram_page == 0) - { - m_bg_tilemap->mark_tile_dirty(offset >> 1); - } - else - { - if (offset == BG_SCROLLX_LSB || offset == BG_SCROLLX_MSB) - { - UINT16 bg_scrollx = m_ps5_io_ram[BG_SCROLLX_LSB] | (m_ps5_io_ram[BG_SCROLLX_MSB] << 8); - m_bg_tilemap->set_scrollx(0, bg_scrollx); - } - else if (offset == BG_SCROLLY_LSB || offset == BG_SCROLLY_MSB) - { - UINT16 bg_scrolly = m_ps5_io_ram[BG_SCROLLY_LSB] | (m_ps5_io_ram[BG_SCROLLY_MSB] << 8); - m_bg_tilemap->set_scrolly(0, bg_scrolly); - } - else if (offset == BG_SCREEN_MODE) - { - m_bg_status = m_ps5_io_ram[BG_SCREEN_MODE]; - } - else if (offset >= 0x0800 && offset <= 0x0fff) - m_fg_tilemap->mark_tile_dirty((offset & 0x7ff) >> 1); - else if (offset >= 0x1000 && offset <= 0x15ff) - psychic5_change_palette((offset >> 1) & 0x3ff, offset-0x1000); - } +WRITE8_MEMBER( psychic5_state::bg_videoram_w ) +{ + m_bg_videoram[offset] = data; + m_bg_tilemap->mark_tile_dirty(offset >> 1); } + + WRITE8_MEMBER(psychic5_state::bombsa_unknown_w) { m_bombsa_unknown = data; @@ -224,71 +175,31 @@ TILE_GET_INFO_MEMBER(psychic5_state::get_fg_tile_info) VIDEO_START_MEMBER(psychic5_state,psychic5) { - /* info offset w h col row */ m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(psychic5_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 64, 32); m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(psychic5_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32); - m_fg_tilemap->set_transparent_pen(15); - - m_ps5_pagedram[0] = auto_alloc_array(machine(), UINT8, 0x2000); - m_ps5_pagedram[1] = auto_alloc_array(machine(), UINT8, 0x2000); - - m_bg_videoram = &m_ps5_pagedram[0][0x0000]; - m_ps5_dummy_bg_ram = &m_ps5_pagedram[0][0x1000]; - m_ps5_io_ram = &m_ps5_pagedram[1][0x0000]; - m_ps5_palette_ram = &m_ps5_pagedram[1][0x0400]; - m_fg_videoram = &m_ps5_pagedram[1][0x1000]; - jal_blend_init(machine(), 1); - m_bg_palette_ram_base = 0x400; - m_bg_palette_base = 0x100; } VIDEO_START_MEMBER(psychic5_state,bombsa) { - /* info offset w h col row */ m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(psychic5_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 32); m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(psychic5_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32); - m_fg_tilemap->set_transparent_pen(15); - - m_ps5_pagedram[0] = auto_alloc_array(machine(), UINT8, 0x2000); - m_ps5_pagedram[1] = auto_alloc_array(machine(), UINT8, 0x2000); - - m_bg_videoram = &m_ps5_pagedram[0][0x0000]; - m_ps5_dummy_bg_ram = &m_ps5_pagedram[0][0x1000]; - m_ps5_io_ram = &m_ps5_pagedram[1][0x0000]; - m_fg_videoram = &m_ps5_pagedram[1][0x0800]; - m_ps5_palette_ram = &m_ps5_pagedram[1][0x1000]; - jal_blend_init(machine(), 0); - - m_bg_palette_ram_base = 0x000; - m_bg_palette_base = 0x000; } VIDEO_RESET_MEMBER(psychic5_state,psychic5) { m_bg_clip_mode = 0; m_ps5_vram_page = 0; - m_bg_status = 0; - memset(m_ps5_pagedram[0],0,0x2000); - memset(m_ps5_pagedram[1],0,0x2000); - m_palette_intensity = 0; -} - -VIDEO_RESET_MEMBER(psychic5_state,bombsa) -{ - m_ps5_vram_page = 0; - m_bg_status = 0; m_title_screen = 0; - memset(m_ps5_pagedram[0],0,0x2000); - memset(m_ps5_pagedram[1],0,0x2000); m_palette_intensity = 0; } + /*************************************************************************** Screen refresh ***************************************************************************/ @@ -406,8 +317,13 @@ void psychic5_state::draw_background(screen_device &screen, bitmap_rgb32 &bitmap UINT32 psychic5_state::screen_update_psychic5(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { + UINT16 bg_scrollx = m_bg_control[0] | (m_bg_control[1] << 8); + m_bg_tilemap->set_scrollx(0, bg_scrollx); + UINT16 bg_scrolly = m_bg_control[2] | (m_bg_control[3] << 8); + m_bg_tilemap->set_scrolly(0, bg_scrolly); + bitmap.fill(m_palette->black_pen(), cliprect); - if (m_bg_status & 1) /* Backgound enable */ + if (m_bg_control[4] & 1) /* Backgound enable */ draw_background(screen, bitmap, cliprect); if (!(m_title_screen & 1)) draw_sprites(bitmap, cliprect); @@ -417,7 +333,13 @@ UINT32 psychic5_state::screen_update_psychic5(screen_device &screen, bitmap_rgb3 UINT32 psychic5_state::screen_update_bombsa(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - if (m_bg_status & 1) /* Backgound enable */ + UINT16 bg_scrollx = m_bg_control[0] | (m_bg_control[1] << 8); + m_bg_tilemap->set_scrollx(0, bg_scrollx); + UINT16 bg_scrolly = m_bg_control[2] | (m_bg_control[3] << 8); + m_bg_tilemap->set_scrolly(0, bg_scrolly); + bitmap.fill(m_palette->black_pen(), cliprect); + + if (m_bg_control[4] & 1) /* Backgound enable */ m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); else bitmap.fill(m_palette->pen(0x0ff), cliprect); |