summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit5f464c923411ae9875e214f2e80f380a7dcd5185 (patch)
treea2931582edc9c06468d53adfc32ea35cf24506d4
parente6a5e406bf00e95d4df741325d4444ab427f2fa0 (diff)
psychic5.c: a little more 2014 (nw)
-rw-r--r--src/mame/drivers/psychic5.c61
-rw-r--r--src/mame/includes/psychic5.h47
-rw-r--r--src/mame/video/psychic5.c186
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);