mirror of
https://github.com/holub/mame
synced 2025-04-25 17:56:43 +03:00
psychic5.c: added save state support, converted to configured banking (nw)
This commit is contained in:
parent
8e08d034be
commit
c9a2700bb1
@ -69,7 +69,7 @@ execution of two different restart (RST) instructions.
|
||||
RST 10,the main IRQ,is to be triggered each time the screen is refreshed.
|
||||
RST 08 must be triggered in order to make the game work properly
|
||||
(e.g. demo game),I guess sound has something to do with this IRQ,but I
|
||||
don't know whether it is sinchronized with video beam neither I know whether
|
||||
don't know whether it is synchronized with video beam neither I know whether
|
||||
it can be disabled.
|
||||
|
||||
Sound CPU runs in IM1.
|
||||
@ -237,7 +237,7 @@ background intensity.
|
||||
Background intensity is encoded in the same way of colors,and
|
||||
affects the intensity of each color component (BGR).
|
||||
The least significant nibble of c5ff is unknown,it assumes value
|
||||
0xf occasionaly when the other nibbles are changed.The only
|
||||
0xf occasionally when the other nibbles are changed.The only
|
||||
value which is not 0 neither 0xf is 2 and it is assumed by this nibble
|
||||
during the ride on the witches' broom.
|
||||
|
||||
@ -265,7 +265,7 @@ Background virtual screen is 1024 pixels tall and 512 pixel wide.
|
||||
Two consecutive bytes identify one tile.
|
||||
|
||||
O7 O6 O5 O4 O3 O2 O1 O0 gfx Offset
|
||||
O9 O8 FX FY C3 C2 C1 C0 Attibute
|
||||
O9 O8 FX FY C3 C2 C1 C0 Attribute
|
||||
|
||||
O= GFX offset (1024 tiles)
|
||||
F= Flip X and Y
|
||||
@ -315,6 +315,20 @@ The first sprite data is located at f20b,then f21b and so on.
|
||||
#include "includes/psychic5.h"
|
||||
|
||||
|
||||
MACHINE_START_MEMBER(psychic5_state, psychic5)
|
||||
{
|
||||
membank("mainbank")->configure_entries(0, 4, memregion("maincpu")->base() + 0x10000, 0x4000);
|
||||
|
||||
save_item(NAME(m_bank_latch));
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(psychic5_state, bombsa)
|
||||
{
|
||||
membank("mainbank")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000);
|
||||
|
||||
save_item(NAME(m_bank_latch));
|
||||
}
|
||||
|
||||
void psychic5_state::machine_reset()
|
||||
{
|
||||
m_bank_latch = 0xff;
|
||||
@ -327,7 +341,7 @@ void psychic5_state::machine_reset()
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(psychic5_state::psychic5_scanline)
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(psychic5_state::scanline)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
@ -346,34 +360,26 @@ TIMER_DEVICE_CALLBACK_MEMBER(psychic5_state::psychic5_scanline)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
READ8_MEMBER(psychic5_state::psychic5_bankselect_r)
|
||||
READ8_MEMBER(psychic5_state::bankselect_r)
|
||||
{
|
||||
return m_bank_latch;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(psychic5_state::psychic5_bankselect_w)
|
||||
{
|
||||
UINT8 *RAM = memregion("maincpu")->base();
|
||||
int bankaddress;
|
||||
|
||||
if (m_bank_latch != data)
|
||||
{
|
||||
m_bank_latch = data;
|
||||
bankaddress = 0x10000 + ((data & 3) * 0x4000);
|
||||
membank("bank1")->set_base(&RAM[bankaddress]); /* Select 4 banks of 16k */
|
||||
membank("mainbank")->set_entry(data & 3); /* Select 4 banks of 16k */
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(psychic5_state::bombsa_bankselect_w)
|
||||
{
|
||||
UINT8 *RAM = memregion("maincpu")->base();
|
||||
int bankaddress;
|
||||
|
||||
if (m_bank_latch != data)
|
||||
{
|
||||
m_bank_latch = data;
|
||||
bankaddress = 0x10000 + ((data & 7) * 0x4000);
|
||||
membank("bank1")->set_base(&RAM[bankaddress]); /* Select 8 banks of 16k */
|
||||
membank("mainbank")->set_entry(data & 7); /* Select 8 banks of 16k */
|
||||
}
|
||||
}
|
||||
|
||||
@ -407,13 +413,13 @@ 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_ROMBANK("bank1")
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank")
|
||||
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)
|
||||
AM_RANGE(0xf002, 0xf002) AM_READWRITE(psychic5_bankselect_r, psychic5_bankselect_w)
|
||||
AM_RANGE(0xf003, 0xf003) AM_READWRITE(psychic5_vram_page_select_r, psychic5_vram_page_select_w)
|
||||
AM_RANGE(0xf002, 0xf002) AM_READWRITE(bankselect_r, psychic5_bankselect_w)
|
||||
AM_RANGE(0xf003, 0xf003) AM_READWRITE(vram_page_select_r, vram_page_select_w)
|
||||
AM_RANGE(0xf004, 0xf004) AM_NOP // ???
|
||||
AM_RANGE(0xf005, 0xf005) AM_READNOP AM_WRITE(psychic5_title_screen_w)
|
||||
AM_RANGE(0xf006, 0xf1ff) AM_NOP
|
||||
@ -458,14 +464,14 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bombsa_main_map, AS_PROGRAM, 8, psychic5_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank")
|
||||
AM_RANGE(0xc000, 0xcfff) AM_RAM
|
||||
|
||||
/* ports look like the other games */
|
||||
AM_RANGE(0xd000, 0xd000) AM_WRITE(soundlatch_byte_w) // confirmed
|
||||
AM_RANGE(0xd001, 0xd001) AM_WRITE(bombsa_flipscreen_w)
|
||||
AM_RANGE(0xd002, 0xd002) AM_READWRITE(psychic5_bankselect_r, bombsa_bankselect_w)
|
||||
AM_RANGE(0xd003, 0xd003) AM_READWRITE(psychic5_vram_page_select_r, psychic5_vram_page_select_w)
|
||||
AM_RANGE(0xd002, 0xd002) AM_READWRITE(bankselect_r, bombsa_bankselect_w)
|
||||
AM_RANGE(0xd003, 0xd003) AM_READWRITE(vram_page_select_r, vram_page_select_w)
|
||||
AM_RANGE(0xd005, 0xd005) AM_WRITE(bombsa_unknown_w) // ?
|
||||
|
||||
AM_RANGE(0xd000, 0xd1ff) AM_RAM
|
||||
@ -682,18 +688,12 @@ static GFXDECODE_START( bombsa )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(psychic5_state::irqhandler)
|
||||
{
|
||||
m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( psychic5, psychic5_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80, XTAL_12MHz/2)
|
||||
MCFG_CPU_PROGRAM_MAP(psychic5_main_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", psychic5_state, psychic5_scanline, "screen", 0, 1)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", psychic5_state, scanline, "screen", 0, 1)
|
||||
|
||||
MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0)
|
||||
MCFG_DEVICE_PROGRAM_MAP(psychic5_vrambank_map)
|
||||
@ -708,6 +708,8 @@ static MACHINE_CONFIG_START( psychic5, psychic5_state )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* Allow time for 2nd cpu to interleave */
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(psychic5_state,psychic5)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(53.8)
|
||||
@ -727,7 +729,7 @@ static MACHINE_CONFIG_START( psychic5, psychic5_state )
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_SOUND_ADD("ym1", YM2203, XTAL_12MHz/8)
|
||||
MCFG_YM2203_IRQ_HANDLER(WRITELINE(psychic5_state, irqhandler))
|
||||
MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.15)
|
||||
MCFG_SOUND_ROUTE(1, "mono", 0.15)
|
||||
MCFG_SOUND_ROUTE(2, "mono", 0.15)
|
||||
@ -745,7 +747,7 @@ static MACHINE_CONFIG_START( bombsa, psychic5_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80, XTAL_12MHz/2 ) /* 6 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(bombsa_main_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", psychic5_state, psychic5_scanline, "screen", 0, 1)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", psychic5_state, scanline, "screen", 0, 1)
|
||||
|
||||
MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0)
|
||||
MCFG_DEVICE_PROGRAM_MAP(bombsa_vrambank_map)
|
||||
@ -760,6 +762,8 @@ static MACHINE_CONFIG_START( bombsa, psychic5_state )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(600))
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(psychic5_state,bombsa)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(54) /* Guru says : VSync - 54Hz . HSync - 15.25kHz */
|
||||
@ -778,7 +782,7 @@ static MACHINE_CONFIG_START( bombsa, psychic5_state )
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_SOUND_ADD("ym1", YM2203, XTAL_12MHz/8)
|
||||
MCFG_YM2203_IRQ_HANDLER(WRITELINE(psychic5_state, irqhandler))
|
||||
MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.30)
|
||||
MCFG_SOUND_ROUTE(1, "mono", 0.30)
|
||||
MCFG_SOUND_ROUTE(2, "mono", 0.30)
|
||||
@ -944,6 +948,6 @@ ROM_START( bombsa )
|
||||
ROM_END
|
||||
|
||||
|
||||
GAME( 1987, psychic5, 0, psychic5, psychic5, driver_device, 0, ROT270, "Jaleco / NMK", "Psychic 5 (World)", 0 ) // "Oversea's version V2.00 CHANGED BY TAMIO NAKASATO" text present in ROM, various modifications (English names, more complete attract demo etc.)
|
||||
GAME( 1987, psychic5j, psychic5, psychic5, psychic5, driver_device, 0, ROT270, "Jaleco / NMK", "Psychic 5 (Japan)", 0 )
|
||||
GAME( 1988, bombsa, 0, bombsa, bombsa, driver_device, 0, ROT270, "Jaleco", "Bombs Away", GAME_NOT_WORKING )
|
||||
GAME( 1987, psychic5, 0, psychic5, psychic5, driver_device, 0, ROT270, "Jaleco / NMK", "Psychic 5 (World)", GAME_SUPPORTS_SAVE ) // "Oversea's version V2.00 CHANGED BY TAMIO NAKASATO" text present in ROM, various modifications (English names, more complete attract demo etc.)
|
||||
GAME( 1987, psychic5j, psychic5, psychic5, psychic5, driver_device, 0, ROT270, "Jaleco / NMK", "Psychic 5 (Japan)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1988, bombsa, 0, bombsa, bombsa, driver_device, 0, ROT270, "Jaleco", "Bombs Away", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
|
||||
|
@ -5,27 +5,38 @@ class psychic5_state : public driver_device
|
||||
public:
|
||||
psychic5_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_vrambank(*this, "vrambank"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
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")
|
||||
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
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_spriteram;
|
||||
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;
|
||||
|
||||
UINT8 m_bank_latch;
|
||||
UINT8 m_ps5_vram_page;
|
||||
UINT8 m_bg_clip_mode;
|
||||
UINT8 m_title_screen;
|
||||
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_fg_tilemap;
|
||||
UINT16 m_palette_intensity;
|
||||
@ -33,50 +44,44 @@ public:
|
||||
int m_sx1;
|
||||
int m_sy1;
|
||||
int m_sy2;
|
||||
required_shared_ptr<UINT8> m_spriteram;
|
||||
DECLARE_READ8_MEMBER(psychic5_bankselect_r);
|
||||
DECLARE_WRITE8_MEMBER(psychic5_bankselect_w);
|
||||
DECLARE_WRITE8_MEMBER(bombsa_bankselect_w);
|
||||
DECLARE_WRITE8_MEMBER(psychic5_coin_counter_w);
|
||||
DECLARE_WRITE8_MEMBER(bombsa_flipscreen_w);
|
||||
DECLARE_READ8_MEMBER(psychic5_vram_page_select_r);
|
||||
DECLARE_WRITE8_MEMBER(psychic5_vram_page_select_w);
|
||||
DECLARE_WRITE8_MEMBER(psychic5_title_screen_w);
|
||||
DECLARE_WRITE8_MEMBER(bombsa_unknown_w);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
virtual void machine_reset();
|
||||
DECLARE_VIDEO_START(psychic5);
|
||||
DECLARE_VIDEO_RESET(psychic5);
|
||||
DECLARE_VIDEO_START(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 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);
|
||||
void draw_background(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE_LINE_MEMBER(irqhandler);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
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_READ8_MEMBER(bankselect_r);
|
||||
DECLARE_READ8_MEMBER(vram_page_select_r);
|
||||
DECLARE_WRITE8_MEMBER(vram_page_select_w);
|
||||
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);
|
||||
|
||||
/* psychic5 specific */
|
||||
DECLARE_WRITE8_MEMBER(psychic5_coin_counter_w);
|
||||
DECLARE_WRITE8_MEMBER(psychic5_bankselect_w);
|
||||
DECLARE_WRITE8_MEMBER(psychic5_title_screen_w);
|
||||
|
||||
/* bombsa specific */
|
||||
DECLARE_WRITE8_MEMBER(bombsa_bankselect_w);
|
||||
DECLARE_WRITE8_MEMBER(bombsa_flipscreen_w);
|
||||
DECLARE_WRITE8_MEMBER(bombsa_unknown_w);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
|
||||
virtual void machine_reset();
|
||||
DECLARE_MACHINE_START(psychic5);
|
||||
DECLARE_MACHINE_START(bombsa);
|
||||
virtual void video_start();
|
||||
DECLARE_VIDEO_START(psychic5);
|
||||
DECLARE_VIDEO_START(bombsa);
|
||||
DECLARE_VIDEO_RESET(psychic5);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(scanline);
|
||||
|
||||
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);
|
||||
void change_palette(int offset, UINT8* palram, int palbase);
|
||||
void 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);
|
||||
void draw_background(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
@ -30,6 +30,7 @@ void jal_blend_init(running_machine &machine, int enable)
|
||||
{
|
||||
jal_blend_table = auto_alloc_array_clear(machine, UINT8, 0xc00);
|
||||
machine.add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(jal_blend_reset), &machine));
|
||||
machine.save().save_pointer(NAME(jal_blend_table), 0xc00);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -19,7 +19,7 @@
|
||||
Palette color
|
||||
***************************************************************************/
|
||||
|
||||
void psychic5_state::psychic5_change_palette(int offset, UINT8* palram, int palbase)
|
||||
void psychic5_state::change_palette(int offset, UINT8* palram, int palbase)
|
||||
{
|
||||
UINT8 lo = palram[(offset) & ~1];
|
||||
UINT8 hi = palram[(offset) | 1];
|
||||
@ -30,7 +30,7 @@ void psychic5_state::psychic5_change_palette(int offset, UINT8* palram, int palb
|
||||
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)
|
||||
void psychic5_state::change_bg_palette(int color, int lo_offs, int hi_offs)
|
||||
{
|
||||
UINT8 r,g,b,lo,hi,ir,ig,ib,ix;
|
||||
rgb_t irgb;
|
||||
@ -77,7 +77,7 @@ void psychic5_state::set_background_palette_intensity()
|
||||
|
||||
/* for all of the background palette */
|
||||
for (i = 0; i < 0x100; i++)
|
||||
psychic5_change_bg_palette(i+0x100,i*2,i*2+1);
|
||||
change_bg_palette(i+0x100,i*2,i*2+1);
|
||||
}
|
||||
|
||||
|
||||
@ -85,12 +85,12 @@ void psychic5_state::set_background_palette_intensity()
|
||||
Memory handler
|
||||
***************************************************************************/
|
||||
|
||||
READ8_MEMBER(psychic5_state::psychic5_vram_page_select_r)
|
||||
READ8_MEMBER(psychic5_state::vram_page_select_r)
|
||||
{
|
||||
return m_ps5_vram_page;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(psychic5_state::psychic5_vram_page_select_w)
|
||||
WRITE8_MEMBER(psychic5_state::vram_page_select_w)
|
||||
{
|
||||
m_ps5_vram_page = data & 1;
|
||||
m_vrambank->set_bank(data);
|
||||
@ -106,19 +106,19 @@ WRITE8_MEMBER(psychic5_state::psychic5_title_screen_w)
|
||||
WRITE8_MEMBER(psychic5_state::sprite_col_w)
|
||||
{
|
||||
m_ps5_palette_ram_sp[offset] = data;
|
||||
psychic5_change_palette(offset,m_ps5_palette_ram_sp, 0x000);
|
||||
change_palette(offset,m_ps5_palette_ram_sp, 0x000);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(psychic5_state::bg_col_w)
|
||||
{
|
||||
m_ps5_palette_ram_bg[offset] = data;
|
||||
psychic5_change_palette(offset,m_ps5_palette_ram_bg, 0x100);
|
||||
change_palette(offset,m_ps5_palette_ram_bg, 0x100);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(psychic5_state::tx_col_w)
|
||||
{
|
||||
m_ps5_palette_ram_tx[offset] = data;
|
||||
psychic5_change_palette(offset,m_ps5_palette_ram_tx, 0x200);
|
||||
change_palette(offset,m_ps5_palette_ram_tx, 0x200);
|
||||
}
|
||||
|
||||
|
||||
@ -173,21 +173,40 @@ TILE_GET_INFO_MEMBER(psychic5_state::get_fg_tile_info)
|
||||
Initialize and destroy video hardware emulation
|
||||
***************************************************************************/
|
||||
|
||||
void psychic5_state::video_start()
|
||||
{
|
||||
save_item(NAME(m_ps5_vram_page));
|
||||
save_item(NAME(m_bg_clip_mode));
|
||||
save_item(NAME(m_palette_intensity));
|
||||
save_item(NAME(m_sx1));
|
||||
save_item(NAME(m_sy1));
|
||||
save_item(NAME(m_sy2));
|
||||
}
|
||||
|
||||
|
||||
VIDEO_START_MEMBER(psychic5_state,psychic5)
|
||||
{
|
||||
video_start();
|
||||
|
||||
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);
|
||||
jal_blend_init(machine(), 1);
|
||||
|
||||
save_item(NAME(m_title_screen));
|
||||
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(psychic5_state,bombsa)
|
||||
{
|
||||
video_start();
|
||||
|
||||
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);
|
||||
jal_blend_init(machine(), 0);
|
||||
|
||||
save_item(NAME(m_bombsa_unknown));
|
||||
}
|
||||
|
||||
VIDEO_RESET_MEMBER(psychic5_state,psychic5)
|
||||
@ -208,19 +227,16 @@ VIDEO_RESET_MEMBER(psychic5_state,psychic5)
|
||||
|
||||
void psychic5_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
UINT8 *spriteram = m_spriteram;
|
||||
int offs;
|
||||
|
||||
/* Draw the sprites */
|
||||
for (offs = 0; offs < m_spriteram.bytes(); offs += 16)
|
||||
for (int offs = 0; offs < m_spriteram.bytes(); offs += 16)
|
||||
{
|
||||
int attr = spriteram[offs + 13];
|
||||
int code = spriteram[offs + 14] | ((attr & 0xc0) << 2);
|
||||
int color = spriteram[offs + 15] & 0x0f;
|
||||
int attr = m_spriteram[offs + 13];
|
||||
int code = m_spriteram[offs + 14] | ((attr & 0xc0) << 2);
|
||||
int color = m_spriteram[offs + 15] & 0x0f;
|
||||
int flipx = attr & 0x10;
|
||||
int flipy = attr & 0x20;
|
||||
int sx = spriteram[offs + 12];
|
||||
int sy = spriteram[offs + 11];
|
||||
int sx = m_spriteram[offs + 12];
|
||||
int sy = m_spriteram[offs + 11];
|
||||
int size = (attr & 0x08) ? 32:16;
|
||||
|
||||
if (attr & 0x01) sx -= 256;
|
||||
@ -261,8 +277,6 @@ void psychic5_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprec
|
||||
|
||||
void psychic5_state::draw_background(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
UINT8 *spriteram = m_spriteram;
|
||||
|
||||
rectangle clip = cliprect;
|
||||
|
||||
set_background_palette_intensity();
|
||||
@ -278,9 +292,9 @@ void psychic5_state::draw_background(screen_device &screen, bitmap_rgb32 &bitmap
|
||||
int sx1_old = m_sx1;
|
||||
int sy2_old = m_sy2;
|
||||
|
||||
m_sy1 = spriteram[11]; /* sprite 0 */
|
||||
m_sx1 = spriteram[12];
|
||||
m_sy2 = spriteram[11+128]; /* sprite 8 */
|
||||
m_sy1 = m_spriteram[11]; /* sprite 0 */
|
||||
m_sx1 = m_spriteram[12];
|
||||
m_sy2 = m_spriteram[11+128]; /* sprite 8 */
|
||||
|
||||
switch (m_bg_clip_mode)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user