update with latest knowledge (nw)

This commit is contained in:
David Haywood 2015-10-08 16:12:20 +01:00
parent 1dcb8313d6
commit 79e698bc32
3 changed files with 583 additions and 529 deletions

File diff suppressed because it is too large Load Diff

View File

@ -9,6 +9,18 @@
#include "sound/dac.h"
#include "machine/pic8259.h"
#define M81_B_B_JUMPER_J3_S \
PORT_START("JumperJ3") \
PORT_CONFNAME( 0x0001, 0x0000, "M81-B-B Jumper J3" ) \
PORT_CONFSETTING( 0x0000, "S" ) \
/* PORT_CONFSETTING( 0x0001, "W" ) */
#define M81_B_B_JUMPER_J3_W \
PORT_START("JumperJ3") \
PORT_CONFNAME( 0x0001, 0x0001, "M81-B-B Jumper J3" ) \
/* PORT_CONFSETTING( 0x0000, "S" ) */ \
PORT_CONFSETTING( 0x0001, "W" )
class m72_state : public driver_device
{
public:
@ -30,7 +42,10 @@ public:
m_soundram(*this, "soundram"),
m_generic_paletteram_16(*this, "paletteram"),
m_generic_paletteram2_16(*this, "paletteram2"),
m_upd71059c(*this, "upd71059c")
m_upd71059c(*this, "upd71059c"),
m_fg_source(0),
m_bg_source(0),
m_m81_b_b_j3(*this, "JumperJ3")
{ }
required_device<cpu_device> m_maincpu;
@ -66,6 +81,10 @@ public:
INT32 m_scrolly2;
INT32 m_video_off;
int m_fg_source;
int m_bg_source;
optional_ioport m_m81_b_b_j3;
//poundfor specific
int m_prev[4];
int m_diff[4];
@ -135,7 +154,6 @@ public:
void machine_start();
void machine_reset();
DECLARE_VIDEO_START(m72);
DECLARE_MACHINE_RESET(xmultipl);
DECLARE_VIDEO_START(xmultipl);
DECLARE_VIDEO_START(hharry);
DECLARE_VIDEO_START(rtype2);
@ -165,9 +183,10 @@ public:
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_m81(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_majtitle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
inline void get_tile_info(tile_data &tileinfo,int tile_index,const UINT16 *vram,int gfxnum);
inline void rtype2_get_tile_info(tile_data &tileinfo,int tile_index,const UINT16 *vram,int gfxnum);
inline void m72_m81_get_tile_info(tile_data &tileinfo,int tile_index,const UINT16 *vram,int gfxnum);
inline void m82_m84_get_tile_info(tile_data &tileinfo,int tile_index,const UINT16 *vram,int gfxnum);
void register_savestate();
inline void changecolor(int color,int r,int g,int b);
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);

View File

@ -9,7 +9,7 @@
***************************************************************************/
inline void m72_state::get_tile_info(tile_data &tileinfo,int tile_index,const UINT16 *vram,int gfxnum)
inline void m72_state::m72_m81_get_tile_info(tile_data &tileinfo,int tile_index,const UINT16 *vram,int gfxnum)
{
int code,attr,color,pri;
@ -37,7 +37,7 @@ inline void m72_state::get_tile_info(tile_data &tileinfo,int tile_index,const UI
tileinfo.group = pri;
}
inline void m72_state::rtype2_get_tile_info(tile_data &tileinfo,int tile_index,const UINT16 *vram,int gfxnum)
inline void m72_state::m82_m84_get_tile_info(tile_data &tileinfo,int tile_index,const UINT16 *vram,int gfxnum)
{
int code,attr,color,pri;
@ -70,22 +70,22 @@ inline void m72_state::rtype2_get_tile_info(tile_data &tileinfo,int tile_index,c
TILE_GET_INFO_MEMBER(m72_state::get_bg_tile_info)
{
get_tile_info(tileinfo,tile_index,m_videoram2,2);
m72_m81_get_tile_info(tileinfo,tile_index,m_videoram2,m_bg_source);
}
TILE_GET_INFO_MEMBER(m72_state::get_fg_tile_info)
{
get_tile_info(tileinfo,tile_index,m_videoram1,1);
m72_m81_get_tile_info(tileinfo,tile_index,m_videoram1,m_fg_source);
}
TILE_GET_INFO_MEMBER(m72_state::rtype2_get_bg_tile_info)
{
rtype2_get_tile_info(tileinfo,tile_index,m_videoram2,1);
m82_m84_get_tile_info(tileinfo,tile_index,m_videoram2,1);
}
TILE_GET_INFO_MEMBER(m72_state::rtype2_get_fg_tile_info)
{
rtype2_get_tile_info(tileinfo,tile_index,m_videoram1,1);
m82_m84_get_tile_info(tileinfo,tile_index,m_videoram1,1);
}
@ -136,6 +136,10 @@ VIDEO_START_MEMBER(m72_state,m72)
m_bg_tilemap->set_scrolldx(0,0);
m_bg_tilemap->set_scrolldy(-128,-128);
// on M72 the FG data always comes from the Ax roms and the BG data always comes from the Bx roms
m_fg_source = 1;
m_bg_source = 2;
register_savestate();
}
@ -166,57 +170,7 @@ VIDEO_START_MEMBER(m72_state,hharry)
}
VIDEO_START_MEMBER(m72_state,rtype2)
{
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(m72_state::rtype2_get_bg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,64,64);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(m72_state::rtype2_get_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,64,64);
m_buffered_spriteram = auto_alloc_array(machine(), UINT16, m_spriteram.bytes()/2);
m_fg_tilemap->set_transmask(0,0xffff,0x0001);
m_fg_tilemap->set_transmask(1,0x00ff,0xff01);
m_fg_tilemap->set_transmask(2,0x0001,0xffff);
m_bg_tilemap->set_transmask(0,0xffff,0x0000);
m_bg_tilemap->set_transmask(1,0x00ff,0xff00);
m_bg_tilemap->set_transmask(2,0x0001,0xfffe);
memset(m_buffered_spriteram,0,m_spriteram.bytes());
m_fg_tilemap->set_scrolldx(4,0);
m_fg_tilemap->set_scrolldy(-128,16);
m_bg_tilemap->set_scrolldx(4,0);
m_bg_tilemap->set_scrolldy(-128,16);
register_savestate();
}
VIDEO_START_MEMBER(m72_state,poundfor)
{
VIDEO_START_CALL_MEMBER(rtype2);
m_fg_tilemap->set_scrolldx(6,0);
m_bg_tilemap->set_scrolldx(6,0);
m_fg_tilemap->set_scrolldy(-128,-128);
m_bg_tilemap->set_scrolldy(-128,-128);
save_item(NAME(m_prev));
save_item(NAME(m_diff));
}
VIDEO_START_MEMBER(m72_state,hharryu)
{
VIDEO_START_CALL_MEMBER(rtype2);
m_fg_tilemap->set_scrolldx(4,3);
m_bg_tilemap->set_scrolldx(6,0);
m_fg_tilemap->set_scrolldy(-128,-128);
m_bg_tilemap->set_scrolldy(-128,-128);
}
// M82
VIDEO_START_MEMBER(m72_state, m82_common)
{
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(m72_state::rtype2_get_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,64,64);
@ -278,6 +232,58 @@ VIDEO_START_MEMBER(m72_state, m82_small)
m_bg_tilemap->set_scrolldy(-128,-128);
}
// M84
VIDEO_START_MEMBER(m72_state,rtype2)
{
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(m72_state::rtype2_get_bg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,64,64);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(m72_state::rtype2_get_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,64,64);
m_buffered_spriteram = auto_alloc_array(machine(), UINT16, m_spriteram.bytes()/2);
m_fg_tilemap->set_transmask(0,0xffff,0x0001);
m_fg_tilemap->set_transmask(1,0x00ff,0xff01);
m_fg_tilemap->set_transmask(2,0x0001,0xffff);
m_bg_tilemap->set_transmask(0,0xffff,0x0000);
m_bg_tilemap->set_transmask(1,0x00ff,0xff00);
m_bg_tilemap->set_transmask(2,0x0001,0xfffe);
memset(m_buffered_spriteram,0,m_spriteram.bytes());
m_fg_tilemap->set_scrolldx(4,0);
m_fg_tilemap->set_scrolldy(-128,16);
m_bg_tilemap->set_scrolldx(4,0);
m_bg_tilemap->set_scrolldy(-128,16);
register_savestate();
}
VIDEO_START_MEMBER(m72_state,hharryu)
{
VIDEO_START_CALL_MEMBER(rtype2);
m_fg_tilemap->set_scrolldx(4,3);
m_bg_tilemap->set_scrolldx(6,0);
m_fg_tilemap->set_scrolldy(-128,-128);
m_bg_tilemap->set_scrolldy(-128,-128);
}
// m85
VIDEO_START_MEMBER(m72_state,poundfor)
{
VIDEO_START_CALL_MEMBER(rtype2);
m_fg_tilemap->set_scrolldx(6,0);
m_bg_tilemap->set_scrolldx(6,0);
m_fg_tilemap->set_scrolldy(-128,-128);
m_bg_tilemap->set_scrolldy(-128,-128);
save_item(NAME(m_prev));
save_item(NAME(m_diff));
}
/***************************************************************************
@ -567,6 +573,18 @@ UINT32 m72_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, con
return 0;
}
UINT32 m72_state::screen_update_m81(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// on M81 the FG data always comes from the Ax roms
// the source of the BG data however depends on Jumper J3
int J3 = m_m81_b_b_j3->read();
if (J3 == 0) m_bg_source = 1;
else m_bg_source = 2;
return screen_update(screen, bitmap, cliprect);
}
UINT32 m72_state::screen_update_majtitle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int i;