mirror of
https://github.com/holub/mame
synced 2025-04-25 01:40:16 +03:00
psychic5.c: a little more 2014 (nw)
This commit is contained in:
parent
e6a5e406bf
commit
5f464c9234
@ -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")
|
||||
|
@ -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);
|
||||
|
||||
};
|
||||
|
@ -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;
|
||||
|
||||
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);
|
||||
}
|
||||
m_ps5_palette_ram_bg[offset] = data;
|
||||
psychic5_change_palette(offset,m_ps5_palette_ram_bg, 0x100);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(psychic5_state::bombsa_paged_ram_w)
|
||||
WRITE8_MEMBER(psychic5_state::tx_col_w)
|
||||
{
|
||||
m_ps5_pagedram[m_ps5_vram_page][offset] = data;
|
||||
|
||||
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);
|
||||
}
|
||||
m_ps5_palette_ram_tx[offset] = data;
|
||||
psychic5_change_palette(offset,m_ps5_palette_ram_tx, 0x200);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(psychic5_state::fg_videoram_w)
|
||||
{
|
||||
m_fg_videoram[offset] = data;
|
||||
m_fg_tilemap->mark_tile_dirty(offset >> 1);
|
||||
}
|
||||
|
||||
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,69 +175,29 @@ 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_title_screen = 0;
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user