mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
checkpoint (nw)
This commit is contained in:
parent
8815148059
commit
1b44233a13
@ -52,6 +52,13 @@ public:
|
||||
DECLARE_WRITE16_MEMBER(tx_videoram_w);
|
||||
DECLARE_WRITE16_MEMBER(bg_videoram_w);
|
||||
DECLARE_WRITE16_MEMBER(fg_videoram_w);
|
||||
DECLARE_WRITE16_MEMBER(supduck_scroll_w);
|
||||
|
||||
DECLARE_WRITE16_MEMBER(supduck_4000_w);
|
||||
DECLARE_WRITE16_MEMBER(supduck_4002_w);
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(tigeroad_tilemap_scan);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
@ -68,12 +75,18 @@ protected:
|
||||
|
||||
};
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(supduck_state::tigeroad_tilemap_scan)
|
||||
{
|
||||
/* logical (col,row) -> memory offset */
|
||||
return (num_rows - 1 - row) * num_cols + col;
|
||||
}
|
||||
|
||||
void supduck_state::video_start()
|
||||
{
|
||||
m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(supduck_state::get_tx_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
|
||||
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(supduck_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 32, 32, 8, 256);
|
||||
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(supduck_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 32, 32, 8, 256);
|
||||
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(supduck_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(supduck_state::tigeroad_tilemap_scan),this), 32, 32, 8, 256);
|
||||
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(supduck_state::get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(supduck_state::tigeroad_tilemap_scan),this), 32, 32, 8, 256);
|
||||
|
||||
m_tx_tilemap->set_transparent_pen(3);
|
||||
|
||||
@ -124,17 +137,16 @@ TILE_GET_INFO_MEMBER(supduck_state::get_tx_tile_info) // same as tigeroad.c
|
||||
|
||||
TILE_GET_INFO_MEMBER(supduck_state::get_bg_tile_info)
|
||||
{
|
||||
int m_bgcharbank = 0;
|
||||
UINT16 *videoram = m_bg_videoram;
|
||||
int data = videoram[tile_index];
|
||||
int code = data & 0xff;
|
||||
if (data & 0x4000) code |= 0x100;
|
||||
if (data & 0x8000) code |= 0x200;
|
||||
|
||||
UINT16 *tilerom = m_bg_videoram;
|
||||
int data = tilerom[tile_index];
|
||||
int attr = tilerom[tile_index + 1];
|
||||
int code = data + ((attr & 0xc0) << 2) + (m_bgcharbank << 10);
|
||||
int color = attr & 0x0f;
|
||||
int flags = (attr & 0x20) ? TILE_FLIPX : 0;
|
||||
int color = 0;
|
||||
int flags = 0;
|
||||
|
||||
SET_TILE_INFO_MEMBER(1, code, color, flags);
|
||||
tileinfo.group = (attr & 0x10) ? 1 : 0;
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(supduck_state::get_fg_tile_info)
|
||||
@ -143,7 +155,10 @@ TILE_GET_INFO_MEMBER(supduck_state::get_fg_tile_info)
|
||||
UINT16 *videoram = m_fg_videoram;
|
||||
int data = videoram[tile_index];
|
||||
|
||||
int code = data;
|
||||
int code = data & 0xff;
|
||||
if (data & 0x4000) code |= 0x100;
|
||||
if (data & 0x8000) code |= 0x200;
|
||||
|
||||
int color = 0;
|
||||
int flags = 0;
|
||||
|
||||
@ -192,10 +207,47 @@ void supduck_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(supduck_state::supduck_4000_w)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(supduck_state::supduck_4002_w)
|
||||
{
|
||||
data &= mem_mask;
|
||||
// soundlatch
|
||||
// printf("supduck_4002_w %04x\n", data);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(supduck_state::supduck_scroll_w)
|
||||
{
|
||||
data &= mem_mask;
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
m_bg_tilemap->set_scrollx(0, data);
|
||||
printf("bg x scroll %04x\n", data);
|
||||
|
||||
break;
|
||||
case 1:
|
||||
m_bg_tilemap->set_scrolly(0, -data - 32 * 8);
|
||||
printf("bg y scroll %04x\n", data);
|
||||
|
||||
break;
|
||||
case 2:
|
||||
m_fg_tilemap->set_scrollx(0, data);
|
||||
break;
|
||||
case 3:
|
||||
m_fg_tilemap->set_scrolly(0, -data - 32 * 8);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, supduck_state )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_WRITENOP
|
||||
AM_RANGE(0xfe0000, 0xfe1fff) AM_RAM AM_SHARE("spriteram")
|
||||
// AM_RANGE(0xfe0000, 0xfe07ff) AM_RAM /* RAM? */
|
||||
// AM_RANGE(0xfe0800, 0xfe0cff) AM_RAM AM_SHARE("spriteram")
|
||||
@ -203,9 +255,14 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, supduck_state )
|
||||
// AM_RANGE(0xfe4000, 0xfe4001) AM_WRITE(bionicc_gfxctrl_w) /* + coin counters */
|
||||
// AM_RANGE(0xfe4000, 0xfe4001) AM_READ_PORT("SYSTEM")
|
||||
// AM_RANGE(0xfe4002, 0xfe4003) AM_READ(supduck_random_r)
|
||||
AM_RANGE(0xfe4000, 0xfe4001) AM_READ_PORT("P1_P2")
|
||||
AM_RANGE(0xfe4002, 0xfe4003) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0xfe4000, 0xfe4001) AM_READ_PORT("P1_P2") AM_WRITE( supduck_4000_w )
|
||||
AM_RANGE(0xfe4002, 0xfe4003) AM_READ_PORT("SYSTEM") AM_WRITE( supduck_4002_w )
|
||||
AM_RANGE(0xfe4004, 0xfe4005) AM_READ_PORT("DSW")
|
||||
|
||||
AM_RANGE(0xfe8000, 0xfe8007) AM_WRITE(supduck_scroll_w)
|
||||
AM_RANGE(0xfe800e, 0xfe800f) AM_WRITENOP // watchdog or irqack
|
||||
|
||||
|
||||
// AM_RANGE(0xfe8010, 0xfe8017) AM_WRITE(bionicc_scroll_w)
|
||||
// AM_RANGE(0xfe801a, 0xfe801b) AM_WRITE(bionicc_mpu_trigger_w) /* ??? not sure, but looks like it */
|
||||
AM_RANGE(0xfec000, 0xfecfff) AM_RAM_WRITE(tx_videoram_w) AM_SHARE("txvideoram")
|
||||
|
Loading…
Reference in New Issue
Block a user